diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 8ffe523..a5ed7b6 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -8,7 +8,6 @@ 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 9c24861..21585c8 100644
--- a/.github/workflows/local-test.yaml
+++ b/.github/workflows/local-test.yaml
@@ -48,14 +48,26 @@ jobs:
token: testtoken
secrets: |
secret/data/test-json-string jsonString;
+ secret/data/test-json-data jsonData;
- - name: Check Secrets
- run: |
- touch secrets.json
- echo "${{ steps.import-secrets.outputs.jsonString }}" >> secrets.json
+ - uses: actions/github-script@v7
+ with:
+ github-token: "foobar"
+ script: |
+ const { JSONSTRING, JSONDATA } = process.env
- - name: Check json file format
- run: |
- echo
- cat secrets.json
- jq -c . < 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")
+ }
diff --git a/dist/index.js b/dist/index.js
index 987f436..f40a1d9 100644
--- a/dist/index.js
+++ b/dist/index.js
@@ -1,10 +1,9 @@
-/******/ (() => { // webpackBootstrap
-/******/ var __webpack_modules__ = ({
+import { createRequire as __WEBPACK_EXTERNAL_createRequire } from "module";
+/******/ 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;
@@ -103,7 +102,6 @@ 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;
@@ -446,7 +444,6 @@ 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) {
@@ -511,7 +508,6 @@ 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); }); }
@@ -595,7 +591,6 @@ 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;
@@ -660,7 +655,6 @@ 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); }); }
@@ -950,7 +944,6 @@ 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 */
@@ -997,7 +990,6 @@ 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); }); }
@@ -1085,7 +1077,6 @@ 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) {
@@ -1697,7 +1688,6 @@ 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;
@@ -1760,1490 +1750,11 @@ 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);
@@ -3309,7 +1820,6 @@ module.exports = response => {
/***/ 3877:
/***/ ((module) => {
-"use strict";
// We define these manually to ensure they're always copied
@@ -3394,7 +1904,6 @@ module.exports = (fromStream, toStream) => {
/***/ 6214:
/***/ ((module, exports) => {
-"use strict";
Object.defineProperty(exports, "__esModule", ({ value: true }));
function isTLSSocket(socket) {
@@ -3446,2907 +1955,129 @@ module.exports["default"] = deferToConnect;
/***/ }),
-/***/ 1205:
+/***/ 1585:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-var once = __nccwpck_require__(1223);
-var noop = function() {};
+const {PassThrough: PassThroughStream} = __nccwpck_require__(2781);
-var isRequest = function(stream) {
- return stream.setHeader && typeof stream.abort === 'function';
-};
+module.exports = options => {
+ options = {...options};
-var isChildProcess = function(stream) {
- return stream.stdio && Array.isArray(stream.stdio) && stream.stdio.length === 3
-};
+ const {array} = options;
+ let {encoding} = options;
+ const isBuffer = encoding === 'buffer';
+ let objectMode = false;
-var eos = function(stream, opts, callback) {
- if (typeof opts === 'function') return eos(stream, null, opts);
- if (!opts) opts = {};
-
- callback = once(callback || noop);
-
- var ws = stream._writableState;
- var rs = stream._readableState;
- var readable = opts.readable || (opts.readable !== false && stream.readable);
- var writable = opts.writable || (opts.writable !== false && stream.writable);
-
- var onlegacyfinish = function() {
- if (!stream.writable) onfinish();
- };
-
- var onfinish = function() {
- writable = false;
- if (!readable) callback.call(stream);
- };
-
- var onend = function() {
- readable = false;
- if (!writable) callback.call(stream);
- };
-
- var onexit = function(exitCode) {
- callback.call(stream, exitCode ? new Error('exited with error code: ' + exitCode) : null);
- };
-
- var onerror = function(err) {
- callback.call(stream, err);
- };
-
- var onclose = function() {
- if (readable && !(rs && rs.ended)) return callback.call(stream, new Error('premature close'));
- if (writable && !(ws && ws.ended)) return callback.call(stream, new Error('premature close'));
- };
-
- var onrequest = function() {
- stream.req.on('finish', onfinish);
- };
-
- if (isRequest(stream)) {
- stream.on('complete', onfinish);
- stream.on('abort', onclose);
- if (stream.req) onrequest();
- else stream.on('request', onrequest);
- } else if (writable && !ws) { // legacy streams
- stream.on('end', onlegacyfinish);
- stream.on('close', onlegacyfinish);
+ if (array) {
+ objectMode = !(encoding || isBuffer);
+ } else {
+ encoding = encoding || 'utf8';
}
- if (isChildProcess(stream)) stream.on('exit', onexit);
+ if (isBuffer) {
+ encoding = null;
+ }
- stream.on('end', onend);
- stream.on('finish', onfinish);
- if (opts.error !== false) stream.on('error', onerror);
- stream.on('close', onclose);
+ const stream = new PassThroughStream({objectMode});
- return function() {
- stream.removeListener('complete', onfinish);
- stream.removeListener('abort', onclose);
- stream.removeListener('request', onrequest);
- if (stream.req) stream.req.removeListener('finish', onfinish);
- stream.removeListener('end', onlegacyfinish);
- stream.removeListener('close', onlegacyfinish);
- stream.removeListener('finish', onfinish);
- stream.removeListener('exit', onexit);
- stream.removeListener('end', onend);
- stream.removeListener('error', onerror);
- stream.removeListener('close', onclose);
+ if (encoding) {
+ stream.setEncoding(encoding);
+ }
+
+ let length = 0;
+ const chunks = [];
+
+ stream.on('data', chunk => {
+ chunks.push(chunk);
+
+ if (objectMode) {
+ length = chunks.length;
+ } else {
+ length += chunk.length;
+ }
+ });
+
+ stream.getBufferedValue = () => {
+ if (array) {
+ return chunks;
+ }
+
+ return isBuffer ? Buffer.concat(chunks, length) : chunks.join('');
};
-};
-module.exports = eos;
+ stream.getBufferedLength = () => length;
+
+ return stream;
+};
/***/ }),
-/***/ 6457:
-/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
+/***/ 1766:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-"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;
+const {constants: BufferConstants} = __nccwpck_require__(4300);
+const stream = __nccwpck_require__(2781);
+const {promisify} = __nccwpck_require__(3837);
+const bufferStream = __nccwpck_require__(1585);
+
+const streamPipelinePromisified = promisify(stream.pipeline);
+
+class MaxBufferError extends Error {
+ constructor() {
+ super('maxBuffer exceeded');
+ this.name = 'MaxBufferError';
+ }
}
-exports["default"] = createRejection;
+async function getStream(inputStream, options) {
+ if (!inputStream) {
+ throw new Error('Expected a stream');
+ }
-/***/ }),
+ options = {
+ maxBuffer: Infinity,
+ ...options
+ };
-/***/ 6056:
-/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
+ const {maxBuffer} = options;
+ const stream = bufferStream(options);
-"use strict";
+ await new Promise((resolve, reject) => {
+ const rejectPromise = error => {
+ // Don't retrieve an oversized buffer.
+ if (error && stream.getBufferedLength() <= BufferConstants.MAX_LENGTH) {
+ error.bufferedData = stream.getBufferedValue();
+ }
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __exportStar = (this && this.__exportStar) || function(m, exports) {
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-const events_1 = __nccwpck_require__(2361);
-const is_1 = __nccwpck_require__(7678);
-const PCancelable = __nccwpck_require__(9072);
-const types_1 = __nccwpck_require__(4597);
-const parse_body_1 = __nccwpck_require__(8220);
-const core_1 = __nccwpck_require__(94);
-const proxy_events_1 = __nccwpck_require__(3021);
-const get_buffer_1 = __nccwpck_require__(4500);
-const is_response_ok_1 = __nccwpck_require__(9298);
-const proxiedRequestEvents = [
- 'request',
- 'response',
- 'redirect',
- 'uploadProgress',
- 'downloadProgress'
-];
-function asPromise(normalizedOptions) {
- let globalRequest;
- let globalResponse;
- const emitter = new events_1.EventEmitter();
- const promise = new PCancelable((resolve, reject, onCancel) => {
- const makeRequest = (retryCount) => {
- const request = new core_1.default(undefined, normalizedOptions);
- request.retryCount = retryCount;
- request._noPipe = true;
- onCancel(() => request.destroy());
- onCancel.shouldReject = false;
- onCancel(() => reject(new types_1.CancelError(request)));
- globalRequest = request;
- request.once('response', async (response) => {
- var _a;
- response.retryCount = retryCount;
- if (response.request.aborted) {
- // Canceled while downloading - will throw a `CancelError` or `TimeoutError` error
- return;
- }
- // Download body
- let rawBody;
- try {
- rawBody = await get_buffer_1.default(request);
- response.rawBody = rawBody;
- }
- catch (_b) {
- // The same error is caught below.
- // See request.once('error')
- return;
- }
- if (request._isAboutToError) {
- return;
- }
- // Parse body
- const contentEncoding = ((_a = response.headers['content-encoding']) !== null && _a !== void 0 ? _a : '').toLowerCase();
- const isCompressed = ['gzip', 'deflate', 'br'].includes(contentEncoding);
- const { options } = request;
- if (isCompressed && !options.decompress) {
- response.body = rawBody;
- }
- else {
- try {
- response.body = parse_body_1.default(response, options.responseType, options.parseJson, options.encoding);
- }
- catch (error) {
- // Fallback to `utf8`
- response.body = rawBody.toString();
- if (is_response_ok_1.isResponseOk(response)) {
- request._beforeError(error);
- return;
- }
- }
- }
- try {
- for (const [index, hook] of options.hooks.afterResponse.entries()) {
- // @ts-expect-error TS doesn't notice that CancelableRequest is a Promise
- // eslint-disable-next-line no-await-in-loop
- response = await hook(response, async (updatedOptions) => {
- const typedOptions = core_1.default.normalizeArguments(undefined, {
- ...updatedOptions,
- retry: {
- calculateDelay: () => 0
- },
- throwHttpErrors: false,
- resolveBodyOnly: false
- }, options);
- // Remove any further hooks for that request, because we'll call them anyway.
- // The loop continues. We don't want duplicates (asPromise recursion).
- typedOptions.hooks.afterResponse = typedOptions.hooks.afterResponse.slice(0, index);
- for (const hook of typedOptions.hooks.beforeRetry) {
- // eslint-disable-next-line no-await-in-loop
- await hook(typedOptions);
- }
- const promise = asPromise(typedOptions);
- onCancel(() => {
- promise.catch(() => { });
- promise.cancel();
- });
- return promise;
- });
- }
- }
- catch (error) {
- request._beforeError(new types_1.RequestError(error.message, error, request));
- return;
- }
- globalResponse = response;
- if (!is_response_ok_1.isResponseOk(response)) {
- request._beforeError(new types_1.HTTPError(response));
- return;
- }
- request.destroy();
- resolve(request.options.resolveBodyOnly ? response.body : response);
- });
- const onError = (error) => {
- if (promise.isCanceled) {
- return;
- }
- const { options } = request;
- if (error instanceof types_1.HTTPError && !options.throwHttpErrors) {
- const { response } = error;
- resolve(request.options.resolveBodyOnly ? response.body : response);
- return;
- }
- reject(error);
- };
- request.once('error', onError);
- const previousBody = request.options.body;
- request.once('retry', (newRetryCount, error) => {
- var _a, _b;
- if (previousBody === ((_a = error.request) === null || _a === void 0 ? void 0 : _a.options.body) && is_1.default.nodeStream((_b = error.request) === null || _b === void 0 ? void 0 : _b.options.body)) {
- onError(error);
- return;
- }
- makeRequest(newRetryCount);
- });
- proxy_events_1.default(request, emitter, proxiedRequestEvents);
- };
- makeRequest(0);
- });
- promise.on = (event, fn) => {
- emitter.on(event, fn);
- return promise;
- };
- const shortcut = (responseType) => {
- const newPromise = (async () => {
- // Wait until downloading has ended
- await promise;
- const { options } = globalResponse.request;
- return parse_body_1.default(globalResponse, responseType, options.parseJson, options.encoding);
- })();
- Object.defineProperties(newPromise, Object.getOwnPropertyDescriptors(promise));
- return newPromise;
- };
- promise.json = () => {
- const { headers } = globalRequest.options;
- if (!globalRequest.writableFinished && headers.accept === undefined) {
- headers.accept = 'application/json';
- }
- return shortcut('json');
- };
- promise.buffer = () => shortcut('buffer');
- promise.text = () => shortcut('text');
- return promise;
+ reject(error);
+ };
+
+ (async () => {
+ try {
+ await streamPipelinePromisified(inputStream, stream);
+ resolve();
+ } catch (error) {
+ rejectPromise(error);
+ }
+ })();
+
+ stream.on('data', () => {
+ if (stream.getBufferedLength() > maxBuffer) {
+ rejectPromise(new MaxBufferError());
+ }
+ });
+ });
+
+ return stream.getBufferedValue();
}
-exports["default"] = asPromise;
-__exportStar(__nccwpck_require__(4597), exports);
-
-/***/ }),
-
-/***/ 1048:
-/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-
-"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');
-};
-
-
-/***/ }),
-
-/***/ 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;
-};
-
-
-/***/ }),
-
-/***/ 4500:
-/***/ ((__unused_webpack_module, exports) => {
-
-"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;
-
-
-/***/ }),
-
-/***/ 2454:
-/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.TimeoutError = void 0;
-const net = __nccwpck_require__(1808);
-const unhandle_1 = __nccwpck_require__(1593);
-const reentry = Symbol('reentry');
-const noop = () => { };
-class TimeoutError extends Error {
- constructor(threshold, event) {
- super(`Timeout awaiting '${event}' for ${threshold}ms`);
- this.event = event;
- this.name = 'TimeoutError';
- this.code = 'ETIMEDOUT';
- }
-}
-exports.TimeoutError = TimeoutError;
-exports["default"] = (request, delays, options) => {
- if (reentry in request) {
- return noop;
- }
- request[reentry] = true;
- const cancelers = [];
- const { once, unhandleAll } = unhandle_1.default();
- const addTimeout = (delay, callback, event) => {
- var _a;
- const timeout = setTimeout(callback, delay, delay, event);
- (_a = timeout.unref) === null || _a === void 0 ? void 0 : _a.call(timeout);
- const cancel = () => {
- clearTimeout(timeout);
- };
- cancelers.push(cancel);
- return cancel;
- };
- const { host, hostname } = options;
- const timeoutHandler = (delay, event) => {
- request.destroy(new TimeoutError(delay, event));
- };
- const cancelTimeouts = () => {
- for (const cancel of cancelers) {
- cancel();
- }
- unhandleAll();
- };
- request.once('error', error => {
- cancelTimeouts();
- // Save original behavior
- /* istanbul ignore next */
- if (request.listenerCount('error') === 0) {
- throw error;
- }
- });
- request.once('close', cancelTimeouts);
- once(request, 'response', (response) => {
- once(response, 'end', cancelTimeouts);
- });
- if (typeof delays.request !== 'undefined') {
- addTimeout(delays.request, timeoutHandler, 'request');
- }
- if (typeof delays.socket !== 'undefined') {
- const socketTimeoutHandler = () => {
- timeoutHandler(delays.socket, 'socket');
- };
- request.setTimeout(delays.socket, socketTimeoutHandler);
- // `request.setTimeout(0)` causes a memory leak.
- // We can just remove the listener and forget about the timer - it's unreffed.
- // See https://github.com/sindresorhus/got/issues/690
- cancelers.push(() => {
- request.removeListener('timeout', socketTimeoutHandler);
- });
- }
- once(request, 'socket', (socket) => {
- var _a;
- const { socketPath } = request;
- /* istanbul ignore next: hard to test */
- if (socket.connecting) {
- const hasPath = Boolean(socketPath !== null && socketPath !== void 0 ? socketPath : net.isIP((_a = hostname !== null && hostname !== void 0 ? hostname : host) !== null && _a !== void 0 ? _a : '') !== 0);
- if (typeof delays.lookup !== 'undefined' && !hasPath && typeof socket.address().address === 'undefined') {
- const cancelTimeout = addTimeout(delays.lookup, timeoutHandler, 'lookup');
- once(socket, 'lookup', cancelTimeout);
- }
- if (typeof delays.connect !== 'undefined') {
- const timeConnect = () => addTimeout(delays.connect, timeoutHandler, 'connect');
- if (hasPath) {
- once(socket, 'connect', timeConnect());
- }
- else {
- once(socket, 'lookup', (error) => {
- if (error === null) {
- once(socket, 'connect', timeConnect());
- }
- });
- }
- }
- if (typeof delays.secureConnect !== 'undefined' && options.protocol === 'https:') {
- once(socket, 'connect', () => {
- const cancelTimeout = addTimeout(delays.secureConnect, timeoutHandler, 'secureConnect');
- once(socket, 'secureConnect', cancelTimeout);
- });
- }
- }
- if (typeof delays.send !== 'undefined') {
- const timeRequest = () => addTimeout(delays.send, timeoutHandler, 'send');
- /* istanbul ignore next: hard to test */
- if (socket.connecting) {
- once(socket, 'connect', () => {
- once(request, 'upload-complete', timeRequest());
- });
- }
- else {
- once(request, 'upload-complete', timeRequest());
- }
- }
- });
- if (typeof delays.response !== 'undefined') {
- once(request, 'upload-complete', () => {
- const cancelTimeout = addTimeout(delays.response, timeoutHandler, 'response');
- once(request, 'response', cancelTimeout);
- });
- }
- return cancelTimeouts;
-};
-
-
-/***/ }),
-
-/***/ 1593:
-/***/ ((__unused_webpack_module, exports) => {
-
-"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'
- });
-};
+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;
/***/ }),
@@ -6354,7 +2085,6 @@ exports["default"] = (message) => {
/***/ 1002:
/***/ ((module) => {
-"use strict";
// rfc7231 6.1
const statusCodeCacheableByDefault = new Set([
@@ -7031,187 +2761,78 @@ 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__(5461);
+const QuickLRU = __nccwpck_require__(9273);
+const delayAsyncDestroy = __nccwpck_require__(9237);
-const kCurrentStreamsCount = Symbol('currentStreamsCount');
+const kCurrentStreamCount = Symbol('currentStreamCount');
const kRequest = Symbol('request');
const kOriginSet = Symbol('cachedOriginSet');
const kGracefullyClosing = Symbol('gracefullyClosing');
+const kLength = Symbol('length');
const nameKeys = [
+ // Not an Agent option actually
+ 'createConnection',
+
// `http2.connect()` options
'maxDeflateDynamicTableSize',
+ 'maxSettings',
'maxSessionMemory',
'maxHeaderListPairs',
'maxOutstandingPings',
'maxReservedRemoteStreams',
'maxSendHeaderBlockLength',
'paddingStrategy',
+ 'peerMaxConcurrentStreams',
+ 'settings',
- // `tls.connect()` options
+ // `tls.connect()` source options
+ 'family',
'localAddress',
- 'path',
'rejectUnauthorized',
+
+ // `tls.connect()` secure context options
+ 'pskCallback',
'minDHSize',
+ // `tls.connect()` destination options
+ // - `servername` is automatically validated, skip it
+ // - `host` and `port` just describe the destination server,
+ 'path',
+ 'socket',
+
// `tls.createSecureContext()` options
'ca',
'cert',
- 'clientCertEngine',
+ 'sigalgs',
'ciphers',
- 'key',
- 'pfx',
- 'servername',
- 'minVersion',
- 'maxVersion',
- 'secureProtocol',
+ 'clientCertEngine',
'crl',
- 'honorCipherOrder',
- 'ecdhCurve',
'dhparam',
+ 'ecdhCurve',
+ 'honorCipherOrder',
+ 'key',
+ 'privateKeyEngine',
+ 'privateKeyIdentifier',
+ 'maxVersion',
+ 'minVersion',
+ 'pfx',
'secureOptions',
- 'sessionIdContext'
+ 'secureProtocol',
+ 'sessionIdContext',
+ 'ticketKeys'
];
const getSortedIndex = (array, value, compare) => {
@@ -7221,9 +2842,7 @@ const getSortedIndex = (array, value, compare) => {
while (low < high) {
const mid = (low + high) >>> 1;
- /* istanbul ignore next */
if (compare(array[mid], value)) {
- // This never gets called because we use descending sort. Better to have this anyway.
low = mid + 1;
} else {
high = mid;
@@ -7233,25 +2852,28 @@ const getSortedIndex = (array, value, compare) => {
return low;
};
-const compareSessions = (a, b) => {
- return a.remoteSettings.maxConcurrentStreams > b.remoteSettings.maxConcurrentStreams;
-};
+const compareSessions = (a, b) => a.remoteSettings.maxConcurrentStreams > b.remoteSettings.maxConcurrentStreams;
// See https://tools.ietf.org/html/rfc8336
const closeCoveredSessions = (where, session) => {
// Clients SHOULD NOT emit new requests on any connection whose Origin
// Set is a proper subset of another connection's Origin Set, and they
// SHOULD close it once all outstanding requests are satisfied.
- for (const coveredSession of where) {
+ for (let index = 0; index < where.length; index++) {
+ const coveredSession = where[index];
+
if (
+ // Unfortunately `.every()` returns true for an empty array
+ coveredSession[kOriginSet].length > 0
+
// The set is a proper subset when its length is less than the other set.
- coveredSession[kOriginSet].length < session[kOriginSet].length &&
+ && coveredSession[kOriginSet].length < session[kOriginSet].length
// And the other set includes all elements of the subset.
- coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin)) &&
+ && coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin))
// Makes sure that the session can handle all requests from the covered session.
- coveredSession[kCurrentStreamsCount] + session[kCurrentStreamsCount] <= session.remoteSettings.maxConcurrentStreams
+ && (coveredSession[kCurrentStreamCount] + session[kCurrentStreamCount]) <= session.remoteSettings.maxConcurrentStreams
) {
// This allows pending requests to finish and prevents making new requests.
gracefullyClose(coveredSession);
@@ -7261,62 +2883,45 @@ const closeCoveredSessions = (where, session) => {
// This is basically inverted `closeCoveredSessions(...)`.
const closeSessionIfCovered = (where, coveredSession) => {
- for (const session of where) {
+ for (let index = 0; index < where.length; index++) {
+ const session = where[index];
+
if (
- coveredSession[kOriginSet].length < session[kOriginSet].length &&
- coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin)) &&
- coveredSession[kCurrentStreamsCount] + session[kCurrentStreamsCount] <= session.remoteSettings.maxConcurrentStreams
+ coveredSession[kOriginSet].length > 0
+ && coveredSession[kOriginSet].length < session[kOriginSet].length
+ && coveredSession[kOriginSet].every(origin => session[kOriginSet].includes(origin))
+ && (coveredSession[kCurrentStreamCount] + session[kCurrentStreamCount]) <= session.remoteSettings.maxConcurrentStreams
) {
gracefullyClose(coveredSession);
- }
- }
-};
-const getSessions = ({agent, isFree}) => {
- const result = {};
-
- // eslint-disable-next-line guard-for-in
- for (const normalizedOptions in agent.sessions) {
- const sessions = agent.sessions[normalizedOptions];
-
- const filtered = sessions.filter(session => {
- const result = session[Agent.kCurrentStreamsCount] < session.remoteSettings.maxConcurrentStreams;
-
- return isFree ? result : !result;
- });
-
- if (filtered.length !== 0) {
- result[normalizedOptions] = filtered;
+ return true;
}
}
- return result;
+ return false;
};
const gracefullyClose = session => {
session[kGracefullyClosing] = true;
- if (session[kCurrentStreamsCount] === 0) {
+ if (session[kCurrentStreamCount] === 0) {
session.close();
}
};
class Agent extends EventEmitter {
- constructor({timeout = 60000, maxSessions = Infinity, maxFreeSessions = 10, maxCachedTlsSessions = 100} = {}) {
+ constructor({timeout = 0, maxSessions = Number.POSITIVE_INFINITY, maxEmptySessions = 10, maxCachedTlsSessions = 100} = {}) {
super();
- // A session is considered busy when its current streams count
- // is equal to or greater than the `maxConcurrentStreams` value.
-
- // A session is considered free when its current streams count
- // is less than the `maxConcurrentStreams` value.
-
// SESSIONS[NORMALIZED_OPTIONS] = [];
this.sessions = {};
// The queue for creating new sessions. It looks like this:
// QUEUE[NORMALIZED_OPTIONS][NORMALIZED_ORIGIN] = ENTRY_FUNCTION
//
+ // It's faster when there are many origins. If there's only one, then QUEUE[`${options}:${origin}`] is faster.
+ // I guess object creation / deletion is causing the slowdown.
+ //
// The entry function has `listeners`, `completed` and `destroyed` properties.
// `listeners` is an array of objects containing `resolve` and `reject` functions.
// `completed` is a boolean. It's set to true after ENTRY_FUNCTION is executed.
@@ -7329,69 +2934,90 @@ class Agent extends EventEmitter {
// Max sessions in total
this.maxSessions = maxSessions;
- // Max free sessions in total
- // TODO: decreasing `maxFreeSessions` should close some sessions
- this.maxFreeSessions = maxFreeSessions;
+ // Max empty sessions in total
+ this.maxEmptySessions = maxEmptySessions;
- this._freeSessionsCount = 0;
- this._sessionsCount = 0;
+ this._emptySessionCount = 0;
+ this._sessionCount = 0;
// We don't support push streams by default.
this.settings = {
- enablePush: false
+ enablePush: false,
+ initialWindowSize: 1024 * 1024 * 32 // 32MB, see https://github.com/nodejs/node/issues/38426
};
// Reusing TLS sessions increases performance.
this.tlsSessionCache = new QuickLRU({maxSize: maxCachedTlsSessions});
}
- static normalizeOrigin(url, servername) {
- if (typeof url === 'string') {
- url = new URL(url);
- }
-
- if (servername && url.hostname !== servername) {
- url.hostname = servername;
- }
-
- return url.origin;
+ get protocol() {
+ return 'https:';
}
normalizeOptions(options) {
let normalized = '';
- if (options) {
- for (const key of nameKeys) {
- if (options[key]) {
- normalized += `:${options[key]}`;
- }
+ for (let index = 0; index < nameKeys.length; index++) {
+ const key = nameKeys[index];
+
+ normalized += ':';
+
+ if (options && options[key] !== undefined) {
+ normalized += options[key];
}
}
return normalized;
}
- _tryToCreateNewSession(normalizedOptions, normalizedOrigin) {
- if (!(normalizedOptions in this.queue) || !(normalizedOrigin in this.queue[normalizedOptions])) {
+ _processQueue() {
+ if (this._sessionCount >= this.maxSessions) {
+ this.closeEmptySessions(this.maxSessions - this._sessionCount + 1);
return;
}
- const item = this.queue[normalizedOptions][normalizedOrigin];
+ // eslint-disable-next-line guard-for-in
+ for (const normalizedOptions in this.queue) {
+ // eslint-disable-next-line guard-for-in
+ for (const normalizedOrigin in this.queue[normalizedOptions]) {
+ const item = this.queue[normalizedOptions][normalizedOrigin];
- // The entry function can be run only once.
- // BUG: The session may be never created when:
- // - the first condition is false AND
- // - this function is never called with the same arguments in the future.
- if (this._sessionsCount < this.maxSessions && !item.completed) {
- item.completed = true;
+ // The entry function can be run only once.
+ if (!item.completed) {
+ item.completed = true;
- item();
+ item();
+ }
+ }
+ }
+ }
+
+ _isBetterSession(thisStreamCount, thatStreamCount) {
+ return thisStreamCount > thatStreamCount;
+ }
+
+ _accept(session, listeners, normalizedOrigin, options) {
+ let index = 0;
+
+ while (index < listeners.length && session[kCurrentStreamCount] < session.remoteSettings.maxConcurrentStreams) {
+ // We assume `resolve(...)` calls `request(...)` *directly*,
+ // otherwise the session will get overloaded.
+ listeners[index].resolve(session);
+
+ index++;
+ }
+
+ listeners.splice(0, index);
+
+ if (listeners.length > 0) {
+ this.getSession(normalizedOrigin, options, listeners);
+ listeners.length = 0;
}
}
getSession(origin, options, listeners) {
return new Promise((resolve, reject) => {
- if (Array.isArray(listeners)) {
+ if (Array.isArray(listeners) && listeners.length > 0) {
listeners = [...listeners];
// Resolve the current promise ASAP, we're just moving the listeners.
@@ -7401,17 +3027,33 @@ class Agent extends EventEmitter {
listeners = [{resolve, reject}];
}
- const normalizedOptions = this.normalizeOptions(options);
- const normalizedOrigin = Agent.normalizeOrigin(origin, options && options.servername);
+ try {
+ // Parse origin
+ if (typeof origin === 'string') {
+ origin = new URL(origin);
+ } else if (!(origin instanceof URL)) {
+ throw new TypeError('The `origin` argument needs to be a string or an URL object');
+ }
- if (normalizedOrigin === undefined) {
- for (const {reject} of listeners) {
- reject(new TypeError('The `origin` argument needs to be a string or an URL object'));
+ if (options) {
+ // Validate servername
+ const {servername} = options;
+ const {hostname} = origin;
+ if (servername && hostname !== servername) {
+ throw new Error(`Origin ${hostname} differs from servername ${servername}`);
+ }
+ }
+ } catch (error) {
+ for (let index = 0; index < listeners.length; index++) {
+ listeners[index].reject(error);
}
return;
}
+ const normalizedOptions = this.normalizeOptions(options);
+ const normalizedOrigin = origin.origin;
+
if (normalizedOptions in this.sessions) {
const sessions = this.sessions[normalizedOptions];
@@ -7421,56 +3063,55 @@ class Agent extends EventEmitter {
// We could just do this.sessions[normalizedOptions].find(...) but that isn't optimal.
// Additionally, we are looking for session which has biggest current pending streams count.
- for (const session of sessions) {
+ //
+ // |------------| |------------| |------------| |------------|
+ // | Session: A | | Session: B | | Session: C | | Session: D |
+ // | Pending: 5 |-| Pending: 8 |-| Pending: 9 |-| Pending: 4 |
+ // | Max: 10 | | Max: 10 | | Max: 9 | | Max: 5 |
+ // |------------| |------------| |------------| |------------|
+ // ^
+ // |
+ // pick this one --
+ //
+ for (let index = 0; index < sessions.length; index++) {
+ const session = sessions[index];
+
const sessionMaxConcurrentStreams = session.remoteSettings.maxConcurrentStreams;
if (sessionMaxConcurrentStreams < maxConcurrentStreams) {
break;
}
- if (session[kOriginSet].includes(normalizedOrigin)) {
- const sessionCurrentStreamsCount = session[kCurrentStreamsCount];
+ if (!session[kOriginSet].includes(normalizedOrigin)) {
+ continue;
+ }
- if (
- sessionCurrentStreamsCount >= sessionMaxConcurrentStreams ||
- session[kGracefullyClosing] ||
- // Unfortunately the `close` event isn't called immediately,
- // so `session.destroyed` is `true`, but `session.closed` is `false`.
- session.destroyed
- ) {
- continue;
- }
+ const sessionCurrentStreamsCount = session[kCurrentStreamCount];
- // We only need set this once.
- if (!optimalSession) {
- maxConcurrentStreams = sessionMaxConcurrentStreams;
- }
+ if (
+ sessionCurrentStreamsCount >= sessionMaxConcurrentStreams
+ || session[kGracefullyClosing]
+ // Unfortunately the `close` event isn't called immediately,
+ // so `session.destroyed` is `true`, but `session.closed` is `false`.
+ || session.destroyed
+ ) {
+ continue;
+ }
- // We're looking for the session which has biggest current pending stream count,
- // in order to minimalize the amount of active sessions.
- if (sessionCurrentStreamsCount > currentStreamsCount) {
- optimalSession = session;
- currentStreamsCount = sessionCurrentStreamsCount;
- }
+ // We only need set this once.
+ if (!optimalSession) {
+ maxConcurrentStreams = sessionMaxConcurrentStreams;
+ }
+
+ // Either get the session which has biggest current stream count or the lowest.
+ if (this._isBetterSession(sessionCurrentStreamsCount, currentStreamsCount)) {
+ optimalSession = session;
+ currentStreamsCount = sessionCurrentStreamsCount;
}
}
if (optimalSession) {
- /* istanbul ignore next: safety check */
- if (listeners.length !== 1) {
- for (const {reject} of listeners) {
- const error = new Error(
- `Expected the length of listeners to be 1, got ${listeners.length}.\n` +
- 'Please report this to https://github.com/szmarczak/http2-wrapper/'
- );
-
- reject(error);
- }
-
- return;
- }
-
- listeners[0].resolve(optimalSession);
+ this._accept(optimalSession, listeners, normalizedOrigin, options);
return;
}
}
@@ -7479,14 +3120,12 @@ class Agent extends EventEmitter {
if (normalizedOrigin in this.queue[normalizedOptions]) {
// There's already an item in the queue, just attach ourselves to it.
this.queue[normalizedOptions][normalizedOrigin].listeners.push(...listeners);
-
- // This shouldn't be executed here.
- // See the comment inside _tryToCreateNewSession.
- this._tryToCreateNewSession(normalizedOptions, normalizedOrigin);
return;
}
} else {
- this.queue[normalizedOptions] = {};
+ this.queue[normalizedOptions] = {
+ [kLength]: 0
+ };
}
// The entry must be removed from the queue IMMEDIATELY when:
@@ -7497,29 +3136,58 @@ class Agent extends EventEmitter {
if (normalizedOptions in this.queue && this.queue[normalizedOptions][normalizedOrigin] === entry) {
delete this.queue[normalizedOptions][normalizedOrigin];
- if (Object.keys(this.queue[normalizedOptions]).length === 0) {
+ if (--this.queue[normalizedOptions][kLength] === 0) {
delete this.queue[normalizedOptions];
}
}
};
// The main logic is here
- const entry = () => {
+ const entry = async () => {
+ this._sessionCount++;
+
const name = `${normalizedOrigin}:${normalizedOptions}`;
let receivedSettings = false;
+ let socket;
try {
- const session = http2.connect(origin, {
- createConnection: this.createConnection,
- settings: this.settings,
- session: this.tlsSessionCache.get(name),
- ...options
- });
- session[kCurrentStreamsCount] = 0;
+ const computedOptions = {...options};
+
+ if (computedOptions.settings === undefined) {
+ computedOptions.settings = this.settings;
+ }
+
+ if (computedOptions.session === undefined) {
+ computedOptions.session = this.tlsSessionCache.get(name);
+ }
+
+ const createConnection = computedOptions.createConnection || this.createConnection;
+
+ // A hacky workaround to enable async `createConnection`
+ socket = await createConnection.call(this, origin, computedOptions);
+ computedOptions.createConnection = () => socket;
+
+ const session = http2.connect(origin, computedOptions);
+ session[kCurrentStreamCount] = 0;
session[kGracefullyClosing] = false;
- const isFree = () => session[kCurrentStreamsCount] < session.remoteSettings.maxConcurrentStreams;
- let wasFree = true;
+ // Node.js return https://false:443 instead of https://1.1.1.1:443
+ const getOriginSet = () => {
+ const {socket} = session;
+
+ let originSet;
+ if (socket.servername === false) {
+ socket.servername = socket.remoteAddress;
+ originSet = session.originSet;
+ socket.servername = false;
+ } else {
+ originSet = session.originSet;
+ }
+
+ return originSet;
+ };
+
+ const isFree = () => session[kCurrentStreamCount] < session.remoteSettings.maxConcurrentStreams;
session.socket.once('session', tlsSession => {
this.tlsSessionCache.set(name, tlsSession);
@@ -7527,8 +3195,8 @@ class Agent extends EventEmitter {
session.once('error', error => {
// Listeners are empty when the session successfully connected.
- for (const {reject} of listeners) {
- reject(error);
+ for (let index = 0; index < listeners.length; index++) {
+ listeners[index].reject(error);
}
// The connection got broken, purge the cache.
@@ -7537,68 +3205,73 @@ class Agent extends EventEmitter {
session.setTimeout(this.timeout, () => {
// Terminates all streams owned by this session.
- // TODO: Maybe the streams should have a "Session timed out" error?
session.destroy();
});
session.once('close', () => {
- if (receivedSettings) {
- // 1. If it wasn't free then no need to decrease because
- // it has been decreased already in session.request().
- // 2. `stream.once('close')` won't increment the count
- // because the session is already closed.
- if (wasFree) {
- this._freeSessionsCount--;
- }
+ this._sessionCount--;
- this._sessionsCount--;
+ if (receivedSettings) {
+ // Assumes session `close` is emitted after request `close`
+ this._emptySessionCount--;
// This cannot be moved to the stream logic,
// because there may be a session that hadn't made a single request.
const where = this.sessions[normalizedOptions];
- where.splice(where.indexOf(session), 1);
- if (where.length === 0) {
+ if (where.length === 1) {
delete this.sessions[normalizedOptions];
+ } else {
+ where.splice(where.indexOf(session), 1);
}
} else {
// Broken connection
+ removeFromQueue();
+
const error = new Error('Session closed without receiving a SETTINGS frame');
error.code = 'HTTP2WRAPPER_NOSETTINGS';
- for (const {reject} of listeners) {
- reject(error);
+ for (let index = 0; index < listeners.length; index++) {
+ listeners[index].reject(error);
}
-
- removeFromQueue();
}
// There may be another session awaiting.
- this._tryToCreateNewSession(normalizedOptions, normalizedOrigin);
+ this._processQueue();
});
// Iterates over the queue and processes listeners.
const processListeners = () => {
- if (!(normalizedOptions in this.queue) || !isFree()) {
+ const queue = this.queue[normalizedOptions];
+ if (!queue) {
return;
}
- for (const origin of session[kOriginSet]) {
- if (origin in this.queue[normalizedOptions]) {
- const {listeners} = this.queue[normalizedOptions][origin];
+ const originSet = session[kOriginSet];
+
+ for (let index = 0; index < originSet.length; index++) {
+ const origin = originSet[index];
+
+ if (origin in queue) {
+ const {listeners, completed} = queue[origin];
+
+ let index = 0;
// Prevents session overloading.
- while (listeners.length !== 0 && isFree()) {
+ while (index < listeners.length && isFree()) {
// We assume `resolve(...)` calls `request(...)` *directly*,
// otherwise the session will get overloaded.
- listeners.shift().resolve(session);
+ listeners[index].resolve(session);
+
+ index++;
}
- const where = this.queue[normalizedOptions];
- if (where[origin].listeners.length === 0) {
- delete where[origin];
+ queue[origin].listeners.splice(0, index);
- if (Object.keys(where).length === 0) {
+ if (queue[origin].listeners.length === 0 && !completed) {
+ delete queue[origin];
+
+ if (--queue[kLength] === 0) {
delete this.queue[normalizedOptions];
break;
}
@@ -7614,39 +3287,59 @@ class Agent extends EventEmitter {
// The Origin Set cannot shrink. No need to check if it suddenly became covered by another one.
session.on('origin', () => {
- session[kOriginSet] = session.originSet;
+ session[kOriginSet] = getOriginSet() || [];
+ session[kGracefullyClosing] = false;
+ closeSessionIfCovered(this.sessions[normalizedOptions], session);
- if (!isFree()) {
- // The session is full.
+ if (session[kGracefullyClosing] || !isFree()) {
return;
}
processListeners();
+ if (!isFree()) {
+ return;
+ }
+
// Close covered sessions (if possible).
closeCoveredSessions(this.sessions[normalizedOptions], session);
});
session.once('remoteSettings', () => {
- // Fix Node.js bug preventing the process from exiting
- session.ref();
- session.unref();
-
- this._sessionsCount++;
-
// The Agent could have been destroyed already.
if (entry.destroyed) {
const error = new Error('Agent has been destroyed');
- for (const listener of listeners) {
- listener.reject(error);
+ for (let index = 0; index < listeners.length; index++) {
+ listeners[index].reject(error);
}
session.destroy();
return;
}
- session[kOriginSet] = session.originSet;
+ // See https://github.com/nodejs/node/issues/38426
+ if (session.setLocalWindowSize) {
+ session.setLocalWindowSize(1024 * 1024 * 4); // 4 MB
+ }
+
+ session[kOriginSet] = getOriginSet() || [];
+
+ if (session.socket.encrypted) {
+ const mainOrigin = session[kOriginSet][0];
+ if (mainOrigin !== normalizedOrigin) {
+ const error = new Error(`Requested origin ${normalizedOrigin} does not match server ${mainOrigin}`);
+
+ for (let index = 0; index < listeners.length; index++) {
+ listeners[index].reject(error);
+ }
+
+ session.destroy();
+ return;
+ }
+ }
+
+ removeFromQueue();
{
const where = this.sessions;
@@ -7659,30 +3352,28 @@ class Agent extends EventEmitter {
}
}
- this._freeSessionsCount += 1;
receivedSettings = true;
+ this._emptySessionCount++;
this.emit('session', session);
+ this._accept(session, listeners, normalizedOrigin, options);
- processListeners();
- removeFromQueue();
-
- // TODO: Close last recently used (or least used?) session
- if (session[kCurrentStreamsCount] === 0 && this._freeSessionsCount > this.maxFreeSessions) {
- session.close();
- }
-
- // Check if we haven't managed to execute all listeners.
- if (listeners.length !== 0) {
- // Request for a new session with predefined listeners.
- this.getSession(normalizedOrigin, options, listeners);
- listeners.length = 0;
+ if (session[kCurrentStreamCount] === 0 && this._emptySessionCount > this.maxEmptySessions) {
+ this.closeEmptySessions(this._emptySessionCount - this.maxEmptySessions);
}
// `session.remoteSettings.maxConcurrentStreams` might get increased
session.on('remoteSettings', () => {
+ if (!isFree()) {
+ return;
+ }
+
processListeners();
+ if (!isFree()) {
+ return;
+ }
+
// In case the Origin Set changes
closeCoveredSessions(this.sessions[normalizedOptions], session);
});
@@ -7700,45 +3391,31 @@ class Agent extends EventEmitter {
// The process won't exit until the session is closed or all requests are gone.
session.ref();
- ++session[kCurrentStreamsCount];
-
- if (session[kCurrentStreamsCount] === session.remoteSettings.maxConcurrentStreams) {
- this._freeSessionsCount--;
+ if (session[kCurrentStreamCount]++ === 0) {
+ this._emptySessionCount--;
}
stream.once('close', () => {
- wasFree = isFree();
+ if (--session[kCurrentStreamCount] === 0) {
+ this._emptySessionCount++;
+ session.unref();
- --session[kCurrentStreamsCount];
+ if (this._emptySessionCount > this.maxEmptySessions || session[kGracefullyClosing]) {
+ session.close();
+ return;
+ }
+ }
- if (!session.destroyed && !session.closed) {
- closeSessionIfCovered(this.sessions[normalizedOptions], session);
+ if (session.destroyed || session.closed) {
+ return;
+ }
- if (isFree() && !session.closed) {
- if (!wasFree) {
- this._freeSessionsCount++;
+ if (isFree() && !closeSessionIfCovered(this.sessions[normalizedOptions], session)) {
+ closeCoveredSessions(this.sessions[normalizedOptions], session);
+ processListeners();
- wasFree = true;
- }
-
- const isEmpty = session[kCurrentStreamsCount] === 0;
-
- if (isEmpty) {
- session.unref();
- }
-
- if (
- isEmpty &&
- (
- this._freeSessionsCount > this.maxFreeSessions ||
- session[kGracefullyClosing]
- )
- ) {
- session.close();
- } else {
- closeCoveredSessions(this.sessions[normalizedOptions], session);
- processListeners();
- }
+ if (session[kCurrentStreamCount] === 0) {
+ this._processQueue();
}
}
});
@@ -7746,11 +3423,12 @@ class Agent extends EventEmitter {
return stream;
};
} catch (error) {
- for (const listener of listeners) {
- listener.reject(error);
- }
-
removeFromQueue();
+ this._sessionCount--;
+
+ for (let index = 0; index < listeners.length; index++) {
+ listeners[index].reject(error);
+ }
}
};
@@ -7759,7 +3437,8 @@ class Agent extends EventEmitter {
entry.destroyed = false;
this.queue[normalizedOptions][normalizedOrigin] = entry;
- this._tryToCreateNewSession(normalizedOptions, normalizedOrigin);
+ this.queue[normalizedOptions][kLength]++;
+ this._processQueue();
});
}
@@ -7769,7 +3448,12 @@ class Agent extends EventEmitter {
reject,
resolve: session => {
try {
- resolve(session.request(headers, streamOptions));
+ const stream = session.request(headers, streamOptions);
+
+ // Do not throw before `request(...)` has been awaited
+ delayAsyncDestroy(stream);
+
+ resolve(stream);
} catch (error) {
reject(error);
}
@@ -7778,7 +3462,7 @@ class Agent extends EventEmitter {
});
}
- createConnection(origin, options) {
+ async createConnection(origin, options) {
return Agent.connect(origin, options);
}
@@ -7786,52 +3470,92 @@ class Agent extends EventEmitter {
options.ALPNProtocols = ['h2'];
const port = origin.port || 443;
- const host = origin.hostname || origin.host;
+ const host = origin.hostname;
if (typeof options.servername === 'undefined') {
options.servername = host;
}
- return tls.connect(port, host, options);
+ const socket = tls.connect(port, host, options);
+
+ if (options.socket) {
+ socket._peername = {
+ family: undefined,
+ address: undefined,
+ port
+ };
+ }
+
+ return socket;
}
- closeFreeSessions() {
- for (const sessions of Object.values(this.sessions)) {
- for (const session of sessions) {
- if (session[kCurrentStreamsCount] === 0) {
+ closeEmptySessions(maxCount = Number.POSITIVE_INFINITY) {
+ let closedCount = 0;
+
+ const {sessions} = this;
+
+ // eslint-disable-next-line guard-for-in
+ for (const key in sessions) {
+ const thisSessions = sessions[key];
+
+ for (let index = 0; index < thisSessions.length; index++) {
+ const session = thisSessions[index];
+
+ if (session[kCurrentStreamCount] === 0) {
+ closedCount++;
session.close();
+
+ if (closedCount >= maxCount) {
+ return closedCount;
+ }
}
}
}
+
+ return closedCount;
}
destroy(reason) {
- for (const sessions of Object.values(this.sessions)) {
- for (const session of sessions) {
- session.destroy(reason);
+ const {sessions, queue} = this;
+
+ // eslint-disable-next-line guard-for-in
+ for (const key in sessions) {
+ const thisSessions = sessions[key];
+
+ for (let index = 0; index < thisSessions.length; index++) {
+ thisSessions[index].destroy(reason);
}
}
- for (const entriesOfAuthority of Object.values(this.queue)) {
- for (const entry of Object.values(entriesOfAuthority)) {
- entry.destroyed = true;
+ // eslint-disable-next-line guard-for-in
+ for (const normalizedOptions in queue) {
+ const entries = queue[normalizedOptions];
+
+ // eslint-disable-next-line guard-for-in
+ for (const normalizedOrigin in entries) {
+ entries[normalizedOrigin].destroyed = true;
}
}
// New requests should NOT attach to destroyed sessions
this.queue = {};
+ this.tlsSessionCache.clear();
}
- get freeSessions() {
- return getSessions({agent: this, isFree: true});
+ get emptySessionCount() {
+ return this._emptySessionCount;
}
- get busySessions() {
- return getSessions({agent: this, isFree: false});
+ get pendingSessionCount() {
+ return this._sessionCount - this._emptySessionCount;
+ }
+
+ get sessionCount() {
+ return this._sessionCount;
}
}
-Agent.kCurrentStreamsCount = kCurrentStreamsCount;
+Agent.kCurrentStreamCount = kCurrentStreamCount;
Agent.kGracefullyClosing = kGracefullyClosing;
module.exports = {
@@ -7845,15 +3569,18 @@ 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__(5461);
+const QuickLRU = __nccwpck_require__(9273);
+const {Agent, globalAgent} = __nccwpck_require__(9898);
const Http2ClientRequest = __nccwpck_require__(9632);
const calculateServerName = __nccwpck_require__(1982);
-const urlToOptions = __nccwpck_require__(2686);
+const delayAsyncDestroy = __nccwpck_require__(9237);
const cache = new QuickLRU({maxSize: 100});
const queue = new Map();
@@ -7873,10 +3600,24 @@ const installSocket = (agent, socket, options) => {
socket.on('close', onClose);
+ const onTimeout = () => {
+ const {freeSockets} = agent;
+
+ for (const sockets of Object.values(freeSockets)) {
+ if (sockets.includes(socket)) {
+ socket.destroy();
+ return;
+ }
+ }
+ };
+
+ socket.on('timeout', onTimeout);
+
const onRemove = () => {
agent.removeSocket(socket, options);
socket.off('close', onClose);
socket.off('free', onFree);
+ socket.off('timeout', onTimeout);
socket.off('agentRemove', onRemove);
};
@@ -7885,76 +3626,65 @@ const installSocket = (agent, socket, options) => {
agent.emit('free', socket, options);
};
-const resolveProtocol = async options => {
- const name = `${options.host}:${options.port}:${options.ALPNProtocols.sort()}`;
+const createResolveProtocol = (cache, queue = new Map(), connect = undefined) => {
+ return async options => {
+ const name = `${options.host}:${options.port}:${options.ALPNProtocols.sort()}`;
- if (!cache.has(name)) {
- if (queue.has(name)) {
- const result = await queue.get(name);
- return result.alpnProtocol;
- }
-
- const {path, agent} = options;
- options.path = options.socketPath;
-
- const resultPromise = resolveALPN(options);
- queue.set(name, resultPromise);
-
- try {
- const {socket, alpnProtocol} = await resultPromise;
- cache.set(name, alpnProtocol);
-
- options.path = path;
-
- if (alpnProtocol === 'h2') {
- // https://github.com/nodejs/node/issues/33343
- socket.destroy();
- } else {
- const {globalAgent} = https;
- const defaultCreateConnection = https.Agent.prototype.createConnection;
-
- if (agent) {
- if (agent.createConnection === defaultCreateConnection) {
- installSocket(agent, socket, options);
- } else {
- socket.destroy();
- }
- } else if (globalAgent.createConnection === defaultCreateConnection) {
- installSocket(globalAgent, socket, options);
- } else {
- socket.destroy();
- }
+ if (!cache.has(name)) {
+ if (queue.has(name)) {
+ const result = await queue.get(name);
+ return {alpnProtocol: result.alpnProtocol};
}
- queue.delete(name);
+ const {path} = options;
+ options.path = options.socketPath;
- return alpnProtocol;
- } catch (error) {
- queue.delete(name);
+ const resultPromise = resolveALPN(options, connect);
+ queue.set(name, resultPromise);
- throw error;
+ try {
+ const result = await resultPromise;
+
+ cache.set(name, result.alpnProtocol);
+ queue.delete(name);
+
+ options.path = path;
+
+ return result;
+ } catch (error) {
+ queue.delete(name);
+
+ options.path = path;
+
+ throw error;
+ }
}
- }
- return cache.get(name);
+ return {alpnProtocol: cache.get(name)};
+ };
};
+const defaultResolveProtocol = createResolveProtocol(cache, queue);
+
module.exports = async (input, options, callback) => {
- if (typeof input === 'string' || input instanceof URL) {
- input = urlToOptions(new URL(input));
+ if (typeof input === 'string') {
+ input = urlToHttpOptions(new URL(input));
+ } else if (input instanceof URL) {
+ input = urlToHttpOptions(input);
+ } else {
+ input = {...input};
}
- if (typeof options === 'function') {
+ if (typeof options === 'function' || options === undefined) {
+ // (options, callback)
callback = options;
- options = undefined;
+ options = input;
+ } else {
+ // (input, options, callback)
+ options = Object.assign(input, options);
}
- options = {
- ALPNProtocols: ['h2', 'http/1.1'],
- ...input,
- ...options,
- resolveSocket: true
- };
+ options.ALPNProtocols = options.ALPNProtocols || ['h2', 'http/1.1'];
if (!Array.isArray(options.ALPNProtocols) || options.ALPNProtocols.length === 0) {
throw new Error('The `ALPNProtocols` option must be an Array with at least one entry');
@@ -7965,36 +3695,105 @@ module.exports = async (input, options, callback) => {
options.host = options.hostname || options.host || 'localhost';
options.session = options.tlsSession;
- options.servername = options.servername || calculateServerName(options);
+ options.servername = options.servername || calculateServerName((options.headers && options.headers.host) || options.host);
options.port = options.port || (isHttps ? 443 : 80);
options._defaultAgent = isHttps ? https.globalAgent : http.globalAgent;
- const agents = options.agent;
+ const resolveProtocol = options.resolveProtocol || defaultResolveProtocol;
- if (agents) {
- if (agents.addRequest) {
- throw new Error('The `options.agent` object can contain only `http`, `https` or `http2` properties');
- }
+ // Note: We don't support `h2session` here
- options.agent = agents[isHttps ? 'https' : 'http'];
+ let {agent} = options;
+ if (agent !== undefined && agent !== false && agent.constructor.name !== 'Object') {
+ throw new Error('The `options.agent` can be only an object `http`, `https` or `http2` properties');
}
if (isHttps) {
- const protocol = await resolveProtocol(options);
+ options.resolveSocket = true;
- if (protocol === 'h2') {
- if (agents) {
- options.agent = agents.http2;
+ let {socket, alpnProtocol, timeout} = await resolveProtocol(options);
+
+ if (timeout) {
+ if (socket) {
+ socket.destroy();
}
- return new Http2ClientRequest(options, callback);
+ const error = new Error(`Timed out resolving ALPN: ${options.timeout} ms`);
+ error.code = 'ETIMEDOUT';
+ error.ms = options.timeout;
+
+ throw error;
}
+
+ // We can't accept custom `createConnection` because the API is different for HTTP/2
+ if (socket && options.createConnection) {
+ socket.destroy();
+ socket = undefined;
+ }
+
+ delete options.resolveSocket;
+
+ const isHttp2 = alpnProtocol === 'h2';
+
+ if (agent) {
+ agent = isHttp2 ? agent.http2 : agent.https;
+ options.agent = agent;
+ }
+
+ if (agent === undefined) {
+ agent = isHttp2 ? globalAgent : https.globalAgent;
+ }
+
+ if (socket) {
+ if (agent === false) {
+ socket.destroy();
+ } else {
+ const defaultCreateConnection = (isHttp2 ? Agent : https.Agent).prototype.createConnection;
+
+ if (agent.createConnection === defaultCreateConnection) {
+ if (isHttp2) {
+ options._reuseSocket = socket;
+ } else {
+ installSocket(agent, socket, options);
+ }
+ } else {
+ socket.destroy();
+ }
+ }
+ }
+
+ if (isHttp2) {
+ return delayAsyncDestroy(new Http2ClientRequest(options, callback));
+ }
+ } else if (agent) {
+ options.agent = agent.http;
}
- return http.request(options, callback);
+ // If we're sending HTTP/1.1, handle any explicitly set H2 headers in the options:
+ if (options.headers) {
+ options.headers = {...options.headers};
+
+ // :authority is equivalent to the HTTP/1.1 host header
+ if (options.headers[':authority']) {
+ if (!options.headers.host) {
+ options.headers.host = options.headers[':authority'];
+ }
+
+ delete options.headers[':authority'];
+ }
+
+ // Remove other HTTP/2 headers as they have their counterparts in the options
+ delete options.headers[':method'];
+ delete options.headers[':scheme'];
+ delete options.headers[':path'];
+ }
+
+ return delayAsyncDestroy(http.request(options, callback));
};
module.exports.protocolCache = cache;
+module.exports.resolveProtocol = defaultResolveProtocol;
+module.exports.createResolveProtocol = createResolveProtocol;
/***/ }),
@@ -8002,28 +3801,29 @@ module.exports.protocolCache = cache;
/***/ 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_INVALID_HTTP_TOKEN,
- ERR_HTTP_INVALID_HEADER_VALUE,
- ERR_INVALID_CHAR
+ ERR_HTTP_HEADERS_SENT
} = __nccwpck_require__(7087);
+const validateHeaderName = __nccwpck_require__(4592);
+const validateHeaderValue = __nccwpck_require__(3549);
+const proxySocketHandler = __nccwpck_require__(9404);
const {
HTTP2_HEADER_STATUS,
HTTP2_HEADER_METHOD,
HTTP2_HEADER_PATH,
+ HTTP2_HEADER_AUTHORITY,
HTTP2_METHOD_CONNECT
} = http2.constants;
@@ -8033,59 +3833,66 @@ const kSession = Symbol('session');
const kOptions = Symbol('options');
const kFlushedHeaders = Symbol('flushedHeaders');
const kJobs = Symbol('jobs');
-
-const isValidHttpToken = /^[\^`\-\w!#$%&*+.|~]+$/;
-const isInvalidHeaderValue = /[^\t\u0020-\u007E\u0080-\u00FF]/;
+const kPendingAgentPromise = Symbol('pendingAgentPromise');
class ClientRequest extends Writable {
constructor(input, options, callback) {
super({
- autoDestroy: false
+ autoDestroy: false,
+ emitClose: false
});
- const hasInput = typeof input === 'string' || input instanceof URL;
- if (hasInput) {
- input = urlToOptions(input instanceof URL ? input : new URL(input));
+ if (typeof input === 'string') {
+ input = urlToHttpOptions(new URL(input));
+ } else if (input instanceof URL) {
+ input = urlToHttpOptions(input);
+ } else {
+ input = {...input};
}
if (typeof options === 'function' || options === undefined) {
// (options, callback)
callback = options;
- options = hasInput ? input : {...input};
+ options = input;
} else {
// (input, options, callback)
- options = {...input, ...options};
+ options = Object.assign(input, options);
}
if (options.h2session) {
this[kSession] = options.h2session;
- } else if (options.agent === false) {
- this.agent = new Agent({maxFreeSessions: 0});
- } else if (typeof options.agent === 'undefined' || options.agent === null) {
- if (typeof options.createConnection === 'function') {
- // This is a workaround - we don't have to create the session on our own.
- this.agent = new Agent({maxFreeSessions: 0});
- this.agent.createConnection = options.createConnection;
- } else {
- this.agent = globalAgent;
+
+ if (this[kSession].destroyed) {
+ throw new Error('The session has been closed already');
}
+
+ this.protocol = this[kSession].socket.encrypted ? 'https:' : 'http:';
+ } else if (options.agent === false) {
+ this.agent = new Agent({maxEmptySessions: 0});
+ } else if (typeof options.agent === 'undefined' || options.agent === null) {
+ this.agent = globalAgent;
} else if (typeof options.agent.request === 'function') {
this.agent = options.agent;
} else {
- throw new ERR_INVALID_ARG_TYPE('options.agent', ['Agent-like Object', 'undefined', 'false'], options.agent);
+ throw new ERR_INVALID_ARG_TYPE('options.agent', ['http2wrapper.Agent-like Object', 'undefined', 'false'], options.agent);
}
- if (options.protocol && options.protocol !== 'https:') {
- throw new ERR_INVALID_PROTOCOL(options.protocol, 'https:');
+ if (this.agent) {
+ this.protocol = this.agent.protocol;
}
- const port = options.port || options.defaultPort || (this.agent && this.agent.defaultPort) || 443;
- const host = options.hostname || options.host || 'localhost';
+ if (options.protocol && options.protocol !== this.protocol) {
+ throw new ERR_INVALID_PROTOCOL(options.protocol, this.protocol);
+ }
- // Don't enforce the origin via options. It may be changed in an Agent.
+ if (!options.port) {
+ options.port = options.defaultPort || (this.agent && this.agent.defaultPort) || 443;
+ }
+
+ options.host = options.hostname || options.host || 'localhost';
+
+ // Unused
delete options.hostname;
- delete options.host;
- delete options.port;
const {timeout} = options;
options.timeout = undefined;
@@ -8093,19 +3900,26 @@ class ClientRequest extends Writable {
this[kHeaders] = Object.create(null);
this[kJobs] = [];
+ this[kPendingAgentPromise] = undefined;
+
this.socket = null;
this.connection = null;
this.method = options.method || 'GET';
- this.path = options.path;
+
+ if (!(this.method === 'CONNECT' && (options.path === '/' || options.path === undefined))) {
+ this.path = options.path;
+ }
this.res = null;
this.aborted = false;
this.reusedSocket = false;
- if (options.headers) {
- for (const [header, value] of Object.entries(options.headers)) {
- this.setHeader(header, value);
+ const {headers} = options;
+ if (headers) {
+ // eslint-disable-next-line guard-for-in
+ for (const header in headers) {
+ this.setHeader(header, headers[header]);
}
}
@@ -8119,18 +3933,21 @@ class ClientRequest extends Writable {
this[kOptions] = options;
// Clients that generate HTTP/2 requests directly SHOULD use the :authority pseudo-header field instead of the Host header field.
- if (port === 443) {
- this[kOrigin] = `https://${host}`;
+ this[kOrigin] = new URL(`${this.protocol}//${options.servername || options.host}:${options.port}`);
- if (!(':authority' in this[kHeaders])) {
- this[kHeaders][':authority'] = host;
- }
- } else {
- this[kOrigin] = `https://${host}:${port}`;
+ // A socket is being reused
+ const reuseSocket = options._reuseSocket;
+ if (reuseSocket) {
+ options.createConnection = (...args) => {
+ if (reuseSocket.destroyed) {
+ return this.agent.createConnection(...args);
+ }
- if (!(':authority' in this[kHeaders])) {
- this[kHeaders][':authority'] = `${host}:${port}`;
- }
+ return reuseSocket;
+ };
+
+ // eslint-disable-next-line promise/prefer-await-to-then
+ this.agent.getSession(this[kOrigin], this[kOptions]).catch(() => {});
}
if (timeout) {
@@ -8155,15 +3972,27 @@ class ClientRequest extends Writable {
}
get path() {
- return this[kHeaders][HTTP2_HEADER_PATH];
+ const header = this.method === 'CONNECT' ? HTTP2_HEADER_AUTHORITY : HTTP2_HEADER_PATH;
+
+ return this[kHeaders][header];
}
set path(value) {
if (value) {
- this[kHeaders][HTTP2_HEADER_PATH] = value;
+ const header = this.method === 'CONNECT' ? HTTP2_HEADER_AUTHORITY : HTTP2_HEADER_PATH;
+
+ this[kHeaders][header] = value;
}
}
+ get host() {
+ return this[kOrigin].hostname;
+ }
+
+ set host(_value) {
+ // Do nothing as this is read only.
+ }
+
get _mustNotHaveABody() {
return this.method === 'GET' || this.method === 'HEAD' || this.method === 'DELETE';
}
@@ -8187,15 +4016,11 @@ class ClientRequest extends Writable {
}
_final(callback) {
- if (this.destroyed) {
- return;
- }
-
this.flushHeaders();
const callEnd = () => {
- // For GET, HEAD and DELETE
- if (this._mustNotHaveABody) {
+ // For GET, HEAD and DELETE and CONNECT
+ if (this._mustNotHaveABody || this.method === 'CONNECT') {
callback();
return;
}
@@ -8224,13 +4049,25 @@ class ClientRequest extends Writable {
this.destroy();
}
- _destroy(error, callback) {
+ async _destroy(error, callback) {
if (this.res) {
this.res._dump();
}
if (this._request) {
this._request.destroy();
+ } else {
+ process.nextTick(() => {
+ this.emit('close');
+ });
+ }
+
+ try {
+ await this[kPendingAgentPromise];
+ } catch (internalError) {
+ if (this.aborted) {
+ error = internalError;
+ }
}
callback(error);
@@ -8256,46 +4093,45 @@ class ClientRequest extends Writable {
// Forwards `timeout`, `continue`, `close` and `error` events to this instance.
if (!isConnectMethod) {
- proxyEvents(stream, this, ['timeout', 'continue', 'close', 'error']);
+ // TODO: Should we proxy `close` here?
+ proxyEvents(stream, this, ['timeout', 'continue']);
}
- // Wait for the `finish` event. We don't want to emit the `response` event
- // before `request.end()` is called.
- const waitForEnd = fn => {
- return (...args) => {
- if (!this.writable && !this.destroyed) {
- fn(...args);
- } else {
- this.once('finish', () => {
- fn(...args);
- });
- }
- };
- };
+ stream.once('error', error => {
+ this.destroy(error);
+ });
- // This event tells we are ready to listen for the data.
- stream.once('response', waitForEnd((headers, flags, rawHeaders) => {
+ stream.once('aborted', () => {
+ const {res} = this;
+ if (res) {
+ res.aborted = true;
+ res.emit('aborted');
+ res.destroy();
+ } else {
+ this.destroy(new Error('The server aborted the HTTP/2 stream'));
+ }
+ });
+
+ const onResponse = (headers, flags, rawHeaders) => {
// If we were to emit raw request stream, it would be as fast as the native approach.
// Note that wrapping the raw stream in a Proxy instance won't improve the performance (already tested it).
const response = new IncomingMessage(this.socket, stream.readableHighWaterMark);
this.res = response;
+ // Undocumented, but it is used by `cacheable-request`
+ response.url = `${this[kOrigin].origin}${this.path}`;
+
response.req = this;
response.statusCode = headers[HTTP2_HEADER_STATUS];
response.headers = headers;
response.rawHeaders = rawHeaders;
response.once('end', () => {
- if (this.aborted) {
- response.aborted = true;
- response.emit('aborted');
- } else {
- response.complete = true;
+ response.complete = true;
- // Has no effect, just be consistent with the Node.js behavior
- response.socket = null;
- response.connection = null;
- }
+ // Has no effect, just be consistent with the Node.js behavior
+ response.socket = null;
+ response.connection = null;
});
if (isConnectMethod) {
@@ -8318,7 +4154,9 @@ class ClientRequest extends Writable {
});
stream.once('end', () => {
- response.push(null);
+ if (!this.aborted) {
+ response.push(null);
+ }
});
if (!this.emit('response', response)) {
@@ -8326,50 +4164,123 @@ class ClientRequest extends Writable {
response._dump();
}
}
- }));
+ };
+
+ // This event tells we are ready to listen for the data.
+ stream.once('response', onResponse);
// Emits `information` event
- stream.once('headers', waitForEnd(
- headers => this.emit('information', {statusCode: headers[HTTP2_HEADER_STATUS]})
- ));
+ stream.once('headers', headers => this.emit('information', {statusCode: headers[HTTP2_HEADER_STATUS]}));
- stream.once('trailers', waitForEnd((trailers, flags, rawTrailers) => {
+ stream.once('trailers', (trailers, flags, rawTrailers) => {
const {res} = this;
+ // https://github.com/nodejs/node/issues/41251
+ if (res === null) {
+ onResponse(trailers, flags, rawTrailers);
+ return;
+ }
+
// Assigns trailers to the response object.
res.trailers = trailers;
res.rawTrailers = rawTrailers;
- }));
+ });
- const {socket} = stream.session;
- this.socket = socket;
- this.connection = socket;
+ stream.once('close', () => {
+ const {aborted, res} = this;
+ if (res) {
+ if (aborted) {
+ res.aborted = true;
+ res.emit('aborted');
+ res.destroy();
+ }
+
+ const finish = () => {
+ res.emit('close');
+
+ this.destroy();
+ this.emit('close');
+ };
+
+ if (res.readable) {
+ res.once('end', finish);
+ } else {
+ finish();
+ }
+
+ return;
+ }
+
+ if (!this.destroyed) {
+ this.destroy(new Error('The HTTP/2 stream has been early terminated'));
+ this.emit('close');
+ return;
+ }
+
+ this.destroy();
+ this.emit('close');
+ });
+
+ this.socket = new Proxy(stream, proxySocketHandler);
for (const job of this[kJobs]) {
job();
}
+ this[kJobs].length = 0;
+
this.emit('socket', this.socket);
};
+ if (!(HTTP2_HEADER_AUTHORITY in this[kHeaders]) && !isConnectMethod) {
+ this[kHeaders][HTTP2_HEADER_AUTHORITY] = this[kOrigin].host;
+ }
+
// Makes a HTTP2 request
if (this[kSession]) {
try {
onStream(this[kSession].request(this[kHeaders]));
} catch (error) {
- this.emit('error', error);
+ this.destroy(error);
}
} else {
this.reusedSocket = true;
try {
- onStream(await this.agent.request(this[kOrigin], this[kOptions], this[kHeaders]));
+ const promise = this.agent.request(this[kOrigin], this[kOptions], this[kHeaders]);
+ this[kPendingAgentPromise] = promise;
+
+ onStream(await promise);
+
+ this[kPendingAgentPromise] = false;
} catch (error) {
- this.emit('error', error);
+ this[kPendingAgentPromise] = false;
+
+ this.destroy(error);
}
}
}
+ get connection() {
+ return this.socket;
+ }
+
+ set connection(value) {
+ this.socket = value;
+ }
+
+ getHeaderNames() {
+ return Object.keys(this[kHeaders]);
+ }
+
+ hasHeader(name) {
+ if (typeof name !== 'string') {
+ throw new ERR_INVALID_ARG_TYPE('name', 'string', name);
+ }
+
+ return Boolean(this[kHeaders][name.toLowerCase()]);
+ }
+
getHeader(name) {
if (typeof name !== 'string') {
throw new ERR_INVALID_ARG_TYPE('name', 'string', name);
@@ -8399,19 +4310,24 @@ class ClientRequest extends Writable {
throw new ERR_HTTP_HEADERS_SENT('set');
}
- if (typeof name !== 'string' || (!isValidHttpToken.test(name) && !isRequestPseudoHeader(name))) {
- throw new ERR_INVALID_HTTP_TOKEN('Header name', name);
+ validateHeaderName(name);
+ validateHeaderValue(name, value);
+
+ const lowercased = name.toLowerCase();
+
+ if (lowercased === 'connection') {
+ if (value.toLowerCase() === 'keep-alive') {
+ return;
+ }
+
+ throw new Error(`Invalid 'connection' header: ${value}`);
}
- if (typeof value === 'undefined') {
- throw new ERR_HTTP_INVALID_HEADER_VALUE(value, name);
+ if (lowercased === 'host' && this.method === 'CONNECT') {
+ this[kHeaders][HTTP2_HEADER_AUTHORITY] = value;
+ } else {
+ this[kHeaders][lowercased] = value;
}
-
- if (isInvalidHeaderValue.test(value)) {
- throw new ERR_INVALID_CHAR('header content', name);
- }
-
- this[kHeaders][name.toLowerCase()] = value;
}
setNoDelay() {
@@ -8455,15 +4371,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({
- highWaterMark,
- autoDestroy: false
+ emitClose: false,
+ autoDestroy: true,
+ highWaterMark
});
this.statusCode = null;
@@ -8483,12 +4399,26 @@ class IncomingMessage extends Readable {
this.rawTrailers = [];
this.socket = socket;
- this.connection = socket;
this._dumped = false;
}
- _destroy(error) {
+ get connection() {
+ return this.socket;
+ }
+
+ set connection(value) {
+ this.socket = value;
+ }
+
+ _destroy(error, callback) {
+ if (!this.readableEnded) {
+ this.aborted = true;
+ }
+
+ // See https://github.com/nodejs/node/issues/35303
+ callback();
+
this.req._request.destroy(error);
}
@@ -8521,17 +4451,28 @@ module.exports = IncomingMessage;
/***/ 4645:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-"use strict";
const http2 = __nccwpck_require__(5158);
-const agent = __nccwpck_require__(9898);
+const {
+ Agent,
+ globalAgent
+} = __nccwpck_require__(9898);
const ClientRequest = __nccwpck_require__(9632);
const IncomingMessage = __nccwpck_require__(2575);
const auto = __nccwpck_require__(7167);
+const {
+ HttpOverHttp2,
+ HttpsOverHttp2
+} = __nccwpck_require__(8795);
+const Http2OverHttp2 = __nccwpck_require__(8553);
+const {
+ Http2OverHttp,
+ Http2OverHttps
+} = __nccwpck_require__(9794);
+const validateHeaderName = __nccwpck_require__(4592);
+const validateHeaderValue = __nccwpck_require__(3549);
-const request = (url, options, callback) => {
- return new ClientRequest(url, options, callback);
-};
+const request = (url, options, callback) => new ClientRequest(url, options, callback);
const get = (url, options, callback) => {
// eslint-disable-next-line unicorn/prevent-abbreviations
@@ -8545,41 +4486,360 @@ module.exports = {
...http2,
ClientRequest,
IncomingMessage,
- ...agent,
+ Agent,
+ globalAgent,
request,
get,
- auto
+ auto,
+ proxies: {
+ HttpOverHttp2,
+ HttpsOverHttp2,
+ Http2OverHttp2,
+ Http2OverHttp,
+ Http2OverHttps
+ },
+ validateHeaderName,
+ validateHeaderValue
};
+/***/ }),
+
+/***/ 7885:
+/***/ ((module) => {
+
+
+
+module.exports = self => {
+ const {username, password} = self.proxyOptions.url;
+
+ if (username || password) {
+ const data = `${username}:${password}`;
+ const authorization = `Basic ${Buffer.from(data).toString('base64')}`;
+
+ return {
+ 'proxy-authorization': authorization,
+ authorization
+ };
+ }
+
+ return {};
+};
+
+
+/***/ }),
+
+/***/ 8795:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+
+const tls = __nccwpck_require__(4404);
+const http = __nccwpck_require__(3685);
+const https = __nccwpck_require__(5687);
+const JSStreamSocket = __nccwpck_require__(1564);
+const {globalAgent} = __nccwpck_require__(9898);
+const UnexpectedStatusCodeError = __nccwpck_require__(6203);
+const initialize = __nccwpck_require__(1089);
+const getAuthorizationHeaders = __nccwpck_require__(7885);
+
+const createConnection = (self, options, callback) => {
+ (async () => {
+ try {
+ const {proxyOptions} = self;
+ const {url, headers, raw} = proxyOptions;
+
+ const stream = await globalAgent.request(url, proxyOptions, {
+ ...getAuthorizationHeaders(self),
+ ...headers,
+ ':method': 'CONNECT',
+ ':authority': `${options.host}:${options.port}`
+ });
+
+ stream.once('error', callback);
+ stream.once('response', headers => {
+ const statusCode = headers[':status'];
+
+ if (statusCode !== 200) {
+ callback(new UnexpectedStatusCodeError(statusCode, ''));
+ return;
+ }
+
+ const encrypted = self instanceof https.Agent;
+
+ if (raw && encrypted) {
+ options.socket = stream;
+ const secureStream = tls.connect(options);
+
+ secureStream.once('close', () => {
+ stream.destroy();
+ });
+
+ callback(null, secureStream);
+ return;
+ }
+
+ const socket = new JSStreamSocket(stream);
+ socket.encrypted = false;
+ socket._handle.getpeername = out => {
+ out.family = undefined;
+ out.address = undefined;
+ out.port = undefined;
+ };
+
+ callback(null, socket);
+ });
+ } catch (error) {
+ callback(error);
+ }
+ })();
+};
+
+class HttpOverHttp2 extends http.Agent {
+ constructor(options) {
+ super(options);
+
+ initialize(this, options.proxyOptions);
+ }
+
+ createConnection(options, callback) {
+ createConnection(this, options, callback);
+ }
+}
+
+class HttpsOverHttp2 extends https.Agent {
+ constructor(options) {
+ super(options);
+
+ initialize(this, options.proxyOptions);
+ }
+
+ createConnection(options, callback) {
+ createConnection(this, options, callback);
+ }
+}
+
+module.exports = {
+ HttpOverHttp2,
+ HttpsOverHttp2
+};
+
+
+/***/ }),
+
+/***/ 9794:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+
+const http = __nccwpck_require__(3685);
+const https = __nccwpck_require__(5687);
+const Http2OverHttpX = __nccwpck_require__(1857);
+const getAuthorizationHeaders = __nccwpck_require__(7885);
+
+const getStream = request => new Promise((resolve, reject) => {
+ const onConnect = (response, socket, head) => {
+ socket.unshift(head);
+
+ request.off('error', reject);
+ resolve([socket, response.statusCode, response.statusMessage]);
+ };
+
+ request.once('error', reject);
+ request.once('connect', onConnect);
+});
+
+class Http2OverHttp extends Http2OverHttpX {
+ async _getProxyStream(authority) {
+ const {proxyOptions} = this;
+ const {url, headers} = this.proxyOptions;
+
+ const network = url.protocol === 'https:' ? https : http;
+
+ // `new URL('https://localhost/httpbin.org:443')` results in
+ // a `/httpbin.org:443` path, which has an invalid leading slash.
+ const request = network.request({
+ ...proxyOptions,
+ hostname: url.hostname,
+ port: url.port,
+ path: authority,
+ headers: {
+ ...getAuthorizationHeaders(this),
+ ...headers,
+ host: authority
+ },
+ method: 'CONNECT'
+ }).end();
+
+ return getStream(request);
+ }
+}
+
+module.exports = {
+ Http2OverHttp,
+ Http2OverHttps: Http2OverHttp
+};
+
+
+/***/ }),
+
+/***/ 8553:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+
+const {globalAgent} = __nccwpck_require__(9898);
+const Http2OverHttpX = __nccwpck_require__(1857);
+const getAuthorizationHeaders = __nccwpck_require__(7885);
+
+const getStatusCode = stream => new Promise((resolve, reject) => {
+ stream.once('error', reject);
+ stream.once('response', headers => {
+ stream.off('error', reject);
+ resolve(headers[':status']);
+ });
+});
+
+class Http2OverHttp2 extends Http2OverHttpX {
+ async _getProxyStream(authority) {
+ const {proxyOptions} = this;
+
+ const headers = {
+ ...getAuthorizationHeaders(this),
+ ...proxyOptions.headers,
+ ':method': 'CONNECT',
+ ':authority': authority
+ };
+
+ const stream = await globalAgent.request(proxyOptions.url, proxyOptions, headers);
+ const statusCode = await getStatusCode(stream);
+
+ return [stream, statusCode, ''];
+ }
+}
+
+module.exports = Http2OverHttp2;
+
+
+/***/ }),
+
+/***/ 1857:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+
+const {Agent} = __nccwpck_require__(9898);
+const JSStreamSocket = __nccwpck_require__(1564);
+const UnexpectedStatusCodeError = __nccwpck_require__(6203);
+const initialize = __nccwpck_require__(1089);
+
+class Http2OverHttpX extends Agent {
+ constructor(options) {
+ super(options);
+
+ initialize(this, options.proxyOptions);
+ }
+
+ async createConnection(origin, options) {
+ const authority = `${origin.hostname}:${origin.port || 443}`;
+
+ const [stream, statusCode, statusMessage] = await this._getProxyStream(authority);
+ if (statusCode !== 200) {
+ throw new UnexpectedStatusCodeError(statusCode, statusMessage);
+ }
+
+ if (this.proxyOptions.raw) {
+ options.socket = stream;
+ } else {
+ const socket = new JSStreamSocket(stream);
+ socket.encrypted = false;
+ socket._handle.getpeername = out => {
+ out.family = undefined;
+ out.address = undefined;
+ out.port = undefined;
+ };
+
+ return socket;
+ }
+
+ return super.createConnection(origin, options);
+ }
+}
+
+module.exports = Http2OverHttpX;
+
+
+/***/ }),
+
+/***/ 1089:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+
+// See https://github.com/facebook/jest/issues/2549
+// eslint-disable-next-line node/prefer-global/url
+const {URL} = __nccwpck_require__(7310);
+const checkType = __nccwpck_require__(3453);
+
+module.exports = (self, proxyOptions) => {
+ checkType('proxyOptions', proxyOptions, ['object']);
+ checkType('proxyOptions.headers', proxyOptions.headers, ['object', 'undefined']);
+ checkType('proxyOptions.raw', proxyOptions.raw, ['boolean', 'undefined']);
+ checkType('proxyOptions.url', proxyOptions.url, [URL, 'string']);
+
+ const url = new URL(proxyOptions.url);
+
+ self.proxyOptions = {
+ raw: true,
+ ...proxyOptions,
+ headers: {...proxyOptions.headers},
+ url
+ };
+};
+
+
+/***/ }),
+
+/***/ 6203:
+/***/ ((module) => {
+
+
+
+class UnexpectedStatusCodeError extends Error {
+ constructor(statusCode, statusMessage = '') {
+ super(`The proxy server rejected the request with status code ${statusCode} (${statusMessage || 'empty status message'})`);
+ this.statusCode = statusCode;
+ this.statusMessage = statusMessage;
+ }
+}
+
+module.exports = UnexpectedStatusCodeError;
+
+
/***/ }),
/***/ 1982:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-"use strict";
-const net = __nccwpck_require__(1808);
-/* istanbul ignore file: https://github.com/nodejs/node/blob/v13.0.1/lib/_http_agent.js */
+const {isIP} = __nccwpck_require__(1808);
+const assert = __nccwpck_require__(9491);
-module.exports = options => {
- let servername = options.host;
- const hostHeader = options.headers && options.headers.host;
+const getHost = host => {
+ if (host[0] === '[') {
+ const idx = host.indexOf(']');
- if (hostHeader) {
- if (hostHeader.startsWith('[')) {
- const index = hostHeader.indexOf(']');
- if (index === -1) {
- servername = hostHeader;
- } else {
- servername = hostHeader.slice(1, -1);
- }
- } else {
- servername = hostHeader.split(':', 1)[0];
- }
+ assert(idx !== -1);
+ return host.slice(1, idx);
}
- if (net.isIP(servername)) {
+ const idx = host.indexOf(':');
+ if (idx === -1) {
+ return host;
+ }
+
+ return host.slice(0, idx);
+};
+
+module.exports = host => {
+ const servername = getHost(host);
+
+ if (isIP(servername)) {
return '';
}
@@ -8587,12 +4847,78 @@ module.exports = options => {
};
+/***/ }),
+
+/***/ 3453:
+/***/ ((module) => {
+
+
+
+const checkType = (name, value, types) => {
+ const valid = types.some(type => {
+ const typeofType = typeof type;
+ if (typeofType === 'string') {
+ return typeof value === type;
+ }
+
+ return value instanceof type;
+ });
+
+ if (!valid) {
+ const names = types.map(type => typeof type === 'string' ? type : type.name);
+
+ throw new TypeError(`Expected '${name}' to be a type of ${names.join(' or ')}, got ${typeof value}`);
+ }
+};
+
+module.exports = checkType;
+
+
+/***/ }),
+
+/***/ 9237:
+/***/ ((module) => {
+
+
+
+module.exports = stream => {
+ if (stream.listenerCount('error') !== 0) {
+ return stream;
+ }
+
+ stream.__destroy = stream._destroy;
+ stream._destroy = (...args) => {
+ const callback = args.pop();
+
+ stream.__destroy(...args, async error => {
+ await Promise.resolve();
+ callback(error);
+ });
+ };
+
+ const onError = error => {
+ // eslint-disable-next-line promise/prefer-await-to-then
+ Promise.resolve().then(() => {
+ stream.emit('error', error);
+ });
+ };
+
+ stream.once('error', onError);
+
+ // eslint-disable-next-line promise/prefer-await-to-then
+ Promise.resolve().then(() => {
+ stream.off('error', onError);
+ });
+
+ return stream;
+};
+
+
/***/ }),
/***/ 7087:
/***/ ((module) => {
-"use strict";
/* istanbul ignore file: https://github.com/nodejs/node/blob/master/lib/internal/errors.js */
@@ -8619,25 +4945,31 @@ makeError(TypeError, 'ERR_INVALID_ARG_TYPE', args => {
return `The "${args[0]}" ${type} must be ${isManyTypes ? 'one of' : 'of'} type ${valid}. Received ${typeof args[2]}`;
});
-makeError(TypeError, 'ERR_INVALID_PROTOCOL', args => {
- return `Protocol "${args[0]}" not supported. Expected "${args[1]}"`;
-});
+makeError(TypeError, 'ERR_INVALID_PROTOCOL', args =>
+ `Protocol "${args[0]}" not supported. Expected "${args[1]}"`
+);
-makeError(Error, 'ERR_HTTP_HEADERS_SENT', args => {
- return `Cannot ${args[0]} headers after they are sent to the client`;
-});
+makeError(Error, 'ERR_HTTP_HEADERS_SENT', args =>
+ `Cannot ${args[0]} headers after they are sent to the client`
+);
-makeError(TypeError, 'ERR_INVALID_HTTP_TOKEN', args => {
- return `${args[0]} must be a valid HTTP token [${args[1]}]`;
-});
+makeError(TypeError, 'ERR_INVALID_HTTP_TOKEN', args =>
+ `${args[0]} must be a valid HTTP token [${args[1]}]`
+);
-makeError(TypeError, 'ERR_HTTP_INVALID_HEADER_VALUE', args => {
- return `Invalid value "${args[0]} for header "${args[1]}"`;
-});
+makeError(TypeError, 'ERR_HTTP_INVALID_HEADER_VALUE', args =>
+ `Invalid value "${args[0]} for header "${args[1]}"`
+);
-makeError(TypeError, 'ERR_INVALID_CHAR', args => {
- return `Invalid character in ${args[0]} [${args[1]}]`;
-});
+makeError(TypeError, 'ERR_INVALID_CHAR', args =>
+ `Invalid character in ${args[0]} [${args[1]}]`
+);
+
+makeError(
+ Error,
+ 'ERR_HTTP2_NO_SOCKET_MANIPULATION',
+ 'HTTP/2 sockets should not be directly manipulated (e.g. read and written)'
+);
/***/ }),
@@ -8645,7 +4977,6 @@ makeError(TypeError, 'ERR_INVALID_CHAR', args => {
/***/ 1199:
/***/ ((module) => {
-"use strict";
module.exports = header => {
@@ -8661,12 +4992,26 @@ 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) => {
@@ -8678,34 +5023,152 @@ module.exports = (from, to, events) => {
/***/ }),
-/***/ 2686:
-/***/ ((module) => {
+/***/ 9404:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-"use strict";
-/* istanbul ignore file: https://github.com/nodejs/node/blob/a91293d4d9ab403046ab5eb022332e4e3d249bd3/lib/internal/url.js#L1257 */
+const {ERR_HTTP2_NO_SOCKET_MANIPULATION} = __nccwpck_require__(7087);
-module.exports = url => {
- const options = {
- protocol: url.protocol,
- hostname: typeof url.hostname === 'string' && url.hostname.startsWith('[') ? url.hostname.slice(1, -1) : url.hostname,
- host: url.host,
- hash: url.hash,
- search: url.search,
- pathname: url.pathname,
- href: url.href,
- path: `${url.pathname || ''}${url.search || ''}`
- };
+/* istanbul ignore file */
+/* https://github.com/nodejs/node/blob/6eec858f34a40ffa489c1ec54bb24da72a28c781/lib/internal/http2/compat.js#L195-L272 */
- if (typeof url.port === 'string' && url.port.length !== 0) {
- options.port = Number(url.port);
+const proxySocketHandler = {
+ has(stream, property) {
+ // Replaced [kSocket] with .socket
+ const reference = stream.session === undefined ? stream : stream.session.socket;
+ return (property in stream) || (property in reference);
+ },
+
+ get(stream, property) {
+ switch (property) {
+ case 'on':
+ case 'once':
+ case 'end':
+ case 'emit':
+ case 'destroy':
+ return stream[property].bind(stream);
+ case 'writable':
+ case 'destroyed':
+ return stream[property];
+ case 'readable':
+ if (stream.destroyed) {
+ return false;
+ }
+
+ return stream.readable;
+ case 'setTimeout': {
+ const {session} = stream;
+ if (session !== undefined) {
+ return session.setTimeout.bind(session);
+ }
+
+ return stream.setTimeout.bind(stream);
+ }
+
+ case 'write':
+ case 'read':
+ case 'pause':
+ case 'resume':
+ throw new ERR_HTTP2_NO_SOCKET_MANIPULATION();
+ default: {
+ // Replaced [kSocket] with .socket
+ const reference = stream.session === undefined ? stream : stream.session.socket;
+ const value = reference[property];
+
+ return typeof value === 'function' ? value.bind(reference) : value;
+ }
+ }
+ },
+
+ getPrototypeOf(stream) {
+ if (stream.session !== undefined) {
+ // Replaced [kSocket] with .socket
+ return Reflect.getPrototypeOf(stream.session.socket);
+ }
+
+ return Reflect.getPrototypeOf(stream);
+ },
+
+ set(stream, property, value) {
+ switch (property) {
+ case 'writable':
+ case 'readable':
+ case 'destroyed':
+ case 'on':
+ case 'once':
+ case 'end':
+ case 'emit':
+ case 'destroy':
+ stream[property] = value;
+ return true;
+ case 'setTimeout': {
+ const {session} = stream;
+ if (session === undefined) {
+ stream.setTimeout = value;
+ } else {
+ session.setTimeout = value;
+ }
+
+ return true;
+ }
+
+ case 'write':
+ case 'read':
+ case 'pause':
+ case 'resume':
+ throw new ERR_HTTP2_NO_SOCKET_MANIPULATION();
+ default: {
+ // Replaced [kSocket] with .socket
+ const reference = stream.session === undefined ? stream : stream.session.socket;
+ reference[property] = value;
+ return true;
+ }
+ }
+ }
+};
+
+module.exports = proxySocketHandler;
+
+
+/***/ }),
+
+/***/ 4592:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+
+const {ERR_INVALID_HTTP_TOKEN} = __nccwpck_require__(7087);
+const isRequestPseudoHeader = __nccwpck_require__(1199);
+
+const isValidHttpToken = /^[\^`\-\w!#$%&*+.|~]+$/;
+
+module.exports = name => {
+ if (typeof name !== 'string' || (!isValidHttpToken.test(name) && !isRequestPseudoHeader(name))) {
+ throw new ERR_INVALID_HTTP_TOKEN('Header name', name);
+ }
+};
+
+
+/***/ }),
+
+/***/ 3549:
+/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+
+
+const {
+ ERR_HTTP_INVALID_HEADER_VALUE,
+ ERR_INVALID_CHAR
+} = __nccwpck_require__(7087);
+
+const isInvalidHeaderValue = /[^\t\u0020-\u007E\u0080-\u00FF]/;
+
+module.exports = (name, value) => {
+ if (typeof value === 'undefined') {
+ throw new ERR_HTTP_INVALID_HEADER_VALUE(value, name);
}
- if (url.username || url.password) {
- options.auth = `${url.username || ''}:${url.password || ''}`;
+ if (isInvalidHeaderValue.test(value)) {
+ throw new ERR_INVALID_CHAR('header content', name);
}
-
- return options;
};
@@ -8774,7544 +5237,12 @@ 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;
@@ -16558,105 +5489,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}};
-exports.SecureRandom = SecureRandom;
-exports.rng_seed_time = rng_seed_time;
+__webpack_unused_export__ = SecureRandom;
+__webpack_unused_export__ = rng_seed_time;
-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;
+__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.Cipher = KJUR.crypto.Cipher;
-exports.KEYUTIL = KEYUTIL;
-exports.ASN1HEX = ASN1HEX;
-exports.X509 = X509;
-exports.X509CRL = X509CRL;
-exports.CryptoJS = CryptoJS;
+exports.KZ = KEYUTIL;
+__webpack_unused_export__ = ASN1HEX;
+__webpack_unused_export__ = X509;
+__webpack_unused_export__ = X509CRL;
+__webpack_unused_export__ = CryptoJS;
// ext/base64.js
-exports.b64tohex = b64tohex;
-exports.b64toBA = b64toBA;
+__webpack_unused_export__ = b64tohex;
+__webpack_unused_export__ = b64toBA;
// ext/ec*.js
-exports.ECFieldElementFp = ECFieldElementFp;
-exports.ECPointFp = ECPointFp;
-exports.ECCurveFp = ECCurveFp;
+__webpack_unused_export__ = ECFieldElementFp;
+__webpack_unused_export__ = ECPointFp;
+__webpack_unused_export__ = ECCurveFp;
// base64x.js
-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;
+__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;
// name spaces
-exports.KJUR = KJUR;
-exports.crypto = KJUR.crypto;
-exports.asn1 = KJUR.asn1;
-exports.jws = KJUR.jws;
-exports.lang = KJUR.lang;
+exports.fs = KJUR;
+__webpack_unused_export__ = KJUR.crypto;
+__webpack_unused_export__ = KJUR.asn1;
+__webpack_unused_export__ = KJUR.jws;
+__webpack_unused_export__ = KJUR.lang;
-exports.VERSION = VERSION;
-exports.VERSION_FULL = VERSION_FULL;
+__webpack_unused_export__ = VERSION;
+__webpack_unused_export__ = VERSION_FULL;
@@ -16667,12 +5598,10 @@ exports.VERSION_FULL = 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 = {
@@ -16721,13 +5650,10 @@ class Keyv extends EventEmitter {
this.opts.store = loadStore(adapterOptions);
}
- if (this.opts.compress) {
- const brotli = compressBrotli(this.opts.compress.opts);
- this.opts.serialize = async ({value, expires}) => brotli.serialize({value: await brotli.compress(value), expires});
- this.opts.deserialize = async data => {
- const {value, expires} = brotli.deserialize(data);
- return {value: await brotli.decompress(value), expires};
- };
+ if (this.opts.compression) {
+ const compression = this.opts.compression;
+ this.opts.serialize = compression.serialize.bind(compression);
+ this.opts.deserialize = compression.deserialize.bind(compression);
}
if (typeof this.opts.store.on === 'function' && emitErrors) {
@@ -16740,7 +5666,7 @@ class Keyv extends EventEmitter {
for await (const [key, raw] of typeof iterator === 'function'
? iterator(this.opts.store.namespace)
: iterator) {
- const data = this.opts.deserialize(raw);
+ const data = await this.opts.deserialize(raw);
if (this.opts.store.namespace && !key.includes(this.opts.store.namespace)) {
continue;
}
@@ -16792,7 +5718,7 @@ class Keyv extends EventEmitter {
for (const key of keyPrefixed) {
promises.push(Promise.resolve()
.then(() => store.get(key))
- .then(data => (typeof data === 'string') ? this.opts.deserialize(data) : data)
+ .then(data => (typeof data === 'string') ? this.opts.deserialize(data) : (this.opts.compression ? this.opts.deserialize(data) : data))
.then(data => {
if (data === undefined || data === null) {
return undefined;
@@ -16814,44 +5740,35 @@ class Keyv extends EventEmitter {
data.push(value.value);
}
- return data.every(x => x === undefined) ? [] : data;
+ return data;
});
}
return Promise.resolve()
.then(() => isArray ? store.getMany(keyPrefixed) : store.get(keyPrefixed))
- .then(data => (typeof data === 'string') ? this.opts.deserialize(data) : data)
+ .then(data => (typeof data === 'string') ? this.opts.deserialize(data) : (this.opts.compression ? this.opts.deserialize(data) : data))
.then(data => {
if (data === undefined || data === null) {
return undefined;
}
if (isArray) {
- const result = [];
-
- if (data.length === 0) {
- return [];
- }
-
- for (let row of data) {
+ return data.map((row, index) => {
if ((typeof row === 'string')) {
row = this.opts.deserialize(row);
}
if (row === undefined || row === null) {
- result.push(undefined);
- continue;
+ return undefined;
}
if (typeof row.expires === 'number' && Date.now() > row.expires) {
- this.delete(key).then(() => undefined);
- result.push(undefined);
- } else {
- result.push((options && options.raw) ? row : row.value);
+ this.delete(key[index]).then(() => undefined);
+ return undefined;
}
- }
- return result.every(x => x === undefined) ? [] : result;
+ return (options && options.raw) ? row : row.value;
+ });
}
if (typeof data.expires === 'number' && Date.now() > data.expires) {
@@ -16944,537 +5861,132 @@ module.exports = Keyv;
/***/ }),
-/***/ 9662:
+/***/ 9273:
/***/ ((module) => {
-"use strict";
-
-module.exports = object => {
- const result = {};
-
- for (const [key, value] of Object.entries(object)) {
- result[key.toLowerCase()] = value;
- }
-
- return result;
-};
-/***/ }),
-
-/***/ 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;
+class QuickLRU {
+ constructor(options = {}) {
+ if (!(options.maxSize && options.maxSize > 0)) {
+ throw new TypeError('`maxSize` must be a number greater than 0');
}
- toStream[prop] = typeof fromStream[prop] === 'function' ? fromStream[prop].bind(fromStream) : fromStream[prop];
- }
-};
-
-
-/***/ }),
-
-/***/ 7952:
-/***/ ((module) => {
-
-"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}`);
+ this.maxSize = options.maxSize;
+ this.onEviction = options.onEviction;
+ this.cache = new Map();
+ this.oldCache = new Map();
+ this._size = 0;
}
- let {type, data, hash} = match.groups;
- const mediaType = type.split(';');
- hash = stripHash ? '' : hash;
+ _set(key, value) {
+ this.cache.set(key, value);
+ this._size++;
- let isBase64 = false;
- if (mediaType[mediaType.length - 1] === 'base64') {
- mediaType.pop();
- isBase64 = true;
- }
+ if (this._size >= this.maxSize) {
+ this._size = 0;
- // Lowercase MIME type
- const mimeType = (mediaType.shift() || '').toLowerCase();
- const attributes = mediaType
- .map(attribute => {
- let [key, value = ''] = attribute.split('=').map(string => string.trim());
-
- // Lowercase `charset`
- if (key === 'charset') {
- value = value.toLowerCase();
-
- if (value === DATA_URL_DEFAULT_CHARSET) {
- return '';
+ if (typeof this.onEviction === 'function') {
+ for (const [key, value] of this.oldCache.entries()) {
+ this.onEviction(key, value);
}
}
- return `${key}${value ? `=${value}` : ''}`;
- })
- .filter(Boolean);
-
- const normalizedMediaType = [
- ...attributes
- ];
-
- if (isBase64) {
- normalizedMediaType.push('base64');
- }
-
- if (normalizedMediaType.length !== 0 || (mimeType && mimeType !== DATA_URL_DEFAULT_MIME_TYPE)) {
- normalizedMediaType.unshift(mimeType);
- }
-
- return `data:${normalizedMediaType.join(';')},${isBase64 ? data.trim() : data}${hash ? `#${hash}` : ''}`;
-};
-
-const normalizeUrl = (urlString, options) => {
- options = {
- defaultProtocol: 'http:',
- normalizeProtocol: true,
- forceHttp: false,
- forceHttps: false,
- stripAuthentication: true,
- stripHash: false,
- stripTextFragment: true,
- stripWWW: true,
- removeQueryParameters: [/^utm_\w+/i],
- removeTrailingSlash: true,
- removeSingleSlash: true,
- removeDirectoryIndex: false,
- sortQueryParameters: true,
- ...options
- };
-
- urlString = urlString.trim();
-
- // Data URL
- if (/^data:/i.test(urlString)) {
- return normalizeDataURL(urlString, options);
- }
-
- if (/^view-source:/i.test(urlString)) {
- throw new Error('`view-source:` is not supported as it is a non-standard protocol');
- }
-
- const hasRelativeProtocol = urlString.startsWith('//');
- const isRelativeUrl = !hasRelativeProtocol && /^\.*\//.test(urlString);
-
- // Prepend protocol
- if (!isRelativeUrl) {
- urlString = urlString.replace(/^(?!(?:\w+:)?\/\/)|^\/\//, options.defaultProtocol);
- }
-
- const urlObj = new URL(urlString);
-
- if (options.forceHttp && options.forceHttps) {
- throw new Error('The `forceHttp` and `forceHttps` options cannot be used together');
- }
-
- if (options.forceHttp && urlObj.protocol === 'https:') {
- urlObj.protocol = 'http:';
- }
-
- if (options.forceHttps && urlObj.protocol === 'http:') {
- urlObj.protocol = 'https:';
- }
-
- // Remove auth
- if (options.stripAuthentication) {
- urlObj.username = '';
- urlObj.password = '';
- }
-
- // Remove hash
- if (options.stripHash) {
- urlObj.hash = '';
- } else if (options.stripTextFragment) {
- urlObj.hash = urlObj.hash.replace(/#?:~:text.*?$/i, '');
- }
-
- // Remove duplicate slashes if not preceded by a protocol
- if (urlObj.pathname) {
- urlObj.pathname = urlObj.pathname.replace(/(? 0) {
- let pathComponents = urlObj.pathname.split('/');
- const lastComponent = pathComponents[pathComponents.length - 1];
-
- if (testParameter(lastComponent, options.removeDirectoryIndex)) {
- pathComponents = pathComponents.slice(0, pathComponents.length - 1);
- urlObj.pathname = pathComponents.slice(1).join('/') + '/';
+ this.oldCache = this.cache;
+ this.cache = new Map();
}
}
- if (urlObj.hostname) {
- // Remove trailing dot
- urlObj.hostname = urlObj.hostname.replace(/\.$/, '');
+ get(key) {
+ if (this.cache.has(key)) {
+ return this.cache.get(key);
+ }
- // Remove `www.`
- if (options.stripWWW && /^www\.(?!www\.)(?:[a-z\-\d]{1,63})\.(?:[a-z.\-\d]{2,63})$/.test(urlObj.hostname)) {
- // Each label should be max 63 at length (min: 1).
- // Source: https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_host_names
- // Each TLD should be up to 63 characters long (min: 2).
- // It is technically possible to have a single character TLD, but none currently exist.
- urlObj.hostname = urlObj.hostname.replace(/^www\./, '');
+ if (this.oldCache.has(key)) {
+ const value = this.oldCache.get(key);
+ this.oldCache.delete(key);
+ this._set(key, value);
+ return value;
}
}
- // Remove query unwanted parameters
- if (Array.isArray(options.removeQueryParameters)) {
- for (const key of [...urlObj.searchParams.keys()]) {
- if (testParameter(key, options.removeQueryParameters)) {
- urlObj.searchParams.delete(key);
+ set(key, value) {
+ if (this.cache.has(key)) {
+ this.cache.set(key, value);
+ } else {
+ this._set(key, value);
+ }
+
+ return this;
+ }
+
+ has(key) {
+ return this.cache.has(key) || this.oldCache.has(key);
+ }
+
+ peek(key) {
+ if (this.cache.has(key)) {
+ return this.cache.get(key);
+ }
+
+ if (this.oldCache.has(key)) {
+ return this.oldCache.get(key);
+ }
+ }
+
+ delete(key) {
+ const deleted = this.cache.delete(key);
+ if (deleted) {
+ this._size--;
+ }
+
+ return this.oldCache.delete(key) || deleted;
+ }
+
+ clear() {
+ this.cache.clear();
+ this.oldCache.clear();
+ this._size = 0;
+ }
+
+ * keys() {
+ for (const [key] of this) {
+ yield key;
+ }
+ }
+
+ * values() {
+ for (const [, value] of this) {
+ yield value;
+ }
+ }
+
+ * [Symbol.iterator]() {
+ for (const item of this.cache) {
+ yield item;
+ }
+
+ for (const item of this.oldCache) {
+ const [key] = item;
+ if (!this.cache.has(key)) {
+ yield item;
}
}
}
- if (options.removeQueryParameters === true) {
- urlObj.search = '';
- }
-
- // Sort query parameters
- if (options.sortQueryParameters) {
- urlObj.searchParams.sort();
- }
-
- if (options.removeTrailingSlash) {
- urlObj.pathname = urlObj.pathname.replace(/\/$/, '');
- }
-
- const oldUrlString = urlString;
-
- // Take advantage of many of the Node `url` normalizations
- urlString = urlObj.toString();
-
- if (!options.removeSingleSlash && urlObj.pathname === '/' && !oldUrlString.endsWith('/') && urlObj.hash === '') {
- urlString = urlString.replace(/\/$/, '');
- }
-
- // Remove ending `/` unless removeSingleSlash is false
- if ((options.removeTrailingSlash || urlObj.pathname === '/') && urlObj.hash === '' && options.removeSingleSlash) {
- urlString = urlString.replace(/\/$/, '');
- }
-
- // Restore relative protocol, if applicable
- if (hasRelativeProtocol && !options.normalizeProtocol) {
- urlString = urlString.replace(/^http:\/\//, '//');
- }
-
- // Remove http/https
- if (options.stripProtocol) {
- urlString = urlString.replace(/^(?:https?:)?\/\//, '');
- }
-
- return urlString;
-};
-
-module.exports = normalizeUrl;
-
-
-/***/ }),
-
-/***/ 1223:
-/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-
-var wrappy = __nccwpck_require__(2940)
-module.exports = wrappy(once)
-module.exports.strict = wrappy(onceStrict)
-
-once.proto = once(function () {
- Object.defineProperty(Function.prototype, 'once', {
- value: function () {
- return once(this)
- },
- configurable: true
- })
-
- Object.defineProperty(Function.prototype, 'onceStrict', {
- value: function () {
- return onceStrict(this)
- },
- configurable: true
- })
-})
-
-function once (fn) {
- var f = function () {
- if (f.called) return f.value
- f.called = true
- return f.value = fn.apply(this, arguments)
- }
- f.called = false
- return f
-}
-
-function onceStrict (fn) {
- var f = function () {
- if (f.called)
- throw new Error(f.onceError)
- f.called = true
- return f.value = fn.apply(this, arguments)
- }
- var name = fn.name || 'Function wrapped with `once`'
- f.onceError = name + " shouldn't be called more than once"
- f.called = false
- return f
-}
-
-
-/***/ }),
-
-/***/ 9072:
-/***/ ((module) => {
-
-"use strict";
-
-
-class CancelError extends Error {
- constructor(reason) {
- super(reason || 'Promise was canceled');
- this.name = 'CancelError';
- }
-
- get isCanceled() {
- return true;
- }
-}
-
-class PCancelable {
- static fn(userFn) {
- return (...arguments_) => {
- return new PCancelable((resolve, reject, onCancel) => {
- arguments_.push(onCancel);
- // eslint-disable-next-line promise/prefer-await-to-then
- userFn(...arguments_).then(resolve, reject);
- });
- };
- }
-
- constructor(executor) {
- this._cancelHandlers = [];
- this._isPending = true;
- this._isCanceled = false;
- this._rejectOnCancel = true;
-
- this._promise = new Promise((resolve, reject) => {
- this._reject = reject;
-
- const onResolve = value => {
- this._isPending = false;
- resolve(value);
- };
-
- const onReject = error => {
- this._isPending = false;
- reject(error);
- };
-
- const onCancel = handler => {
- if (!this._isPending) {
- throw new Error('The `onCancel` handler was attached after the promise settled.');
- }
-
- this._cancelHandlers.push(handler);
- };
-
- Object.defineProperties(onCancel, {
- shouldReject: {
- get: () => this._rejectOnCancel,
- set: boolean => {
- this._rejectOnCancel = boolean;
- }
- }
- });
-
- return executor(onResolve, onReject, onCancel);
- });
- }
-
- then(onFulfilled, onRejected) {
- // eslint-disable-next-line promise/prefer-await-to-then
- return this._promise.then(onFulfilled, onRejected);
- }
-
- catch(onRejected) {
- return this._promise.catch(onRejected);
- }
-
- finally(onFinally) {
- return this._promise.finally(onFinally);
- }
-
- cancel(reason) {
- if (!this._isPending || this._isCanceled) {
- return;
- }
-
- if (this._cancelHandlers.length > 0) {
- try {
- for (const handler of this._cancelHandlers) {
- handler();
- }
- } catch (error) {
- this._reject(error);
+ get size() {
+ let oldCacheSize = 0;
+ for (const key of this.oldCache.keys()) {
+ if (!this.cache.has(key)) {
+ oldCacheSize++;
}
}
- this._isCanceled = true;
- if (this._rejectOnCancel) {
- this._reject(new CancelError(reason));
- }
- }
-
- get isCanceled() {
- return this._isCanceled;
+ return Math.min(this._size + oldCacheSize, this.maxSize);
}
}
-Object.setPrototypeOf(PCancelable.prototype, Promise.prototype);
-
-module.exports = PCancelable;
-module.exports.CancelError = CancelError;
-
-
-/***/ }),
-
-/***/ 8341:
-/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-
-var once = __nccwpck_require__(1223)
-var eos = __nccwpck_require__(1205)
-var fs = __nccwpck_require__(7147) // we only need fs to get the ReadStream and WriteStream prototypes
-
-var noop = function () {}
-var ancient = /^v?\.0/.test(process.version)
-
-var isFn = function (fn) {
- return typeof fn === 'function'
-}
-
-var isFS = function (stream) {
- if (!ancient) return false // newer node version do not need to care about fs is a special way
- if (!fs) return false // browser
- return (stream instanceof (fs.ReadStream || noop) || stream instanceof (fs.WriteStream || noop)) && isFn(stream.close)
-}
-
-var isRequest = function (stream) {
- return stream.setHeader && isFn(stream.abort)
-}
-
-var destroyer = function (stream, reading, writing, callback) {
- callback = once(callback)
-
- var closed = false
- stream.on('close', function () {
- closed = true
- })
-
- eos(stream, {readable: reading, writable: writing}, function (err) {
- if (err) return callback(err)
- closed = true
- callback()
- })
-
- var destroyed = false
- return function (err) {
- if (closed) return
- if (destroyed) return
- destroyed = true
-
- if (isFS(stream)) return stream.close(noop) // use close for fs streams to avoid fd leaks
- if (isRequest(stream)) return stream.abort() // request.destroy just do .end - .abort is what we want
-
- if (isFn(stream.destroy)) return stream.destroy()
-
- callback(err || new Error('stream was destroyed'))
- }
-}
-
-var call = function (fn) {
- fn()
-}
-
-var pipe = function (from, to) {
- return from.pipe(to)
-}
-
-var pump = function () {
- var streams = Array.prototype.slice.call(arguments)
- var callback = isFn(streams[streams.length - 1] || noop) && streams.pop() || noop
-
- if (Array.isArray(streams[0])) streams = streams[0]
- if (streams.length < 2) throw new Error('pump requires two streams per minimum')
-
- var error
- var destroys = streams.map(function (stream, i) {
- var reading = i < streams.length - 1
- var writing = i > 0
- return destroyer(stream, reading, writing, function (err) {
- if (!error) error = err
- if (err) destroys.forEach(call)
- if (reading) return
- destroys.forEach(call)
- callback(error)
- })
- })
-
- return streams.reduce(pipe)
-}
-
-module.exports = pump
+module.exports = QuickLRU;
/***/ }),
@@ -17482,67 +5994,51 @@ module.exports = pump
/***/ 6624:
/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-"use strict";
const tls = __nccwpck_require__(4404);
-module.exports = (options = {}) => new Promise((resolve, reject) => {
- const socket = tls.connect(options, () => {
+module.exports = (options = {}, connect = tls.connect) => new Promise((resolve, reject) => {
+ let timeout = false;
+
+ let socket;
+
+ const callback = async () => {
+ await socketPromise;
+
+ socket.off('timeout', onTimeout);
+ socket.off('error', reject);
+
if (options.resolveSocket) {
- socket.off('error', reject);
- resolve({alpnProtocol: socket.alpnProtocol, socket});
+ resolve({alpnProtocol: socket.alpnProtocol, socket, timeout});
+
+ if (timeout) {
+ await Promise.resolve();
+ socket.emit('timeout');
+ }
} else {
socket.destroy();
- resolve({alpnProtocol: socket.alpnProtocol});
+ resolve({alpnProtocol: socket.alpnProtocol, timeout});
}
- });
+ };
- socket.on('error', reject);
+ const onTimeout = async () => {
+ timeout = true;
+ callback();
+ };
+
+ const socketPromise = (async () => {
+ try {
+ socket = await connect(options, callback);
+
+ socket.on('error', reject);
+ socket.once('timeout', onTimeout);
+ } catch (error) {
+ reject(error);
+ }
+ })();
});
-/***/ }),
-
-/***/ 9004:
-/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-
-"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:
@@ -17556,7 +6052,6 @@ module.exports = __nccwpck_require__(4219);
/***/ 4219:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-"use strict";
var net = __nccwpck_require__(1808);
@@ -17828,7 +6323,6 @@ exports.debug = debug; // for test
/***/ 5840:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -17914,7 +6408,6 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
/***/ 4569:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -17944,7 +6437,6 @@ exports["default"] = _default;
/***/ 5332:
/***/ ((__unused_webpack_module, exports) => {
-"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -17959,7 +6451,6 @@ exports["default"] = _default;
/***/ 2746:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -18011,7 +6502,6 @@ exports["default"] = _default;
/***/ 814:
/***/ ((__unused_webpack_module, exports) => {
-"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -18026,7 +6516,6 @@ exports["default"] = _default;
/***/ 807:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -18057,7 +6546,6 @@ function rng() {
/***/ 5274:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -18087,7 +6575,6 @@ exports["default"] = _default;
/***/ 8950:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -18133,7 +6620,6 @@ exports["default"] = _default;
/***/ 8628:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -18247,7 +6733,6 @@ exports["default"] = _default;
/***/ 6409:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -18270,7 +6755,6 @@ exports["default"] = _default;
/***/ 5998:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -18355,7 +6839,6 @@ function _default(name, version, hashfunc) {
/***/ 5122:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -18399,7 +6882,6 @@ exports["default"] = _default;
/***/ 9120:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -18422,7 +6904,6 @@ exports["default"] = _default;
/***/ 6900:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -18446,7 +6927,6 @@ exports["default"] = _default;
/***/ 1595:
/***/ ((__unused_webpack_module, exports, __nccwpck_require__) => {
-"use strict";
Object.defineProperty(exports, "__esModule", ({
@@ -18471,288 +6951,7151 @@ exports["default"] = _default;
/***/ }),
-/***/ 2940:
+/***/ 9491:
/***/ ((module) => {
-// Returns a wrapper function that returns a wrapped callback
-// The wrapper function should do some stuff, and return a
-// presumably different callback function.
-// This makes sure that own properties are retained, so that
-// decorations and such are not lost along the way.
-module.exports = wrappy
-function wrappy (fn, cb) {
- if (fn && cb) return wrappy(fn)(cb)
+module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("assert");
- if (typeof fn !== 'function')
- throw new TypeError('need wrapper function')
+/***/ }),
- Object.keys(fn).forEach(function (k) {
- wrapper[k] = fn[k]
- })
+/***/ 4300:
+/***/ ((module) => {
- return wrapper
+module.exports = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("buffer");
- function wrapper() {
- var args = new Array(arguments.length)
- for (var i = 0; i < args.length; i++) {
- args[i] = arguments[i]
+/***/ }),
+
+/***/ 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';
}
- 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]
- })
+ if (isObjectTypeName(objectTypeName)) {
+ return objectTypeName;
}
- return ret
+ 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);
}
}
-
-/***/ }),
-
-/***/ 3348:
-/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-
-// @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}` : ''}`);
+// 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."
+ );
};
-/** @typedef {Object} SecretRequest
- * @property {string} path
- * @property {string} envVarName
- * @property {string} outputVarName
- * @property {string} selector
-*/
+// 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;
+}
-/**
- * Parses a secrets input string into key paths and their resulting environment variable name.
- * @param {string} secretsInput
- */
-function parseSecretsInput(secretsInput) {
- if (!secretsInput) {
- return []
+// 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
+ }
+);
- const secrets = secretsInput
- .split(';')
- .filter(key => !!key)
- .map(key => key.trim())
- .filter(key => key.length !== 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])
+);
- /** @type {SecretRequest[]} */
- const output = [];
- for (const secret of secrets) {
- let pathSpec = secret;
- let outputVarName = null;
+// src/util/escapeName.ts
+var escapeName = (name) => String(name).replace(/\r/g, "%0D").replace(/\n/g, "%0A").replace(/"/g, "%22");
- const renameSigilIndex = secret.lastIndexOf('|');
- if (renameSigilIndex > -1) {
- pathSpec = secret.substring(0, renameSigilIndex).trim();
- outputVarName = secret.substring(renameSigilIndex + 1).trim();
+// 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
+);
- if (outputVarName.length < 1) {
- throw Error(`You must provide a value when mapping a secret to a name. Input: "${secret}"`);
+// 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();
}
-
- 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}"`);
+ unhandleAll();
+ };
+ request.once('error', error => {
+ cancelTimeouts();
+ // Save original behavior
+ /* istanbul ignore next */
+ if (request.listenerCount('error') === 0) {
+ throw error;
}
-
- 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
+ });
+ if (delays.request !== undefined) {
+ const cancelTimeout = addTimeout(delays.request, timeoutHandler, 'request');
+ once(request, 'response', (response) => {
+ once(response, 'end', cancelTimeout);
});
}
- 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);
+ 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);
+ });
+ }
}
- return map;
- }, new Map());
+ 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;
}
-module.exports = {
- exportSecrets,
- parseSecretsInput,
- parseHeadersInput,
+;// 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
-/***/ }),
-/***/ 4915:
-/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
+// 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 rsasign = __nccwpck_require__(7175);
-const fs = __nccwpck_require__(7147);
-const { default: got } = __nccwpck_require__(3061);
+
+
+
+
const defaultKubernetesTokenPath = '/var/run/secrets/kubernetes.io/serviceaccount/token'
/***
@@ -18767,7 +14110,7 @@ async function retrieveToken(method, client) {
switch (method) {
case 'approle': {
const vaultRoleId = core.getInput('roleId', { required: true });
- const vaultSecretId = core.getInput('secretId', { required: true });
+ const vaultSecretId = core.getInput('secretId', { required: false });
return await getClientToken(client, method, path, { role_id: vaultRoleId, secret_id: vaultSecretId });
}
case 'github': {
@@ -18795,7 +14138,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 = fs.readFileSync(tokenPath, 'utf8')
+ const data = external_fs_.readFileSync(tokenPath, 'utf8')
if (!(role && data) && data != "") {
throw new Error("Role Name must be set and a kubernetes token must set")
}
@@ -18833,7 +14176,7 @@ async function retrieveToken(method, client) {
function generateJwt(privateKey, keyPassword, ttl) {
const alg = 'RS256';
const header = { alg: alg, typ: 'JWT' };
- const now = rsasign.KJUR.jws.IntDate.getNow();
+ const now = jsrsasign/* KJUR.jws.IntDate.getNow */.fs.jws.IntDate.getNow();
const payload = {
iss: 'vault-action',
iat: now,
@@ -18846,8 +14189,8 @@ function generateJwt(privateKey, keyPassword, ttl) {
repository: process.env.GITHUB_REPOSITORY,
ref: process.env.GITHUB_REF
};
- const decryptedKey = rsasign.KEYUTIL.getKey(privateKey, keyPassword);
- return rsasign.KJUR.jws.JWS.sign(alg, JSON.stringify(header), JSON.stringify(payload), decryptedKey);
+ 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);
}
/***
@@ -18872,7 +14215,7 @@ async function getClientToken(client, method, path, payload) {
try {
response = await client.post(`${path}`, options);
} catch (err) {
- if (err instanceof got.HTTPError) {
+ if (err instanceof got_dist_source.HTTPError) {
throw Error(`failed to retrieve vault token. code: ${err.code}, message: ${err.message}, vaultResponse: ${JSON.stringify(err.response.body)}`)
} else {
throw err
@@ -18904,44 +14247,28 @@ 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
-/***/ 4438:
-/***/ ((module) => {
+const cjs_require_require = (0,external_module_namespaceObject.createRequire)(import.meta.url);
-const WILDCARD = '*';
+/* harmony default export */ const cjs_require = (cjs_require_require);
-module.exports = {
- WILDCARD
-};
+;// CONCATENATED MODULE: ./src/secrets.js
-/***/ }),
-/***/ 4351:
-/***/ ((module, __unused_webpack_exports, __nccwpck_require__) => {
-const auth = __nccwpck_require__(4915);
-const secrets = __nccwpck_require__(8452);
-module.exports = {
- auth,
- secrets
-};
+// ncc doesn't compile jsonata imports properly, so we must use our own custom require
-/***/ }),
+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
@@ -18984,7 +14311,7 @@ async function getSecrets(secretRequests, client, ignoreNotFound) {
} catch (error) {
const {response} = error;
if (response?.statusCode === 404) {
- notFoundMsg = `Unable to retrieve result for "${path}" because it was not found: ${response.body.trim()}`;
+ let 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}`);
@@ -19105,219 +14432,237 @@ 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;
-}
-module.exports = {
- normalizeOutputKey
+
+
+
+
+
+// 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}` : ''}`);
+ }
};
+/** @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 []
+ }
-/***/ 9491:
-/***/ ((module) => {
+ const secrets = secretsInput
+ .split(';')
+ .filter(key => !!key)
+ .map(key => key.trim())
+ .filter(key => key.length !== 0);
-"use strict";
-module.exports = require("assert");
+ /** @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();
-/***/ 4300:
-/***/ ((module) => {
+ if (outputVarName.length < 1) {
+ throw Error(`You must provide a value when mapping a secret to a name. Input: "${secret}"`);
+ }
+ }
-"use strict";
-module.exports = require("buffer");
+ 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}"`);
+ }
-/***/ 6113:
-/***/ ((module) => {
+ const [path, selectorQuoted] = pathParts;
-"use strict";
-module.exports = require("crypto");
+ /** @type {any} */
+ const selectorAst = action_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}"`);
+ }
-/***/ 9523:
-/***/ ((module) => {
+ let envVarName = outputVarName;
+ if (!outputVarName) {
+ outputVarName = normalizeOutputKey(selector);
+ envVarName = normalizeOutputKey(selector, true);
+ }
-"use strict";
-module.exports = require("dns");
+ 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());
+}
-/***/ 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 {
@@ -19330,6 +14675,3 @@ const { exportSecrets } = __nccwpck_require__(3348);
})();
-module.exports = __webpack_exports__;
-/******/ })()
-;
\ No newline at end of file
diff --git a/dist/package.json b/dist/package.json
new file mode 100644
index 0000000..3dbc1ca
--- /dev/null
+++ b/dist/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
diff --git a/integrationTests/basic/approle_auth.test.js b/integrationTests/basic/approle_auth.test.js
index 39e9c8c..ea32cd7 100644
--- a/integrationTests/basic/approle_auth.test.js
+++ b/integrationTests/basic/approle_auth.test.js
@@ -1,11 +1,12 @@
-jest.mock('@actions/core');
-jest.mock('@actions/core/lib/command');
-const core = require('@actions/core');
+import { vi, describe, test, expect } from 'vitest';
-const got = require('got');
-const { when } = require('jest-when');
+vi.mock('@actions/core');
+import core from '@actions/core';
-const { exportSecrets } = require('../../src/action');
+import got from 'got';
+import { when } from 'jest-when'
+
+import { exportSecrets } from '../../src/action.js';
const vaultUrl = `http://${process.env.VAULT_HOST || 'localhost'}:${process.env.VAULT_PORT || '8200'}`;
const vaultToken = `${process.env.VAULT_TOKEN || 'testtoken'}`
@@ -102,7 +103,7 @@ describe('authenticate with approle', () => {
});
beforeEach(() => {
- jest.resetAllMocks();
+ vi.resetAllMocks();
when(core.getInput)
.calledWith('method', expect.anything())
diff --git a/integrationTests/basic/integration.test.js b/integrationTests/basic/integration.test.js
index 39a874e..479ed87 100644
--- a/integrationTests/basic/integration.test.js
+++ b/integrationTests/basic/integration.test.js
@@ -1,11 +1,12 @@
-jest.mock('@actions/core');
-jest.mock('@actions/core/lib/command');
-const core = require('@actions/core');
+import { vi, describe, test, expect } from 'vitest';
-const got = require('got');
-const { when } = require('jest-when');
+vi.mock('@actions/core');
+import core from '@actions/core';
-const { exportSecrets } = require('../../src/action');
+import got from 'got';
+import { when } from 'jest-when'
+
+import { exportSecrets } from '../../src/action.js';
const vaultUrl = `http://${process.env.VAULT_HOST || 'localhost'}:${process.env.VAULT_PORT || '8200'}`;
const vaultToken = `${process.env.VAULT_TOKEN || 'testtoken'}`
@@ -107,7 +108,7 @@ describe('integration', () => {
});
beforeEach(() => {
- jest.resetAllMocks();
+ vi.resetAllMocks();
when(core.getInput)
.calledWith('url', expect.anything())
diff --git a/integrationTests/basic/jest.config.js b/integrationTests/basic/jest.config.js
deleted file mode 100644
index 03d15be..0000000
--- a/integrationTests/basic/jest.config.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
- verbose: true
-};
diff --git a/integrationTests/basic/jwt_auth.test.js b/integrationTests/basic/jwt_auth.test.js
index df2703b..1384c47 100644
--- a/integrationTests/basic/jwt_auth.test.js
+++ b/integrationTests/basic/jwt_auth.test.js
@@ -1,17 +1,18 @@
-jest.mock('@actions/core');
-jest.mock('@actions/core/lib/command');
-const core = require('@actions/core');
-const rsasign = require('jsrsasign');
-const {
+import { vi, describe, test, expect } from 'vitest';
+
+vi.mock('@actions/core');
+import core from '@actions/core';
+import rsasign from 'jsrsasign';
+import {
privateRsaKey,
privateRsaKeyBase64,
publicRsaKey
-} = require('./rsa_keys');
+} from './rsa_keys.js';
-const got = require('got');
-const { when } = require('jest-when');
+import got from 'got';
+import { when } from 'jest-when'
-const { exportSecrets } = require('../../src/action');
+import { exportSecrets } from '../../src/action.js';
const vaultUrl = `http://${process.env.VAULT_HOST || 'localhost'}:${process.env.VAULT_PORT || '8200'}`;
const vaultToken = `${process.env.VAULT_TOKEN || 'testtoken'}`
@@ -139,7 +140,7 @@ describe('jwt auth', () => {
describe('authenticate with private key', () => {
beforeEach(() => {
- jest.resetAllMocks();
+ vi.resetAllMocks();
when(core.getInput)
.calledWith('url', expect.anything())
@@ -189,7 +190,7 @@ describe('jwt auth', () => {
})
beforeEach(() => {
- jest.resetAllMocks();
+ vi.resetAllMocks();
when(core.getInput)
.calledWith('url', expect.anything())
diff --git a/integrationTests/basic/rsa_keys.js b/integrationTests/basic/rsa_keys.js
index 13ea27d..598cdd9 100644
--- a/integrationTests/basic/rsa_keys.js
+++ b/integrationTests/basic/rsa_keys.js
@@ -42,7 +42,7 @@ LrJEY9tZaRF8xraMZiOcBcyAt6S/TS29HttJ6+zlhcWx34fItEZ8jA5gzhTmspOY
-----END PUBLIC KEY-----
`;
-module.exports = {
+export {
privateRsaKey,
privateRsaKeyBase64,
publicRsaKey
diff --git a/integrationTests/basic/userpass_auth.test.js b/integrationTests/basic/userpass_auth.test.js
index a8a9933..9a98b66 100644
--- a/integrationTests/basic/userpass_auth.test.js
+++ b/integrationTests/basic/userpass_auth.test.js
@@ -1,11 +1,12 @@
-jest.mock('@actions/core');
-jest.mock('@actions/core/lib/command');
-const core = require('@actions/core');
+import { vi, describe, test, expect } from 'vitest';
-const got = require('got');
-const { when } = require('jest-when');
+vi.mock('@actions/core');
+import core from '@actions/core';
-const { exportSecrets } = require('../../src/action');
+import got from 'got';
+import { when } from 'jest-when'
+
+import { exportSecrets } from '../../src/action.js';
const vaultUrl = `http://${process.env.VAULT_HOST || 'localhost'}:${process.env.VAULT_PORT || '8200'}`;
const vaultToken = `${process.env.VAULT_TOKEN || 'testtoken'}`
@@ -84,7 +85,7 @@ describe('authenticate with userpass', () => {
});
beforeEach(() => {
- jest.resetAllMocks();
+ vi.resetAllMocks();
when(core.getInput)
.calledWith('method', expect.anything())
diff --git a/integrationTests/basic/vitest.config.js b/integrationTests/basic/vitest.config.js
new file mode 100644
index 0000000..31378ee
--- /dev/null
+++ b/integrationTests/basic/vitest.config.js
@@ -0,0 +1,11 @@
+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 6db450a..d590b2a 100644
--- a/integrationTests/e2e-tls/e2e-tls.test.js
+++ b/integrationTests/e2e-tls/e2e-tls.test.js
@@ -1,3 +1,5 @@
+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
deleted file mode 100644
index 03d15be..0000000
--- a/integrationTests/e2e-tls/jest.config.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
- verbose: true
-};
diff --git a/integrationTests/e2e-tls/setup.js b/integrationTests/e2e-tls/setup.js
index 0e25646..c85fe04 100644
--- a/integrationTests/e2e-tls/setup.js
+++ b/integrationTests/e2e-tls/setup.js
@@ -1,5 +1,5 @@
-const got = require('got');
-const core = require('@actions/core');
+import got from 'got';
+import core from '@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
new file mode 100644
index 0000000..a4c36d0
--- /dev/null
+++ b/integrationTests/e2e-tls/vitest.config.js
@@ -0,0 +1,11 @@
+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 3924d04..c41db9b 100644
--- a/integrationTests/e2e/e2e.test.js
+++ b/integrationTests/e2e/e2e.test.js
@@ -1,3 +1,5 @@
+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
deleted file mode 100644
index 03d15be..0000000
--- a/integrationTests/e2e/jest.config.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
- verbose: true
-};
diff --git a/integrationTests/e2e/setup.js b/integrationTests/e2e/setup.js
index 33daf37..2a60038 100644
--- a/integrationTests/e2e/setup.js
+++ b/integrationTests/e2e/setup.js
@@ -1,4 +1,4 @@
-const got = require('got');
+import got from '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
new file mode 100644
index 0000000..6308301
--- /dev/null
+++ b/integrationTests/e2e/vitest.config.js
@@ -0,0 +1,11 @@
+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 9fa3f08..08adb06 100644
--- a/integrationTests/enterprise/enterprise.test.js
+++ b/integrationTests/enterprise/enterprise.test.js
@@ -1,11 +1,12 @@
-jest.mock('@actions/core');
-jest.mock('@actions/core/lib/command');
-const core = require('@actions/core');
+import { vi, describe, test, expect } from 'vitest';
-const got = require('got');
-const { when } = require('jest-when');
+vi.mock('@actions/core');
+import core from '@actions/core';
-const { exportSecrets } = require('../../src/action');
+import got from 'got';
+import { when } from 'jest-when'
+
+import { exportSecrets } from '../../src/action.js';
const vaultUrl = `http://${process.env.VAULT_HOST || 'localhost'}:${process.env.VAULT_PORT || '8201'}`;
const vaultToken = `${process.env.VAULT_TOKEN || 'testtoken'}`
@@ -41,7 +42,7 @@ describe('integration', () => {
});
beforeEach(() => {
- jest.resetAllMocks();
+ vi.resetAllMocks();
when(core.getInput)
.calledWith('url', expect.anything())
@@ -238,7 +239,7 @@ describe('authenticate with approle', () => {
});
beforeEach(() => {
- jest.resetAllMocks();
+ vi.resetAllMocks();
when(core.getInput)
.calledWith('method', expect.anything())
diff --git a/integrationTests/enterprise/jest.config.js b/integrationTests/enterprise/jest.config.js
deleted file mode 100644
index 03d15be..0000000
--- a/integrationTests/enterprise/jest.config.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
- verbose: true
-};
diff --git a/integrationTests/enterprise/vitest.config.js b/integrationTests/enterprise/vitest.config.js
new file mode 100644
index 0000000..0cc1646
--- /dev/null
+++ b/integrationTests/enterprise/vitest.config.js
@@ -0,0 +1,11 @@
+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
deleted file mode 100644
index 7916d69..0000000
--- a/jest.config.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
- testPathIgnorePatterns: ['/node_modules/', '/integrationTests/'],
-};
diff --git a/jsconfig.json b/jsconfig.json
index e7fe98e..27625de 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 afc0ed6..60e7b9d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -3,32 +3,29 @@
"version": "0.1.0",
"lockfileVersion": 2,
"requires": true,
+ "type": "module",
"packages": {
"": {
"name": "vault-action",
"version": "0.1.0",
"license": "MIT",
"dependencies": {
- "got": "^11.8.6",
+ "@actions/core": "^1.10.1",
+ "got": "^14.2.1",
"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"
- },
- "peerDependencies": {
- "@actions/core": ">=1 <2"
+ "mock-http-server": "^1.4.5",
+ "vitest": "^1.3.1"
}
},
"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"
@@ -38,7 +35,6 @@
"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"
}
@@ -48,6 +44,7 @@
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
"integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
@@ -61,6 +58,7 @@
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
"integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/highlight": "^7.23.4",
"chalk": "^2.4.2"
@@ -74,6 +72,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
+ "peer": true,
"dependencies": {
"color-convert": "^1.9.0"
},
@@ -86,6 +85,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -100,6 +100,7 @@
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
+ "peer": true,
"dependencies": {
"color-name": "1.1.3"
}
@@ -108,13 +109,15 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/@babel/code-frame/node_modules/escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=0.8.0"
}
@@ -124,6 +127,7 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=4"
}
@@ -133,6 +137,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
+ "peer": true,
"dependencies": {
"has-flag": "^3.0.0"
},
@@ -145,6 +150,7 @@
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz",
"integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6.9.0"
}
@@ -154,6 +160,7 @@
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz",
"integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.23.5",
@@ -184,6 +191,7 @@
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
"integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/types": "^7.23.6",
"@jridgewell/gen-mapping": "^0.3.2",
@@ -199,6 +207,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
"integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/compat-data": "^7.23.5",
"@babel/helper-validator-option": "^7.23.5",
@@ -215,6 +224,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
"integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6.9.0"
}
@@ -224,6 +234,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
"integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/template": "^7.22.15",
"@babel/types": "^7.23.0"
@@ -237,6 +248,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
"integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/types": "^7.22.5"
},
@@ -249,6 +261,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
"integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/types": "^7.22.15"
},
@@ -261,6 +274,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
"integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-module-imports": "^7.22.15",
@@ -280,6 +294,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
"integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6.9.0"
}
@@ -289,6 +304,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
"integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/types": "^7.22.5"
},
@@ -301,6 +317,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
"integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/types": "^7.22.5"
},
@@ -313,6 +330,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
"integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6.9.0"
}
@@ -322,6 +340,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6.9.0"
}
@@ -331,6 +350,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
"integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6.9.0"
}
@@ -340,6 +360,7 @@
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz",
"integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/template": "^7.23.9",
"@babel/traverse": "^7.23.9",
@@ -354,6 +375,7 @@
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
"integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.22.20",
"chalk": "^2.4.2",
@@ -368,6 +390,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
+ "peer": true,
"dependencies": {
"color-convert": "^1.9.0"
},
@@ -380,6 +403,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -394,6 +418,7 @@
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
+ "peer": true,
"dependencies": {
"color-name": "1.1.3"
}
@@ -402,13 +427,15 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/@babel/highlight/node_modules/escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=0.8.0"
}
@@ -418,6 +445,7 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=4"
}
@@ -427,6 +455,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
+ "peer": true,
"dependencies": {
"has-flag": "^3.0.0"
},
@@ -439,6 +468,7 @@
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz",
"integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==",
"dev": true,
+ "peer": true,
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -451,6 +481,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
"integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -463,6 +494,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
"integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -475,6 +507,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
"integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
},
@@ -487,6 +520,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
"integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
},
@@ -499,6 +533,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
"integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -511,6 +546,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz",
"integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5"
},
@@ -526,6 +562,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
"integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
},
@@ -538,6 +575,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
"integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -550,6 +588,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
"integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
},
@@ -562,6 +601,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
"integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -574,6 +614,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
"integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -586,6 +627,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
"integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
},
@@ -598,6 +640,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
"integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.14.5"
},
@@ -613,6 +656,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz",
"integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.22.5"
},
@@ -628,6 +672,7 @@
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz",
"integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/code-frame": "^7.23.5",
"@babel/parser": "^7.23.9",
@@ -642,6 +687,7 @@
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz",
"integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/code-frame": "^7.23.5",
"@babel/generator": "^7.23.6",
@@ -663,6 +709,7 @@
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz",
"integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-string-parser": "^7.23.4",
"@babel/helper-validator-identifier": "^7.22.20",
@@ -676,13 +723,383 @@
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
- "dev": true
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.19.12",
+ "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"
+ }
},
"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",
@@ -699,6 +1116,7 @@
"resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
"integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -708,6 +1126,7 @@
"resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
"integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/types": "^29.6.3",
"@types/node": "*",
@@ -725,6 +1144,7 @@
"resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
"integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/console": "^29.7.0",
"@jest/reporters": "^29.7.0",
@@ -772,6 +1192,7 @@
"resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
"integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/fake-timers": "^29.7.0",
"@jest/types": "^29.6.3",
@@ -787,6 +1208,7 @@
"resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
"integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"expect": "^29.7.0",
"jest-snapshot": "^29.7.0"
@@ -800,6 +1222,7 @@
"resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
"integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
"dev": true,
+ "peer": true,
"dependencies": {
"jest-get-type": "^29.6.3"
},
@@ -812,6 +1235,7 @@
"resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
"integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/types": "^29.6.3",
"@sinonjs/fake-timers": "^10.0.2",
@@ -829,6 +1253,7 @@
"resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
"integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/environment": "^29.7.0",
"@jest/expect": "^29.7.0",
@@ -844,6 +1269,7 @@
"resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
"integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@bcoe/v8-coverage": "^0.2.3",
"@jest/console": "^29.7.0",
@@ -899,6 +1325,7 @@
"resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
"integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.18",
"callsites": "^3.0.0",
@@ -913,6 +1340,7 @@
"resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
"integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/console": "^29.7.0",
"@jest/types": "^29.6.3",
@@ -928,6 +1356,7 @@
"resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
"integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/test-result": "^29.7.0",
"graceful-fs": "^4.2.9",
@@ -943,6 +1372,7 @@
"resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
"integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/core": "^7.11.6",
"@jest/types": "^29.6.3",
@@ -969,6 +1399,7 @@
"resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
"integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
@@ -986,6 +1417,7 @@
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
"integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
@@ -1000,6 +1432,7 @@
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
"integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6.0.0"
}
@@ -1009,6 +1442,7 @@
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6.0.0"
}
@@ -1024,11 +1458,181 @@
"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",
@@ -1036,11 +1640,11 @@
"dev": true
},
"node_modules/@sindresorhus/is": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz",
- "integrity": "sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-6.2.0.tgz",
+ "integrity": "sha512-yM/IGPkVnYGblhDosFBwq0ZGdnVSBkNV4onUtipGMOjZd4kB6GAu3ys91aftSbyMHh6A2GPdt+KDI5NoWP63MQ==",
"engines": {
- "node": ">=10"
+ "node": ">=16"
},
"funding": {
"url": "https://github.com/sindresorhus/is?sponsor=1"
@@ -1051,6 +1655,7 @@
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
"integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"type-detect": "4.0.8"
}
@@ -1060,19 +1665,20 @@
"resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
"integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@sinonjs/commons": "^3.0.0"
}
},
"node_modules/@szmarczak/http-timer": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz",
- "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz",
+ "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==",
"dependencies": {
- "defer-to-connect": "^2.0.0"
+ "defer-to-connect": "^2.0.1"
},
"engines": {
- "node": ">=10"
+ "node": ">=14.16"
}
},
"node_modules/@types/babel__core": {
@@ -1080,6 +1686,7 @@
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
"integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/parser": "^7.20.7",
"@babel/types": "^7.20.7",
@@ -1093,6 +1700,7 @@
"resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz",
"integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/types": "^7.0.0"
}
@@ -1102,6 +1710,7 @@
"resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
"integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/parser": "^7.1.0",
"@babel/types": "^7.0.0"
@@ -1112,46 +1721,45 @@
"resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz",
"integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/types": "^7.20.7"
}
},
- "node_modules/@types/cacheable-request": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz",
- "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==",
- "dependencies": {
- "@types/http-cache-semantics": "*",
- "@types/keyv": "*",
- "@types/node": "*",
- "@types/responselike": "*"
- }
+ "node_modules/@types/estree": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+ "dev": true
},
"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.0",
- "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz",
- "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A=="
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz",
+ "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA=="
},
"node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
"integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/@types/istanbul-lib-report": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
"integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@types/istanbul-lib-coverage": "*"
}
@@ -1161,47 +1769,34 @@
"resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
"integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@types/istanbul-lib-report": "*"
}
},
- "node_modules/@types/json-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz",
- "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ=="
- },
- "node_modules/@types/keyv": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz",
- "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==",
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@types/node": {
- "version": "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==",
+ "version": "20.11.25",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.25.tgz",
+ "integrity": "sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==",
+ "dev": true,
+ "peer": true,
"dependencies": {
- "@types/node": "*"
+ "undici-types": "~5.26.4"
}
},
"node_modules/@types/stack-utils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
"integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/@types/yargs": {
"version": "17.0.32",
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
"integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
+ "peer": true,
"dependencies": {
"@types/yargs-parser": "*"
}
@@ -1210,7 +1805,8 @@
"version": "21.0.3",
"resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
"integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/@vercel/ncc": {
"version": "0.38.1",
@@ -1221,11 +1817,129 @@
"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"
},
@@ -1241,6 +1955,7 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -1250,6 +1965,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "peer": true,
"dependencies": {
"color-convert": "^2.0.1"
},
@@ -1265,6 +1981,7 @@
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
+ "peer": true,
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -1278,15 +1995,26 @@
"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",
@@ -1308,6 +2036,7 @@
"resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
"integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.0.0",
"@istanbuljs/load-nyc-config": "^1.0.0",
@@ -1324,6 +2053,7 @@
"resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
"integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/core": "^7.12.3",
"@babel/parser": "^7.14.7",
@@ -1340,6 +2070,7 @@
"resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
"integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/template": "^7.3.3",
"@babel/types": "^7.3.3",
@@ -1355,6 +2086,7 @@
"resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
"integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-bigint": "^7.8.3",
@@ -1378,6 +2110,7 @@
"resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
"integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
"dev": true,
+ "peer": true,
"dependencies": {
"babel-plugin-jest-hoist": "^29.6.3",
"babel-preset-current-node-syntax": "^1.0.0"
@@ -1393,7 +2126,8 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/body-parser": {
"version": "1.20.0",
@@ -1439,6 +2173,7 @@
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
+ "peer": true,
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -1449,6 +2184,7 @@
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
+ "peer": true,
"dependencies": {
"fill-range": "^7.0.1"
},
@@ -1475,6 +2211,7 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "peer": true,
"dependencies": {
"caniuse-lite": "^1.0.30001580",
"electron-to-chromium": "^1.4.648",
@@ -1493,6 +2230,7 @@
"resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
"integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"node-int64": "^0.4.0"
}
@@ -1501,7 +2239,8 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/bytes": {
"version": "3.1.2",
@@ -1512,43 +2251,38 @@
"node": ">= 0.8"
}
},
- "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==",
+ "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,
"engines": {
- "node": ">=10.6.0"
+ "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": "7.0.2",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz",
- "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==",
+ "version": "10.2.14",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz",
+ "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==",
"dependencies": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^4.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^6.0.1",
- "responselike": "^2.0.0"
+ "@types/http-cache-semantics": "^4.0.2",
+ "get-stream": "^6.0.1",
+ "http-cache-semantics": "^4.1.1",
+ "keyv": "^4.5.3",
+ "mimic-response": "^4.0.0",
+ "normalize-url": "^8.0.0",
+ "responselike": "^3.0.0"
},
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/cacheable-request/node_modules/get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=14.16"
}
},
"node_modules/call-bind": {
@@ -1569,6 +2303,7 @@
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6"
}
@@ -1578,6 +2313,7 @@
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6"
}
@@ -1600,13 +2336,33 @@
"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"
@@ -1623,10 +2379,23 @@
"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",
@@ -1638,6 +2407,7 @@
"url": "https://github.com/sponsors/sibiraj-s"
}
],
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -1646,13 +2416,15 @@
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz",
"integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/cliui": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
"integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.1",
@@ -1662,19 +2434,12 @@
"node": ">=12"
}
},
- "node_modules/clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==",
- "dependencies": {
- "mimic-response": "^1.0.0"
- }
- },
"node_modules/co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
"integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
"dev": true,
+ "peer": true,
"engines": {
"iojs": ">= 1.0.0",
"node": ">= 0.12.0"
@@ -1684,13 +2449,15 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
"integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"color-name": "~1.1.4"
},
@@ -1702,25 +2469,15 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/compress-brotli": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz",
- "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==",
- "dependencies": {
- "@types/json-buffer": "~3.0.0",
- "json-buffer": "~3.0.1"
- },
- "engines": {
- "node": ">= 12"
- }
+ "dev": true,
+ "peer": true
},
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/connect": {
"version": "3.7.0",
@@ -1765,13 +2522,15 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/create-jest": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
"integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/types": "^29.6.3",
"chalk": "^4.0.0",
@@ -1849,6 +2608,7 @@
"resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz",
"integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==",
"dev": true,
+ "peer": true,
"peerDependencies": {
"babel-plugin-macros": "^3.1.0"
},
@@ -1858,11 +2618,24 @@
}
}
},
+ "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"
}
@@ -1899,6 +2672,7 @@
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
"integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -1922,13 +2696,15 @@
"version": "1.4.652",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.652.tgz",
"integrity": "sha512-XvQaa8hVUAuEJtLw6VKQqvdOxTOfBLWfI10t2xWpezx4XXD3k8bdLweEKeItqaa0+OkJX5l0mP1W+JWobyIDrg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/emittery": {
"version": "0.13.1",
"resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
"integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=12"
},
@@ -1940,7 +2716,8 @@
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/encodeurl": {
"version": "1.0.2",
@@ -1951,28 +2728,60 @@
"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"
}
@@ -1988,6 +2797,7 @@
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -1997,6 +2807,7 @@
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true,
+ "peer": true,
"bin": {
"esparse": "bin/esparse.js",
"esvalidate": "bin/esvalidate.js"
@@ -2005,11 +2816,21 @@
"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",
@@ -2033,6 +2854,7 @@
"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
"integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">= 0.8.0"
}
@@ -2042,6 +2864,7 @@
"resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
"integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/expect-utils": "^29.7.0",
"jest-get-type": "^29.6.3",
@@ -2057,13 +2880,15 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/fb-watchman": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
"integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
"dev": true,
+ "peer": true,
"dependencies": {
"bser": "2.1.1"
}
@@ -2073,6 +2898,7 @@
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -2130,6 +2956,7 @@
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
+ "peer": true,
"dependencies": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
@@ -2138,11 +2965,20 @@
"node": ">=8"
}
},
+ "node_modules/form-data-encoder": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.0.2.tgz",
+ "integrity": "sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==",
+ "engines": {
+ "node": ">= 18"
+ }
+ },
"node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/fsevents": {
"version": "2.3.3",
@@ -2172,6 +3008,7 @@
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6.9.0"
}
@@ -2181,10 +3018,20 @@
"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",
@@ -2204,6 +3051,7 @@
"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
"integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8.0.0"
}
@@ -2212,7 +3060,6 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
"integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "dev": true,
"engines": {
"node": ">=10"
},
@@ -2225,6 +3072,7 @@
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dev": true,
+ "peer": true,
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -2245,39 +3093,52 @@
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=4"
}
},
"node_modules/got": {
- "version": "11.8.6",
- "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz",
- "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==",
+ "version": "14.2.1",
+ "resolved": "https://registry.npmjs.org/got/-/got-14.2.1.tgz",
+ "integrity": "sha512-KOaPMremmsvx6l9BLC04LYE6ZFW4x7e4HkTe3LwBmtuYYQwpeS4XKqzhubTIkaQ1Nr+eXxeori0zuwupXMovBQ==",
"dependencies": {
- "@sindresorhus/is": "^4.0.0",
- "@szmarczak/http-timer": "^4.0.5",
- "@types/cacheable-request": "^6.0.1",
- "@types/responselike": "^1.0.0",
- "cacheable-lookup": "^5.0.3",
- "cacheable-request": "^7.0.2",
+ "@sindresorhus/is": "^6.1.0",
+ "@szmarczak/http-timer": "^5.0.1",
+ "cacheable-lookup": "^7.0.0",
+ "cacheable-request": "^10.2.14",
"decompress-response": "^6.0.0",
- "http2-wrapper": "^1.0.0-beta.5.2",
- "lowercase-keys": "^2.0.0",
- "p-cancelable": "^2.0.0",
- "responselike": "^2.0.0"
+ "form-data-encoder": "^4.0.2",
+ "get-stream": "^8.0.1",
+ "http2-wrapper": "^2.2.1",
+ "lowercase-keys": "^3.0.0",
+ "p-cancelable": "^4.0.1",
+ "responselike": "^3.0.0"
},
"engines": {
- "node": ">=10.19.0"
+ "node": ">=20"
},
"funding": {
"url": "https://github.com/sindresorhus/got?sponsor=1"
}
},
+ "node_modules/got/node_modules/get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/has": {
"version": "1.0.3",
@@ -2296,6 +3157,7 @@
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -2317,6 +3179,7 @@
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
"integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
"dev": true,
+ "peer": true,
"dependencies": {
"function-bind": "^1.1.2"
},
@@ -2328,7 +3191,8 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/http-cache-semantics": {
"version": "4.1.1",
@@ -2361,33 +3225,23 @@
}
},
"node_modules/http2-wrapper": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
- "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz",
+ "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==",
"dependencies": {
"quick-lru": "^5.1.1",
- "resolve-alpn": "^1.0.0"
+ "resolve-alpn": "^1.2.0"
},
"engines": {
"node": ">=10.19.0"
}
},
- "node_modules/http2-wrapper/node_modules/quick-lru": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
- "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/human-signals": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
"integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=10.17.0"
}
@@ -2409,6 +3263,7 @@
"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
"integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
"dev": true,
+ "peer": true,
"dependencies": {
"pkg-dir": "^4.2.0",
"resolve-cwd": "^3.0.0"
@@ -2428,6 +3283,7 @@
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=0.8.19"
}
@@ -2437,6 +3293,7 @@
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"dev": true,
+ "peer": true,
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
@@ -2452,13 +3309,15 @@
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/is-core-module": {
"version": "2.13.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
"integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
"dev": true,
+ "peer": true,
"dependencies": {
"hasown": "^2.0.0"
},
@@ -2471,6 +3330,7 @@
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -2480,6 +3340,7 @@
"resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
"integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6"
}
@@ -2489,6 +3350,7 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=0.12.0"
}
@@ -2498,6 +3360,7 @@
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
},
@@ -2516,6 +3379,7 @@
"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
"integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -2525,6 +3389,7 @@
"resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz",
"integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/core": "^7.12.3",
"@babel/parser": "^7.14.7",
@@ -2541,6 +3406,7 @@
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
+ "peer": true,
"dependencies": {
"yallist": "^4.0.0"
},
@@ -2553,6 +3419,7 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
+ "peer": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
@@ -2567,13 +3434,15 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/istanbul-lib-report": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
"integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
"dev": true,
+ "peer": true,
"dependencies": {
"istanbul-lib-coverage": "^3.0.0",
"make-dir": "^4.0.0",
@@ -2588,6 +3457,7 @@
"resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
"integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
"dev": true,
+ "peer": true,
"dependencies": {
"debug": "^4.1.1",
"istanbul-lib-coverage": "^3.0.0",
@@ -2602,6 +3472,7 @@
"resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz",
"integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==",
"dev": true,
+ "peer": true,
"dependencies": {
"html-escaper": "^2.0.0",
"istanbul-lib-report": "^3.0.0"
@@ -2615,6 +3486,7 @@
"resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
"integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/core": "^29.7.0",
"@jest/types": "^29.6.3",
@@ -2641,6 +3513,7 @@
"resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
"integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
"dev": true,
+ "peer": true,
"dependencies": {
"execa": "^5.0.0",
"jest-util": "^29.7.0",
@@ -2655,6 +3528,7 @@
"resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
"integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/environment": "^29.7.0",
"@jest/expect": "^29.7.0",
@@ -2686,6 +3560,7 @@
"resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
"integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/core": "^29.7.0",
"@jest/test-result": "^29.7.0",
@@ -2719,6 +3594,7 @@
"resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
"integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/core": "^7.11.6",
"@jest/test-sequencer": "^29.7.0",
@@ -2764,6 +3640,7 @@
"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
"integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
"dev": true,
+ "peer": true,
"dependencies": {
"chalk": "^4.0.0",
"diff-sequences": "^29.6.3",
@@ -2779,6 +3656,7 @@
"resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
"integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
"dev": true,
+ "peer": true,
"dependencies": {
"detect-newline": "^3.0.0"
},
@@ -2791,6 +3669,7 @@
"resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
"integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/types": "^29.6.3",
"chalk": "^4.0.0",
@@ -2807,6 +3686,7 @@
"resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
"integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/environment": "^29.7.0",
"@jest/fake-timers": "^29.7.0",
@@ -2824,6 +3704,7 @@
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
"integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
"dev": true,
+ "peer": true,
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
@@ -2833,6 +3714,7 @@
"resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
"integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/types": "^29.6.3",
"@types/graceful-fs": "^4.1.3",
@@ -2858,6 +3740,7 @@
"resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
"integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
"dev": true,
+ "peer": true,
"dependencies": {
"jest-get-type": "^29.6.3",
"pretty-format": "^29.7.0"
@@ -2871,6 +3754,7 @@
"resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
"integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
"dev": true,
+ "peer": true,
"dependencies": {
"chalk": "^4.0.0",
"jest-diff": "^29.7.0",
@@ -2886,6 +3770,7 @@
"resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
"integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/code-frame": "^7.12.13",
"@jest/types": "^29.6.3",
@@ -2906,6 +3791,7 @@
"resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
"integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/types": "^29.6.3",
"@types/node": "*",
@@ -2920,6 +3806,7 @@
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
"integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6"
},
@@ -2937,6 +3824,7 @@
"resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
"integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
"dev": true,
+ "peer": true,
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
@@ -2946,6 +3834,7 @@
"resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
"integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
"dev": true,
+ "peer": true,
"dependencies": {
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
@@ -2966,6 +3855,7 @@
"resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
"integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
"dev": true,
+ "peer": true,
"dependencies": {
"jest-regex-util": "^29.6.3",
"jest-snapshot": "^29.7.0"
@@ -2979,6 +3869,7 @@
"resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
"integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/console": "^29.7.0",
"@jest/environment": "^29.7.0",
@@ -3011,6 +3902,7 @@
"resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
"integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/environment": "^29.7.0",
"@jest/fake-timers": "^29.7.0",
@@ -3044,6 +3936,7 @@
"resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
"integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/core": "^7.11.6",
"@babel/generator": "^7.7.2",
@@ -3075,6 +3968,7 @@
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
+ "peer": true,
"dependencies": {
"yallist": "^4.0.0"
},
@@ -3087,6 +3981,7 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
+ "peer": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
@@ -3101,13 +3996,15 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/jest-util": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
"integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/types": "^29.6.3",
"@types/node": "*",
@@ -3125,6 +4022,7 @@
"resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
"integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/types": "^29.6.3",
"camelcase": "^6.2.0",
@@ -3142,6 +4040,7 @@
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
"integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=10"
},
@@ -3154,6 +4053,7 @@
"resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
"integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jest/test-result": "^29.7.0",
"@jest/types": "^29.6.3",
@@ -3182,6 +4082,7 @@
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
"integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
"dev": true,
+ "peer": true,
"dependencies": {
"@types/node": "*",
"jest-util": "^29.7.0",
@@ -3197,6 +4098,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dev": true,
+ "peer": true,
"dependencies": {
"has-flag": "^4.0.0"
},
@@ -3211,13 +4113,15 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/js-yaml": {
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
+ "peer": true,
"dependencies": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
@@ -3231,6 +4135,7 @@
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
"dev": true,
+ "peer": true,
"bin": {
"jsesc": "bin/jsesc"
},
@@ -3247,13 +4152,15 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/json5": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true,
+ "peer": true,
"bin": {
"json5": "lib/cli.js"
},
@@ -3269,6 +4176,12 @@
"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",
@@ -3278,11 +4191,10 @@
}
},
"node_modules/keyv": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.2.tgz",
- "integrity": "sha512-kn8WmodVBe12lmHpA6W8OY7SNh6wVR+Z+wZESF4iF5FCazaVXGWOtnbnvX0tMQ1bO+/TmOD9LziuYMvrIIs0xw==",
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
"dependencies": {
- "compress-brotli": "^1.3.8",
"json-buffer": "3.0.1"
}
},
@@ -3291,6 +4203,7 @@
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
"integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6"
}
@@ -3300,6 +4213,7 @@
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
"integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6"
}
@@ -3308,13 +4222,31 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "dev": true
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/local-pkg": {
+ "version": "0.5.0",
+ "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"
+ }
},
"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"
},
@@ -3322,12 +4254,24 @@
"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": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz",
+ "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==",
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/lru-cache": {
@@ -3335,15 +4279,29 @@
"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"
},
@@ -3359,6 +4317,7 @@
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
+ "peer": true,
"dependencies": {
"yallist": "^4.0.0"
},
@@ -3371,6 +4330,7 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
+ "peer": true,
"dependencies": {
"lru-cache": "^6.0.0"
},
@@ -3385,13 +4345,15 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/makeerror": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
"integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
"dev": true,
+ "peer": true,
"dependencies": {
"tmpl": "1.0.5"
}
@@ -3416,6 +4378,7 @@
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
"integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
"dev": true,
+ "peer": true,
"dependencies": {
"braces": "^3.0.2",
"picomatch": "^2.3.1"
@@ -3450,16 +4413,20 @@
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6"
}
},
"node_modules/mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz",
+ "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==",
"engines": {
- "node": ">=4"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/minimatch": {
@@ -3467,6 +4434,7 @@
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
+ "peer": true,
"dependencies": {
"brace-expansion": "^1.1.7"
},
@@ -3474,6 +4442,18 @@
"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",
@@ -3551,39 +4531,61 @@
}
]
},
+ "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
+ "dev": true,
+ "peer": true
},
"node_modules/node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
"integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/node-releases": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/normalize-url": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
- "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==",
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz",
+ "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==",
"engines": {
- "node": ">=10"
+ "node": ">=14.16"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -3594,6 +4596,7 @@
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
"integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
"dev": true,
+ "peer": true,
"dependencies": {
"path-key": "^3.0.0"
},
@@ -3626,6 +4629,8 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "peer": true,
"dependencies": {
"wrappy": "1"
}
@@ -3635,6 +4640,7 @@
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"dev": true,
+ "peer": true,
"dependencies": {
"mimic-fn": "^2.1.0"
},
@@ -3646,11 +4652,11 @@
}
},
"node_modules/p-cancelable": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz",
- "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==",
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-4.0.1.tgz",
+ "integrity": "sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==",
"engines": {
- "node": ">=8"
+ "node": ">=14.16"
}
},
"node_modules/p-limit": {
@@ -3658,6 +4664,7 @@
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"yocto-queue": "^0.1.0"
},
@@ -3673,6 +4680,7 @@
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
+ "peer": true,
"dependencies": {
"p-limit": "^2.2.0"
},
@@ -3685,6 +4693,7 @@
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
+ "peer": true,
"dependencies": {
"p-try": "^2.0.0"
},
@@ -3700,6 +4709,7 @@
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6"
}
@@ -3709,6 +4719,7 @@
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dev": true,
+ "peer": true,
"dependencies": {
"@babel/code-frame": "^7.0.0",
"error-ex": "^1.3.1",
@@ -3736,6 +4747,7 @@
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -3745,6 +4757,7 @@
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -3762,8 +4775,24 @@
"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",
@@ -3775,6 +4804,7 @@
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8.6"
},
@@ -3787,6 +4817,7 @@
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
"integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">= 6"
}
@@ -3796,6 +4827,7 @@
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"find-up": "^4.0.0"
},
@@ -3803,6 +4835,45 @@
"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",
@@ -3834,6 +4905,7 @@
"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
"integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
"dev": true,
+ "peer": true,
"dependencies": {
"kleur": "^3.0.3",
"sisteransi": "^1.0.5"
@@ -3842,15 +4914,6 @@
"node": ">= 6"
}
},
- "node_modules/pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
"node_modules/pure-rand": {
"version": "6.0.4",
"resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz",
@@ -3865,7 +4928,8 @@
"type": "opencollective",
"url": "https://opencollective.com/fast-check"
}
- ]
+ ],
+ "peer": true
},
"node_modules/qs": {
"version": "6.10.3",
@@ -3882,6 +4946,17 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/quick-lru": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/random-bytes": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
@@ -3917,6 +4992,7 @@
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -3926,6 +5002,7 @@
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
"integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
"dev": true,
+ "peer": true,
"dependencies": {
"is-core-module": "^2.13.0",
"path-parse": "^1.0.7",
@@ -3939,15 +5016,16 @@
}
},
"node_modules/resolve-alpn": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz",
- "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA=="
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
+ "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="
},
"node_modules/resolve-cwd": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
"integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
"dev": true,
+ "peer": true,
"dependencies": {
"resolve-from": "^5.0.0"
},
@@ -3960,6 +5038,7 @@
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -3969,16 +5048,55 @@
"resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
"integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=10"
}
},
"node_modules/responselike": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
- "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz",
+ "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==",
"dependencies": {
- "lowercase-keys": "^2.0.0"
+ "lowercase-keys": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/rollup": {
+ "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"
}
},
"node_modules/safer-buffer": {
@@ -3992,6 +5110,7 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
+ "peer": true,
"bin": {
"semver": "bin/semver.js"
}
@@ -4037,23 +5156,32 @@
"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
+ "dev": true,
+ "peer": true
},
"node_modules/sisteransi": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -4063,6 +5191,16 @@
"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"
}
@@ -4072,6 +5210,7 @@
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
"integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
"dev": true,
+ "peer": true,
"dependencies": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
@@ -4081,13 +5220,15 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/stack-utils": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
"integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"escape-string-regexp": "^2.0.0"
},
@@ -4095,6 +5236,12 @@
"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",
@@ -4104,11 +5251,18 @@
"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"
@@ -4122,6 +5276,7 @@
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
+ "peer": true,
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -4136,6 +5291,7 @@
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
+ "peer": true,
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -4148,6 +5304,7 @@
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
"integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
}
@@ -4157,6 +5314,7 @@
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=6"
}
@@ -4166,6 +5324,7 @@
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=8"
},
@@ -4173,11 +5332,30 @@
"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"
},
@@ -4190,6 +5368,7 @@
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">= 0.4"
},
@@ -4202,6 +5381,7 @@
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
"integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
"dev": true,
+ "peer": true,
"dependencies": {
"@istanbuljs/schema": "^0.1.2",
"glob": "^7.1.4",
@@ -4211,17 +5391,43 @@
"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
+ "dev": true,
+ "peer": true
},
"node_modules/to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=4"
}
@@ -4231,6 +5437,7 @@
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
+ "peer": true,
"dependencies": {
"is-number": "^7.0.0"
},
@@ -4251,7 +5458,6 @@
"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"
}
@@ -4270,6 +5476,7 @@
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
"integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=10"
},
@@ -4290,6 +5497,12 @@
"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",
@@ -4308,6 +5521,13 @@
"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",
@@ -4336,6 +5556,7 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "peer": true,
"dependencies": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
@@ -4360,7 +5581,6 @@
"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"
}
@@ -4370,6 +5590,7 @@
"resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz",
"integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==",
"dev": true,
+ "peer": true,
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.12",
"@types/istanbul-lib-coverage": "^2.0.1",
@@ -4379,11 +5600,288 @@
"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"
}
@@ -4403,11 +5901,28 @@
"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",
@@ -4423,13 +5938,16 @@
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true,
+ "peer": true
},
"node_modules/write-file-atomic": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
"integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
"dev": true,
+ "peer": true,
"dependencies": {
"imurmurhash": "^0.1.4",
"signal-exit": "^3.0.7"
@@ -4443,6 +5961,7 @@
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=10"
}
@@ -4451,13 +5970,15 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node_modules/yargs": {
"version": "17.7.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
"integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
"dev": true,
+ "peer": true,
"dependencies": {
"cliui": "^8.0.1",
"escalade": "^3.1.1",
@@ -4476,6 +5997,7 @@
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
"integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=12"
}
@@ -4485,6 +6007,7 @@
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true,
+ "peer": true,
"engines": {
"node": ">=10"
},
@@ -4498,7 +6021,6 @@
"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"
@@ -4508,7 +6030,6 @@
"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"
}
@@ -4518,6 +6039,7 @@
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
"integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
"dev": true,
+ "peer": true,
"requires": {
"@jridgewell/gen-mapping": "^0.3.0",
"@jridgewell/trace-mapping": "^0.3.9"
@@ -4528,6 +6050,7 @@
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
"integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/highlight": "^7.23.4",
"chalk": "^2.4.2"
@@ -4538,6 +6061,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
+ "peer": true,
"requires": {
"color-convert": "^1.9.0"
}
@@ -4547,6 +6071,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
+ "peer": true,
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -4558,6 +6083,7 @@
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
+ "peer": true,
"requires": {
"color-name": "1.1.3"
}
@@ -4566,25 +6092,29 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
+ "peer": true,
"requires": {
"has-flag": "^3.0.0"
}
@@ -4595,13 +6125,15 @@
"version": "7.23.5",
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz",
"integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@babel/core": {
"version": "7.23.9",
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz",
"integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==",
"dev": true,
+ "peer": true,
"requires": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.23.5",
@@ -4625,6 +6157,7 @@
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
"integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/types": "^7.23.6",
"@jridgewell/gen-mapping": "^0.3.2",
@@ -4637,6 +6170,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
"integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/compat-data": "^7.23.5",
"@babel/helper-validator-option": "^7.23.5",
@@ -4649,13 +6183,15 @@
"version": "7.22.20",
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
"integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@babel/helper-function-name": {
"version": "7.23.0",
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
"integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/template": "^7.22.15",
"@babel/types": "^7.23.0"
@@ -4666,6 +6202,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
"integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/types": "^7.22.5"
}
@@ -4675,6 +6212,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
"integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/types": "^7.22.15"
}
@@ -4684,6 +6222,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
"integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-environment-visitor": "^7.22.20",
"@babel/helper-module-imports": "^7.22.15",
@@ -4696,13 +6235,15 @@
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
"integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@babel/helper-simple-access": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
"integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/types": "^7.22.5"
}
@@ -4712,6 +6253,7 @@
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
"integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/types": "^7.22.5"
}
@@ -4720,25 +6262,29 @@
"version": "7.23.4",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
"integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@babel/helper-validator-identifier": {
"version": "7.22.20",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@babel/helper-validator-option": {
"version": "7.23.5",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
"integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@babel/helpers": {
"version": "7.23.9",
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz",
"integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/template": "^7.23.9",
"@babel/traverse": "^7.23.9",
@@ -4750,6 +6296,7 @@
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
"integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-validator-identifier": "^7.22.20",
"chalk": "^2.4.2",
@@ -4761,6 +6308,7 @@
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
"dev": true,
+ "peer": true,
"requires": {
"color-convert": "^1.9.0"
}
@@ -4770,6 +6318,7 @@
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
"dev": true,
+ "peer": true,
"requires": {
"ansi-styles": "^3.2.1",
"escape-string-regexp": "^1.0.5",
@@ -4781,6 +6330,7 @@
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
"dev": true,
+ "peer": true,
"requires": {
"color-name": "1.1.3"
}
@@ -4789,25 +6339,29 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
"integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
"dev": true,
+ "peer": true,
"requires": {
"has-flag": "^3.0.0"
}
@@ -4818,13 +6372,15 @@
"version": "7.23.9",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz",
"integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@babel/plugin-syntax-async-generators": {
"version": "7.8.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
"integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.0"
}
@@ -4834,6 +6390,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
"integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.0"
}
@@ -4843,6 +6400,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
"integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.12.13"
}
@@ -4852,6 +6410,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
"integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.10.4"
}
@@ -4861,6 +6420,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
"integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.0"
}
@@ -4870,6 +6430,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz",
"integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.22.5"
}
@@ -4879,6 +6440,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
"integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.10.4"
}
@@ -4888,6 +6450,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
"integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.0"
}
@@ -4897,6 +6460,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
"integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.10.4"
}
@@ -4906,6 +6470,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
"integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.0"
}
@@ -4915,6 +6480,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
"integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.0"
}
@@ -4924,6 +6490,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
"integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.8.0"
}
@@ -4933,6 +6500,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
"integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.14.5"
}
@@ -4942,6 +6510,7 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz",
"integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.22.5"
}
@@ -4951,6 +6520,7 @@
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz",
"integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/code-frame": "^7.23.5",
"@babel/parser": "^7.23.9",
@@ -4962,6 +6532,7 @@
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz",
"integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/code-frame": "^7.23.5",
"@babel/generator": "^7.23.6",
@@ -4980,6 +6551,7 @@
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz",
"integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-string-parser": "^7.23.4",
"@babel/helper-validator-identifier": "^7.22.20",
@@ -4990,13 +6562,176 @@
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
- "dev": true
+ "dev": true,
+ "peer": true
+ },
+ "@esbuild/aix-ppc64": {
+ "version": "0.19.12",
+ "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
},
"@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",
@@ -5009,13 +6744,15 @@
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
"integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@jest/console": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
"integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/types": "^29.6.3",
"@types/node": "*",
@@ -5030,6 +6767,7 @@
"resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
"integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/console": "^29.7.0",
"@jest/reporters": "^29.7.0",
@@ -5066,6 +6804,7 @@
"resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
"integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/fake-timers": "^29.7.0",
"@jest/types": "^29.6.3",
@@ -5078,6 +6817,7 @@
"resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
"integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
"dev": true,
+ "peer": true,
"requires": {
"expect": "^29.7.0",
"jest-snapshot": "^29.7.0"
@@ -5088,6 +6828,7 @@
"resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
"integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
"dev": true,
+ "peer": true,
"requires": {
"jest-get-type": "^29.6.3"
}
@@ -5097,6 +6838,7 @@
"resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
"integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/types": "^29.6.3",
"@sinonjs/fake-timers": "^10.0.2",
@@ -5111,6 +6853,7 @@
"resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
"integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/environment": "^29.7.0",
"@jest/expect": "^29.7.0",
@@ -5123,6 +6866,7 @@
"resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
"integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
"dev": true,
+ "peer": true,
"requires": {
"@bcoe/v8-coverage": "^0.2.3",
"@jest/console": "^29.7.0",
@@ -5164,6 +6908,7 @@
"resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
"integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
"dev": true,
+ "peer": true,
"requires": {
"@jridgewell/trace-mapping": "^0.3.18",
"callsites": "^3.0.0",
@@ -5175,6 +6920,7 @@
"resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
"integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/console": "^29.7.0",
"@jest/types": "^29.6.3",
@@ -5187,6 +6933,7 @@
"resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
"integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/test-result": "^29.7.0",
"graceful-fs": "^4.2.9",
@@ -5199,6 +6946,7 @@
"resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
"integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/core": "^7.11.6",
"@jest/types": "^29.6.3",
@@ -5222,6 +6970,7 @@
"resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
"integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
@@ -5236,6 +6985,7 @@
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
"integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
"dev": true,
+ "peer": true,
"requires": {
"@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
@@ -5246,13 +6996,15 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
"integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@jridgewell/set-array": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
"integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@jridgewell/sourcemap-codec": {
"version": "1.4.15",
@@ -5265,11 +7017,103 @@
"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",
@@ -5277,15 +7121,16 @@
"dev": true
},
"@sindresorhus/is": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz",
- "integrity": "sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ=="
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-6.2.0.tgz",
+ "integrity": "sha512-yM/IGPkVnYGblhDosFBwq0ZGdnVSBkNV4onUtipGMOjZd4kB6GAu3ys91aftSbyMHh6A2GPdt+KDI5NoWP63MQ=="
},
"@sinonjs/commons": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
"integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
"dev": true,
+ "peer": true,
"requires": {
"type-detect": "4.0.8"
}
@@ -5295,16 +7140,17 @@
"resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
"integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
"dev": true,
+ "peer": true,
"requires": {
"@sinonjs/commons": "^3.0.0"
}
},
"@szmarczak/http-timer": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz",
- "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz",
+ "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==",
"requires": {
- "defer-to-connect": "^2.0.0"
+ "defer-to-connect": "^2.0.1"
}
},
"@types/babel__core": {
@@ -5312,6 +7158,7 @@
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
"integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/parser": "^7.20.7",
"@babel/types": "^7.20.7",
@@ -5325,6 +7172,7 @@
"resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz",
"integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/types": "^7.0.0"
}
@@ -5334,6 +7182,7 @@
"resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
"integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/parser": "^7.1.0",
"@babel/types": "^7.0.0"
@@ -5344,46 +7193,45 @@
"resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz",
"integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/types": "^7.20.7"
}
},
- "@types/cacheable-request": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz",
- "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==",
- "requires": {
- "@types/http-cache-semantics": "*",
- "@types/keyv": "*",
- "@types/node": "*",
- "@types/responselike": "*"
- }
+ "@types/estree": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+ "dev": true
},
"@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.0",
- "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz",
- "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A=="
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz",
+ "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA=="
},
"@types/istanbul-lib-coverage": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
"integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@types/istanbul-lib-report": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
"integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
"dev": true,
+ "peer": true,
"requires": {
"@types/istanbul-lib-coverage": "*"
}
@@ -5393,47 +7241,34 @@
"resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
"integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
"dev": true,
+ "peer": true,
"requires": {
"@types/istanbul-lib-report": "*"
}
},
- "@types/json-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz",
- "integrity": "sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ=="
- },
- "@types/keyv": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz",
- "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==",
- "requires": {
- "@types/node": "*"
- }
- },
"@types/node": {
- "version": "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==",
+ "version": "20.11.25",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.25.tgz",
+ "integrity": "sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==",
+ "dev": true,
+ "peer": true,
"requires": {
- "@types/node": "*"
+ "undici-types": "~5.26.4"
}
},
"@types/stack-utils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
"integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@types/yargs": {
"version": "17.0.32",
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
"integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
+ "peer": true,
"requires": {
"@types/yargs-parser": "*"
}
@@ -5442,7 +7277,8 @@
"version": "21.0.3",
"resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
"integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"@vercel/ncc": {
"version": "0.38.1",
@@ -5450,11 +7286,95 @@
"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"
}
@@ -5463,13 +7383,15 @@
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
+ "peer": true,
"requires": {
"color-convert": "^2.0.1"
}
@@ -5479,6 +7401,7 @@
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
+ "peer": true,
"requires": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -5489,15 +7412,23 @@
"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",
@@ -5513,6 +7444,7 @@
"resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
"integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/helper-plugin-utils": "^7.0.0",
"@istanbuljs/load-nyc-config": "^1.0.0",
@@ -5526,6 +7458,7 @@
"resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
"integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/core": "^7.12.3",
"@babel/parser": "^7.14.7",
@@ -5541,6 +7474,7 @@
"resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
"integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/template": "^7.3.3",
"@babel/types": "^7.3.3",
@@ -5553,6 +7487,7 @@
"resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
"integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/plugin-syntax-async-generators": "^7.8.4",
"@babel/plugin-syntax-bigint": "^7.8.3",
@@ -5573,6 +7508,7 @@
"resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
"integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
"dev": true,
+ "peer": true,
"requires": {
"babel-plugin-jest-hoist": "^29.6.3",
"babel-preset-current-node-syntax": "^1.0.0"
@@ -5582,7 +7518,8 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"body-parser": {
"version": "1.20.0",
@@ -5626,6 +7563,7 @@
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
+ "peer": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -5636,6 +7574,7 @@
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
+ "peer": true,
"requires": {
"fill-range": "^7.0.1"
}
@@ -5645,6 +7584,7 @@
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz",
"integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==",
"dev": true,
+ "peer": true,
"requires": {
"caniuse-lite": "^1.0.30001580",
"electron-to-chromium": "^1.4.648",
@@ -5657,6 +7597,7 @@
"resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
"integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
"dev": true,
+ "peer": true,
"requires": {
"node-int64": "^0.4.0"
}
@@ -5665,7 +7606,8 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"bytes": {
"version": "3.1.2",
@@ -5673,33 +7615,29 @@
"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": "5.0.4",
- "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
- "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA=="
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz",
+ "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w=="
},
"cacheable-request": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz",
- "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==",
+ "version": "10.2.14",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz",
+ "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==",
"requires": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^4.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^6.0.1",
- "responselike": "^2.0.0"
- },
- "dependencies": {
- "get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "requires": {
- "pump": "^3.0.0"
- }
- }
+ "@types/http-cache-semantics": "^4.0.2",
+ "get-stream": "^6.0.1",
+ "http-cache-semantics": "^4.1.1",
+ "keyv": "^4.5.3",
+ "mimic-response": "^4.0.0",
+ "normalize-url": "^8.0.0",
+ "responselike": "^3.0.0"
}
},
"call-bind": {
@@ -5716,25 +7654,44 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"camelcase": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"caniuse-lite": {
"version": "1.0.30001581",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz",
"integrity": "sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==",
- "dev": true
+ "dev": true,
+ "peer": true
+ },
+ "chai": {
+ "version": "4.4.1",
+ "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"
+ }
},
"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"
@@ -5744,56 +7701,64 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
"integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
- "dev": true
+ "dev": true,
+ "peer": true
+ },
+ "check-error": {
+ "version": "1.0.3",
+ "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"
+ }
},
"ci-info": {
"version": "3.9.0",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
"integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"cjs-module-lexer": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz",
"integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"cliui": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
"integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"dev": true,
+ "peer": true,
"requires": {
"string-width": "^4.2.0",
"strip-ansi": "^6.0.1",
"wrap-ansi": "^7.0.0"
}
},
- "clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==",
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
"integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"collect-v8-coverage": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
"integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
+ "peer": true,
"requires": {
"color-name": "~1.1.4"
}
@@ -5802,22 +7767,15 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "compress-brotli": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz",
- "integrity": "sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==",
- "requires": {
- "@types/json-buffer": "~3.0.0",
- "json-buffer": "~3.0.1"
- }
+ "dev": true,
+ "peer": true
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"connect": {
"version": "3.7.0",
@@ -5858,13 +7816,15 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"create-jest": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
"integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/types": "^29.6.3",
"chalk": "^4.0.0",
@@ -5915,13 +7875,24 @@
"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
+ "dev": true,
+ "peer": true
},
"defer-to-connect": {
"version": "2.0.1",
@@ -5944,7 +7915,8 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
"integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"diff-sequences": {
"version": "29.6.3",
@@ -5962,19 +7934,22 @@
"version": "1.4.652",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.652.tgz",
"integrity": "sha512-XvQaa8hVUAuEJtLw6VKQqvdOxTOfBLWfI10t2xWpezx4XXD3k8bdLweEKeItqaa0+OkJX5l0mP1W+JWobyIDrg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"emittery": {
"version": "0.13.1",
"resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
"integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"encodeurl": {
"version": "1.0.2",
@@ -5982,28 +7957,53 @@
"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
+ "dev": true,
+ "peer": true
},
"escape-html": {
"version": "1.0.3",
@@ -6015,19 +8015,31 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
+ "dev": true,
+ "peer": true
+ },
+ "estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dev": true,
+ "requires": {
+ "@types/estree": "^1.0.0"
+ }
},
"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",
@@ -6044,13 +8056,15 @@
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
"integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"expect": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
"integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/expect-utils": "^29.7.0",
"jest-get-type": "^29.6.3",
@@ -6063,13 +8077,15 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"fb-watchman": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
"integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
"dev": true,
+ "peer": true,
"requires": {
"bser": "2.1.1"
}
@@ -6079,6 +8095,7 @@
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
+ "peer": true,
"requires": {
"to-regex-range": "^5.0.1"
}
@@ -6129,16 +8146,23 @@
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
+ "peer": true,
"requires": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
}
},
+ "form-data-encoder": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.0.2.tgz",
+ "integrity": "sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw=="
+ },
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"fsevents": {
"version": "2.3.3",
@@ -6157,12 +8181,20 @@
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true,
+ "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": {
@@ -6180,19 +8212,20 @@
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
"integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"get-stream": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "dev": true
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="
},
"glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dev": true,
+ "peer": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -6206,31 +8239,40 @@
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"got": {
- "version": "11.8.6",
- "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz",
- "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==",
+ "version": "14.2.1",
+ "resolved": "https://registry.npmjs.org/got/-/got-14.2.1.tgz",
+ "integrity": "sha512-KOaPMremmsvx6l9BLC04LYE6ZFW4x7e4HkTe3LwBmtuYYQwpeS4XKqzhubTIkaQ1Nr+eXxeori0zuwupXMovBQ==",
"requires": {
- "@sindresorhus/is": "^4.0.0",
- "@szmarczak/http-timer": "^4.0.5",
- "@types/cacheable-request": "^6.0.1",
- "@types/responselike": "^1.0.0",
- "cacheable-lookup": "^5.0.3",
- "cacheable-request": "^7.0.2",
+ "@sindresorhus/is": "^6.1.0",
+ "@szmarczak/http-timer": "^5.0.1",
+ "cacheable-lookup": "^7.0.0",
+ "cacheable-request": "^10.2.14",
"decompress-response": "^6.0.0",
- "http2-wrapper": "^1.0.0-beta.5.2",
- "lowercase-keys": "^2.0.0",
- "p-cancelable": "^2.0.0",
- "responselike": "^2.0.0"
+ "form-data-encoder": "^4.0.2",
+ "get-stream": "^8.0.1",
+ "http2-wrapper": "^2.2.1",
+ "lowercase-keys": "^3.0.0",
+ "p-cancelable": "^4.0.1",
+ "responselike": "^3.0.0"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
+ "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA=="
+ }
}
},
"graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"has": {
"version": "1.0.3",
@@ -6245,7 +8287,8 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"has-symbols": {
"version": "1.0.3",
@@ -6258,6 +8301,7 @@
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
"integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
"dev": true,
+ "peer": true,
"requires": {
"function-bind": "^1.1.2"
}
@@ -6266,7 +8310,8 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"http-cache-semantics": {
"version": "4.1.1",
@@ -6295,26 +8340,20 @@
}
},
"http2-wrapper": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
- "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz",
+ "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==",
"requires": {
"quick-lru": "^5.1.1",
- "resolve-alpn": "^1.0.0"
- },
- "dependencies": {
- "quick-lru": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
- "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="
- }
+ "resolve-alpn": "^1.2.0"
}
},
"human-signals": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
"integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"iconv-lite": {
"version": "0.4.24",
@@ -6330,6 +8369,7 @@
"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
"integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
"dev": true,
+ "peer": true,
"requires": {
"pkg-dir": "^4.2.0",
"resolve-cwd": "^3.0.0"
@@ -6339,13 +8379,15 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
"dev": true,
+ "peer": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
@@ -6361,13 +8403,15 @@
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"is-core-module": {
"version": "2.13.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
"integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
"dev": true,
+ "peer": true,
"requires": {
"hasown": "^2.0.0"
}
@@ -6376,25 +8420,29 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"is-generator-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
"integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"isexe": {
"version": "2.0.0",
@@ -6406,13 +8454,15 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
"integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"istanbul-lib-instrument": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz",
"integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/core": "^7.12.3",
"@babel/parser": "^7.14.7",
@@ -6426,6 +8476,7 @@
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
+ "peer": true,
"requires": {
"yallist": "^4.0.0"
}
@@ -6435,6 +8486,7 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
+ "peer": true,
"requires": {
"lru-cache": "^6.0.0"
}
@@ -6443,7 +8495,8 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "dev": true,
+ "peer": true
}
}
},
@@ -6452,6 +8505,7 @@
"resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
"integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
"dev": true,
+ "peer": true,
"requires": {
"istanbul-lib-coverage": "^3.0.0",
"make-dir": "^4.0.0",
@@ -6463,6 +8517,7 @@
"resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
"integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
"dev": true,
+ "peer": true,
"requires": {
"debug": "^4.1.1",
"istanbul-lib-coverage": "^3.0.0",
@@ -6474,6 +8529,7 @@
"resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz",
"integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==",
"dev": true,
+ "peer": true,
"requires": {
"html-escaper": "^2.0.0",
"istanbul-lib-report": "^3.0.0"
@@ -6484,6 +8540,7 @@
"resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
"integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/core": "^29.7.0",
"@jest/types": "^29.6.3",
@@ -6496,6 +8553,7 @@
"resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
"integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
"dev": true,
+ "peer": true,
"requires": {
"execa": "^5.0.0",
"jest-util": "^29.7.0",
@@ -6507,6 +8565,7 @@
"resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
"integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/environment": "^29.7.0",
"@jest/expect": "^29.7.0",
@@ -6535,6 +8594,7 @@
"resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
"integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/core": "^29.7.0",
"@jest/test-result": "^29.7.0",
@@ -6554,6 +8614,7 @@
"resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
"integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/core": "^7.11.6",
"@jest/test-sequencer": "^29.7.0",
@@ -6584,6 +8645,7 @@
"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
"integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
"dev": true,
+ "peer": true,
"requires": {
"chalk": "^4.0.0",
"diff-sequences": "^29.6.3",
@@ -6596,6 +8658,7 @@
"resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
"integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
"dev": true,
+ "peer": true,
"requires": {
"detect-newline": "^3.0.0"
}
@@ -6605,6 +8668,7 @@
"resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
"integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/types": "^29.6.3",
"chalk": "^4.0.0",
@@ -6618,6 +8682,7 @@
"resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
"integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/environment": "^29.7.0",
"@jest/fake-timers": "^29.7.0",
@@ -6631,13 +8696,15 @@
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
"integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"jest-haste-map": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
"integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/types": "^29.6.3",
"@types/graceful-fs": "^4.1.3",
@@ -6658,6 +8725,7 @@
"resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
"integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
"dev": true,
+ "peer": true,
"requires": {
"jest-get-type": "^29.6.3",
"pretty-format": "^29.7.0"
@@ -6668,6 +8736,7 @@
"resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
"integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
"dev": true,
+ "peer": true,
"requires": {
"chalk": "^4.0.0",
"jest-diff": "^29.7.0",
@@ -6680,6 +8749,7 @@
"resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
"integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/code-frame": "^7.12.13",
"@jest/types": "^29.6.3",
@@ -6697,6 +8767,7 @@
"resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
"integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/types": "^29.6.3",
"@types/node": "*",
@@ -6708,19 +8779,22 @@
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
"integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
"dev": true,
+ "peer": true,
"requires": {}
},
"jest-regex-util": {
"version": "29.6.3",
"resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
"integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"jest-resolve": {
"version": "29.7.0",
"resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
"integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
"dev": true,
+ "peer": true,
"requires": {
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
@@ -6738,6 +8812,7 @@
"resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
"integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
"dev": true,
+ "peer": true,
"requires": {
"jest-regex-util": "^29.6.3",
"jest-snapshot": "^29.7.0"
@@ -6748,6 +8823,7 @@
"resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
"integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/console": "^29.7.0",
"@jest/environment": "^29.7.0",
@@ -6777,6 +8853,7 @@
"resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
"integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/environment": "^29.7.0",
"@jest/fake-timers": "^29.7.0",
@@ -6807,6 +8884,7 @@
"resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
"integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/core": "^7.11.6",
"@babel/generator": "^7.7.2",
@@ -6835,6 +8913,7 @@
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
+ "peer": true,
"requires": {
"yallist": "^4.0.0"
}
@@ -6844,6 +8923,7 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
+ "peer": true,
"requires": {
"lru-cache": "^6.0.0"
}
@@ -6852,7 +8932,8 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "dev": true,
+ "peer": true
}
}
},
@@ -6861,6 +8942,7 @@
"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
"integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/types": "^29.6.3",
"@types/node": "*",
@@ -6875,6 +8957,7 @@
"resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
"integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/types": "^29.6.3",
"camelcase": "^6.2.0",
@@ -6888,7 +8971,8 @@
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
"integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true
+ "dev": true,
+ "peer": true
}
}
},
@@ -6897,6 +8981,7 @@
"resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
"integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
"dev": true,
+ "peer": true,
"requires": {
"@jest/test-result": "^29.7.0",
"@jest/types": "^29.6.3",
@@ -6920,6 +9005,7 @@
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
"integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
"dev": true,
+ "peer": true,
"requires": {
"@types/node": "*",
"jest-util": "^29.7.0",
@@ -6932,6 +9018,7 @@
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
"dev": true,
+ "peer": true,
"requires": {
"has-flag": "^4.0.0"
}
@@ -6942,13 +9029,15 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"js-yaml": {
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
+ "peer": true,
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
@@ -6958,7 +9047,8 @@
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"json-buffer": {
"version": "3.0.1",
@@ -6969,30 +9059,37 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"json5": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"jsonata": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/jsonata/-/jsonata-2.0.3.tgz",
"integrity": "sha512-Up2H81MUtjqI/dWwWX7p4+bUMfMrQJVMN/jW6clFMTiYP528fBOBNtRu944QhKTs3+IsVWbgMeUTny5fw2VMUA=="
},
+ "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.3.2",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.3.2.tgz",
- "integrity": "sha512-kn8WmodVBe12lmHpA6W8OY7SNh6wVR+Z+wZESF4iF5FCazaVXGWOtnbnvX0tMQ1bO+/TmOD9LziuYMvrIIs0xw==",
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
"requires": {
- "compress-brotli": "^1.3.8",
"json-buffer": "3.0.1"
}
},
@@ -7000,48 +9097,82 @@
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
"integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
"integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"lines-and-columns": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "dev": true
+ "dev": true,
+ "peer": true
+ },
+ "local-pkg": {
+ "version": "0.5.0",
+ "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"
+ }
},
"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": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz",
+ "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ=="
},
"lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dev": true,
+ "peer": true,
"requires": {
"yallist": "^3.0.2"
}
},
+ "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"
},
@@ -7051,6 +9182,7 @@
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
"dev": true,
+ "peer": true,
"requires": {
"yallist": "^4.0.0"
}
@@ -7060,6 +9192,7 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
+ "peer": true,
"requires": {
"lru-cache": "^6.0.0"
}
@@ -7068,7 +9201,8 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
+ "dev": true,
+ "peer": true
}
}
},
@@ -7077,6 +9211,7 @@
"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
"integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
"dev": true,
+ "peer": true,
"requires": {
"tmpl": "1.0.5"
}
@@ -7098,6 +9233,7 @@
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
"integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
"dev": true,
+ "peer": true,
"requires": {
"braces": "^3.0.2",
"picomatch": "^2.3.1"
@@ -7122,22 +9258,36 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz",
+ "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg=="
},
"minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
+ "peer": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
+ "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",
@@ -7194,40 +9344,51 @@
}
}
},
+ "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
+ "dev": true,
+ "peer": true
},
"node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
"integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"node-releases": {
"version": "2.0.14",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
"integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"normalize-url": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz",
- "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A=="
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz",
+ "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w=="
},
"npm-run-path": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
"integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
"dev": true,
+ "peer": true,
"requires": {
"path-key": "^3.0.0"
}
@@ -7251,6 +9412,8 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "peer": true,
"requires": {
"wrappy": "1"
}
@@ -7260,20 +9423,22 @@
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"dev": true,
+ "peer": true,
"requires": {
"mimic-fn": "^2.1.0"
}
},
"p-cancelable": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz",
- "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg=="
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-4.0.1.tgz",
+ "integrity": "sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg=="
},
"p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
+ "peer": true,
"requires": {
"yocto-queue": "^0.1.0"
}
@@ -7283,6 +9448,7 @@
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
+ "peer": true,
"requires": {
"p-limit": "^2.2.0"
},
@@ -7292,6 +9458,7 @@
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
+ "peer": true,
"requires": {
"p-try": "^2.0.0"
}
@@ -7302,13 +9469,15 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"parse-json": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dev": true,
+ "peer": true,
"requires": {
"@babel/code-frame": "^7.0.0",
"error-ex": "^1.3.1",
@@ -7326,13 +9495,15 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"path-key": {
"version": "3.1.1",
@@ -7344,6 +9515,19 @@
"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": {
@@ -7356,23 +9540,48 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"pirates": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
"integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"pkg-dir": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dev": true,
+ "peer": true,
"requires": {
"find-up": "^4.0.0"
}
},
+ "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",
@@ -7397,25 +9606,18 @@
"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
"integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
"dev": true,
+ "peer": true,
"requires": {
"kleur": "^3.0.3",
"sisteransi": "^1.0.5"
}
},
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
"pure-rand": {
"version": "6.0.4",
"resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz",
"integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"qs": {
"version": "6.10.3",
@@ -7426,6 +9628,11 @@
"side-channel": "^1.0.4"
}
},
+ "quick-lru": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="
+ },
"random-bytes": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
@@ -7454,13 +9661,15 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"resolve": {
"version": "1.22.8",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
"integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
"dev": true,
+ "peer": true,
"requires": {
"is-core-module": "^2.13.0",
"path-parse": "^1.0.7",
@@ -7468,15 +9677,16 @@
}
},
"resolve-alpn": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz",
- "integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA=="
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
+ "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g=="
},
"resolve-cwd": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
"integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
"dev": true,
+ "peer": true,
"requires": {
"resolve-from": "^5.0.0"
}
@@ -7485,20 +9695,45 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"resolve.exports": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz",
"integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"responselike": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
- "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz",
+ "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==",
"requires": {
- "lowercase-keys": "^2.0.0"
+ "lowercase-keys": "^3.0.0"
+ }
+ },
+ "rollup": {
+ "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"
}
},
"safer-buffer": {
@@ -7511,7 +9746,8 @@
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"setprototypeof": {
"version": "1.2.0",
@@ -7545,28 +9781,44 @@
"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
+ "dev": true,
+ "peer": true
},
"sisteransi": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "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": {
@@ -7574,6 +9826,7 @@
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
"integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
"dev": true,
+ "peer": true,
"requires": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
@@ -7583,28 +9836,43 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"stack-utils": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
"integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
"dev": true,
+ "peer": true,
"requires": {
"escape-string-regexp": "^2.0.0"
}
},
+ "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"
@@ -7615,6 +9883,7 @@
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
+ "peer": true,
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -7626,6 +9895,7 @@
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
+ "peer": true,
"requires": {
"ansi-regex": "^5.0.1"
}
@@ -7634,25 +9904,46 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
"integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"strip-final-newline": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true
+ "dev": true,
+ "peer": true
+ },
+ "strip-literal": {
+ "version": "2.0.0",
+ "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
+ }
+ }
},
"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"
}
@@ -7661,36 +9952,59 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"test-exclude": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
"integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
"dev": true,
+ "peer": true,
"requires": {
"@istanbuljs/schema": "^0.1.2",
"glob": "^7.1.4",
"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
+ "dev": true,
+ "peer": true
},
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
+ "peer": true,
"requires": {
"is-number": "^7.0.0"
}
@@ -7704,8 +10018,7 @@
"tunnel": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
- "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
- "dev": true
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
},
"type-detect": {
"version": "4.0.8",
@@ -7717,7 +10030,8 @@
"version": "0.21.3",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
"integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"type-is": {
"version": "1.6.18",
@@ -7729,6 +10043,12 @@
"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",
@@ -7744,6 +10064,13 @@
"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",
@@ -7755,6 +10082,7 @@
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
"integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
"dev": true,
+ "peer": true,
"requires": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
@@ -7769,25 +10097,158 @@
"uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "dev": true
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
},
"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"
}
@@ -7801,11 +10262,22 @@
"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",
@@ -7815,13 +10287,16 @@
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true,
+ "peer": true
},
"write-file-atomic": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
"integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
"dev": true,
+ "peer": true,
"requires": {
"imurmurhash": "^0.1.4",
"signal-exit": "^3.0.7"
@@ -7831,19 +10306,22 @@
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"yargs": {
"version": "17.7.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
"integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
"dev": true,
+ "peer": true,
"requires": {
"cliui": "^8.0.1",
"escalade": "^3.1.1",
@@ -7858,13 +10336,15 @@
"version": "21.1.1",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
"integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"yocto-queue": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true
+ "dev": true,
+ "peer": true
}
}
}
diff --git a/package.json b/package.json
index 56354bc..871df96 100644
--- a/package.json
+++ b/package.json
@@ -2,14 +2,15 @@
"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": "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"
+ "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"
},
"files": [
"src/**/*",
@@ -34,18 +35,15 @@
},
"homepage": "https://github.com/hashicorp/vault-action#readme",
"dependencies": {
- "got": "^11.8.6",
+ "@actions/core": "^1.10.1",
+ "got": "^14.2.1",
"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"
+ "mock-http-server": "^1.4.5",
+ "vitest": "^1.3.1"
}
}
diff --git a/src/action.js b/src/action.js
index 94c8f8e..03ef0b3 100644
--- a/src/action.js
+++ b/src/action.js
@@ -1,12 +1,14 @@
-// @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');
+import core from '@actions/core';
+import got from 'got';
-const { auth: { retrieveToken }, secrets: { getSecrets } } = require('./index');
+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";
+const jsonata = require('jsonata');
const AUTH_METHODS = ['approle', 'token', 'github', 'jwt', 'kubernetes', 'ldap', 'userpass'];
const ENCODING_TYPES = ['base64', 'hex', 'utf8'];
@@ -219,9 +221,8 @@ function parseHeadersInput(inputKey, inputOptions) {
}, new Map());
}
-module.exports = {
+export {
exportSecrets,
parseSecretsInput,
parseHeadersInput,
-};
-
+}
diff --git a/src/action.test.js b/src/action.test.js
index eb99bfa..3844358 100644
--- a/src/action.test.js
+++ b/src/action.test.js
@@ -1,17 +1,17 @@
-jest.mock('got');
-jest.mock('@actions/core');
-jest.mock('@actions/core/lib/command');
+import { vi, describe, test, expect } from 'vitest';
-const command = require('@actions/core/lib/command');
-const core = require('@actions/core');
-const got = require('got');
-const {
+vi.mock('got');
+vi.mock('@actions/core');
+
+import core from '@actions/core';
+import got from 'got';
+import {
exportSecrets,
parseSecretsInput,
parseHeadersInput
-} = require('./action');
+} from './action.js';
-const { when } = require('jest-when');
+import { when } from 'jest-when'
describe('parseSecretsInput', () => {
it('parses simple secret', () => {
@@ -132,7 +132,7 @@ describe('parseHeaders', () => {
describe('exportSecrets', () => {
beforeEach(() => {
- jest.resetAllMocks();
+ vi.resetAllMocks();
when(core.getInput)
.calledWith('url', expect.anything())
diff --git a/src/auth.js b/src/auth.js
index 630ad1e..5756101 100644
--- a/src/auth.js
+++ b/src/auth.js
@@ -1,8 +1,8 @@
// @ts-check
-const core = require('@actions/core');
-const rsasign = require('jsrsasign');
-const fs = require('fs');
-const { default: got } = require('got');
+import core from '@actions/core';
+import * as fs from 'fs';
+import got from 'got';
+import rsasign from 'jsrsasign';
const defaultKubernetesTokenPath = '/var/run/secrets/kubernetes.io/serviceaccount/token'
/***
@@ -154,6 +154,6 @@ async function getClientToken(client, method, path, payload) {
* }} auth
*/
-module.exports = {
+export {
retrieveToken,
};
diff --git a/src/auth.test.js b/src/auth.test.js
index ac689d3..1d17b36 100644
--- a/src/auth.test.js
+++ b/src/auth.test.js
@@ -1,22 +1,20 @@
-jest.mock('got');
-jest.mock('@actions/core');
-jest.mock('@actions/core/lib/command');
-jest.mock('fs', () => ({
- stat: jest.fn().mockResolvedValue(null),
+import { vi, describe, test, expect } from 'vitest';
+
+vi.mock('got');
+vi.mock('@actions/core');
+vi.mock('fs', () => ({
+ stat: vi.fn().mockResolvedValue(null),
promises: {
- access: jest.fn().mockResolvedValue(null),
+ access: vi.fn().mockResolvedValue(null),
}
}));
-const core = require('@actions/core');
-const got = require('got');
-const fs = require("fs")
-const { when } = require('jest-when');
+import core from '@actions/core';
+import got from 'got'
+import * as fs from 'fs';
+import { when } from 'jest-when'
-
-const {
- retrieveToken
-} = require('./auth');
+import { retrieveToken } from './auth.js';
function mockInput(name, key) {
@@ -27,7 +25,7 @@ function mockInput(name, key) {
function mockApiResponse() {
const response = { body: { auth: { client_token: testToken, renewable: true, policies: [], accessor: "accessor" } } }
- got.post = jest.fn()
+ got.post = vi.fn()
got.post.mockReturnValue(response)
}
const testToken = "testoken";
@@ -35,7 +33,7 @@ const testToken = "testoken";
describe("test retrival for token", () => {
beforeEach(() => {
- jest.resetAllMocks();
+ vi.resetAllMocks();
});
it("test retrival with approle", async () => {
@@ -76,7 +74,7 @@ describe("test retrival for token", () => {
mockInput("kubernetesTokenPath", testTokenPath)
mockInput("role", testRole)
mockInput("path", testPath)
- fs.readFileSync = jest.fn()
+ fs.readFileSync = vi.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
new file mode 100644
index 0000000..55708c1
--- /dev/null
+++ b/src/cjs-require.js
@@ -0,0 +1,7 @@
+// 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 b005350..df7addb 100644
--- a/src/constants.js
+++ b/src/constants.js
@@ -1,5 +1,5 @@
const WILDCARD = '*';
-module.exports = {
+export {
WILDCARD
-};
\ No newline at end of file
+};
diff --git a/src/entry.js b/src/entry.js
index ea764e6..dea04bf 100644
--- a/src/entry.js
+++ b/src/entry.js
@@ -1,5 +1,5 @@
-const core = require('@actions/core');
-const { exportSecrets } = require('./action');
+import core from '@actions/core';
+import { exportSecrets } from './action.js';
(async () => {
try {
diff --git a/src/index.js b/src/index.js
index d1d673b..cf4affa 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,7 +1,7 @@
-const auth = require('./auth');
-const secrets = require('./secrets');
+import auth from './auth.js';
+import secrets from './secrets.js';
-module.exports = {
+export default {
auth,
secrets
-};
\ No newline at end of file
+};
diff --git a/src/retries.test.js b/src/retries.test.js
index 285a7f2..1ca7d9f 100644
--- a/src/retries.test.js
+++ b/src/retries.test.js
@@ -1,17 +1,19 @@
-jest.mock('@actions/core');
+import { vi, describe, test, expect } from 'vitest';
-const core = require('@actions/core');
-const ServerMock = require("mock-http-server");
-const { exportSecrets } = require("./action");
-const { when } = require('jest-when');
+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';
describe('exportSecrets retries', () => {
var server = new ServerMock({ host: "127.0.0.1", port: 0 });
var calls = 0;
- beforeEach((done) => {
+ beforeEach(() => new Promise(done => {
calls = 0;
- jest.resetAllMocks();
+ vi.resetAllMocks();
when(core.getInput)
.calledWith('token', expect.anything())
@@ -28,11 +30,11 @@ describe('exportSecrets retries', () => {
.mockReturnValueOnce('http://127.0.0.1:' + server.getHttpPort());
done();
});
- });
+ }));
- afterEach((done) => {
+ afterEach(() => new Promise(done => {
server.stop(done);
- });
+ }));
function mockStatusCodes(statusCodes) {
server.on({
@@ -51,19 +53,19 @@ describe('exportSecrets retries', () => {
});
}
- it('retries on 412 status code', (done) => {
+ it('retries on 412 status code', () => new Promise(done => {
mockStatusCodes([412, 200])
exportSecrets().then(() => {
expect(calls).toEqual(2);
done();
});
- });
+ }));
- it('retries on 500 status code', (done) => {
+ it('retries on 500 status code', () => new Promise(done => {
mockStatusCodes([500, 200])
exportSecrets().then(() => {
expect(calls).toEqual(2);
done();
});
- });
+ }));
});
diff --git a/src/secrets.js b/src/secrets.js
index 10677da..9552a4b 100644
--- a/src/secrets.js
+++ b/src/secrets.js
@@ -1,7 +1,11 @@
-const jsonata = require("jsonata");
-const { WILDCARD } = require("./constants");
-const { normalizeOutputKey } = require("./utils");
-const core = require('@actions/core');
+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');
+
/**
* @typedef {Object} SecretRequest
@@ -44,7 +48,7 @@ async function getSecrets(secretRequests, client, ignoreNotFound) {
} catch (error) {
const {response} = error;
if (response?.statusCode === 404) {
- notFoundMsg = `Unable to retrieve result for "${path}" because it was not found: ${response.body.trim()}`;
+ let 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}`);
@@ -165,7 +169,7 @@ const selectAndAppendResults = async (
];
};
-module.exports = {
+export {
getSecrets,
selectData
}
diff --git a/src/utils.js b/src/utils.js
index b8dd863..b2fa151 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -14,6 +14,6 @@ function normalizeOutputKey(dataKey, isEnvVar = false) {
return outputKey;
}
-module.exports = {
- normalizeOutputKey
+export {
+ normalizeOutputKey
};
diff --git a/tsconfig.json b/tsconfig.json
index 91e905b..49359fa 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
new file mode 100644
index 0000000..e70fa6d
--- /dev/null
+++ b/vitest.config.js
@@ -0,0 +1,12 @@
+import { defineConfig, configDefaults } from 'vitest/config'
+
+export default defineConfig({
+ test: {
+ // required to make jest-when work with vitest
+ globals: true,
+ exclude:[
+ ...configDefaults.exclude,
+ '**/integrationTests/**'
+ ]
+ },
+})