diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3435511 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +.idea/ +node_modules/ + + +.DS_Store +.vs + +dist/ +coverage/ \ No newline at end of file diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..45b97dd --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023, Piero Solinas and Daniele Carlini, + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..8bc7e06 --- /dev/null +++ b/README.md @@ -0,0 +1,997 @@ +[ts-utily](README.md) / Exports + +# ts-utily + +## Table of contents + +### Functions + +- [at](#at) +- [capitalize](#capitalize) +- [capitalizeFully](#capitalizefully) +- [compare](#compare) +- [convertIndexSignaturesToMap](#convertindexsignaturestomap) +- [convertMapToIndexSignatures](#convertmaptoindexsignatures) +- [deleteElementCollection](#deleteelementcollection) +- [equalsCollection](#equalscollection) +- [findOrDefault](#findordefault) +- [get](#get) +- [getOrDefault](#getordefault) +- [getOrDefaultCollection](#getordefaultcollection) +- [getOrDefaultString](#getordefaultstring) +- [includes](#includes) +- [isEmptyCollection](#isemptycollection) +- [isEmptyString](#isemptystring) +- [isEqual](#isequal) +- [isNotEmptyCollection](#isnotemptycollection) +- [isNotEmptyString](#isnotemptystring) +- [isNumber](#isnumber) +- [isString](#isstring) +- [notPresent](#notpresent) +- [parzializeArray](#parzializearray) +- [percentage](#percentage) +- [present](#present) +- [removeDuplicateByKey](#removeduplicatebykey) +- [removeWhiteSpace](#removewhitespace) +- [replaceAll](#replaceall) +- [sortByObjectValues](#sortbyobjectvalues) +- [sortNumericString](#sortnumericstring) +- [ternaryOperator](#ternaryoperator) +- [toBoolean](#toboolean) +- [toNumber](#tonumber) + +## Functions + +### at + +▸ **at**\<`T`\>(`collection`, `index`): `undefined` \| `T` + +The function `at` returns the element at the specified index in a collection, or undefined if the collection is empty or the index is out of bounds. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is an array of type `T[]`, or it can be `undefined` or `null`. It represents the collection of elements from which we want to retrieve an element at a specific index. | +| `index` | `number` | The `index` parameter is the position of the element you want to retrieve from the `collection`. It is a number that represents the index of the element in the array. | + +#### Returns + +`undefined` \| `T` + +the element at the specified index in the collection. If the collection is empty or the index is out of range, it will return undefined. + +#### Defined in + +utils/collection-utils.ts:29 + +___ + +### capitalize + +▸ **capitalize**(`str`): `string` + +The `capitalize` function takes a string as input and returns the same string with the first letter of each word capitalized. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `str` | `undefined` \| ``null`` \| `string` | The `str` parameter is a string that may be `undefined` or `null`. | + +#### Returns + +`string` + +The `capitalize` function returns a string. + +#### Defined in + +utils/string-utils.ts:55 + +___ + +### capitalizeFully + +▸ **capitalizeFully**(`str`): `string` + +The `capitalizeFully` function takes a string as input and returns a new string with each word capitalized. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `str` | `undefined` \| ``null`` \| `string` | The `str` parameter is a string that can also be `undefined` or `null`. | + +#### Returns + +`string` + +The function `capitalizeFully` returns a string. + +#### Defined in + +utils/string-utils.ts:68 + +___ + +### compare + +▸ **compare**(`s1`, `s2`): `number` + +The function "compare" compares two strings case-insensitively and returns -1 if the first string is smaller, 1 if the second string is smaller. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `s1` | `string` | The parameter `s1` is a string that represents the first string to be compared. | +| `s2` | `string` | The parameter `s2` is a string that represents the second string to be compared. | + +#### Returns + +`number` + +a number. If `s1` is lexicographically less than `s2` (ignoring case), it returns -1. Otherwise, it returns 1. + +#### Defined in + +utils/string-utils.ts:83 + +___ + +### convertIndexSignaturesToMap + +▸ **convertIndexSignaturesToMap**\<`V`\>(`indexSignatures`): `undefined` \| `Map`\<`string`, `V`\> + +The function converts an object with index signatures to a Map. + +#### Type parameters + +| Name | +| :------ | +| `V` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `indexSignatures` | `undefined` \| \{ `[p: string]`: `V`; } | An object that contains index signatures, where the keys are strings and the values can be of any type. | + +#### Returns + +`undefined` \| `Map`\<`string`, `V`\> + +a `Map` or `undefined`. + +#### Defined in + +utils/conversion-utils.ts:8 + +___ + +### convertMapToIndexSignatures + +▸ **convertMapToIndexSignatures**\<`V`\>(`map`): `undefined` \| \{ `[p: string]`: `V`; } + +The function converts a Map object to an object with index signatures in TypeScript. + +#### Type parameters + +| Name | +| :------ | +| `V` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `map` | `undefined` \| `Map`\<`string`, `V`\> | A Map object that contains key-value pairs. | + +#### Returns + +`undefined` \| \{ `[p: string]`: `V`; } + +an object with index signatures, where the keys are strings and the values are of type V. If the input map is undefined, the function returns undefined. + +#### Defined in + +utils/conversion-utils.ts:20 + +___ + +### deleteElementCollection + +▸ **deleteElementCollection**\<`T`\>(`collection`, `element`): `T`[] + +The `deleteElementCollection` function removes an element from a collection if it exists, otherwise it returns the original collection. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is an array of elements of type `T`, or it can be `undefined` or `null`. | +| `element` | `T` \| `Readonly`\<`T`\> | The `element` parameter represents the element that you want to delete from the `collection`. | + +#### Returns + +`T`[] + +an array of type T. + +#### Defined in + +utils/collection-utils.ts:62 + +___ + +### equalsCollection + +▸ **equalsCollection**\<`T`\>(`collection1`, `collection2`): `boolean` + +The function checks if two collections are equal by comparing their lengths and elements. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `collection1` | `undefined` \| ``null`` \| `T`[] | The `collection1` parameter is an array of type `T`, or it can be `undefined` or `null`. | +| `collection2` | `undefined` \| ``null`` \| `T`[] | The `collection2` parameter is a generic array (`T[]`) or can be `undefined` or `null`. It represents the second collection that you want to compare with `collection1`. | + +#### Returns + +`boolean` + +a boolean value. + +#### Defined in + +utils/collection-utils.ts:76 + +___ + +### findOrDefault + +▸ **findOrDefault**\<`T`\>(`collection`, `element`, `defaultElement`): `T` + +The `findOrDefault` function searches for an element in a collection and returns it if found, otherwise it returns a default element. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is an array of elements of type `T`, or it can be `undefined` or `null`. It represents the collection of elements in which we want to find a specific element. | +| `element` | `T` \| `Readonly`\<`T`\> | The `element` parameter represents the element that you want to find in the `collection`. | +| `defaultElement` | `T` \| `Readonly`\<`T`\> | The `defaultElement` parameter is the value that will be returned if the `element` is not found in the `collection`. | + +#### Returns + +`T` + +a value of type T. + +#### Defined in + +utils/collection-utils.ts:91 + +___ + +### get + +▸ **get**\<`T`\>(`collection`): `T`[] + +The `get` function returns the input collection if it is not empty, otherwise it returns an empty array. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is of type `T[] \| undefined \| null`. This means it can accept an array of type `T`, or it can be `undefined` or `null`. | + +#### Returns + +`T`[] + +an array of type T. + +#### Defined in + +utils/collection-utils.ts:40 + +___ + +### getOrDefault + +▸ **getOrDefault**\<`T`\>(`data`, `defaultValue`): `T` + +The `getOrDefault` function returns the provided data if it is not null or undefined, otherwise it returns the provided default value. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | `T` | The `data` parameter is the value that you want to check if it is null or undefined. | +| `defaultValue` | `T` | The `defaultValue` parameter is the value that will be returned if the `data` parameter is `null` or `undefined`. | + +#### Returns + +`T` + +The function `getOrDefault` returns the value of `data` if it is not null or undefined, otherwise it returns the value of `defaultValue`. + +#### Defined in + +utils/common-utils.ts:36 + +___ + +### getOrDefaultCollection + +▸ **getOrDefaultCollection**\<`T`\>(`collection`, `defaultList`): `T`[] + +The `getOrDefaultCollection` function returns the provided collection if it is not empty, otherwise it returns the default list. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is a variable that represents an array of elements of type `T`, or it can be `undefined` or `null`. | +| `defaultList` | `T`[] | The `defaultList` parameter is an array of type `T[]`. It is the list that will be returned if the `collection` parameter is empty or undefined. | + +#### Returns + +`T`[] + +an array of type T. + +#### Defined in + +utils/collection-utils.ts:51 + +___ + +### getOrDefaultString + +▸ **getOrDefaultString**(`string`, `defaultValue?`): `string` + +The `getOrDefaultString` function returns a string value if it is not empty, otherwise it returns a default value. + +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `string` | `undefined` \| ``null`` \| `string` | `undefined` | The `string` parameter is a string value that can be either a valid string, `undefined`, or `null`. | +| `defaultValue?` | `string` | `''` | The `defaultValue` parameter is a string that specifies the value to return if the `string` parameter is empty, undefined, or null. If no `defaultValue` is provided, it defaults to an empty string (''). | + +#### Returns + +`string` + +The function `getOrDefault` returns a string value. + +#### Defined in + +utils/string-utils.ts:40 + +___ + +### includes + +▸ **includes**(`string1`, `string2`): `boolean` + +The function checks if a given string contains another given string, ignoring case sensitivity. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `string1` | `undefined` \| ``null`` \| `string` | A string that can be undefined or null. | +| `string2` | `undefined` \| ``null`` \| `string` | The `string2` parameter is a string that represents the substring that we want to check if it is present in `string1`. | + +#### Returns + +`boolean` + +The function `includes` returns a boolean value. + +#### Defined in + +utils/string-utils.ts:10 + +___ + +### isEmptyCollection + +▸ **isEmptyCollection**\<`T`\>(`collection`): `boolean` + +The function `isEmptyCollection` checks if a collection is empty or not. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is a generic type `T[]` which represents an array of elements of type `T`. It can also be `undefined` or `null`. | + +#### Returns + +`boolean` + +a boolean value indicating whether the collection is empty or not. + +#### Defined in + +utils/collection-utils.ts:9 + +___ + +### isEmptyString + +▸ **isEmptyString**(`string`): `boolean` + +The function checks if a string is empty, including cases where the string is undefined or null. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `string` | `undefined` \| ``null`` \| `string` | The `string` parameter is of type `string \| undefined \| null`, which means it can accept a value of type `string`, `undefined`, or `null`. | + +#### Returns + +`boolean` + +The function `isEmpty` returns a boolean value. + +#### Defined in + +utils/string-utils.ts:20 + +___ + +### isEqual + +▸ **isEqual**\<`T`\>(`...objects`): `boolean` + +The `isEqual` function checks if all the given objects are equal by comparing their JSON representations. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `...objects` | `T`[] | The `objects` parameter is a rest parameter that allows you to pass in multiple objects of type `T`. The rest parameter syntax (`...objects`) allows you to pass any number of arguments, which will be collected into an array called `objects`. | + +#### Returns + +`boolean` + +The function `isEqual` returns a boolean value. + +#### Defined in + +utils/common-utils.ts:46 + +___ + +### isNotEmptyCollection + +▸ **isNotEmptyCollection**\<`T`\>(`collection`): `boolean` + +The function `isNotEmptyCollection` checks if a collection is not empty. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is of type `T[] \| undefined \| null`. This means it can accept an array of type `T`, or it can be `undefined` or `null`. | + +#### Returns + +`boolean` + +The function isNotEmpty is returning a boolean value. + +#### Defined in + +utils/collection-utils.ts:19 + +___ + +### isNotEmptyString + +▸ **isNotEmptyString**(`string`): `boolean` + +The function `isNotEmptyString` checks if a string is not empty. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `string` | `undefined` \| ``null`` \| `string` | The parameter "string" is of type string and can also be undefined or null. | + +#### Returns + +`boolean` + +The function isNotEmpty is returning a boolean value. + +#### Defined in + +utils/string-utils.ts:30 + +___ + +### isNumber + +▸ **isNumber**\<`T`\>(`value`): `boolean` + +The function `isNumber` checks if a value is a number in TypeScript. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `T` | The `value` parameter is the value that you want to check if it is a number. It can be of any type `T`. | + +#### Returns + +`boolean` + +a boolean value. + +#### Defined in + +utils/number-utils.ts:19 + +___ + +### isString + +▸ **isString**\<`T`\>(`obj`): `boolean` + +The function `isString` checks if an object is a string or an instance of the String class. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `obj` | `T` | The `obj` parameter is a generic type `T`, which means it can be any type. | + +#### Returns + +`boolean` + +a boolean value indicating whether the input object is a string or not. + +#### Defined in + +utils/string-utils.ts:93 + +___ + +### notPresent + +▸ **notPresent**\<`T`\>(`...args`): `boolean` + +The function `notPresent` checks if any of the arguments passed to it are not present. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `...args` | `T`[] | The `args` parameter is a rest parameter of type `T[]`, which means it can accept any number of arguments of type `T`. | + +#### Returns + +`boolean` + +a boolean value. + +#### Defined in + +utils/common-utils.ts:26 + +___ + +### parzializeArray + +▸ **parzializeArray**\<`T`\>(`array`, `sezione`): `undefined` \| `T`[][] + +The function `parzializeArray` takes an array and a section size as input and returns an array of arrays, where each subarray contains a section of the original array. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `array` | `undefined` \| ``null`` \| `T`[] | The `array` parameter is an array of elements of type `T`, or it can be `undefined` or `null`. | +| `sezione` | `number` | The parameter "sezione" represents the size of each section or chunk that the array will be divided into. | + +#### Returns + +`undefined` \| `T`[][] + +an array of arrays of type T, or undefined. + +#### Defined in + +utils/collection-utils.ts:115 + +___ + +### percentage + +▸ **percentage**(`value`, `totalValue`): `number` + +The function calculates the percentage of a value in relation to a total value. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | The value parameter represents the specific value that you want to calculate the percentage of. It is a number that you want to find the percentage of in relation to the totalValue. | +| `totalValue` | `number` | The total value represents the maximum value or the total amount that you want to calculate the percentage of. | + +#### Returns + +`number` + +a number, which is the calculated percentage value. + +#### Defined in + +utils/number-utils.ts:33 + +___ + +### present + +▸ **present**\<`T`\>(`...args`): `boolean` + +The `present` function checks if all the arguments passed to it are not null or undefined. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `...args` | `T`[] | args is a rest parameter of type T[]. It allows the function to accept any number of arguments of type T. | + +#### Returns + +`boolean` + +a boolean value. + +#### Defined in + +utils/common-utils.ts:15 + +___ + +### removeDuplicateByKey + +▸ **removeDuplicateByKey**\<`T`\>(`collection`, `key?`): `T`[] + +The function `removeDuplicatesByKey` removes duplicate elements from a collection based on a specified key. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is an array of objects of type `T`. It can also be `undefined` or `null`. | +| `key?` | keyof `T` | The `key` parameter is an optional parameter that specifies the property of the objects in the `collection` array that should be used as the key for removing duplicates. If `key` is not provided, the entire objects in the `collection` array will be compared for duplicates. | + +#### Returns + +`T`[] + +The function `rimuoviDuplicatiByKey` returns an array of type `T[]`. + +#### Defined in + +utils/collection-utils.ts:103 + +___ + +### removeWhiteSpace + +▸ **removeWhiteSpace**(`str`): `string` + +The `removeWhiteSpace` function removes all white spaces from a given string. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `str` | `undefined` \| ``null`` \| `string` | The `str` parameter is a string that can be either a valid string value, `undefined`, or `null`. | + +#### Returns + +`string` + +a string with all whitespace characters removed. + +#### Defined in + +utils/string-utils.ts:102 + +___ + +### replaceAll + +▸ **replaceAll**(`originalString`, `occurrenceToReplace`, `replaceWith`): `string` + +The `replaceAll` function replaces all occurrences of a specified string in a given string with another specified string. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `originalString` | `string` | The original string that you want to perform the replacement on. | +| `occurrenceToReplace` | `string` | The `occurrenceToReplace` parameter is a string that represents the occurrence or pattern that you want to replace in the `originalString`. | +| `replaceWith` | `string` | The `replaceWith` parameter is the string that will replace all occurrences of `occurrenceToReplace` in the `originalString`. | + +#### Returns + +`string` + +The function `replaceAll` returns a string. + +#### Defined in + +utils/string-utils.ts:125 + +___ + +### sortByObjectValues + +▸ **sortByObjectValues**\<`T`\>(`keys`, `isAsc`): (`a`: `T`, `b`: `T`) => `number` + +The function `sortByObjectValues` sorts an array of objects based on the values of specified nested keys in ascending or descending order. + +#### Type parameters + +| Name | Type | +| :------ | :------ | +| `T` | extends `object` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `keys` | `NestedKeyOf`\<`T`\>[] | An array of keys that represent the nested properties of the objects being sorted. | +| `isAsc` | `boolean` | The `isAsc` parameter is a boolean value that determines whether the sorting order should be ascending (`true`) or descending (`false`). | + +#### Returns + +`fn` + +The function `sortByObjectValues` returns a function that takes two objects `a` and `b` of type `T` and returns a number. + +▸ (`a`, `b`): `number` + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `a` | `T` | +| `b` | `T` | + +##### Returns + +`number` + +**`Example`** + +```ts +example of usage: [{name: 'Amanda', age:18}, {name: 'Victor', age:18}].sort(sortByObjectValues(['name', 'age'], true)) +``` + +**`Example`** + +```ts +array.sort(sortByObjectValues(['ele1', 'ele2' 'eleN',...], false)) +``` + +#### Defined in + +utils/sort-utils.ts:32 + +___ + +### sortNumericString + +▸ **sortNumericString**(`a`, `b`): `number` + +The function `sortNumericString` compares two numeric strings and returns a number indicating their relative order. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `a` | `string` | The parameter "a" is a string representing the first numeric string to be compared. | +| `b` | `string` | The parameter "b" is a string representing the second value to be compared. | + +#### Returns + +`number` + +a number. + +#### Defined in + +utils/string-utils.ts:135 + +___ + +### ternaryOperator + +▸ **ternaryOperator**(`condition`, `s1`, `s2`): `string` + +The `ternaryOperator` function returns `s1` if `condition` is true, otherwise it returns `s2`. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `condition` | `boolean` | A boolean value that represents the condition to be evaluated. If the condition is true, the function will return s1. If the condition is false, the function will return s2. | +| `s1` | `string` | The parameter `s1` is a string that represents the value to be returned if the condition is true. | +| `s2` | `string` | The parameter `s2` is a string that represents the value to be returned if the `condition` is false. | + +#### Returns + +`string` + +The ternaryOperator function returns either s2 or s1 based on the value of the condition. If the condition is false, it returns s2. Otherwise, it returns s1. + +#### Defined in + +utils/string-utils.ts:114 + +___ + +### toBoolean + +▸ **toBoolean**(`value`): `boolean` + +The function `toBoolean` converts a string value to a boolean value, considering various possible representations of true like as 'true', '1' or 'y'. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | The `value` parameter is a string that represents a boolean value. | + +#### Returns + +`boolean` + +a boolean value. + +#### Defined in + +utils/boolean-utils.ts:9 + +___ + +### toNumber + +▸ **toNumber**\<`T`\>(`value`): `number` + +The `toNumber` function converts a value to a number, returning 0 if the value is not a valid number. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `T` | The `value` parameter is of type `T`, which means it can be any type. It represents the value that needs to be converted to a number. | + +#### Returns + +`number` + +a number. + +#### Defined in + +utils/number-utils.ts:9 diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 0000000..e2ac661 --- /dev/null +++ b/docs/.nojekyll @@ -0,0 +1 @@ +TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false. \ No newline at end of file diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..2676599 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,1025 @@ +ts-utily / [Exports](modules.md) + +[ts-utily](README.md) / Exports + +# ts-utily + +## Table of contents + +### Type Aliases + +- [NestedKeyOf](#nestedkeyof) + +### Functions + +- [at](#at) +- [capitalize](#capitalize) +- [capitalizeFully](#capitalizefully) +- [compare](#compare) +- [convertIndexSignaturesToMap](#convertindexsignaturestomap) +- [convertMapToIndexSignatures](#convertmaptoindexsignatures) +- [deleteElementCollection](#deleteelementcollection) +- [equalsCollection](#equalscollection) +- [findOrDefault](#findordefault) +- [get](#get) +- [getOrDefault](#getordefault) +- [getOrDefaultCollection](#getordefaultcollection) +- [getOrDefaultString](#getordefaultstring) +- [includes](#includes) +- [isEmptyCollection](#isemptycollection) +- [isEmptyString](#isemptystring) +- [isEqual](#isequal) +- [isNotEmptyCollection](#isnotemptycollection) +- [isNotEmptyString](#isnotemptystring) +- [isNumber](#isnumber) +- [isString](#isstring) +- [notPresent](#notpresent) +- [parzializeArray](#parzializearray) +- [percentage](#percentage) +- [present](#present) +- [removeDuplicateByKey](#removeduplicatebykey) +- [removeWhiteSpace](#removewhitespace) +- [replaceAll](#replaceall) +- [sortByObjectValues](#sortbyobjectvalues) +- [sortNumericString](#sortnumericstring) +- [ternaryOperator](#ternaryoperator) +- [toBoolean](#toboolean) +- [toNumber](#tonumber) + +## Type Aliases + +### NestedKeyOf + +Ƭ **NestedKeyOf**\<`ObjectType`\>: { [Key in keyof ObjectType & (string \| number)]: ObjectType[Key] extends +object ? `${Key}` \| `${Key}.${NestedKeyOf\ extends infer U extends string ? U : never}` : ` +${Key}` }[keyof `ObjectType` & `string` \| `number`] + +#### Type parameters + +| Name | Type | +|:-------------|:-----------------| +| `ObjectType` | extends `object` | + +#### Defined in + +model/nested-key-of.ts:1 + +## Functions + +### at + +▸ **at**\<`T`\>(`collection`, `index`): `undefined` \| `T` + +The function `at` returns the element at the specified index in a collection, or undefined if the collection is empty or +the index is out of bounds. + +#### Type parameters + +| Name | +|:-----| +| `T` | + +#### Parameters + +| Name | Type | Description | +|:-------------|:---------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is an array of type `T[]`, or it can be `undefined` or `null`. It represents the collection of elements from which we want to retrieve an element at a specific index. | +| `index` | `number` | The `index` parameter is the position of the element you want to retrieve from the `collection`. It is a number that represents the index of the element in the array. | + +#### Returns + +`undefined` \| `T` + +the element at the specified index in the collection. If the collection is empty or the index is out of range, it will +return undefined. + +#### Defined in + +utils/collection-utils.ts:29 + +___ + +### capitalize + +▸ **capitalize**(`str`): `string` + +The `capitalize` function takes a string as input and returns the same string with the first letter of each word +capitalized. + +#### Parameters + +| Name | Type | Description | +|:------|:------------------------------------|:-------------------------------------------------------------------| +| `str` | `undefined` \| ``null`` \| `string` | The `str` parameter is a string that may be `undefined` or `null`. | + +#### Returns + +`string` + +The `capitalize` function returns a string. + +#### Defined in + +utils/string-utils.ts:55 + +___ + +### capitalizeFully + +▸ **capitalizeFully**(`str`): `string` + +The `capitalizeFully` function takes a string as input and returns a new string with each word capitalized. + +#### Parameters + +| Name | Type | Description | +|:------|:------------------------------------|:------------------------------------------------------------------------| +| `str` | `undefined` \| ``null`` \| `string` | The `str` parameter is a string that can also be `undefined` or `null`. | + +#### Returns + +`string` + +The function `capitalizeFully` returns a string. + +#### Defined in + +utils/string-utils.ts:68 + +___ + +### compare + +▸ **compare**(`s1`, `s2`): `number` + +The function "compare" compares two strings case-insensitively and returns -1 if the first string is smaller, 1 if the +second string is smaller. + +#### Parameters + +| Name | Type | Description | +|:-----|:---------|:---------------------------------------------------------------------------------| +| `s1` | `string` | The parameter `s1` is a string that represents the first string to be compared. | +| `s2` | `string` | The parameter `s2` is a string that represents the second string to be compared. | + +#### Returns + +`number` + +a number. If `s1` is lexicographically less than `s2` (ignoring case), it returns -1. Otherwise, it returns 1. + +#### Defined in + +utils/string-utils.ts:83 + +___ + +### convertIndexSignaturesToMap + +▸ **convertIndexSignaturesToMap**\<`V`\>(`indexSignatures`): `undefined` \| `Map`\<`string`, `V`\> + +The function converts an object with index signatures to a Map. + +#### Type parameters + +| Name | +|:-----| +| `V` | + +#### Parameters + +| Name | Type | Description | +|:------------------|:-----------------------------------------|:--------------------------------------------------------------------------------------------------------| +| `indexSignatures` | `undefined` \| { `[p: string]`: `V`; } | An object that contains index signatures, where the keys are strings and the values can be of any type. | + +#### Returns + +`undefined` \| `Map`\<`string`, `V`\> + +a `Map` or `undefined`. + +#### Defined in + +utils/conversion-utils.ts:8 + +___ + +### convertMapToIndexSignatures + +▸ **convertMapToIndexSignatures**\<`V`\>(`map`): `undefined` \| { `[p: string]`: `V`; } + +The function converts a Map object to an object with index signatures in TypeScript. + +#### Type parameters + +| Name | +|:-----| +| `V` | + +#### Parameters + +| Name | Type | Description | +|:------|:--------------------------------------|:--------------------------------------------| +| `map` | `undefined` \| `Map`\<`string`, `V`\> | A Map object that contains key-value pairs. | + +#### Returns + +`undefined` \| { `[p: string]`: `V`; } + +an object with index signatures, where the keys are strings and the values are of type V. If the input map is undefined, +the function returns undefined. + +#### Defined in + +utils/conversion-utils.ts:20 + +___ + +### deleteElementCollection + +▸ **deleteElementCollection**\<`T`\>(`collection`, `element`): `T`[] + +The `deleteElementCollection` function removes an element from a collection if it exists, otherwise it returns the +original collection. + +#### Type parameters + +| Name | +|:-----| +| `T` | + +#### Parameters + +| Name | Type | Description | +|:-------------|:---------------------------------|:----------------------------------------------------------------------------------------------------| +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is an array of elements of type `T`, or it can be `undefined` or `null`. | +| `element` | `T` \| `Readonly`\<`T`\> | The `element` parameter represents the element that you want to delete from the `collection`. | + +#### Returns + +`T`[] + +an array of type T. + +#### Defined in + +utils/collection-utils.ts:62 + +___ + +### equalsCollection + +▸ **equalsCollection**\<`T`\>(`collection1`, `collection2`): `boolean` + +The function checks if two collections are equal by comparing their lengths and elements. + +#### Type parameters + +| Name | +|:-----| +| `T` | + +#### Parameters + +| Name | Type | Description | +|:--------------|:---------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `collection1` | `undefined` \| ``null`` \| `T`[] | The `collection1` parameter is an array of type `T`, or it can be `undefined` or `null`. | +| `collection2` | `undefined` \| ``null`` \| `T`[] | The `collection2` parameter is a generic array (`T[]`) or can be `undefined` or `null`. It represents the second collection that you want to compare with `collection1`. | + +#### Returns + +`boolean` + +a boolean value. + +#### Defined in + +utils/collection-utils.ts:76 + +___ + +### findOrDefault + +▸ **findOrDefault**\<`T`\>(`collection`, `element`, `defaultElement`): `T` + +The `findOrDefault` function searches for an element in a collection and returns it if found, otherwise it returns a +default element. + +#### Type parameters + +| Name | +|:-----| +| `T` | + +#### Parameters + +| Name | Type | Description | +|:-----------------|:---------------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is an array of elements of type `T`, or it can be `undefined` or `null`. It represents the collection of elements in which we want to find a specific element. | +| `element` | `T` \| `Readonly`\<`T`\> | The `element` parameter represents the element that you want to find in the `collection`. | +| `defaultElement` | `T` \| `Readonly`\<`T`\> | The `defaultElement` parameter is the value that will be returned if the `element` is not found in the `collection`. | + +#### Returns + +`T` + +a value of type T. + +#### Defined in + +utils/collection-utils.ts:91 + +___ + +### get + +▸ **get**\<`T`\>(`collection`): `T`[] + +The `get` function returns the input collection if it is not empty, otherwise it returns an empty array. + +#### Type parameters + +| Name | +|:-----| +| `T` | + +#### Parameters + +| Name | Type | Description | +|:-------------|:---------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------| +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is of type `T[] \| undefined \| null`. This means it can accept an array of type `T`, or it can be `undefined` or `null`. | + +#### Returns + +`T`[] + +an array of type T. + +#### Defined in + +utils/collection-utils.ts:40 + +___ + +### getOrDefault + +▸ **getOrDefault**\<`T`\>(`data`, `defaultValue`): `T` + +The `getOrDefault` function returns the provided data if it is not null or undefined, otherwise it returns the provided +default value. + +#### Type parameters + +| Name | +|:-----| +| `T` | + +#### Parameters + +| Name | Type | Description | +|:---------------|:-----|:------------------------------------------------------------------------------------------------------------------| +| `data` | `T` | The `data` parameter is the value that you want to check if it is null or undefined. | +| `defaultValue` | `T` | The `defaultValue` parameter is the value that will be returned if the `data` parameter is `null` or `undefined`. | + +#### Returns + +`T` + +The function `getOrDefault` returns the value of `data` if it is not null or undefined, otherwise it returns the value +of `defaultValue`. + +#### Defined in + +utils/common-utils.ts:36 + +___ + +### getOrDefaultCollection + +▸ **getOrDefaultCollection**\<`T`\>(`collection`, `defaultList`): `T`[] + +The `getOrDefaultCollection` function returns the provided collection if it is not empty, otherwise it returns the +default list. + +#### Type parameters + +| Name | +|:-----| +| `T` | + +#### Parameters + +| Name | Type | Description | +|:--------------|:---------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------| +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is a variable that represents an array of elements of type `T`, or it can be `undefined` or `null`. | +| `defaultList` | `T`[] | The `defaultList` parameter is an array of type `T[]`. It is the list that will be returned if the `collection` parameter is empty or undefined. | + +#### Returns + +`T`[] + +an array of type T. + +#### Defined in + +utils/collection-utils.ts:51 + +___ + +### getOrDefaultString + +▸ **getOrDefaultString**(`string`, `defaultValue?`): `string` + +The `getOrDefaultString` function returns a string value if it is not empty, otherwise it returns a default value. + +#### Parameters + +| Name | Type | Default value | Description | +|:----------------|:------------------------------------|:--------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `string` | `undefined` \| ``null`` \| `string` | `undefined` | The `string` parameter is a string value that can be either a valid string, `undefined`, or `null`. | +| `defaultValue?` | `string` | `''` | The `defaultValue` parameter is a string that specifies the value to return if the `string` parameter is empty, undefined, or null. If no `defaultValue` is provided, it defaults to an empty string (''). | + +#### Returns + +`string` + +The function `getOrDefault` returns a string value. + +#### Defined in + +utils/string-utils.ts:40 + +___ + +### includes + +▸ **includes**(`string1`, `string2`): `boolean` + +The function checks if a given string contains another given string, ignoring case sensitivity. + +#### Parameters + +| Name | Type | Description | +|:----------|:------------------------------------|:-----------------------------------------------------------------------------------------------------------------------| +| `string1` | `undefined` \| ``null`` \| `string` | A string that can be undefined or null. | +| `string2` | `undefined` \| ``null`` \| `string` | The `string2` parameter is a string that represents the substring that we want to check if it is present in `string1`. | + +#### Returns + +`boolean` + +The function `includes` returns a boolean value. + +#### Defined in + +utils/string-utils.ts:10 + +___ + +### isEmptyCollection + +▸ **isEmptyCollection**\<`T`\>(`collection`): `boolean` + +The function `isEmptyCollection` checks if a collection is empty or not. + +#### Type parameters + +| Name | +|:-----| +| `T` | + +#### Parameters + +| Name | Type | Description | +|:-------------|:---------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------| +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is a generic type `T[]` which represents an array of elements of type `T`. It can also be `undefined` or `null`. | + +#### Returns + +`boolean` + +a boolean value indicating whether the collection is empty or not. + +#### Defined in + +utils/collection-utils.ts:9 + +___ + +### isEmptyString + +▸ **isEmptyString**(`string`): `boolean` + +The function checks if a string is empty, including cases where the string is undefined or null. + +#### Parameters + +| Name | Type | Description | +|:---------|:------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------| +| `string` | `undefined` \| ``null`` \| `string` | The `string` parameter is of type `string \| undefined \| null`, which means it can accept a value of type `string`, `undefined`, or `null`. | + +#### Returns + +`boolean` + +The function `isEmpty` returns a boolean value. + +#### Defined in + +utils/string-utils.ts:20 + +___ + +### isEqual + +▸ **isEqual**\<`T`\>(`...objects`): `boolean` + +The `isEqual` function checks if all the given objects are equal by comparing their JSON representations. + +#### Type parameters + +| Name | +|:-----| +| `T` | + +#### Parameters + +| Name | Type | Description | +|:-------------|:------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `...objects` | `T`[] | The `objects` parameter is a rest parameter that allows you to pass in multiple objects of type `T`. The rest parameter syntax (`...objects`) allows you to pass any number of arguments, which will be collected into an array called `objects`. | + +#### Returns + +`boolean` + +The function `isEqual` returns a boolean value. + +#### Defined in + +utils/common-utils.ts:46 + +___ + +### isNotEmptyCollection + +▸ **isNotEmptyCollection**\<`T`\>(`collection`): `boolean` + +The function `isNotEmptyCollection` checks if a collection is not empty. + +#### Type parameters + +| Name | +|:-----| +| `T` | + +#### Parameters + +| Name | Type | Description | +|:-------------|:---------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------| +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is of type `T[] \| undefined \| null`. This means it can accept an array of type `T`, or it can be `undefined` or `null`. | + +#### Returns + +`boolean` + +The function isNotEmpty is returning a boolean value. + +#### Defined in + +utils/collection-utils.ts:19 + +___ + +### isNotEmptyString + +▸ **isNotEmptyString**(`string`): `boolean` + +The function `isNotEmptyString` checks if a string is not empty. + +#### Parameters + +| Name | Type | Description | +|:---------|:------------------------------------|:----------------------------------------------------------------------------| +| `string` | `undefined` \| ``null`` \| `string` | The parameter "string" is of type string and can also be undefined or null. | + +#### Returns + +`boolean` + +The function isNotEmpty is returning a boolean value. + +#### Defined in + +utils/string-utils.ts:30 + +___ + +### isNumber + +▸ **isNumber**\<`T`\>(`value`): `boolean` + +The function `isNumber` checks if a value is a number in TypeScript. + +#### Type parameters + +| Name | +|:-----| +| `T` | + +#### Parameters + +| Name | Type | Description | +|:--------|:-----|:--------------------------------------------------------------------------------------------------------| +| `value` | `T` | The `value` parameter is the value that you want to check if it is a number. It can be of any type `T`. | + +#### Returns + +`boolean` + +a boolean value. + +#### Defined in + +utils/number-utils.ts:19 + +___ + +### isString + +▸ **isString**\<`T`\>(`obj`): `boolean` + +The function `isString` checks if an object is a string or an instance of the String class. + +#### Type parameters + +| Name | +|:-----| +| `T` | + +#### Parameters + +| Name | Type | Description | +|:------|:-----|:---------------------------------------------------------------------------| +| `obj` | `T` | The `obj` parameter is a generic type `T`, which means it can be any type. | + +#### Returns + +`boolean` + +a boolean value indicating whether the input object is a string or not. + +#### Defined in + +utils/string-utils.ts:93 + +___ + +### notPresent + +▸ **notPresent**\<`T`\>(`...args`): `boolean` + +The function `notPresent` checks if any of the arguments passed to it are not present. + +#### Type parameters + +| Name | +|:-----| +| `T` | + +#### Parameters + +| Name | Type | Description | +|:----------|:------|:-----------------------------------------------------------------------------------------------------------------------| +| `...args` | `T`[] | The `args` parameter is a rest parameter of type `T[]`, which means it can accept any number of arguments of type `T`. | + +#### Returns + +`boolean` + +a boolean value. + +#### Defined in + +utils/common-utils.ts:26 + +___ + +### parzializeArray + +▸ **parzializeArray**\<`T`\>(`array`, `sezione`): `undefined` \| `T`[][] + +The function `parzializeArray` takes an array and a section size as input and returns an array of arrays, where each +subarray contains a section of the original array. + +#### Type parameters + +| Name | +|:-----| +| `T` | + +#### Parameters + +| Name | Type | Description | +|:----------|:---------------------------------|:----------------------------------------------------------------------------------------------------------| +| `array` | `undefined` \| ``null`` \| `T`[] | The `array` parameter is an array of elements of type `T`, or it can be `undefined` or `null`. | +| `sezione` | `number` | The parameter "sezione" represents the size of each section or chunk that the array will be divided into. | + +#### Returns + +`undefined` \| `T`[][] + +an array of arrays of type T, or undefined. + +#### Defined in + +utils/collection-utils.ts:115 + +___ + +### percentage + +▸ **percentage**(`value`, `totalValue`): `number` + +The function calculates the percentage of a value in relation to a total value. + +#### Parameters + +| Name | Type | Description | +|:-------------|:---------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `value` | `number` | The value parameter represents the specific value that you want to calculate the percentage of. It is a number that you want to find the percentage of in relation to the totalValue. | +| `totalValue` | `number` | The total value represents the maximum value or the total amount that you want to calculate the percentage of. | + +#### Returns + +`number` + +a number, which is the calculated percentage value. + +#### Defined in + +utils/number-utils.ts:33 + +___ + +### present + +▸ **present**\<`T`\>(`...args`): `boolean` + +The `present` function checks if all the arguments passed to it are not null or undefined. + +#### Type parameters + +| Name | +|:-----| +| `T` | + +#### Parameters + +| Name | Type | Description | +|:----------|:------|:----------------------------------------------------------------------------------------------------------| +| `...args` | `T`[] | args is a rest parameter of type T[]. It allows the function to accept any number of arguments of type T. | + +#### Returns + +`boolean` + +a boolean value. + +#### Defined in + +utils/common-utils.ts:15 + +___ + +### removeDuplicateByKey + +▸ **removeDuplicateByKey**\<`T`\>(`collection`, `key?`): `T`[] + +The function `removeDuplicatesByKey` removes duplicate elements from a collection based on a specified key. + +#### Type parameters + +| Name | +|:-----| +| `T` | + +#### Parameters + +| Name | Type | Description | +|:-------------|:---------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is an array of objects of type `T`. It can also be `undefined` or `null`. | +| `key?` | keyof `T` | The `key` parameter is an optional parameter that specifies the property of the objects in the `collection` array that should be used as the key for removing duplicates. If `key` is not provided, the entire objects in the `collection` array will be compared for duplicates. | + +#### Returns + +`T`[] + +The function `rimuoviDuplicatiByKey` returns an array of type `T[]`. + +#### Defined in + +utils/collection-utils.ts:103 + +___ + +### removeWhiteSpace + +▸ **removeWhiteSpace**(`str`): `string` + +The `removeWhiteSpace` function removes all white spaces from a given string. + +#### Parameters + +| Name | Type | Description | +|:------|:------------------------------------|:-------------------------------------------------------------------------------------------------| +| `str` | `undefined` \| ``null`` \| `string` | The `str` parameter is a string that can be either a valid string value, `undefined`, or `null`. | + +#### Returns + +`string` + +a string with all whitespace characters removed. + +#### Defined in + +utils/string-utils.ts:102 + +___ + +### replaceAll + +▸ **replaceAll**(`originalString`, `occurrenceToReplace`, `replaceWith`): `string` + +The `replaceAll` function replaces all occurrences of a specified string in a given string with another specified +string. + +#### Parameters + +| Name | Type | Description | +|:----------------------|:---------|:--------------------------------------------------------------------------------------------------------------------------------------------| +| `originalString` | `string` | The original string that you want to perform the replacement on. | +| `occurrenceToReplace` | `string` | The `occurrenceToReplace` parameter is a string that represents the occurrence or pattern that you want to replace in the `originalString`. | +| `replaceWith` | `string` | The `replaceWith` parameter is the string that will replace all occurrences of `occurrenceToReplace` in the `originalString`. | + +#### Returns + +`string` + +The function `replaceAll` returns a string. + +#### Defined in + +utils/string-utils.ts:125 + +___ + +### sortByObjectValues + +▸ **sortByObjectValues**\<`T`\>(`keys`, `isAsc`): (`a`: `T`, `b`: `T`) => `number` + +The function `sortByObjectValues` sorts an array of objects based on the values of specified nested keys in ascending or +descending order. + +#### Type parameters + +| Name | Type | +|:-----|:-----------------| +| `T` | extends `object` | + +#### Parameters + +| Name | Type | Description | +|:--------|:-------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------| +| `keys` | [`NestedKeyOf`](modules.md#nestedkeyof)\<`T`\>[] | An array of keys that represent the nested properties of the objects being sorted. | +| `isAsc` | `boolean` | The `isAsc` parameter is a boolean value that determines whether the sorting order should be ascending (`true`) or descending (`false`). | + +#### Returns + +`fn` + +The function `sortByObjectValues` returns a function that takes two objects `a` and `b` of type `T` and returns a +number. + +▸ (`a`, `b`): `number` + +##### Parameters + +| Name | Type | +|:-----|:-----| +| `a` | `T` | +| `b` | `T` | + +##### Returns + +`number` + +#### Defined in + +utils/sort-utils.ts:27 + +___ + +### sortNumericString + +▸ **sortNumericString**(`a`, `b`): `number` + +The function `sortNumericString` compares two numeric strings and returns a number indicating their relative order. + +#### Parameters + +| Name | Type | Description | +|:-----|:---------|:------------------------------------------------------------------------------------| +| `a` | `string` | The parameter "a" is a string representing the first numeric string to be compared. | +| `b` | `string` | The parameter "b" is a string representing the second value to be compared. | + +#### Returns + +`number` + +a number. + +#### Defined in + +utils/string-utils.ts:135 + +___ + +### ternaryOperator + +▸ **ternaryOperator**(`condition`, `s1`, `s2`): `string` + +The `ternaryOperator` function returns `s1` if `condition` is true, otherwise it returns `s2`. + +#### Parameters + +| Name | Type | Description | +|:------------|:----------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `condition` | `boolean` | A boolean value that represents the condition to be evaluated. If the condition is true, the function will return s1. If the condition is false, the function will return s2. | +| `s1` | `string` | The parameter `s1` is a string that represents the value to be returned if the condition is true. | +| `s2` | `string` | The parameter `s2` is a string that represents the value to be returned if the `condition` is false. | + +#### Returns + +`string` + +The ternaryOperator function returns either s2 or s1 based on the value of the condition. If the condition is false, it +returns s2. Otherwise, it returns s1. + +#### Defined in + +utils/string-utils.ts:114 + +___ + +### toBoolean + +▸ **toBoolean**(`value`): `boolean` + +The function `toBoolean` converts a string value to a boolean value, considering various possible representations of +true like as 'true', '1' or 'y'. + +#### Parameters + +| Name | Type | Description | +|:--------|:---------|:-------------------------------------------------------------------| +| `value` | `string` | The `value` parameter is a string that represents a boolean value. | + +#### Returns + +`boolean` + +a boolean value. + +#### Defined in + +utils/boolean-utils.ts:9 + +___ + +### toNumber + +▸ **toNumber**\<`T`\>(`value`): `number` + +The `toNumber` function converts a value to a number, returning 0 if the value is not a valid number. + +#### Type parameters + +| Name | +|:-----| +| `T` | + +#### Parameters + +| Name | Type | Description | +|:--------|:-----|:--------------------------------------------------------------------------------------------------------------------------------------| +| `value` | `T` | The `value` parameter is of type `T`, which means it can be any type. It represents the value that needs to be converted to a number. | + +#### Returns + +`number` + +a number. + +#### Defined in + +utils/number-utils.ts:9 diff --git a/docs/modules.md b/docs/modules.md new file mode 100644 index 0000000..79ff28e --- /dev/null +++ b/docs/modules.md @@ -0,0 +1,997 @@ +[ts-utily](README.md) / Exports + +# ts-utily + +## Table of contents + +### Functions + +- [at](modules.md#at) +- [capitalize](modules.md#capitalize) +- [capitalizeFully](modules.md#capitalizefully) +- [compare](modules.md#compare) +- [convertIndexSignaturesToMap](modules.md#convertindexsignaturestomap) +- [convertMapToIndexSignatures](modules.md#convertmaptoindexsignatures) +- [deleteElementCollection](modules.md#deleteelementcollection) +- [equalsCollection](modules.md#equalscollection) +- [findOrDefault](modules.md#findordefault) +- [get](modules.md#get) +- [getOrDefault](modules.md#getordefault) +- [getOrDefaultCollection](modules.md#getordefaultcollection) +- [getOrDefaultString](modules.md#getordefaultstring) +- [includes](modules.md#includes) +- [isEmptyCollection](modules.md#isemptycollection) +- [isEmptyString](modules.md#isemptystring) +- [isEqual](modules.md#isequal) +- [isNotEmptyCollection](modules.md#isnotemptycollection) +- [isNotEmptyString](modules.md#isnotemptystring) +- [isNumber](modules.md#isnumber) +- [isString](modules.md#isstring) +- [notPresent](modules.md#notpresent) +- [parzializeArray](modules.md#parzializearray) +- [percentage](modules.md#percentage) +- [present](modules.md#present) +- [removeDuplicateByKey](modules.md#removeduplicatebykey) +- [removeWhiteSpace](modules.md#removewhitespace) +- [replaceAll](modules.md#replaceall) +- [sortByObjectValues](modules.md#sortbyobjectvalues) +- [sortNumericString](modules.md#sortnumericstring) +- [ternaryOperator](modules.md#ternaryoperator) +- [toBoolean](modules.md#toboolean) +- [toNumber](modules.md#tonumber) + +## Functions + +### at + +▸ **at**\<`T`\>(`collection`, `index`): `undefined` \| `T` + +The function `at` returns the element at the specified index in a collection, or undefined if the collection is empty or the index is out of bounds. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is an array of type `T[]`, or it can be `undefined` or `null`. It represents the collection of elements from which we want to retrieve an element at a specific index. | +| `index` | `number` | The `index` parameter is the position of the element you want to retrieve from the `collection`. It is a number that represents the index of the element in the array. | + +#### Returns + +`undefined` \| `T` + +the element at the specified index in the collection. If the collection is empty or the index is out of range, it will return undefined. + +#### Defined in + +utils/collection-utils.ts:29 + +___ + +### capitalize + +▸ **capitalize**(`str`): `string` + +The `capitalize` function takes a string as input and returns the same string with the first letter of each word capitalized. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `str` | `undefined` \| ``null`` \| `string` | The `str` parameter is a string that may be `undefined` or `null`. | + +#### Returns + +`string` + +The `capitalize` function returns a string. + +#### Defined in + +utils/string-utils.ts:55 + +___ + +### capitalizeFully + +▸ **capitalizeFully**(`str`): `string` + +The `capitalizeFully` function takes a string as input and returns a new string with each word capitalized. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `str` | `undefined` \| ``null`` \| `string` | The `str` parameter is a string that can also be `undefined` or `null`. | + +#### Returns + +`string` + +The function `capitalizeFully` returns a string. + +#### Defined in + +utils/string-utils.ts:68 + +___ + +### compare + +▸ **compare**(`s1`, `s2`): `number` + +The function "compare" compares two strings case-insensitively and returns -1 if the first string is smaller, 1 if the second string is smaller. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `s1` | `string` | The parameter `s1` is a string that represents the first string to be compared. | +| `s2` | `string` | The parameter `s2` is a string that represents the second string to be compared. | + +#### Returns + +`number` + +a number. If `s1` is lexicographically less than `s2` (ignoring case), it returns -1. Otherwise, it returns 1. + +#### Defined in + +utils/string-utils.ts:83 + +___ + +### convertIndexSignaturesToMap + +▸ **convertIndexSignaturesToMap**\<`V`\>(`indexSignatures`): `undefined` \| `Map`\<`string`, `V`\> + +The function converts an object with index signatures to a Map. + +#### Type parameters + +| Name | +| :------ | +| `V` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `indexSignatures` | `undefined` \| \{ `[p: string]`: `V`; } | An object that contains index signatures, where the keys are strings and the values can be of any type. | + +#### Returns + +`undefined` \| `Map`\<`string`, `V`\> + +a `Map` or `undefined`. + +#### Defined in + +utils/conversion-utils.ts:8 + +___ + +### convertMapToIndexSignatures + +▸ **convertMapToIndexSignatures**\<`V`\>(`map`): `undefined` \| \{ `[p: string]`: `V`; } + +The function converts a Map object to an object with index signatures in TypeScript. + +#### Type parameters + +| Name | +| :------ | +| `V` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `map` | `undefined` \| `Map`\<`string`, `V`\> | A Map object that contains key-value pairs. | + +#### Returns + +`undefined` \| \{ `[p: string]`: `V`; } + +an object with index signatures, where the keys are strings and the values are of type V. If the input map is undefined, the function returns undefined. + +#### Defined in + +utils/conversion-utils.ts:20 + +___ + +### deleteElementCollection + +▸ **deleteElementCollection**\<`T`\>(`collection`, `element`): `T`[] + +The `deleteElementCollection` function removes an element from a collection if it exists, otherwise it returns the original collection. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is an array of elements of type `T`, or it can be `undefined` or `null`. | +| `element` | `T` \| `Readonly`\<`T`\> | The `element` parameter represents the element that you want to delete from the `collection`. | + +#### Returns + +`T`[] + +an array of type T. + +#### Defined in + +utils/collection-utils.ts:62 + +___ + +### equalsCollection + +▸ **equalsCollection**\<`T`\>(`collection1`, `collection2`): `boolean` + +The function checks if two collections are equal by comparing their lengths and elements. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `collection1` | `undefined` \| ``null`` \| `T`[] | The `collection1` parameter is an array of type `T`, or it can be `undefined` or `null`. | +| `collection2` | `undefined` \| ``null`` \| `T`[] | The `collection2` parameter is a generic array (`T[]`) or can be `undefined` or `null`. It represents the second collection that you want to compare with `collection1`. | + +#### Returns + +`boolean` + +a boolean value. + +#### Defined in + +utils/collection-utils.ts:76 + +___ + +### findOrDefault + +▸ **findOrDefault**\<`T`\>(`collection`, `element`, `defaultElement`): `T` + +The `findOrDefault` function searches for an element in a collection and returns it if found, otherwise it returns a default element. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is an array of elements of type `T`, or it can be `undefined` or `null`. It represents the collection of elements in which we want to find a specific element. | +| `element` | `T` \| `Readonly`\<`T`\> | The `element` parameter represents the element that you want to find in the `collection`. | +| `defaultElement` | `T` \| `Readonly`\<`T`\> | The `defaultElement` parameter is the value that will be returned if the `element` is not found in the `collection`. | + +#### Returns + +`T` + +a value of type T. + +#### Defined in + +utils/collection-utils.ts:91 + +___ + +### get + +▸ **get**\<`T`\>(`collection`): `T`[] + +The `get` function returns the input collection if it is not empty, otherwise it returns an empty array. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is of type `T[] \| undefined \| null`. This means it can accept an array of type `T`, or it can be `undefined` or `null`. | + +#### Returns + +`T`[] + +an array of type T. + +#### Defined in + +utils/collection-utils.ts:40 + +___ + +### getOrDefault + +▸ **getOrDefault**\<`T`\>(`data`, `defaultValue`): `T` + +The `getOrDefault` function returns the provided data if it is not null or undefined, otherwise it returns the provided default value. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `data` | `T` | The `data` parameter is the value that you want to check if it is null or undefined. | +| `defaultValue` | `T` | The `defaultValue` parameter is the value that will be returned if the `data` parameter is `null` or `undefined`. | + +#### Returns + +`T` + +The function `getOrDefault` returns the value of `data` if it is not null or undefined, otherwise it returns the value of `defaultValue`. + +#### Defined in + +utils/common-utils.ts:36 + +___ + +### getOrDefaultCollection + +▸ **getOrDefaultCollection**\<`T`\>(`collection`, `defaultList`): `T`[] + +The `getOrDefaultCollection` function returns the provided collection if it is not empty, otherwise it returns the default list. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is a variable that represents an array of elements of type `T`, or it can be `undefined` or `null`. | +| `defaultList` | `T`[] | The `defaultList` parameter is an array of type `T[]`. It is the list that will be returned if the `collection` parameter is empty or undefined. | + +#### Returns + +`T`[] + +an array of type T. + +#### Defined in + +utils/collection-utils.ts:51 + +___ + +### getOrDefaultString + +▸ **getOrDefaultString**(`string`, `defaultValue?`): `string` + +The `getOrDefaultString` function returns a string value if it is not empty, otherwise it returns a default value. + +#### Parameters + +| Name | Type | Default value | Description | +| :------ | :------ | :------ | :------ | +| `string` | `undefined` \| ``null`` \| `string` | `undefined` | The `string` parameter is a string value that can be either a valid string, `undefined`, or `null`. | +| `defaultValue?` | `string` | `''` | The `defaultValue` parameter is a string that specifies the value to return if the `string` parameter is empty, undefined, or null. If no `defaultValue` is provided, it defaults to an empty string (''). | + +#### Returns + +`string` + +The function `getOrDefault` returns a string value. + +#### Defined in + +utils/string-utils.ts:40 + +___ + +### includes + +▸ **includes**(`string1`, `string2`): `boolean` + +The function checks if a given string contains another given string, ignoring case sensitivity. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `string1` | `undefined` \| ``null`` \| `string` | A string that can be undefined or null. | +| `string2` | `undefined` \| ``null`` \| `string` | The `string2` parameter is a string that represents the substring that we want to check if it is present in `string1`. | + +#### Returns + +`boolean` + +The function `includes` returns a boolean value. + +#### Defined in + +utils/string-utils.ts:10 + +___ + +### isEmptyCollection + +▸ **isEmptyCollection**\<`T`\>(`collection`): `boolean` + +The function `isEmptyCollection` checks if a collection is empty or not. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is a generic type `T[]` which represents an array of elements of type `T`. It can also be `undefined` or `null`. | + +#### Returns + +`boolean` + +a boolean value indicating whether the collection is empty or not. + +#### Defined in + +utils/collection-utils.ts:9 + +___ + +### isEmptyString + +▸ **isEmptyString**(`string`): `boolean` + +The function checks if a string is empty, including cases where the string is undefined or null. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `string` | `undefined` \| ``null`` \| `string` | The `string` parameter is of type `string \| undefined \| null`, which means it can accept a value of type `string`, `undefined`, or `null`. | + +#### Returns + +`boolean` + +The function `isEmpty` returns a boolean value. + +#### Defined in + +utils/string-utils.ts:20 + +___ + +### isEqual + +▸ **isEqual**\<`T`\>(`...objects`): `boolean` + +The `isEqual` function checks if all the given objects are equal by comparing their JSON representations. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `...objects` | `T`[] | The `objects` parameter is a rest parameter that allows you to pass in multiple objects of type `T`. The rest parameter syntax (`...objects`) allows you to pass any number of arguments, which will be collected into an array called `objects`. | + +#### Returns + +`boolean` + +The function `isEqual` returns a boolean value. + +#### Defined in + +utils/common-utils.ts:46 + +___ + +### isNotEmptyCollection + +▸ **isNotEmptyCollection**\<`T`\>(`collection`): `boolean` + +The function `isNotEmptyCollection` checks if a collection is not empty. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is of type `T[] \| undefined \| null`. This means it can accept an array of type `T`, or it can be `undefined` or `null`. | + +#### Returns + +`boolean` + +The function isNotEmpty is returning a boolean value. + +#### Defined in + +utils/collection-utils.ts:19 + +___ + +### isNotEmptyString + +▸ **isNotEmptyString**(`string`): `boolean` + +The function `isNotEmptyString` checks if a string is not empty. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `string` | `undefined` \| ``null`` \| `string` | The parameter "string" is of type string and can also be undefined or null. | + +#### Returns + +`boolean` + +The function isNotEmpty is returning a boolean value. + +#### Defined in + +utils/string-utils.ts:30 + +___ + +### isNumber + +▸ **isNumber**\<`T`\>(`value`): `boolean` + +The function `isNumber` checks if a value is a number in TypeScript. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `T` | The `value` parameter is the value that you want to check if it is a number. It can be of any type `T`. | + +#### Returns + +`boolean` + +a boolean value. + +#### Defined in + +utils/number-utils.ts:19 + +___ + +### isString + +▸ **isString**\<`T`\>(`obj`): `boolean` + +The function `isString` checks if an object is a string or an instance of the String class. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `obj` | `T` | The `obj` parameter is a generic type `T`, which means it can be any type. | + +#### Returns + +`boolean` + +a boolean value indicating whether the input object is a string or not. + +#### Defined in + +utils/string-utils.ts:93 + +___ + +### notPresent + +▸ **notPresent**\<`T`\>(`...args`): `boolean` + +The function `notPresent` checks if any of the arguments passed to it are not present. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `...args` | `T`[] | The `args` parameter is a rest parameter of type `T[]`, which means it can accept any number of arguments of type `T`. | + +#### Returns + +`boolean` + +a boolean value. + +#### Defined in + +utils/common-utils.ts:26 + +___ + +### parzializeArray + +▸ **parzializeArray**\<`T`\>(`array`, `sezione`): `undefined` \| `T`[][] + +The function `parzializeArray` takes an array and a section size as input and returns an array of arrays, where each subarray contains a section of the original array. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `array` | `undefined` \| ``null`` \| `T`[] | The `array` parameter is an array of elements of type `T`, or it can be `undefined` or `null`. | +| `sezione` | `number` | The parameter "sezione" represents the size of each section or chunk that the array will be divided into. | + +#### Returns + +`undefined` \| `T`[][] + +an array of arrays of type T, or undefined. + +#### Defined in + +utils/collection-utils.ts:115 + +___ + +### percentage + +▸ **percentage**(`value`, `totalValue`): `number` + +The function calculates the percentage of a value in relation to a total value. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `number` | The value parameter represents the specific value that you want to calculate the percentage of. It is a number that you want to find the percentage of in relation to the totalValue. | +| `totalValue` | `number` | The total value represents the maximum value or the total amount that you want to calculate the percentage of. | + +#### Returns + +`number` + +a number, which is the calculated percentage value. + +#### Defined in + +utils/number-utils.ts:33 + +___ + +### present + +▸ **present**\<`T`\>(`...args`): `boolean` + +The `present` function checks if all the arguments passed to it are not null or undefined. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `...args` | `T`[] | args is a rest parameter of type T[]. It allows the function to accept any number of arguments of type T. | + +#### Returns + +`boolean` + +a boolean value. + +#### Defined in + +utils/common-utils.ts:15 + +___ + +### removeDuplicateByKey + +▸ **removeDuplicateByKey**\<`T`\>(`collection`, `key?`): `T`[] + +The function `removeDuplicatesByKey` removes duplicate elements from a collection based on a specified key. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `collection` | `undefined` \| ``null`` \| `T`[] | The `collection` parameter is an array of objects of type `T`. It can also be `undefined` or `null`. | +| `key?` | keyof `T` | The `key` parameter is an optional parameter that specifies the property of the objects in the `collection` array that should be used as the key for removing duplicates. If `key` is not provided, the entire objects in the `collection` array will be compared for duplicates. | + +#### Returns + +`T`[] + +The function `rimuoviDuplicatiByKey` returns an array of type `T[]`. + +#### Defined in + +utils/collection-utils.ts:103 + +___ + +### removeWhiteSpace + +▸ **removeWhiteSpace**(`str`): `string` + +The `removeWhiteSpace` function removes all white spaces from a given string. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `str` | `undefined` \| ``null`` \| `string` | The `str` parameter is a string that can be either a valid string value, `undefined`, or `null`. | + +#### Returns + +`string` + +a string with all whitespace characters removed. + +#### Defined in + +utils/string-utils.ts:102 + +___ + +### replaceAll + +▸ **replaceAll**(`originalString`, `occurrenceToReplace`, `replaceWith`): `string` + +The `replaceAll` function replaces all occurrences of a specified string in a given string with another specified string. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `originalString` | `string` | The original string that you want to perform the replacement on. | +| `occurrenceToReplace` | `string` | The `occurrenceToReplace` parameter is a string that represents the occurrence or pattern that you want to replace in the `originalString`. | +| `replaceWith` | `string` | The `replaceWith` parameter is the string that will replace all occurrences of `occurrenceToReplace` in the `originalString`. | + +#### Returns + +`string` + +The function `replaceAll` returns a string. + +#### Defined in + +utils/string-utils.ts:125 + +___ + +### sortByObjectValues + +▸ **sortByObjectValues**\<`T`\>(`keys`, `isAsc`): (`a`: `T`, `b`: `T`) => `number` + +The function `sortByObjectValues` sorts an array of objects based on the values of specified nested keys in ascending or descending order. + +#### Type parameters + +| Name | Type | +| :------ | :------ | +| `T` | extends `object` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `keys` | `NestedKeyOf`\<`T`\>[] | An array of keys that represent the nested properties of the objects being sorted. | +| `isAsc` | `boolean` | The `isAsc` parameter is a boolean value that determines whether the sorting order should be ascending (`true`) or descending (`false`). | + +#### Returns + +`fn` + +The function `sortByObjectValues` returns a function that takes two objects `a` and `b` of type `T` and returns a number. + +▸ (`a`, `b`): `number` + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `a` | `T` | +| `b` | `T` | + +##### Returns + +`number` + +**`Example`** + +```ts +example of usage: [{name: 'Amanda', age:18}, {name: 'Victor', age:18}].sort(sortByObjectValues(['name', 'age'], true)) +``` + +**`Example`** + +```ts +array.sort(sortByObjectValues(['ele1', 'ele2' 'eleN',...], false)) +``` + +#### Defined in + +utils/sort-utils.ts:32 + +___ + +### sortNumericString + +▸ **sortNumericString**(`a`, `b`): `number` + +The function `sortNumericString` compares two numeric strings and returns a number indicating their relative order. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `a` | `string` | The parameter "a" is a string representing the first numeric string to be compared. | +| `b` | `string` | The parameter "b" is a string representing the second value to be compared. | + +#### Returns + +`number` + +a number. + +#### Defined in + +utils/string-utils.ts:135 + +___ + +### ternaryOperator + +▸ **ternaryOperator**(`condition`, `s1`, `s2`): `string` + +The `ternaryOperator` function returns `s1` if `condition` is true, otherwise it returns `s2`. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `condition` | `boolean` | A boolean value that represents the condition to be evaluated. If the condition is true, the function will return s1. If the condition is false, the function will return s2. | +| `s1` | `string` | The parameter `s1` is a string that represents the value to be returned if the condition is true. | +| `s2` | `string` | The parameter `s2` is a string that represents the value to be returned if the `condition` is false. | + +#### Returns + +`string` + +The ternaryOperator function returns either s2 or s1 based on the value of the condition. If the condition is false, it returns s2. Otherwise, it returns s1. + +#### Defined in + +utils/string-utils.ts:114 + +___ + +### toBoolean + +▸ **toBoolean**(`value`): `boolean` + +The function `toBoolean` converts a string value to a boolean value, considering various possible representations of true like as 'true', '1' or 'y'. + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `string` | The `value` parameter is a string that represents a boolean value. | + +#### Returns + +`boolean` + +a boolean value. + +#### Defined in + +utils/boolean-utils.ts:9 + +___ + +### toNumber + +▸ **toNumber**\<`T`\>(`value`): `number` + +The `toNumber` function converts a value to a number, returning 0 if the value is not a valid number. + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :------ | :------ | :------ | +| `value` | `T` | The `value` parameter is of type `T`, which means it can be any type. It represents the value that needs to be converted to a number. | + +#### Returns + +`number` + +a number. + +#### Defined in + +utils/number-utils.ts:9 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..b046a5b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4711 @@ +{ + "name": "ts-utily", + "version": "1.1.3", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ts-utily", + "version": "1.1.3", + "license": "MIT", + "devDependencies": { + "@rollup/plugin-terser": "^0.4.4", + "@types/jest": "^29.5.8", + "@types/node": "^20.9.0", + "jest": "^29.7.0", + "rimraf": "^5.0.5", + "rollup": "^4.4.1", + "rollup-plugin-typescript2": "^0.36.0", + "ts-jest": "^29.1.1", + "typedoc": "^0.25.3", + "typedoc-plugin-markdown": "^3.17.1", + "typescript": "^5.2.2" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/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, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz", + "integrity": "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.3.tgz", + "integrity": "sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.2", + "@babel/parser": "^7.23.3", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.3", + "@babel/types": "^7.23.3", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.3.tgz", + "integrity": "sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.3", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "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, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "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, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "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, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@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, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", + "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.2", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/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, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz", + "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "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, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.3.tgz", + "integrity": "sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.3", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.3", + "@babel/types": "^7.23.3", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz", + "integrity": "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "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, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "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, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@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, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rollup/plugin-terser": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", + "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", + "dev": true, + "dependencies": { + "serialize-javascript": "^6.0.1", + "smob": "^1.0.0", + "terser": "^5.17.4" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.4.1.tgz", + "integrity": "sha512-Ss4suS/sd+6xLRu+MLCkED2mUrAyqHmmvZB+zpzZ9Znn9S8wCkTQCJaQ8P8aHofnvG5L16u9MVnJjCqioPErwQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.4.1.tgz", + "integrity": "sha512-sRSkGTvGsARwWd7TzC8LKRf8FiPn7257vd/edzmvG4RIr9x68KBN0/Ek48CkuUJ5Pj/Dp9vKWv6PEupjKWjTYA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.4.1.tgz", + "integrity": "sha512-nz0AiGrrXyaWpsmBXUGOBiRDU0wyfSXbFuF98pPvIO8O6auQsPG6riWsfQqmCCC5FNd8zKQ4JhgugRNAkBJ8mQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.4.1.tgz", + "integrity": "sha512-Ogqvf4/Ve/faMaiPRvzsJEqajbqs00LO+8vtrPBVvLgdw4wBg6ZDXdkDAZO+4MLnrc8mhGV6VJAzYScZdPLtJg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.4.1.tgz", + "integrity": "sha512-9zc2tqlr6HfO+hx9+wktUlWTRdje7Ub15iJqKcqg5uJZ+iKqmd2CMxlgPpXi7+bU7bjfDIuvCvnGk7wewFEhCg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.4.1.tgz", + "integrity": "sha512-phLb1fN3rq2o1j1v+nKxXUTSJnAhzhU0hLrl7Qzb0fLpwkGMHDem+o6d+ZI8+/BlTXfMU4kVWGvy6g9k/B8L6Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.4.1.tgz", + "integrity": "sha512-M2sDtw4tf57VPSjbTAN/lz1doWUqO2CbQuX3L9K6GWIR5uw9j+ROKCvvUNBY8WUbMxwaoc8mH9HmmBKsLht7+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.4.1.tgz", + "integrity": "sha512-mHIlRLX+hx+30cD6c4BaBOsSqdnCE4ok7/KDvjHYAHoSuveoMMxIisZFvcLhUnyZcPBXDGZTuBoalcuh43UfQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.4.1.tgz", + "integrity": "sha512-tB+RZuDi3zxFx7vDrjTNGVLu2KNyzYv+UY8jz7e4TMEoAj7iEt8Qk6xVu6mo3pgjnsHj6jnq3uuRsHp97DLwOA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.4.1.tgz", + "integrity": "sha512-Hdn39PzOQowK/HZzYpCuZdJC91PE6EaGbTe2VCA9oq2u18evkisQfws0Smh9QQGNNRa/T7MOuGNQoLeXhhE3PQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.4.1.tgz", + "integrity": "sha512-tLpKb1Elm9fM8c5w3nl4N1eLTP4bCqTYw9tqUBxX8/hsxqHO3dxc2qPbZ9PNkdK4tg4iLEYn0pOUnVByRd2CbA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.4.1.tgz", + "integrity": "sha512-eAhItDX9yQtZVM3yvXS/VR3qPqcnXvnLyx1pLXl4JzyNMBNO3KC986t/iAg2zcMzpAp9JSvxB5VZGnBiNoA98w==", + "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", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.4.tgz", + "integrity": "sha512-mLnSC22IC4vcWiuObSRjrLd9XcBTGf59vUSoq2jkQDJ/QQ8PMI9rSuzE+aEV8karUMbskw07bKYoUJCKTUaygg==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.7", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz", + "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.4", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz", + "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "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, + "dependencies": { + "@types/node": "*" + } + }, + "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 + }, + "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, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/jest": { + "version": "29.5.8", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.8.tgz", + "integrity": "sha512-fXEFTxMV2Co8ZF5aYFJv+YeA08RTYJfhtN5c9JSv/mFEMe+xxjufCb+PHL+bJcMs/ebPUsBu+UNTEz+ydXrR6g==", + "dev": true, + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/node": { + "version": "20.9.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.0.tgz", + "integrity": "sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw==", + "dev": true, + "dependencies": { + "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 + }, + "node_modules/@types/yargs": { + "version": "17.0.31", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz", + "integrity": "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "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 + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "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, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-sequence-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", + "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "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, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "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, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "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, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bs-logger": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", + "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, + "dependencies": { + "fast-json-stable-stringify": "2.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-from": { + "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 + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001562", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001562.tgz", + "integrity": "sha512-kfte3Hym//51EdX4239i+Rmp20EsLIYGdPkERegTgU19hQWCRhsRFGKHTliUlsry53tv17K7n077Kqa0WJU4ng==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "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, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "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, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/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 + }, + "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, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "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, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/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 + }, + "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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "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/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": 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 + }, + "node_modules/convert-source-map": { + "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 + }, + "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, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-newline": { + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.585", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.585.tgz", + "integrity": "sha512-B4yBlX0azdA3rVMxpYwLQfDpdwOgcnLCkpvSOd68iFmeedo+WYjaBJS3/W58LVD8CB2nf+o7C4K9xz1l09RkWg==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/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 + }, + "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, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "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 + }, + "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, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-cache-dir/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/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/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "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 + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "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, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/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, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "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, + "engines": { + "node": ">=4" + } + }, + "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 + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "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, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/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, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/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, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "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, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "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, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/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, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/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, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jest-snapshot/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "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 + }, + "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, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/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 + }, + "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, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/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, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, + "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, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "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 + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/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, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/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, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "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, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "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 + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.2.tgz", + "integrity": "sha512-Yj9mA8fPiVgOUpByoTZO5pNrcl5Yk37FcSHsUINpAsaBIEZIuqcCclDZJCVxqQShDsmYX8QG63svJiTbOATZwg==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-scurry/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/path-scurry/node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/path-scurry/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/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, + "engines": { + "node": ">= 6" + } + }, + "node_modules/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, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/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, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/require-directory": { + "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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=10" + } + }, + "node_modules/rimraf": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", + "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", + "dev": true, + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.4.1.tgz", + "integrity": "sha512-idZzrUpWSblPJX66i+GzrpjKE3vbYrlWirUHteoAbjKReZwa0cohAErOYA5efoMmNCdvG9yrJS+w9Kl6csaH4w==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.4.1", + "@rollup/rollup-android-arm64": "4.4.1", + "@rollup/rollup-darwin-arm64": "4.4.1", + "@rollup/rollup-darwin-x64": "4.4.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.4.1", + "@rollup/rollup-linux-arm64-gnu": "4.4.1", + "@rollup/rollup-linux-arm64-musl": "4.4.1", + "@rollup/rollup-linux-x64-gnu": "4.4.1", + "@rollup/rollup-linux-x64-musl": "4.4.1", + "@rollup/rollup-win32-arm64-msvc": "4.4.1", + "@rollup/rollup-win32-ia32-msvc": "4.4.1", + "@rollup/rollup-win32-x64-msvc": "4.4.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-typescript2": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.36.0.tgz", + "integrity": "sha512-NB2CSQDxSe9+Oe2ahZbf+B4bh7pHwjV5L+RSYpCu7Q5ROuN94F9b6ioWwKfz3ueL3KTtmX4o2MUH2cgHDIEUsw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^4.1.2", + "find-cache-dir": "^3.3.2", + "fs-extra": "^10.0.0", + "semver": "^7.5.4", + "tslib": "^2.6.2" + }, + "peerDependencies": { + "rollup": ">=1.26.3", + "typescript": ">=2.4.0" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shiki": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.5.tgz", + "integrity": "sha512-1gCAYOcmCFONmErGTrS1fjzJLA7MGZmKzrBNX7apqSwhyITJg2O102uFzXUeBxNnEkDA9vHIKLyeKq0V083vIw==", + "dev": true, + "dependencies": { + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" + } + }, + "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 + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/smob": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/smob/-/smob-1.4.1.tgz", + "integrity": "sha512-9LK+E7Hv5R9u4g4C3p+jjLstaLe11MDsL21UpYaCNmapvMkYhqCV4A/f/3gyH8QjMyh6l68q9xC85vihY9ahMQ==", + "dev": true + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "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, + "engines": { + "node": ">=8" + } + }, + "node_modules/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, + "engines": { + "node": ">=6" + } + }, + "node_modules/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, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "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, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/terser": { + "version": "5.24.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.24.0.tgz", + "integrity": "sha512-ZpGR4Hy3+wBEzVEnHvstMvqpD/nABNelQn/z2r0fjVWGQsN3bpOLzQlqDxmb4CDZnXq5lpjnQ+mHQLAOpfM5iw==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/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, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "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 + }, + "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, + "engines": { + "node": ">=4" + } + }, + "node_modules/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, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-jest": { + "version": "29.1.1", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", + "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", + "dev": true, + "dependencies": { + "bs-logger": "0.x", + "fast-json-stable-stringify": "2.x", + "jest-util": "^29.0.0", + "json5": "^2.2.3", + "lodash.memoize": "4.x", + "make-error": "1.x", + "semver": "^7.5.3", + "yargs-parser": "^21.0.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": ">=7.0.0-beta.0 <8", + "@jest/types": "^29.0.0", + "babel-jest": "^29.0.0", + "jest": "^29.0.0", + "typescript": ">=4.3 <6" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/ts-jest/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-jest/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedoc": { + "version": "0.25.3", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.3.tgz", + "integrity": "sha512-Ow8Bo7uY1Lwy7GTmphRIMEo6IOZ+yYUyrc8n5KXIZg1svpqhZSWgni2ZrDhe+wLosFS8yswowUzljTAV/3jmWw==", + "dev": true, + "dependencies": { + "lunr": "^2.3.9", + "marked": "^4.3.0", + "minimatch": "^9.0.3", + "shiki": "^0.14.1" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 16" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x" + } + }, + "node_modules/typedoc-plugin-markdown": { + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.17.1.tgz", + "integrity": "sha512-QzdU3fj0Kzw2XSdoL15ExLASt2WPqD7FbLeaqwT70+XjKyTshBnUlQA5nNREO1C2P8Uen0CDjsBLMsCQ+zd0lw==", + "dev": true, + "dependencies": { + "handlebars": "^4.7.7" + }, + "peerDependencies": { + "typedoc": ">=0.24.0" + } + }, + "node_modules/typedoc/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typedoc/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "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 + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", + "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "dev": true + }, + "node_modules/vscode-textmate": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", + "dev": true + }, + "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, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "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, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "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, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": 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, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "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, + "engines": { + "node": ">=12" + } + }, + "node_modules/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, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..967a766 --- /dev/null +++ b/package.json @@ -0,0 +1,48 @@ +{ + "name": "ts-utily", + "version": "1.1.9", + "description": "Typescript utils library", + "main": "dist/ts-utily.js", + "types": "dist/ts-utily.d.ts", + "type": "module", + "files": [ + "/dist" + ], + "scripts": { + "live:test": "npx jest --watch", + "test": "npx jest --coverage", + "build": "rimraf dist && tsc && rollup -c", + "publish": "npm publish", + "git:publish": "npm run git add -A src && git push", + "documentation": "typedoc --plugin typedoc-plugin-markdown --out docs src/index.ts" + }, + "jest": { + "preset": "ts-jest", + "testEnvironment": "node" + }, + "keywords": [ + "typescript", + "utils", + "utility", + "string", + "number", + "common", + "collection", + "conversion" + ], + "author": "Piero Solinas & Daniele Carlini", + "license": "MIT", + "devDependencies": { + "@rollup/plugin-terser": "^0.4.4", + "@types/jest": "^29.5.8", + "@types/node": "^20.9.0", + "jest": "^29.7.0", + "rimraf": "^5.0.5", + "rollup": "^4.4.1", + "rollup-plugin-typescript2": "^0.36.0", + "ts-jest": "^29.1.1", + "typedoc": "^0.25.3", + "typedoc-plugin-markdown": "^3.17.1", + "typescript": "^5.2.2" + } +} diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 0000000..6d41346 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,12 @@ +import typescript from 'rollup-plugin-typescript2'; +import terser from "@rollup/plugin-terser"; + + +export default { + input: 'src/index.ts', + output: { + file: 'dist/ts-utily.js', + format: 'cjs' + }, + plugins: [typescript(), terser()] +}; \ No newline at end of file diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..8c8c1c9 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,8 @@ +//utils +export * from './utils/number-utils'; +export * from './utils/boolean-utils'; +export * from './utils/conversion-utils'; +export * from './utils/common-utils'; +export * from './utils/string-utils'; +export * from './utils/collection-utils'; +export * from './utils/sort-utils'; \ No newline at end of file diff --git a/src/model/nested-key-of.ts b/src/model/nested-key-of.ts new file mode 100644 index 0000000..acfb978 --- /dev/null +++ b/src/model/nested-key-of.ts @@ -0,0 +1,6 @@ +export type NestedKeyOf = + { + [Key in keyof ObjectType & (string | number)]: ObjectType[Key] extends object + ? `${Key}` | `${Key}.${NestedKeyOf extends infer U extends string ? U : never}` + : `${Key}` + }[keyof ObjectType & (string | number)]; \ No newline at end of file diff --git a/src/utils/boolean-utils.ts b/src/utils/boolean-utils.ts new file mode 100644 index 0000000..aca9c3c --- /dev/null +++ b/src/utils/boolean-utils.ts @@ -0,0 +1,12 @@ +import {notPresent} from "./common-utils"; + + +/** + * The function `toBoolean` converts a string value to a boolean value, considering various possible representations of true like as 'true', '1' or 'y'. + * @param {string} value - The `value` parameter is a string that represents a boolean value. + * @returns a boolean value. + */ +export const toBoolean = (value: string): boolean => { + if (notPresent(value)) return false; + else return value.trim().toLowerCase() === 'true' || value.trim() === '1' || value.trim().toLowerCase() === 'y'; +} \ No newline at end of file diff --git a/src/utils/collection-utils.ts b/src/utils/collection-utils.ts new file mode 100644 index 0000000..bbd0afc --- /dev/null +++ b/src/utils/collection-utils.ts @@ -0,0 +1,123 @@ +import {isEqual, notPresent} from "./common-utils"; + + +/** + * The function `isEmptyCollection` checks if a collection is empty or not. + * @param {T[] | undefined | null} collection - The `collection` parameter is a generic type `T[]` which represents an array of elements of type `T`. It can also be `undefined` or `null`. + * @returns a boolean value indicating whether the collection is empty or not. + */ +export const isEmptyCollection = (collection: T[] | undefined | null): boolean => { + if (notPresent(collection)) return true; + else return collection?.length === 0; +} + +/** + * The function `isNotEmptyCollection` checks if a collection is not empty. + * @param {T[] | undefined | null} collection - The `collection` parameter is of type `T[] | undefined | null`. This means it can accept an array of type `T`, or it can be `undefined` or `null`. + * @returns The function isNotEmpty is returning a boolean value. + */ +export const isNotEmptyCollection = (collection: T[] | undefined | null): boolean => { + return !isEmptyCollection(collection); +} + +/** + * The function `at` returns the element at the specified index in a collection, or undefined if the collection is empty or the index is out of bounds. + * @param {T[] | undefined | null} collection - The `collection` parameter is an array of type `T[]`, or it can be `undefined` or `null`. It represents the collection of elements from which we want to retrieve an element at a specific index. + * @param {number} index - The `index` parameter is the position of the element you want to retrieve from the `collection`. It is a number that represents the index of the element in the array. + * @returns the element at the specified index in the collection. If the collection is empty or the index is out of range, it will return undefined. + */ +export const at = (collection: T[] | undefined | null, index: number): T | undefined => { + if (isEmptyCollection(collection)) return undefined; + if ((collection!.length - 1) < index) return undefined; + return collection!.at(index); +} + +/** + * The `get` function returns the input collection if it is not empty, otherwise it returns an empty array. + * @param {T[] | undefined | null} collection - The `collection` parameter is of type `T[] | undefined | null`. This means it can accept an array of type `T`, or it can be `undefined` or `null`. + * @returns an array of type T. + */ +export const get = (collection: T[] | undefined | null): T[] => { + if (isEmptyCollection(collection)) return []; + else return collection!; +} + +/** + * The `getOrDefaultCollection` function returns the provided collection if it is not empty, otherwise it returns the default list. + * @param {T[] | undefined | null} collection - The `collection` parameter is a variable that represents an array of elements of type `T`, or it can be `undefined` or `null`. + * @param {T[]} defaultList - The `defaultList` parameter is an array of type `T[]`. It is the list that will be returned if the `collection` parameter is empty or undefined. + * @returns an array of type T. + */ +export const getOrDefaultCollection = (collection: T[] | undefined | null, defaultList: T[]): T[] => { + if (isEmptyCollection(collection)) return get(defaultList); + else return collection!; +} + +/** + * The `deleteElementCollection` function removes an element from a collection if it exists, otherwise it returns the original collection. + * @param {T[] | undefined | null} collection - The `collection` parameter is an array of elements of type `T`, or it can be `undefined` or `null`. + * @param {T | Readonly} element - The `element` parameter represents the element that you want to delete from the `collection`. + * @returns an array of type T. + */ +export const deleteElementCollection = (collection: T[] | undefined | null, element: T | Readonly): T[] => { + if (isEmptyCollection(collection)) return get(collection); + + const indexToRemove: number = collection!.indexOf(element, 0); + if (indexToRemove > -1) return [...collection!].filter((_elem: T, index: number) => index !== indexToRemove); + else return get(collection); +} + +/** + * The function checks if two collections are equal by comparing their lengths and elements. + * @param {T[] | undefined | null} collection1 - The `collection1` parameter is an array of type `T`, or it can be `undefined` or `null`. + * @param {T[] | undefined | null} collection2 - The `collection2` parameter is a generic array (`T[]`) or can be `undefined` or `null`. It represents the second collection that you want to compare with `collection1`. + * @returns a boolean value. + */ +export const equalsCollection = (collection1: T[] | undefined | null, collection2: T[] | undefined | null): boolean => { + if (isEmptyCollection(collection1) && isEmptyCollection(collection2)) return true; + else if (isEmptyCollection(collection1) && isNotEmptyCollection(collection2)) return false; + else if (isNotEmptyCollection(collection1) && isEmptyCollection(collection2)) return false; + else if (collection1?.length !== collection2?.length) return false; + else return !collection1!.some((el: T, index: number) => el !== collection2![index]); +} + +/** + * The `findOrDefault` function searches for an element in a collection and returns it if found, otherwise it returns a default element. + * @param {T[] | undefined | null} collection - The `collection` parameter is an array of elements of type `T`, or it can be `undefined` or `null`. It represents the collection of elements in which we want to find a specific element. + * @param {T | Readonly} element - The `element` parameter represents the element that you want to find in the `collection`. + * @param {T | Readonly} defaultElement - The `defaultElement` parameter is the value that will be returned if the `element` is not found in the `collection`. + * @returns a value of type T. + */ +export const findOrDefault = (collection: T[] | undefined | null, element: T | Readonly, defaultElement: T | Readonly): T => { + const result: T | undefined = collection?.find(el => isEqual(el, element)); + if (notPresent(result)) return defaultElement; + else return result!; +} + +/** + * The function `removeDuplicatesByKey` removes duplicate elements from a collection based on a specified key. + * @param {T[] | undefined | null} collection - The `collection` parameter is an array of objects of type `T`. It can also be `undefined` or `null`. + * @param [key] - The `key` parameter is an optional parameter that specifies the property of the objects in the `collection` array that should be used as the key for removing duplicates. If `key` is not provided, the entire objects in the `collection` array will be compared for duplicates. + * @returns The function `rimuoviDuplicatiByKey` returns an array of type `T[]`. + */ +export const removeDuplicateByKey = (collection: T[] | undefined | null, key?: keyof T): T[] => { + if (isEmptyCollection(collection)) return get(collection); + else if (!key) return collection!; + else return [...new Map(collection!.map(item => [`${item[key]}`, item])).values()]; +} + +/** + * The function `parzializeArray` takes an array and a section size as input and returns an array of arrays, where each subarray contains a section of the original array. + * @param {T[] | undefined | null} array - The `array` parameter is an array of elements of type `T`, or it can be `undefined` or `null`. + * @param {number} sezione - The parameter "sezione" represents the size of each section or chunk that the array will be divided into. + * @returns an array of arrays of type T, or undefined. + */ +export const parzializeArray = (array: T[] | undefined | null, sezione: number): T[][] | undefined => { + if (isEmptyCollection(array)) return undefined; + + const parzializedArray: Array = []; + for (let i: number = 0; i < array!.length; i += sezione) { + parzializedArray.push(array!.slice(i, i + sezione)); + } + return parzializedArray; +} \ No newline at end of file diff --git a/src/utils/common-utils.ts b/src/utils/common-utils.ts new file mode 100644 index 0000000..d4fdf63 --- /dev/null +++ b/src/utils/common-utils.ts @@ -0,0 +1,49 @@ +/** + * The function checks if a value is either null or undefined. + * @param {T} val - The `val` parameter is a generic type `T` which represents the value that needs to be checked for null or undefined. + * @returns a boolean value indicating whether the input value is either undefined or null. + */ +const isNullOrUndefined = (val: T) => { + return val === undefined || val === null; +} + +/** + * The `present` function checks if all the arguments passed to it are not null or undefined. + * @param {T[]} args - args is a rest parameter of type T[]. It allows the function to accept any number of arguments of type T. + * @returns a boolean value. + */ +export const present = (...args: T[]): boolean => { + if (isNullOrUndefined(args)) return false; + const params = args.reduce((a: T[], v: T) => a.concat(v), []); + return params.every((obj: any) => !isNullOrUndefined(obj)); +} + +/** + * The function `notPresent` checks if any of the arguments passed to it are not present. + * @param {T[]} args - The `args` parameter is a rest parameter of type `T[]`, which means it can accept any number of arguments of type `T`. + * @returns a boolean value. + */ +export const notPresent = (...args: T[]): boolean => { + return !present(args); +} + +/** + * The `getOrDefault` function returns the provided data if it is not null or undefined, otherwise it returns the provided default value. + * @param {T} data - The `data` parameter is the value that you want to check if it is null or undefined. + * @param {T} defaultValue - The `defaultValue` parameter is the value that will be returned if the `data` parameter is `null` or `undefined`. + * @returns The function `getOrDefault` returns the value of `data` if it is not null or undefined, otherwise it returns the value of `defaultValue`. + */ +export const getOrDefault = (data: T, defaultValue: T): T => { + if (isNullOrUndefined(data)) return defaultValue; + else return data; +} + +/** + * The `isEqual` function checks if all the given objects are equal by comparing their JSON representations. + * @param {T[]} objects - The `objects` parameter is a rest parameter that allows you to pass in multiple objects of type `T`. The rest parameter syntax (`...objects`) allows you to pass any number of arguments, which will be collected into an array called `objects`. + * @returns The function `isEqual` returns a boolean value. + */ +export const isEqual = (...objects: T[]): boolean => { + if (notPresent(objects)) return false; + else return objects.every(obj => JSON.stringify(obj) === JSON.stringify(objects[0])); +} \ No newline at end of file diff --git a/src/utils/conversion-utils.ts b/src/utils/conversion-utils.ts new file mode 100644 index 0000000..31cc13f --- /dev/null +++ b/src/utils/conversion-utils.ts @@ -0,0 +1,23 @@ +/** + * The function converts an object with index signatures to a Map. + * @param {{ + * [p: string]: V + * } | undefined} indexSignatures - An object that contains index signatures, where the keys are strings and the values can be of any type. + * @returns a `Map` or `undefined`. + */ +export const convertIndexSignaturesToMap = (indexSignatures: { + [p: string]: V +} | undefined): Map | undefined => { + if (!indexSignatures) return undefined; + else return new Map(Object.entries(JSON.parse(JSON.stringify(indexSignatures)))); +} + +/** + * The function converts a Map object to an object with index signatures in TypeScript. + * @param {Map | undefined} map - A Map object that contains key-value pairs. + * @returns an object with index signatures, where the keys are strings and the values are of type V. If the input map is undefined, the function returns undefined. + */ +export const convertMapToIndexSignatures = (map: Map | undefined): { [p: string]: V } | undefined => { + if (!map) return undefined; + else return Object.fromEntries(map); +} \ No newline at end of file diff --git a/src/utils/number-utils.ts b/src/utils/number-utils.ts new file mode 100644 index 0000000..0999809 --- /dev/null +++ b/src/utils/number-utils.ts @@ -0,0 +1,35 @@ +import {present} from "./common-utils"; + + +/** + * The `toNumber` function converts a value to a number, returning 0 if the value is not a valid number. + * @param {T} value - The `value` parameter is of type `T`, which means it can be any type. It represents the value that needs to be converted to a number. + * @returns a number. + */ +export const toNumber = (value: T): number => { + if (isNaN(Number(value))) return 0; + else return Number(value); +} + +/** + * The function `isNumber` checks if a value is a number in TypeScript. + * @param {T} value - The `value` parameter is the value that you want to check if it is a number. It can be of any type `T`. + * @returns a boolean value. + */ +export const isNumber = (value: T): boolean => { + try { + return present(value) && !isNaN(Number(value)); + } catch (e) { + return false; + } +} + +/** + * The function calculates the percentage of a value in relation to a total value. + * @param {number} value - The value parameter represents the specific value that you want to calculate the percentage of. It is a number that you want to find the percentage of in relation to the totalValue. + * @param {number} totalValue - The total value represents the maximum value or the total amount that you want to calculate the percentage of. + * @returns a number, which is the calculated percentage value. + */ +export const percentage = (value: number, totalValue: number): number => { + return Math.round((value / totalValue) * 100); +} \ No newline at end of file diff --git a/src/utils/sort-utils.ts b/src/utils/sort-utils.ts new file mode 100644 index 0000000..030671d --- /dev/null +++ b/src/utils/sort-utils.ts @@ -0,0 +1,47 @@ +import {present} from "./common-utils"; +import {NestedKeyOf} from "../model/nested-key-of"; + +const getNestedObject = (nestedObj: any, path: string): any => { + let pathArr = path.split('.'); + pathArr = pathArr.length > 0 ? pathArr : [path]; + return pathArr.reduce((obj, key) => (present(obj, obj[key])) ? obj[key] : undefined, nestedObj); +} + +/** + * The function "compare" compares two values (numbers or strings) and returns -1 if the first value is smaller, 1 if the first value is larger, and 0 if they are equal, based on the specified sorting order. + * @param {number | string} a - The parameter "a" can be either a number or a string. + * @param {number | string} b - The parameter `b` is a variable that can hold a value of either type `number` or type `string`. + * @param {boolean} isAsc - isAsc is a boolean parameter that determines the sorting order. If isAsc is true, the function will sort the values in ascending order. If isAsc is false, the function will sort the values in descending order. + * @returns a number that represents the comparison between the two input values (a and b). The returned value will be negative if a is less than b, positive if a is greater than b, and 0 if a is equal to b. The returned value is then multiplied by 1 or -1 based on the value of the isAsc parameter. If isAsc is true, the + */ +const compare = (a: number | string, b: number | string, isAsc: boolean) => { + return (a < b ? -1 : 1) * (isAsc ? 1 : -1); +} + +/** + * The function `sortByObjectValues` sorts an array of objects based on the values of specified nested keys in ascending or descending order. + * @param {(NestedKeyOf)[]} keys - An array of keys that represent the nested properties of the objects being sorted. + * @param {boolean} isAsc - The `isAsc` parameter is a boolean value that determines whether the sorting order should be ascending (`true`) or descending (`false`). + * @returns The function `sortByObjectValues` returns a function that takes two objects `a` and `b` of type `T` and returns a number. + * + * @example + * example of usage: [{name: 'Amanda', age:18}, {name: 'Victor', age:18}].sort(sortByObjectValues(['name', 'age'], true)) + * @example + * array.sort(sortByObjectValues(['ele1', 'ele2' 'eleN',...], false)) + */ +export function sortByObjectValues(keys: (NestedKeyOf)[], isAsc: boolean): (a: T, b: T) => number { + return function (a: T, b: T) { + const firstKey: NestedKeyOf = keys[0]; + + const valA = getNestedObject(a, firstKey.toString()); + const valB = getNestedObject(b, firstKey.toString()); + + if (valA === valB) { + if (keys.length === 1) { + return compare(valA, valB, isAsc); + } + return sortByObjectValues(keys.slice(1), true)(a, b); + } + return compare(valA, valB, isAsc); + }; +} \ No newline at end of file diff --git a/src/utils/string-utils.ts b/src/utils/string-utils.ts new file mode 100644 index 0000000..68dd294 --- /dev/null +++ b/src/utils/string-utils.ts @@ -0,0 +1,143 @@ +import {notPresent} from "./common-utils"; + + +/** + * The function checks if a given string contains another given string, ignoring case sensitivity. + * @param {string | undefined | null} string1 - A string that can be undefined or null. + * @param {string | undefined | null} string2 - The `string2` parameter is a string that represents the substring that we want to check if it is present in `string1`. + * @returns The function `includes` returns a boolean value. + */ +export const includes = (string1: string | undefined | null, string2: string | undefined | null): boolean => { + if (notPresent(string1, string2)) return false; + else return string1!.toLowerCase().includes(string2!); +} + +/** + * The function checks if a string is empty, including cases where the string is undefined or null. + * @param {string | undefined | null} string - The `string` parameter is of type `string | undefined | null`, which means it can accept a value of type `string`, `undefined`, or `null`. + * @returns The function `isEmpty` returns a boolean value. + */ +export const isEmptyString = (string: string | undefined | null): boolean => { + if (notPresent(string)) return true; + else return string?.trim().length === 0; +} + +/** + * The function `isNotEmptyString` checks if a string is not empty. + * @param {string | undefined | null} string - The parameter "string" is of type string and can also be undefined or null. + * @returns The function isNotEmpty is returning a boolean value. + */ +export const isNotEmptyString = (string: string | undefined | null): boolean => { + return !isEmptyString(string); +} + +/** + * The `getOrDefaultString` function returns a string value if it is not empty, otherwise it returns a default value. + * @param {string | undefined | null} string - The `string` parameter is a string value that can be either a valid string, `undefined`, or `null`. + * @param {string} [defaultValue] - The `defaultValue` parameter is a string that specifies the value to return if the `string` parameter is empty, undefined, or null. If no `defaultValue` is provided, it defaults to an empty string (''). + * @returns The function `getOrDefault` returns a string value. + */ +export const getOrDefaultString = (string: string | undefined | null, defaultValue: string = ''): string => { + try { + if (isEmptyString(string?.trim())) return defaultValue; + else return string!; + } catch (e) { + console.error(e); + return defaultValue; + } +} + +/** + * The `capitalize` function takes a string as input and returns the same string with the first letter of each word capitalized. + * @param {string | undefined | null} str - The `str` parameter is a string that may be `undefined` or `null`. + * @returns The `capitalize` function returns a string. + */ +export const capitalize = (str: string | undefined | null): string => { + const splitStr: string[] = getOrDefaultString(str).toLowerCase().split(' '); + for (let i: number = 0; i < 1; i++) { + splitStr[i] = splitStr[i].charAt(0).toUpperCase() + splitStr[i].substring(1); + } + return splitStr.join(' '); +} + +/** + * The `capitalizeFully` function takes a string as input and returns a new string with each word capitalized. + * @param {string | undefined | null} str - The `str` parameter is a string that can also be `undefined` or `null`. + * @returns The function `capitalizeFully` returns a string. + */ +export const capitalizeFully = (str: string | undefined | null): string => { + if (isEmptyString(str)) return getOrDefaultString(str); + + const words = getOrDefaultString(str).split(" "); + return words.map(word => { + return capitalize(word); + }).join(" "); +} + +/** + * The function "compare" compares two strings case-insensitively and returns -1 if the first string is smaller, 1 if the second string is smaller. + * @param {string} s1 - The parameter `s1` is a string that represents the first string to be compared. + * @param {string} s2 - The parameter `s2` is a string that represents the second string to be compared. + * @returns a number. If `s1` is lexicographically less than `s2` (ignoring case), it returns -1. Otherwise, it returns 1. + */ +export const compare = (s1: string, s2: string): number => { + if (s1.toLowerCase() < s2.toLowerCase()) return -1; + else return 1; +} + +/** + * The function `isString` checks if an object is a string or an instance of the String class. + * @param {T} obj - The `obj` parameter is a generic type `T`, which means it can be any type. + * @returns a boolean value indicating whether the input object is a string or not. + */ +export const isString = (obj: T) => { + return typeof obj === 'string' || obj instanceof String; +} + +/** + * The `removeWhiteSpace` function removes all white spaces from a given string. + * @param {string | undefined | null} str - The `str` parameter is a string that can be either a valid string value, `undefined`, or `null`. + * @returns a string with all whitespace characters removed. + */ +export const removeWhiteSpace = (str: string | undefined | null): string => { + if (isEmptyString(str)) return ''; + else return str!.replace(/\s/g, ""); +} + +/** + * The `ternaryOperator` function returns `s1` if `condition` is true, otherwise it returns `s2`. + * @param {boolean} condition - A boolean value that represents the condition to be evaluated. If the condition is true, the function will return s1. If the condition is false, the function will return s2. + * @param {string} s1 - The parameter `s1` is a string that represents the value to be returned if the condition is true. + * @param {string} s2 - The parameter `s2` is a string that represents the value to be returned if the `condition` is false. + * @returns The ternaryOperator function returns either s2 or s1 based on the value of the condition. If the condition is false, it returns s2. Otherwise, it returns s1. + */ +export const ternaryOperator = (condition: boolean, s1: string, s2: string) => { + return !condition ? s2 : s1; +} + +/** + * The `replaceAll` function replaces all occurrences of a specified string in a given string with another specified string. + * @param {string} originalString - The original string that you want to perform the replacement on. + * @param {string} occurrenceToReplace - The `occurrenceToReplace` parameter is a string that represents the occurrence or pattern that you want to replace in the `originalString`. + * @param {string} replaceWith - The `replaceWith` parameter is the string that will replace all occurrences of `occurrenceToReplace` in the `originalString`. + * @returns The function `replaceAll` returns a string. + */ +export const replaceAll = (originalString: string, occurrenceToReplace: string, replaceWith: string): string => { + return getOrDefaultString(originalString).replace(new RegExp(getOrDefaultString(occurrenceToReplace), 'g'), getOrDefaultString(replaceWith)); +} + +/** + * The function `sortNumericString` compares two numeric strings and returns a number indicating their relative order. + * @param {string} a - The parameter "a" is a string representing the first numeric string to be compared. + * @param {string} b - The parameter "b" is a string representing the second value to be compared. + * @returns a number. + */ +export const sortNumericString = (a: string, b: string): number => { + return collator.compare(a, b); +} + +/** + * The code `const collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'});` + * is creating a new instance of the `Intl.Collator` object. for sort numerif string + */ +const collator = new Intl.Collator(undefined, {numeric: true, sensitivity: 'base'}); \ No newline at end of file diff --git a/test/boolean-utils-test.spec.ts b/test/boolean-utils-test.spec.ts new file mode 100644 index 0000000..add0523 --- /dev/null +++ b/test/boolean-utils-test.spec.ts @@ -0,0 +1,27 @@ +import {toBoolean} from "../src/index"; + + +test('boolean string true, TRUE, Y, y, 1', () => { + expect(toBoolean('true')).toBe(true); + expect(toBoolean('TRUE')).toBe(true); + expect(toBoolean('Y')).toBe(true); + expect(toBoolean('y')).toBe(true); + expect(toBoolean('1')).toBe(true); + expect(toBoolean(null!)).toBe(false); + expect(toBoolean(undefined!)).toBe(false); +}); + +test('boolean string false, FALSE, F, f, 0', () => { + expect(toBoolean('false')).toBe(false); + expect(toBoolean('FALSE')).toBe(false); + expect(toBoolean('F')).toBe(false); + expect(toBoolean('f')).toBe(false); + expect(toBoolean('0')).toBe(false); +}); + +test('not boolean string {}, X, 12, test', () => { + expect(toBoolean('{}')).toBe(false); + expect(toBoolean('X')).toBe(false); + expect(toBoolean('12')).toBe(false); + expect(toBoolean('test')).toBe(false); +}); \ No newline at end of file diff --git a/test/collection-utils.spec.ts b/test/collection-utils.spec.ts new file mode 100644 index 0000000..0ca7a98 --- /dev/null +++ b/test/collection-utils.spec.ts @@ -0,0 +1,90 @@ +import { + at, + deleteElementCollection, + equalsCollection, + findOrDefault, + get, + getOrDefaultCollection, + isEmptyCollection, + isNotEmptyCollection, parzializeArray, removeDuplicateByKey +} from "../src/index"; + +test('isEmptyCollection true', () => { + expect(isEmptyCollection([])).toBe(true); + expect(isEmptyCollection(null)).toBe(true); + expect(isEmptyCollection(undefined)).toBe(true); +}); + +test('isEmptyCollection false', () => { + expect(isEmptyCollection(['a'])).toBe(false); + expect(isEmptyCollection(['a', 'a'])).toBe(false); + expect(isEmptyCollection([{}])).toBe(false); +}); + +test('isNotEmptyCollection false', () => { + expect(isNotEmptyCollection([])).toBe(false); + expect(isNotEmptyCollection(null)).toBe(false); + expect(isNotEmptyCollection(undefined)).toBe(false); +}); + +test('isNotEmptyCollection true', () => { + expect(isNotEmptyCollection(['a'])).toBe(true); + expect(isNotEmptyCollection(['a', 'a'])).toBe(true); + expect(isNotEmptyCollection([{}])).toBe(true); +}); + +test('at true', () => { + expect(at(['a'], 0)).toBe('a'); + expect(at(['a', 'z'], 1)).toBe('z'); + expect(at(null, 0)).toBe(undefined); + expect(at(undefined, 1)).toBe(undefined); +}); + +test('get', () => { + expect(get(['a'])).toStrictEqual(['a']); + expect(get(['a', 'z'])).toStrictEqual(['a', 'z']); + expect(get(null)).toStrictEqual([]); + expect(get(undefined)).toStrictEqual([]); +}); + +test('getOrDefaultCollection', () => { + expect(getOrDefaultCollection(['a'], ['n'])).toStrictEqual(['a']); + expect(getOrDefaultCollection(['a', 'z'], ['n'])).toStrictEqual(['a', 'z']); + expect(getOrDefaultCollection(null, ['n'])).toStrictEqual(['n']); + expect(getOrDefaultCollection(undefined, ['n'])).toStrictEqual(['n']); +}); + +test('deleteElementCollection', () => { + expect(deleteElementCollection(['a'], 'n')).toStrictEqual(['a']); + expect(deleteElementCollection(['a', 'z'], 'z')).toStrictEqual(['a']); + expect(deleteElementCollection(null, 'n')).toStrictEqual([]); + expect(deleteElementCollection(undefined, 'n')).toStrictEqual([]); +}); + +test('equalsCollection', () => { + expect(equalsCollection(['a'], ['n'])).toStrictEqual(false); + expect(equalsCollection(['a', 'z'], ['a', 'z'])).toStrictEqual(true); + expect(equalsCollection(null, ['n'])).toStrictEqual(false); + expect(equalsCollection(null, null)).toStrictEqual(true); + expect(equalsCollection(undefined, ['n'])).toStrictEqual(false); + expect(equalsCollection(undefined, undefined)).toStrictEqual(true); +}); + +test('findOrDefault', () => { + expect(findOrDefault(['a', 'z'], 'n', 'u')).toStrictEqual('u'); + expect(findOrDefault(['a', 'z'], 'z', 'u')).toStrictEqual('z'); + expect(findOrDefault(null, 'n', 'u')).toStrictEqual('u'); + expect(findOrDefault(undefined, 'n', 'u')).toStrictEqual('u'); +}); + +test('removeDuplicateByKey', () => { + expect(removeDuplicateByKey([{id:'a', value:0}, {id:'a', value:1}, {id:'z', value:0}], "id")).toStrictEqual([{id:'a', value:1}, {id:'z', value:0}]); + expect(removeDuplicateByKey([{id:'a', value:0}, {id:'a', value:1}, {id:'z', value:0}], "value")).toStrictEqual([{id:'z', value:0}, {id:'a', value:1}]); +}); + +test('parzializeArray', () => { + expect(parzializeArray([{id:'a', value:0}, {id:'a', value:1}, {id:'z', value:0}], 1)).toStrictEqual([[{id:'a', value:0}], [{id:'a', value:1}], [{id:'z', value:0}]]); + expect(parzializeArray([{id:'a', value:0}, {id:'a', value:1}, {id:'z', value:0}], 2)).toStrictEqual([[{id:'a', value:0}, {id:'a', value:1}], [{id:'z', value:0}]]); + expect(parzializeArray([{id:'a', value:0}, {id:'a', value:1}, {id:'z', value:0}], 3)).toStrictEqual([[{id:'a', value:0}, {id:'a', value:1}, {id:'z', value:0}]]); + expect(parzializeArray([{id:'a', value:0}, {id:'a', value:1}, {id:'z', value:0}], 100)).toStrictEqual([[{id:'a', value:0}, {id:'a', value:1}, {id:'z', value:0}]]); +}); \ No newline at end of file diff --git a/test/common-utils.spec.ts b/test/common-utils.spec.ts new file mode 100644 index 0000000..8fcf2bf --- /dev/null +++ b/test/common-utils.spec.ts @@ -0,0 +1,47 @@ +import {getOrDefault, isEqual, notPresent, present} from "../src/index"; + +test('present', () => { + expect(present([])).toBe(true); + expect(present()).toBe(true); + expect(present(null)).toBe(false); + expect(present(undefined)).toBe(false); + expect(present({})).toBe(true); + expect(present('hola')).toBe(true); + expect(present(1,2,0,5)).toBe(true); +}); + +test('notPresent', () => { + expect(notPresent([])).toBe(false); + expect(notPresent(null)).toBe(true); + expect(notPresent(undefined)).toBe(true); + expect(notPresent({})).toBe(false); + expect(notPresent('hola')).toBe(false); + expect(notPresent(1,2,0,5)).toBe(false); +}); + +test('getOrDefault', () => { + expect(getOrDefault([], ['a','b'])).toStrictEqual([]); + expect(getOrDefault(null, 'a')).toBe('a'); + expect(getOrDefault(undefined, 'a')).toBe('a'); + expect(getOrDefault({}, {name:'a'})).toStrictEqual({}); + expect(getOrDefault('hola', 'a')).toBe('hola'); + expect(getOrDefault(1,10)).toBe(1); +}); + +test('isEqual', () => { + expect(isEqual()).toBe(true); + expect(isEqual(null)).toBe(true); + expect(isEqual(undefined)).toBe(true); + expect(isEqual([], ['a','b'])).toBe(false); + expect(isEqual(['a','b'], ['a','b'])).toBe(true); + expect(isEqual(null, 'a')).toBe(false); + expect(isEqual(null, null)).toBe(true); + expect(isEqual(undefined, 'a')).toBe(false); + expect(isEqual(undefined, undefined)).toBe(true); + expect(isEqual({}, {name:'a'})).toBe(false); + expect(isEqual({name:'a'}, {name:'a'})).toBe(true); + expect(isEqual('hola', 'a')).toBe(false); + expect(isEqual('hola', 'hola')).toBe(true); + expect(isEqual(1,10)).toBe(false); + expect(isEqual(1,1,1)).toBe(true); +}); \ No newline at end of file diff --git a/test/conversion-utils.spec.ts b/test/conversion-utils.spec.ts new file mode 100644 index 0000000..25fc59f --- /dev/null +++ b/test/conversion-utils.spec.ts @@ -0,0 +1,15 @@ +import {convertIndexSignaturesToMap, convertMapToIndexSignatures} from "../src/index"; + +test('convertIndexSignaturesToMap', () => { + expect(convertIndexSignaturesToMap({'test': {element: 'map'}})).toBeInstanceOf(Map); + expect(convertIndexSignaturesToMap(null!)).toBe(undefined); + expect(convertIndexSignaturesToMap(undefined!)).toBe(undefined); +}); + +test('convertMapToIndexSignatures', () => { + const map = new Map(); + map.set('test', {element: 'map'}); + expect(convertMapToIndexSignatures(map)).toStrictEqual({'test': {element: 'map'}}); + expect(convertMapToIndexSignatures(null!)).toBe(undefined); + expect(convertMapToIndexSignatures(undefined!)).toBe(undefined); +}); \ No newline at end of file diff --git a/test/number-utils.spec.ts b/test/number-utils.spec.ts new file mode 100644 index 0000000..a367733 --- /dev/null +++ b/test/number-utils.spec.ts @@ -0,0 +1,38 @@ +import {isNumber, percentage, toNumber} from "../src/index"; + + +test('to number 0, 100, -100, 1.2', () => { + expect(toNumber('0')).toBe(0); + expect(toNumber(100)).toBe(100); + expect(toNumber('-100')).toBe(-100); + expect(toNumber('1.2')).toBe(1.2); +}); + +test('not number {}, test, u12, 1.2n', () => { + expect(toNumber({})).toBe(0); + expect(toNumber('test')).toBe(0); + expect(toNumber('u12')).toBe(0); + expect(toNumber('1.2n')).toBe(0); +}); + +test('is number 0, 100, -100, 1.2', () => { + expect(isNumber('0')).toBe(true); + expect(isNumber(100)).toBe(true); + expect(isNumber('-100')).toBe(true); + expect(isNumber('1.2')).toBe(true); +}); + +test('is not number {}, test, u12, 1.2n', () => { + expect(isNumber({})).toBe(false); + expect(isNumber('test')).toBe(false); + expect(isNumber('u12')).toBe(false); + expect(isNumber('1.2n')).toBe(false); + expect(isNumber(null)).toBe(false); + expect(isNumber(undefined)).toBe(false); +}); + +test('percentage (10,100), (150.34,300.22), (322,544)', () => { + expect(percentage(10, 100)).toBe(10); + expect(percentage(150.34, 300.22)).toBe(50); + expect(percentage(322, 544)).toBe(59); +}); \ No newline at end of file diff --git a/test/sort-utils.spec.ts b/test/sort-utils.spec.ts new file mode 100644 index 0000000..39275ea --- /dev/null +++ b/test/sort-utils.spec.ts @@ -0,0 +1,8 @@ +import {sortByObjectValues} from "../src/utils/sort-utils"; + +test('sortByObjectValues', () => { + expect([{id:'a', value:0}, {id:'b', value:1}, {id:'c', value:0}].sort(sortByObjectValues(['id'], true))).toStrictEqual([{id:'a', value:0}, {id:'b', value:1}, {id:'c', value:0}]); + expect([{id:'a', value:0}, {id:'b', value:1}, {id:'c', value:0}].sort(sortByObjectValues(['id'], false))).toStrictEqual([{id:'c', value:0}, {id:'b', value:1}, {id:'a', value:0}]); + expect([{id:'a', value:0}, {id:'b', value:1}, {id:'b', value:0}].sort(sortByObjectValues(['id', 'value'], true))).toStrictEqual([{id:'a', value:0}, {id:'b', value:0}, {id:'b', value:1}]); + expect([{id:'a', value:0}, {id:'b', value:1}, {id:'b', value:0}].sort(sortByObjectValues(['id', 'value'], false))).toStrictEqual([{id:'b', value:0}, {id:'b', value:1}, {id:'a', value:0}]); +}); \ No newline at end of file diff --git a/test/string-utils.spec.ts b/test/string-utils.spec.ts new file mode 100644 index 0000000..aecdb1e --- /dev/null +++ b/test/string-utils.spec.ts @@ -0,0 +1,136 @@ +import { + capitalize, + capitalizeFully, + compare, + getOrDefaultString, + includes, + isEmptyString, + isNotEmptyString, + isString, + removeWhiteSpace, + replaceAll, + sortNumericString, + ternaryOperator +} from "../src/index"; + +test('includes true', () => { + expect(includes('test', 'es')).toBe(true); + expect(includes('lorem ipsum', 'psum')).toBe(true); + expect(includes('from 0 to hero', '0')).toBe(true); +}); + +test('not includes', () => { + expect(includes('test', 'an')).toBe(false); + expect(includes('lorem ipsum', 'global')).toBe(false); + expect(includes('from 0 to hero', '1')).toBe(false); + expect(includes(null, '1')).toBe(false); + expect(includes(undefined, '1')).toBe(false); +}); + +test('not empty string', () => { + expect(isEmptyString('1')).toBe(false); + expect(isEmptyString('test')).toBe(false); + expect(isEmptyString('lorem ipsum')).toBe(false); + expect(isEmptyString('from 0 to hero')).toBe(false); +}); + +test('empty string', () => { + expect(isEmptyString(' ')).toBe(true); + expect(isEmptyString(' ')).toBe(true); + expect(isEmptyString('')).toBe(true); + expect(isEmptyString(null)).toBe(true); + expect(isEmptyString(undefined)).toBe(true); +}); + +test('isNotEmptyString false', () => { + expect(isNotEmptyString(' ')).toBe(false); + expect(isNotEmptyString(' ')).toBe(false); + expect(isNotEmptyString('')).toBe(false); + expect(isNotEmptyString(null)).toBe(false); + expect(isNotEmptyString(undefined)).toBe(false); +}); + +test('isNotEmptyString true', () => { + expect(isNotEmptyString('1')).toBe(true); + expect(isNotEmptyString('test')).toBe(true); + expect(isNotEmptyString('lorem ipsum')).toBe(true); + expect(isNotEmptyString('from 0 to hero')).toBe(true); +}); + +test('getOrDefaultString with get return', () => { + expect(getOrDefaultString('1', 'default')).toBe('1'); + expect(getOrDefaultString('test', 'default')).toBe('test'); + expect(getOrDefaultString('lorem ipsum', 'default')).toBe('lorem ipsum'); + expect(getOrDefaultString('from 0 to hero', 'default')).toBe('from 0 to hero'); +}); + +test('getOrDefaultString with default return', () => { + expect(getOrDefaultString(' ', 'default')).toBe('default'); + expect(getOrDefaultString(' ', 'default')).toBe('default'); + expect(getOrDefaultString('', 'default')).toBe('default'); + expect(getOrDefaultString(null, 'default')).toBe('default'); + expect(getOrDefaultString(undefined, 'default')).toBe('default'); +}); + +test('capitalize', () => { + expect(capitalize(' ')).toBe(''); + expect(capitalize(' ')).toBe(''); + expect(capitalize('')).toBe(''); + expect(capitalize(null)).toBe(''); + expect(capitalize(undefined)).toBe(''); + expect(capitalize('test')).toBe('Test'); + expect(capitalize('lorem ipsum')).toBe('Lorem ipsum'); +}); + +test('capitalizeFully', () => { + expect(capitalizeFully(' ')).toBe(''); + expect(capitalizeFully(' ')).toBe(''); + expect(capitalizeFully('')).toBe(''); + expect(capitalizeFully(null)).toBe(''); + expect(capitalizeFully(undefined)).toBe(''); + expect(capitalizeFully('test')).toBe('Test'); + expect(capitalizeFully('lorem ipsum')).toBe('Lorem Ipsum'); +}); + +test('compare', () => { + expect(compare('abc', 'bcd')).toBe(-1); + expect(compare('acd', 'abd')).toBe(1); + expect(compare('abc', 'abc')).toBe(1); +}); + +test('isString', () => { + expect(isString(' ')).toBe(true); + expect(isString(' ')).toBe(true); + expect(isString('')).toBe(true); + expect(isString(null)).toBe(false); + expect(isString(undefined)).toBe(false); + expect(isString('test')).toBe(true); + expect(isString('lorem ipsum')).toBe(true); + expect(isString({})).toBe(false); +}); + +test('removeWhiteSpace', () => { + expect(removeWhiteSpace(' ')).toBe(''); + expect(removeWhiteSpace(' ')).toBe(''); + expect(removeWhiteSpace('')).toBe(''); + expect(removeWhiteSpace(null)).toBe(''); + expect(removeWhiteSpace(undefined)).toBe(''); + expect(removeWhiteSpace('test')).toBe('test'); + expect(removeWhiteSpace('lorem ipsum')).toBe('loremipsum'); + expect(removeWhiteSpace(' aaa aaa ')).toBe('aaaaaa'); +}); + +test('ternaryOperator', () => { + expect(ternaryOperator(true, 'abc', 'bcd')).toBe('abc'); + expect(ternaryOperator(false, 'abc', 'bcd')).toBe('bcd'); +}); + +test('replaceAll', () => { + expect(replaceAll('abc', 'c', 'bcd')).toBe('abbcd'); + expect(replaceAll('cacbc', 'c', 'bcd')).toBe('bcdabcdbbcd'); +}); + +test('sortNumericString', () => { + expect(sortNumericString('abc11', 'abc12')).toBe(-1); + expect(sortNumericString('abc12', 'abc11')).toBe(1); +}); \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..e0c0a53 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,111 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "ES2022", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ + // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ + // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ + // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + "declarationMap": true, /* Create sourcemaps for d.ts files. */ + // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ + "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./dist", /* Specify an output folder for all emitted files. */ + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "include": ["src/**/*.ts"], + "exclude": ["node_modules"] +}