diff --git a/.gitignore b/.gitignore index 0ab0a60..8988a3a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .DS_Store .idea +.yarn *.iml lib diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 0000000..3186f3f --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/APIDOC.md b/APIDOC.md index d74a3a8..6198921 100644 --- a/APIDOC.md +++ b/APIDOC.md @@ -7,14 +7,16 @@ Download the [latest release](https://github.com/winterbe/sequency/releases) fro ```bash npm install sequency ``` + or + ```bash yarn add sequency ``` -### How Sequency works +## How Sequency works -Sequency is centered around the interface [Sequence](https://winterbe.github.io/sequency/interfaces/Sequence.html) to process any kind of iterable data such as arrays, maps and sets. +Sequency is centered around the interface [Sequence](https://winterbe.github.io/sequency/interfaces/Sequence.html) to process any kind of iterable data such as arrays, maps and sets. The interface `Sequence` provides a fluent functional API consisting of intermediate and terminal operations. Intermediate functions return a new sequence, thus enabling method chaining while terminal functions return an arbitrary result. You can explore all available `Sequence` operations by navigating to the [Sequence](https://winterbe.github.io/sequency/interfaces/Sequence.html) interface. @@ -46,6 +48,10 @@ const result = asSequence(numbers) // result: [5, 4, 3] ``` -### License +## Asynchronous sequences + +Sequency supports promises via the dedicated interface [AsyncSequence](https://winterbe.github.io/sequency/interfaces/AsyncSequence.html). This requires you to await the result of terminal functions. + +## License MIT © [winterbe](https://twitter.com/winterbe_) diff --git a/package.json b/package.json index a251016..82e49cb 100644 --- a/package.json +++ b/package.json @@ -2,21 +2,30 @@ "name": "sequency", "version": "0.20.0", "description": "Functional sequences for processing iterable data in JavaScript", - "main": "lib/Sequence.js", - "umd:main": "lib-umd/sequency.js", - "typings": "lib/Sequence.d.ts", + "main": "./lib/cjs/sequency.js", + "module": "./lib/esm/sequency.js", + "umd:main": "./lib/umd/sequency.js", + "types": "./lib/types/sequency.d.ts", + "exports": { + ".": { + "default": "./lib/cjs/sequency.js", + "require": "./lib/cjs/sequency.js", + "import": "./lib/esm/sequency.js", + "types": "./lib/types/sequency.d.ts" + } + }, "scripts": { "test": "jest", "watch": "jest --watch --notify", "coverage": "rimraf coverage && jest --coverage", "travis": "yarn lint && yarn test", "lint": "node_modules/.bin/tslint -c tslint.json 'src/**/*.ts' 'test/**/*.ts'", - "docs": "rimraf docs && typedoc --name Sequency --readme APIDOC.md -out docs --hideGenerator src/Sequence.ts", + "docs": "rimraf docs && typedoc --name Sequency --readme APIDOC.md -out docs --hideGenerator src/sequency.ts", "docs-publish": "yarn docs && touch docs/.nojekyll && gh-pages -d docs -t", "bundle": "webpack --mode production && size-limit", "bundle-browsertest": "open ./test/browsertest-lib.html", - "clean": "rimraf lib && rimraf lib-umd && rimraf docs && rimraf coverage", - "compile": "tsc", + "clean": "rimraf lib && rimraf docs && rimraf coverage", + "compile": "node_modules/.bin/tsc -b tsconfig.json tsconfig.esm.json tsconfig.cjs.json", "build": "yarn clean && yarn lint && yarn compile && yarn test && yarn bundle", "prepublishOnly": "yarn build" }, @@ -32,26 +41,27 @@ }, "files": [ "lib", - "lib-umd", "LICENSE" ], "engines": { "node": ">=6.0.0" }, + "packageManager": "yarn@4.1.1", "devDependencies": { - "@size-limit/preset-small-lib": "^7.0.8", - "@types/jest": "^27.4.1", - "gh-pages": "^3.2.3", - "jest": "^27.5.1", - "rimraf": "^3.0.2", - "size-limit": "^7.0.8", - "ts-loader": "^8.2.0", - "tslint": "^5.11.0", - "typedoc": "^0.22.13", - "typescript": "^4.6.2", - "uglifyjs-webpack-plugin": "^2.2.0", - "webpack": "^4.46.0", - "webpack-cli": "^3.3.12" + "@size-limit/preset-small-lib": "^11.1.2", + "@types/jest": "^29.5.12", + "gh-pages": "^6.1.1", + "jest": "^29.7.0", + "rimraf": "^5.0.5", + "size-limit": "^11.1.2", + "terser-webpack-plugin": "^5.3.10", + "ts-jest": "^29.1.2", + "ts-loader": "^9.5.1", + "tslint": "^6.1.3", + "typedoc": "^0.25.12", + "typescript": "^5.4.3", + "webpack": "^5.91.0", + "webpack-cli": "^5.1.4" }, "jest": { "moduleFileExtensions": [ @@ -59,16 +69,24 @@ "js" ], "transform": { - "^.+\\.ts$": "/preprocessor.js" + "^.+\\.ts$": [ + "ts-jest", + { + "tsconfig": "./tsconfig.esm.json", + "useESM": true + } + ] }, "testMatch": [ - "**/test/*.ts" + "**/test/**/*.ts" ], - "testURL": "http://localhost/" + "testEnvironmentOptions": { + "url": "http://localhost/" + } }, "size-limit": [ { - "path": "lib-umd/sequency.min.js", + "path": "lib/umd/sequency.min.js", "limit": "10 KB" } ], diff --git a/preprocessor.js b/preprocessor.js deleted file mode 100644 index 94312ac..0000000 --- a/preprocessor.js +++ /dev/null @@ -1,11 +0,0 @@ -const tsc = require('typescript'); -const tsConfig = require('./tsconfig.json'); - -module.exports = { - process(src, path) { - if (path.endsWith('.ts')) { - return tsc.transpile(src, tsConfig.compilerOptions, path, []); - } - return src; - }, -}; \ No newline at end of file diff --git a/src/AsyncSequence.ts b/src/AsyncSequence.ts new file mode 100644 index 0000000..6a5b14b --- /dev/null +++ b/src/AsyncSequence.ts @@ -0,0 +1,105 @@ +import {applyMixins} from "./internal"; +import {All as AllOp} from "./operators/async/all"; +import {Any as AnyOp} from "./operators/async/any"; +import {AsIterable as AsIterableOp} from "./operators/async/asIterable"; +import {Associate as AssociateOp} from "./operators/async/associate"; +import {AssociateBy as AssociateByOp} from "./operators/async/associateBy"; +import {Average as AverageOp} from "./operators/async/average"; +import {Chunk as ChunkOp} from "./operators/async/chunk"; +import {Contains as ContainsOp} from "./operators/async/contains"; +import {Count as CountOp} from "./operators/async/count"; +import {Distinct as DistinctOp} from "./operators/async/distinct"; +import {DistinctBy as DistinctByOp} from "./operators/async/distinctBy"; +import {Drop as DropOp} from "./operators/async/drop"; +import {DropWhile as DropWhileOp} from "./operators/async/dropWhile"; +import {ElementAt as ElementAtOp} from "./operators/async/elementAt"; +import {ElementAtOrElse as ElementAtOrElseOp} from "./operators/async/elementAtOrElse"; +import {ElementAtOrNull as ElementAtOrNullOp} from "./operators/async/elementAtOrNull"; +import {Filter as FilterOp} from "./operators/async/filter"; +import {FilterHolistically as FilterHolisticallyOp} from "./operators/async/filterHolistically"; +import {FilterIndexed as FilterIndexedOp} from "./operators/async/filterIndexed"; +import {FilterNot as FilterNotOp} from "./operators/async/filterNot"; +import {FilterNotNull as FilterNotNullOp} from "./operators/async/filterNotNull"; +import {First as FirstOp} from "./operators/async/first"; +import {FirstOrNull as FirstOrNullOp} from "./operators/async/firstOrNull"; +import {FlatMap as FlatMapOp} from "./operators/async/flatMap"; +import {Flatten as FlattenOp} from "./operators/async/flatten"; +import {Fold as FoldOp} from "./operators/async/fold"; +import {FoldIndexed as FoldIndexedOp} from "./operators/async/foldIndexed"; +import {ForEach as ForEachOp} from "./operators/async/forEach"; +import {ForEachIndexed as ForEachIndexedOp} from "./operators/async/forEachIndexed"; +import {GroupBy as GroupByOp} from "./operators/async/groupBy"; +import {IndexOf as IndexOfOp} from "./operators/async/indexOf"; +import {IndexOfFirst as IndexOfFirstOp} from "./operators/async/indexOfFirst"; +import {IndexOfLast as IndexOfLastOp} from "./operators/async/indexOfLast"; +import {JoinToString as JoinToStringOp} from "./operators/async/joinToString"; +import {Last as LastOp} from "./operators/async/last"; +import {LastOrNull as LastOrNullOp} from "./operators/async/lastOrNull"; +import {Map as MapOp} from "./operators/async/map"; +import {MapIndexed as MapIndexedOp} from "./operators/async/mapIndexed"; +import {MapNotNull as MapNotNullOp} from "./operators/async/mapNotNull"; +import {Max as MaxOp} from "./operators/async/max"; +import {MaxBy as MaxByOp} from "./operators/async/maxBy"; +import {MaxWith as MaxWithOp} from "./operators/async/maxWith"; +import {Merge as MergeOp} from "./operators/async/merge"; +import {Min as MinOp} from "./operators/async/min"; +import {MinBy as MinByOp} from "./operators/async/minBy"; +import {Minus as MinusOp} from "./operators/async/minus"; +import {MinWith as MinWithOp} from "./operators/async/minWith"; +import {None as NoneOp} from "./operators/async/none"; +import {OnEach as OnEachOp} from "./operators/async/onEach"; +import {OnEachIndexed as OnEachIndexedOp} from "./operators/async/onEachIndexed"; +import {Partition as PartitionOp} from "./operators/async/partition"; +import {Plus as PlusOp} from "./operators/async/plus"; +import {Reduce as ReduceOp} from "./operators/async/reduce"; +import {ReduceIndexed as ReduceIndexedOp} from "./operators/async/reduceIndexed"; +import {Reverse as ReverseOp} from "./operators/async/reverse"; +import {Single as SingleOp} from "./operators/async/single"; +import {SingleOrNull as SingleOrNullOp} from "./operators/async/singleOrNull"; +import {Sorted as SortedOp} from "./operators/async/sorted"; +import {SortedBy as SortedByOp} from "./operators/async/sortedBy"; +import {SortedByDescending as SortedByDescendingOp} from "./operators/async/sortedByDescending"; +import {SortedDescending as SortedDescendingOp} from "./operators/async/sortedDescending"; +import {SortedWith as SortedWithOp} from "./operators/async/sortedWith"; +import {Sum as SumOp} from "./operators/async/sum"; +import {SumBy as SumByOp} from "./operators/async/sumBy"; +import {Take as TakeOp} from "./operators/async/take"; +import {TakeWhile as TakeWhileOp} from "./operators/async/takeWhile"; +import {ToArray as ToArrayOp} from "./operators/async/toArray"; +import {ToMap as ToMapOp} from "./operators/async/toMap"; +import {ToSequence as ToSequenceOp} from "./operators/async/toSequence"; +import {ToSet as ToSetOp} from "./operators/async/toSet"; +import {Unzip as UnzipOp} from "./operators/async/unzip"; +import {WithIndex as WithIndexOp} from "./operators/async/withIndex"; +import {Zip as ZipOp} from "./operators/async/zip"; + +/** + * A Sequence provides a fluent functional API consisting + * of various intermediate and terminal operations for processing the iterated data. + * The operations are evaluated lazily to avoid examining all the input data + * when it's not necessary. Sequences can be iterated only once. + */ +export interface AsyncSequence extends AsyncSequenceOperators { + readonly iterator: AsyncIterator; +} + +/** + * @hidden + */ +export interface AsyncSequenceOperators extends AllOp, AnyOp, AsIterableOp, AssociateOp, AssociateByOp, AverageOp, ChunkOp, ContainsOp, CountOp, DistinctOp, DistinctByOp, DropOp, DropWhileOp, + ElementAtOp, ElementAtOrElseOp, ElementAtOrNullOp, FilterOp, FilterHolisticallyOp, FilterIndexedOp, FilterNotOp, FilterNotNullOp, FirstOp, FirstOrNullOp, FlatMapOp, FlattenOp, FoldOp, + FoldIndexedOp, ForEachOp, ForEachIndexedOp, GroupByOp, IndexOfOp, IndexOfFirstOp, IndexOfLastOp, JoinToStringOp, LastOp, LastOrNullOp, MapOp, MapIndexedOp, MapNotNullOp, MaxOp, MaxByOp, + MaxWithOp, MergeOp, MinOp, MinByOp, MinusOp, MinWithOp, NoneOp, OnEachOp, OnEachIndexedOp, PartitionOp, PlusOp, ReduceOp, ReduceIndexedOp, ReverseOp, SingleOp, SingleOrNullOp, SortedOp, + SortedByOp, SortedByDescendingOp, SortedDescendingOp, SortedWithOp, SumOp, SumByOp, TakeOp, TakeWhileOp, ToArrayOp, ToMapOp, ToSetOp, ToSequenceOp, UnzipOp, WithIndexOp, ZipOp { +} + +export class AsyncSequenceImpl { + constructor(readonly iterator: AsyncIterator) { + } +} + +applyMixins(AsyncSequenceImpl, [AllOp, AnyOp, AsIterableOp, AssociateOp, AssociateByOp, AverageOp, ChunkOp, ContainsOp, CountOp, DistinctOp, DistinctByOp, DropOp, DropWhileOp, + ElementAtOp, ElementAtOrElseOp, ElementAtOrNullOp, FilterOp, FilterHolisticallyOp, FilterIndexedOp, FilterNotOp, FilterNotNullOp, FirstOp, FirstOrNullOp, FlatMapOp, FlattenOp, FoldOp, + FoldIndexedOp, ForEachOp, ForEachIndexedOp, GroupByOp, IndexOfOp, IndexOfFirstOp, IndexOfLastOp, JoinToStringOp, LastOp, LastOrNullOp, MapOp, MapIndexedOp, MapNotNullOp, MaxOp, MaxByOp, + MaxWithOp, MergeOp, MinOp, MinByOp, MinusOp, MinWithOp, NoneOp, OnEachOp, OnEachIndexedOp, PartitionOp, PlusOp, ReduceOp, ReduceIndexedOp, ReverseOp, SingleOp, SingleOrNullOp, SortedOp, + SortedByOp, SortedByDescendingOp, SortedDescendingOp, SortedWithOp, SumOp, SumByOp, TakeOp, TakeWhileOp, ToArrayOp, ToMapOp, ToSetOp, ToSequenceOp, UnzipOp, WithIndexOp, ZipOp]); \ No newline at end of file diff --git a/src/BaseJoinToStringConfig.ts b/src/BaseJoinToStringConfig.ts new file mode 100644 index 0000000..deb7899 --- /dev/null +++ b/src/BaseJoinToStringConfig.ts @@ -0,0 +1,30 @@ +export interface BaseJoinToStringConfig { + /** + * Value to prepend + */ + value?: string; + /** + * Element separator + */ + separator?: string; + /** + * Element prefix + */ + prefix?: string; + /** + * Element postfix + */ + postfix?: string; + /** + * Element limit + * + * - -1: unlimited + * - 0: truncate immediately + * - 1..n: truncate after the limit is reached + */ + limit?: number; + /** + * Truncation indicator (like "...") + */ + truncated?: string; +} \ No newline at end of file diff --git a/src/Comparator.ts b/src/Comparator.ts index 5f84a58..513ed8f 100644 --- a/src/Comparator.ts +++ b/src/Comparator.ts @@ -1,37 +1,56 @@ +import {asSelector} from "./internal"; + /** * A Comparator defines a compare function enriched with methods to compose multiple * comparators in order to form complex comparison behavior. A compare function returns * negative numbers if the first value is lower than the second value, positive numbers * if the first value is larger than the second value and zero if both values are equal. */ -interface Comparator { - (a: T, b: T): number; +export default class Comparator { + constructor(readonly compare: (a: T, b: T) => number) { + } /** * Reverses the order of the current comparator. * * @returns {Comparator} */ - reversed(): Comparator; + reversed(): Comparator { + return new Comparator( + (a: T, b: T) => this.compare(a, b) * -1 + ); + } /** * Composes the current comparator with the given comparison function such * that the latter is applied for every equal values of the former comparator. * - * @param {(a: T, b: T) => number} comparison + * @param {(a: T, b: T) => number} nextComparison * @returns {Comparator} */ - then(comparison: (a: T, b: T) => number): Comparator; + then(nextComparison: (a: T, b: T) => number): Comparator { + return new Comparator( + (a: T, b: T) => { + const result = this.compare(a, b); + return result !== 0 + ? result + : nextComparison(a, b); + } + ); + } /** * Composes the current comparator with the given comparison function such * that the latter is applied for every equal values of the current comparator * in reverse (descending) order. * - * @param {(a: T, b: T) => number} comparison + * @param {(a: T, b: T) => number} nextComparison * @returns {Comparator} */ - thenDescending(comparison: (a: T, b: T) => number): Comparator; + thenDescending(nextComparison: (a: T, b: T) => number): Comparator { + return this.then(nextComparison) + .reversed(); + } /** * Composes the current comparator with a comparator which compares the properties @@ -50,7 +69,11 @@ interface Comparator { * @param {keyof T} key * @returns {Comparator} */ - thenBy(key: keyof T): Comparator; + thenBy(key: keyof NonNullable): Comparator; + + thenBy(keyOrSelector: ((value: T) => any) | keyof NonNullable): Comparator { + return this.then((a: T, b: T) => Comparator.naturalCompare(a, b, keyOrSelector)); + } /** * Composes the current comparator with a comparator which compares the properties @@ -70,7 +93,62 @@ interface Comparator { * @param {keyof T} key * @returns {Comparator} */ - thenByDescending(key: keyof T): Comparator; -} + thenByDescending(key: keyof NonNullable): Comparator; + + thenByDescending(keyOrSelector: ((value: T) => any) | keyof NonNullable): Comparator { + return this.then((a: T, b: T) => Comparator.naturalCompare(b, a, keyOrSelector)); + } + + static naturalCompare(a: T, b: T, keyOrSelector?: ((item: T) => any) | keyof NonNullable): number { + if (a == null && b == null) { + if (a === undefined && b === undefined) { + return 0; + } + if (a === undefined) { + return 1; + } + if (b === undefined) { + return -1; + } + return 0; + } + if (a == null) { + return 1; + } + if (b == null) { + return -1; + } + + if (keyOrSelector != null) { + const selector = asSelector(keyOrSelector); + const valA = selector(a); + const valB = selector(b); + + return Comparator.naturalCompare(valA, valB); + } else { + if (a > b) { + return 1; + } + if (a < b) { + return -1; + } + return 0; + } + } + + static naturalOrder(): Comparator { + return new Comparator(Comparator.naturalCompare); + } + + static reverseOrder(): Comparator { + return new Comparator(Comparator.naturalCompare).reversed(); + } + + static nullsLast(): Comparator { + return new Comparator((a: T, b: T) => a === null ? 1 : b === null ? -1 : 0); + } -export default Comparator; \ No newline at end of file + static nullsFirst(): Comparator { + return new Comparator((a: T, b: T) => a === null ? -1 : b === null ? 1 : 0); + } +} \ No newline at end of file diff --git a/src/ComparatorFactory.ts b/src/ComparatorFactory.ts index 2e983cf..b815039 100644 --- a/src/ComparatorFactory.ts +++ b/src/ComparatorFactory.ts @@ -3,7 +3,9 @@ import Comparator from "./Comparator"; /** * Defines various methods for constructing comparators. */ -interface ComparatorFactory { +export default class ComparatorFactory { + constructor() { + } /** * Constructs a new comparator where values are ordered by the given @@ -12,7 +14,9 @@ interface ComparatorFactory { * @param {(a: T, b: T) => number} comparison * @returns {Comparator} */ - compare(comparison: (a: T, b: T) => number): Comparator; + compare(comparison: (a: T, b: T) => number): Comparator { + return new Comparator(comparison); + } /** * Constructs a new comparator where values are ordered by the natural ascending order @@ -30,7 +34,13 @@ interface ComparatorFactory { * @param {keyof T} key * @returns {Comparator} */ - compareBy(key: keyof T): Comparator; + compareBy(key: keyof NonNullable): Comparator; + + compareBy(keyOrSelector: ((item: T) => any) | keyof NonNullable): Comparator { + return new Comparator( + (a: T, b: T) => Comparator.naturalCompare(a, b, keyOrSelector) + ); + } /** * Constructs a new comparator where values are ordered by the natural descending order @@ -48,35 +58,47 @@ interface ComparatorFactory { * @param {keyof T} key * @returns {Comparator} */ - compareByDescending(key: keyof T): Comparator; + compareByDescending(key: keyof NonNullable): Comparator; + + compareByDescending(keyOrSelector: ((item: T) => any) | keyof NonNullable): Comparator { + return new Comparator( + (a: T, b: T) => Comparator.naturalCompare(b, a, keyOrSelector) + ); + } /** * Constructs a new comparator where values are ordered naturally. * * @returns {Comparator} */ - naturalOrder(): Comparator; + naturalOrder(): Comparator { + return Comparator.naturalOrder(); + } /** * Constructs a new comparator where values are ordered in reverse natural order. * * @returns {Comparator} */ - reverseOrder(): Comparator; + reverseOrder(): Comparator { + return Comparator.reverseOrder(); + } /** * Constructs a new comparator where null values are ordered at the beginning. * * @returns {Comparator} */ - nullsFirst(): Comparator; + nullsFirst(): Comparator { + return Comparator.nullsFirst(); + } /** * Constructs a new comparator where null values are ordered at the end. * * @returns {Comparator} */ - nullsLast(): Comparator; -} - -export default ComparatorFactory; \ No newline at end of file + nullsLast(): Comparator { + return Comparator.nullsLast(); + } +} \ No newline at end of file diff --git a/src/GeneratorIterator.ts b/src/GeneratorIterator.ts index 6edd19a..0dc00ff 100644 --- a/src/GeneratorIterator.ts +++ b/src/GeneratorIterator.ts @@ -2,7 +2,7 @@ export default class GeneratorIterator implements Iterator { constructor(private readonly nextFunction: () => T | null | undefined) { } - next(value?: any): IteratorResult { + next(value?: unknown): IteratorResult { const nextItem = this.nextFunction(); return { done: nextItem == null, diff --git a/src/GeneratorSeedIterator.ts b/src/GeneratorSeedIterator.ts index d435bf9..45026ac 100644 --- a/src/GeneratorSeedIterator.ts +++ b/src/GeneratorSeedIterator.ts @@ -1,5 +1,5 @@ export default class GeneratorSeedIterator implements Iterator { - private prevItem: T; + private prevItem: T | null = null; constructor(private readonly seed: T, private readonly nextFunction: (value: T) => T | null | undefined) { @@ -12,7 +12,7 @@ export default class GeneratorSeedIterator implements Iterator { } const nextItem = this.nextFunction(this.prevItem); if (nextItem == null) { - return {done: true, value: undefined as any}; + return {done: true, value: undefined}; } this.prevItem = nextItem; return { diff --git a/src/IndexedValue.ts b/src/IndexedValue.ts index dfba93d..31cd3e0 100644 --- a/src/IndexedValue.ts +++ b/src/IndexedValue.ts @@ -1,8 +1,7 @@ /** * Defines a `value` with a zero-based `index`. */ -interface IndexedValue { +export default interface IndexedValue { index: number; value: T; -} -export default IndexedValue; \ No newline at end of file +} \ No newline at end of file diff --git a/src/Sequence.ts b/src/Sequence.ts index 76eb3c3..23e7396 100644 --- a/src/Sequence.ts +++ b/src/Sequence.ts @@ -1,75 +1,77 @@ -import {All} from "./all"; -import {Any} from "./any"; -import {AsIterable} from "./asIterable"; -import {Associate} from "./associate"; -import {AssociateBy} from "./associateBy"; -import {Average} from "./average"; -import {Chunk} from "./chunk"; -import {Contains} from "./contains"; -import {Count} from "./count"; -import {Distinct} from "./distinct"; -import {DistinctBy} from "./distinctBy"; -import {Drop} from "./drop"; -import {DropWhile} from "./dropWhile"; -import {ElementAt} from "./elementAt"; -import {ElementAtOrElse} from "./elementAtOrElse"; -import {ElementAtOrNull} from "./elementAtOrNull"; -import {Filter} from "./filter"; -import {FilterIndexed} from "./filterIndexed"; -import {FilterNot} from "./filterNot"; -import {FilterNotNull} from "./filterNotNull"; -import {First} from "./first"; -import {FirstOrNull} from "./firstOrNull"; -import {FlatMap} from "./flatMap"; -import {Flatten} from "./flatten"; -import {Fold} from "./fold"; -import {FoldIndexed} from "./foldIndexed"; -import {ForEach} from "./forEach"; -import {ForEachIndexed} from "./forEachIndexed"; -import {GroupBy} from "./groupBy"; -import {IndexOf} from "./indexOf"; -import {IndexOfFirst} from "./indexOfFirst"; -import {IndexOfLast} from "./indexOfLast"; -import {JoinToString} from "./joinToString"; -import {Last} from "./last"; -import {LastOrNull} from "./lastOrNull"; -import {Map} from "./map"; -import {MapIndexed} from "./mapIndexed"; -import {MapNotNull} from "./mapNotNull"; -import {Max} from "./max"; -import {MaxBy} from "./maxBy"; -import {MaxWith} from "./maxWith"; -import {Merge} from "./merge"; -import {Min} from "./min"; -import {MinBy} from "./minBy"; -import {Minus} from "./minus"; -import {MinWith} from "./minWith"; -import {None} from "./none"; -import {OnEach} from "./onEach"; -import {Partition} from "./partition"; -import {Plus} from "./plus"; -import {Reduce} from "./reduce"; -import {ReduceIndexed} from "./reduceIndexed"; -import {Reverse} from "./reverse"; -import {Single} from "./single"; -import {SingleOrNull} from "./singleOrNull"; -import {Sorted} from "./sorted"; -import {SortedBy} from "./sortedBy"; -import {SortedByDescending} from "./sortedByDescending"; -import {SortedDescending} from "./sortedDescending"; -import {SortedWith} from "./sortedWith"; -import {Sum} from "./sum"; -import {SumBy} from "./sumBy"; -import {Take} from "./take"; -import {TakeWhile} from "./takeWhile"; -import {ToArray} from "./toArray"; -import {ToMap} from "./toMap"; -import {ToSet} from "./toSet"; -import {Unzip} from "./unzip"; -import {WithIndex} from "./withIndex"; -import {Zip} from "./zip"; -import GeneratorIterator from "./GeneratorIterator"; -import GeneratorSeedIterator from "./GeneratorSeedIterator"; +import {applyMixins} from "./internal"; +import {All as AllOp} from "./operators/sync/all"; +import {Any as AnyOp} from "./operators/sync/any"; +import {ToAsyncSequence as ToAsyncSequenceOp} from "./operators/sync/toAsyncSequence"; +import {AsIterable as AsIterableOp} from "./operators/sync/asIterable"; +import {Associate as AssociateOp} from "./operators/sync/associate"; +import {AssociateBy as AssociateByOp} from "./operators/sync/associateBy"; +import {Average as AverageOp} from "./operators/sync/average"; +import {Chunk as ChunkOp} from "./operators/sync/chunk"; +import {Contains as ContainsOp} from "./operators/sync/contains"; +import {Count as CountOp} from "./operators/sync/count"; +import {Distinct as DistinctOp} from "./operators/sync/distinct"; +import {DistinctBy as DistinctByOp} from "./operators/sync/distinctBy"; +import {Drop as DropOp} from "./operators/sync/drop"; +import {DropWhile as DropWhileOp} from "./operators/sync/dropWhile"; +import {ElementAt as ElementAtOp} from "./operators/sync/elementAt"; +import {ElementAtOrElse as ElementAtOrElseOp} from "./operators/sync/elementAtOrElse"; +import {ElementAtOrNull as ElementAtOrNullOp} from "./operators/sync/elementAtOrNull"; +import {Filter as FilterOp} from "./operators/sync/filter"; +import {FilterHolistically as FilterHolisticallyOp} from "./operators/sync/filterHolistically"; +import {FilterIndexed as FilterIndexedOp} from "./operators/sync/filterIndexed"; +import {FilterNot as FilterNotOp} from "./operators/sync/filterNot"; +import {FilterNotNull as FilterNotNullOp} from "./operators/sync/filterNotNull"; +import {First as FirstOp} from "./operators/sync/first"; +import {FirstOrNull as FirstOrNullOp} from "./operators/sync/firstOrNull"; +import {FlatMap as FlatMapOp} from "./operators/sync/flatMap"; +import {Flatten as FlattenOp} from "./operators/sync/flatten"; +import {Fold as FoldOp} from "./operators/sync/fold"; +import {FoldIndexed as FoldIndexedOp} from "./operators/sync/foldIndexed"; +import {ForEach as ForEachOp} from "./operators/sync/forEach"; +import {ForEachIndexed as ForEachIndexedOp} from "./operators/sync/forEachIndexed"; +import {GroupBy as GroupByOp} from "./operators/sync/groupBy"; +import {IndexOf as IndexOfOp} from "./operators/sync/indexOf"; +import {IndexOfFirst as IndexOfFirstOp} from "./operators/sync/indexOfFirst"; +import {IndexOfLast as IndexOfLastOp} from "./operators/sync/indexOfLast"; +import {JoinToString as JoinToStringOp} from "./operators/sync/joinToString"; +import {Last as LastOp} from "./operators/sync/last"; +import {LastOrNull as LastOrNullOp} from "./operators/sync/lastOrNull"; +import {Map as MapOp} from "./operators/sync/map"; +import {MapIndexed as MapIndexedOp} from "./operators/sync/mapIndexed"; +import {MapNotNull as MapNotNullOp} from "./operators/sync/mapNotNull"; +import {Max as MaxOp} from "./operators/sync/max"; +import {MaxBy as MaxByOp} from "./operators/sync/maxBy"; +import {MaxWith as MaxWithOp} from "./operators/sync/maxWith"; +import {Merge as MergeOp} from "./operators/sync/merge"; +import {Min as MinOp} from "./operators/sync/min"; +import {MinBy as MinByOp} from "./operators/sync/minBy"; +import {Minus as MinusOp} from "./operators/sync/minus"; +import {MinWith as MinWithOp} from "./operators/sync/minWith"; +import {None as NoneOp} from "./operators/sync/none"; +import {OnEach as OnEachOp} from "./operators/sync/onEach"; +import {OnEachIndexed as OnEachIndexedOp} from "./operators/sync/onEachIndexed"; +import {Partition as PartitionOp} from "./operators/sync/partition"; +import {Plus as PlusOp} from "./operators/sync/plus"; +import {Reduce as ReduceOp} from "./operators/sync/reduce"; +import {ReduceIndexed as ReduceIndexedOp} from "./operators/sync/reduceIndexed"; +import {Reverse as ReverseOp} from "./operators/sync/reverse"; +import {Single as SingleOp} from "./operators/sync/single"; +import {SingleOrNull as SingleOrNullOp} from "./operators/sync/singleOrNull"; +import {Sorted as SortedOp} from "./operators/sync/sorted"; +import {SortedBy as SortedByOp} from "./operators/sync/sortedBy"; +import {SortedByDescending as SortedByDescendingOp} from "./operators/sync/sortedByDescending"; +import {SortedDescending as SortedDescendingOp} from "./operators/sync/sortedDescending"; +import {SortedWith as SortedWithOp} from "./operators/sync/sortedWith"; +import {Sum as SumOp} from "./operators/sync/sum"; +import {SumBy as SumByOp} from "./operators/sync/sumBy"; +import {Take as TakeOp} from "./operators/sync/take"; +import {TakeWhile as TakeWhileOp} from "./operators/sync/takeWhile"; +import {ToArray as ToArrayOp} from "./operators/sync/toArray"; +import {ToMap as ToMapOp} from "./operators/sync/toMap"; +import {ToSet as ToSetOp} from "./operators/sync/toSet"; +import {Unzip as UnzipOp} from "./operators/sync/unzip"; +import {WithIndex as WithIndexOp} from "./operators/sync/withIndex"; +import {Zip as ZipOp} from "./operators/sync/zip"; /** * A Sequence provides a fluent functional API consisting @@ -81,96 +83,23 @@ export interface Sequence extends SequenceOperators { readonly iterator: Iterator; } -export default Sequence; - /** * @hidden */ -export interface SequenceOperators extends All, Any, AsIterable, Associate, AssociateBy, Average, Chunk, Contains, Count, Distinct, DistinctBy, Drop, - DropWhile, ElementAt, ElementAtOrElse, ElementAtOrNull, Filter, FilterIndexed, FilterNot, FilterNotNull, First, FirstOrNull, FlatMap, Flatten, Fold, FoldIndexed, - ForEach, ForEachIndexed, GroupBy, IndexOf, IndexOfFirst, IndexOfLast, JoinToString, Last, LastOrNull, Map, MapIndexed, MapNotNull, Max, MaxBy, MaxWith, Merge, Min, MinBy, - Minus, MinWith, None, OnEach, Partition, Plus, Reduce, ReduceIndexed, Reverse, Single, SingleOrNull, Sorted, SortedBy, SortedByDescending, SortedDescending, SortedWith, - Sum, SumBy, Take, TakeWhile, ToArray, ToMap, ToSet, Unzip, WithIndex, Zip { +export interface SequenceOperators extends AllOp, AnyOp, AsIterableOp, AssociateOp, AssociateByOp, AverageOp, ChunkOp, ContainsOp, CountOp, DistinctOp, DistinctByOp, DropOp, DropWhileOp, + ElementAtOp, ElementAtOrElseOp, ElementAtOrNullOp, FilterOp, FilterHolisticallyOp, FilterIndexedOp, FilterNotOp, FilterNotNullOp, FirstOp, FirstOrNullOp, FlatMapOp, FlattenOp, FoldOp, + FoldIndexedOp, ForEachOp, ForEachIndexedOp, GroupByOp, IndexOfOp, IndexOfFirstOp, IndexOfLastOp, JoinToStringOp, LastOp, LastOrNullOp, MapOp, MapIndexedOp, MapNotNullOp, MaxOp, MaxByOp, + MaxWithOp, MergeOp, MinOp, MinByOp, MinusOp, MinWithOp, NoneOp, OnEachOp, OnEachIndexedOp, PartitionOp, PlusOp, ReduceOp, ReduceIndexedOp, ReverseOp, SingleOp, SingleOrNullOp, SortedOp, + SortedByOp, SortedByDescendingOp, SortedDescendingOp, SortedWithOp, SumOp, SumByOp, TakeOp, TakeWhileOp, ToArrayOp, ToAsyncSequenceOp, ToMapOp, ToSetOp, UnzipOp, WithIndexOp, ZipOp { } -class SequenceImpl { +export class SequenceImpl { constructor(readonly iterator: Iterator) { } } -applyMixins(SequenceImpl, [All, Any, AsIterable, Associate, AssociateBy, Average, Chunk, Contains, Count, Distinct, DistinctBy, Drop, - DropWhile, ElementAt, ElementAtOrElse, ElementAtOrNull, Filter, FilterIndexed, FilterNot, FilterNotNull, First, FirstOrNull, FlatMap, Flatten, Fold, FoldIndexed, - ForEach, ForEachIndexed, GroupBy, IndexOf, IndexOfFirst, IndexOfLast, JoinToString, Last, LastOrNull, Map, MapIndexed, MapNotNull, Max, MaxBy, MaxWith, Merge, Min, MinBy, - Minus, MinWith, None, OnEach, Partition, Plus, Reduce, ReduceIndexed, Reverse, Single, SingleOrNull, Sorted, SortedBy, SortedByDescending, SortedDescending, SortedWith, - Sum, SumBy, Take, TakeWhile, ToArray, ToMap, ToSet, Unzip, WithIndex, Zip]); - -function applyMixins(derivedCtor: any, baseCtors: any[]) { - baseCtors.forEach(baseCtor => { - Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => { - derivedCtor.prototype[name] = baseCtor.prototype[name]; - }); - }); -} - -export function sequenceOf(...args: Array): Sequence { - return asSequence(args); -} - -export function emptySequence(): Sequence { - return asSequence([]); -} - -export function asSequence(iterable: Iterable): Sequence { - if (iterable === null) { - throw new Error("Cannot create sequence for input: null"); - } - if (iterable === undefined) { - throw new Error("Cannot create sequence for input: undefined"); - } - if (iterable[Symbol.iterator] == null) { - throw new Error("Cannot create sequence for non-iterable input: " + iterable); - } - const iterator = iterable[Symbol.iterator](); - return createSequence(iterator); -} - -export function createSequence(iterator: Iterator): Sequence { - return new SequenceImpl(iterator) as any; -} - -export function isSequence(object: any): object is Sequence { - return object instanceof SequenceImpl; -} - -export function extendSequence(mixin: { new(): any }) { - applyMixins(SequenceImpl, [mixin]); -} - -export function generateSequence(nextFunction: () => T | null | undefined): Sequence; -export function generateSequence(seedFunction: () => T | null | undefined, nextFunction: (item: T) => T | null | undefined): Sequence; -export function generateSequence(seed: T | null | undefined, nextFunction: (item: T) => T | null | undefined): Sequence; -export function generateSequence(a: any, b?: any): Sequence { - if (typeof a === "function" && b == null) { - return createSequence(new GeneratorIterator(a)); - } - const seed = typeof a === "function" ? a() : a; - return seed != null - ? createSequence(new GeneratorSeedIterator(seed, b)) - : emptySequence(); -} - -export function range(start: number, endInclusive: number, step: number = 1): Sequence { - if (start > endInclusive) { - throw new Error(`start [${start}] must be lower then endInclusive [${endInclusive}]`); - } - let current = start; - return generateSequence(() => { - try { - return current <= endInclusive - ? current - : undefined; - } finally { - current += step; - } - }); -} +applyMixins(SequenceImpl, [AllOp, AnyOp, AsIterableOp, AssociateOp, AssociateByOp, AverageOp, ChunkOp, ContainsOp, CountOp, DistinctOp, DistinctByOp, DropOp, DropWhileOp, + ElementAtOp, ElementAtOrElseOp, ElementAtOrNullOp, FilterOp, FilterHolisticallyOp, FilterIndexedOp, FilterNotOp, FilterNotNullOp, FirstOp, FirstOrNullOp, FlatMapOp, FlattenOp, FoldOp, + FoldIndexedOp, ForEachOp, ForEachIndexedOp, GroupByOp, IndexOfOp, IndexOfFirstOp, IndexOfLastOp, JoinToStringOp, LastOp, LastOrNullOp, MapOp, MapIndexedOp, MapNotNullOp, MaxOp, MaxByOp, + MaxWithOp, MergeOp, MinOp, MinByOp, MinusOp, MinWithOp, NoneOp, OnEachOp, OnEachIndexedOp, PartitionOp, PlusOp, ReduceOp, ReduceIndexedOp, ReverseOp, SingleOp, SingleOrNullOp, SortedOp, + SortedByOp, SortedByDescendingOp, SortedDescendingOp, SortedWithOp, SumOp, SumByOp, TakeOp, TakeWhileOp, ToArrayOp, ToAsyncSequenceOp, ToMapOp, ToSetOp, UnzipOp, WithIndexOp, ZipOp]); \ No newline at end of file diff --git a/src/createComparatorFactory.ts b/src/createComparatorFactory.ts deleted file mode 100644 index 75ec057..0000000 --- a/src/createComparatorFactory.ts +++ /dev/null @@ -1,100 +0,0 @@ -import ComparatorFactory from "./ComparatorFactory"; -import Comparator from "./Comparator"; - -function compare(comparison: (a: T, b: T) => number): Comparator { - return Object.assign(comparison, { - reversed(): Comparator { - return compare( - (a: T, b: T) => comparison(a, b) * -1 - ); - }, - then(nextComparison: (a: T, b: T) => number): Comparator { - return compare( - (a: T, b: T) => { - const result = comparison(a, b); - return result !== 0 - ? result - : nextComparison(a, b); - } - ); - }, - thenDescending(nextComparison: (a: T, b: T) => number): Comparator { - return this.then( - compare(nextComparison) - .reversed() - ); - }, - thenBy(keyOrSelector: any): Comparator { - const selector = asSelector(keyOrSelector); - return this.then( - (a: T, b: T) => naturalCompare(selector(a), selector(b)) - ); - }, - thenByDescending(keyOrSelector: any): Comparator { - const selector = asSelector(keyOrSelector); - return this.then( - compare( - (a: T, b: T) => naturalCompare(selector(a), selector(b)) - ).reversed() - ); - } - }); -} - -function compareBy(keyOrSelector: any): Comparator { - const selector = asSelector(keyOrSelector); - return compare( - (a: T, b: T) => naturalCompare(selector(a), selector(b)) - ); -} - -function compareByDescending(keyOrSelector: any): Comparator { - const selector = asSelector(keyOrSelector); - return compare( - (a: T, b: T) => naturalCompare(selector(b), selector(a)) - ); -} - -function asSelector(keyOrSelector: (item: T) => any | string): (item: T) => any { - return typeof keyOrSelector === "function" - ? keyOrSelector - : (item: T) => (item as any)[keyOrSelector as string]; -} - -function naturalCompare(a: T, b: T): number { - return a < b ? -1 : a > b ? 1 : 0; -} - -function naturalOrder(): Comparator { - return compare(naturalCompare); -} - -function reverseOrder(): Comparator { - return compare(naturalCompare).reversed(); -} - -function nullsLast(): Comparator { - return compare( - (a: T, b: T) => a === null ? 1 : b === null ? -1 : 0 - ); -} - -function nullsFirst(): Comparator { - return compare( - (a: T, b: T) => a === null ? -1 : b === null ? 1 : 0 - ); -} - -function createComparatorFactory(): ComparatorFactory { - return { - compare, - compareBy, - compareByDescending, - naturalOrder, - reverseOrder, - nullsFirst, - nullsLast - }; -} - -export default createComparatorFactory; \ No newline at end of file diff --git a/src/elementAtOrNull.ts b/src/elementAtOrNull.ts deleted file mode 100644 index 2a8eac0..0000000 --- a/src/elementAtOrNull.ts +++ /dev/null @@ -1,23 +0,0 @@ -import Sequence from "./Sequence"; - -export class ElementAtOrNull { - - /** - * Returns the element at position `index` (zero-based) or `null` if `index` - * is out of bounds. - * - * @param {number} index - * @returns {T} - */ - elementAtOrNull(this: Sequence, index: number): T | null { - let i = 0; - for (let item = this.iterator.next(); !item.done; item = this.iterator.next()) { - if (i === index) { - return item.value; - } - i++; - } - return null; - } - -} \ No newline at end of file diff --git a/src/filterNotNull.ts b/src/filterNotNull.ts deleted file mode 100644 index 71e8735..0000000 --- a/src/filterNotNull.ts +++ /dev/null @@ -1,14 +0,0 @@ -import Sequence from "./Sequence"; - -export class FilterNotNull { - - /** - * Returns a new sequence consisting of all non-null elements. - * - * @returns {Sequence} - */ - filterNotNull(this: Sequence): Sequence { - return this.filter(it => it !== null) as Sequence; - } - -} \ No newline at end of file diff --git a/src/indexOf.ts b/src/indexOf.ts deleted file mode 100644 index 7a215f3..0000000 --- a/src/indexOf.ts +++ /dev/null @@ -1,22 +0,0 @@ -import Sequence from "./Sequence"; - -export class IndexOf { - - /** - * Returns the zero-based index of the given `element` or -1 if the sequence does not contain the element. - * - * @param {T} element - * @returns {number} - */ - indexOf(this: Sequence, element: T): number { - let index = 0; - for (let item = this.iterator.next(); !item.done; item = this.iterator.next()) { - if (element === item.value) { - return index; - } - index++; - } - return -1; - } - -} \ No newline at end of file diff --git a/src/internal.ts b/src/internal.ts new file mode 100644 index 0000000..7c78ff8 --- /dev/null +++ b/src/internal.ts @@ -0,0 +1,38 @@ +export function asAsyncIterable(iterable: Iterable): AsyncIterable { + return (async function* () { + for (const item of iterable) { + yield await item; + } + })(); +} + +export function asAsyncIterator(iterator: Iterator): AsyncIterator { + return { + async next(value?: any) { + return iterator.next(value); + } + }; +} + +export function asAsyncSelector(keyOrSelector: ((item: T) => Promise | K) | keyof NonNullable): (item: T) => Promise | K { + return typeof keyOrSelector === "function" + ? keyOrSelector + : (item: T) => item?.[keyOrSelector] as K; +} + +export function asSelector(keyOrSelector: ((item: T) => K) | keyof NonNullable): (item: T) => K { + return typeof keyOrSelector === "function" + ? keyOrSelector + : (item: T) => item?.[keyOrSelector] as K; +} + +export function applyMixins(derivedCtor: ({new(...args: any[]): any}), baseCtors: ({new(...args: any[]): any})[]) { + baseCtors.forEach(baseCtor => { + Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => { + const descriptor = Reflect.getOwnPropertyDescriptor(baseCtor.prototype, name); + if (descriptor != null) { + Reflect.defineProperty(derivedCtor.prototype, name, descriptor); + } + }); + }); +} \ No newline at end of file diff --git a/src/merge.ts b/src/merge.ts deleted file mode 100644 index 1b1564d..0000000 --- a/src/merge.ts +++ /dev/null @@ -1,39 +0,0 @@ -import Sequence, {asSequence, isSequence} from "./Sequence"; - -export class Merge { - - /** - * Merges the elements of both sequences into a new sequence. Each element of this sequence is eventually replaced with - * an element of the other sequence by comparing results of the given `selector` function. If no value is found in the other - * sequence the element is retained. New elements of the other sequence are appended to the end of the new sequence or - * prepended to the start of the new sequence, if `prependNewValues` is set to `true`. This operation is not lazy evaluated. - * - * @param {Sequence} other - * @param {(value: T) => S} selector - * @param prependNewValues - * @returns {Sequence} - */ - merge(this: Sequence, other: Sequence | Iterable, selector: (value: T) => S, prependNewValues: boolean = false): Sequence { - let mergeValues = isSequence(other) - ? other.toArray() - : asSequence(other).toArray(); - const leftValues = this.toArray(); - const result = leftValues.map(left => { - const selected = selector(left); - const right = asSequence(mergeValues) - .find(it => selector(it) === selected); - if (right != null) { - mergeValues = mergeValues.filter(it => it !== right); - return right; - } else { - return left; - } - }); - if (prependNewValues) { - return asSequence([...mergeValues, ...result]); - } else { - return asSequence([...result, ...mergeValues]); - } - } - -} \ No newline at end of file diff --git a/src/operators/async/all.ts b/src/operators/async/all.ts new file mode 100644 index 0000000..0d57703 --- /dev/null +++ b/src/operators/async/all.ts @@ -0,0 +1,20 @@ +import {AsyncSequence} from "../../sequency"; + +export class All { + + /** + * Returns `true` if all elements match the given `predicate`. + * + * @param {(T) => Promise | boolean} predicate + * @returns {boolean} + */ + async all(this: AsyncSequence, predicate: (item: T) => Promise | boolean): Promise { + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + if (!await predicate(item.value)) { + return false; + } + } + return true; + } + +} \ No newline at end of file diff --git a/src/operators/async/any.ts b/src/operators/async/any.ts new file mode 100644 index 0000000..773168f --- /dev/null +++ b/src/operators/async/any.ts @@ -0,0 +1,23 @@ +import {AsyncSequence} from "../../sequency"; + +export class Any { + + /** + * Returns `true` if at least one element match the given `predicate`. + * + * @param {(T) => Promise | boolean} predicate + * @returns {boolean} + */ + async any(this: AsyncSequence, predicate?: (item: T) => Promise | boolean): Promise { + if (predicate == null) { + return !(await this.iterator.next()).done; + } + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + if (await predicate(item.value)) { + return true; + } + } + return false; + } + +} \ No newline at end of file diff --git a/src/operators/async/asIterable.ts b/src/operators/async/asIterable.ts new file mode 100644 index 0000000..941c7bb --- /dev/null +++ b/src/operators/async/asIterable.ts @@ -0,0 +1,19 @@ +import {AsyncSequence} from "../../sequency"; + +export class AsIterable { + + /** + * Returns an iterable representation of the sequence. + * + * @returns {Iterable} + */ + asIterable(this: AsyncSequence): AsyncIterable { + const iterator = this.iterator; + return { + [Symbol.asyncIterator](): AsyncIterator { + return iterator; + } + }; + } + +} \ No newline at end of file diff --git a/src/operators/async/associate.ts b/src/operators/async/associate.ts new file mode 100644 index 0000000..b6023e8 --- /dev/null +++ b/src/operators/async/associate.ts @@ -0,0 +1,21 @@ +import {AsyncSequence} from "../../sequency"; + +export class Associate { + + /** + * Transforms each element into a key-value pair and returns the results as map. In case of + * duplicate keys the last key-value pair overrides the other. + * + * @param {(value: T) => Promise<[K, V]> | [K, V]} transform + * @returns {Promise>} + */ + async associate(this: AsyncSequence, transform: (value: T) => Promise<[K, V]> | [K, V]): Promise> { + const result = new Map(); + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + const pair = await transform(item.value); + result.set(pair[0], pair[1]); + } + return result; + } + +} \ No newline at end of file diff --git a/src/operators/async/associateBy.ts b/src/operators/async/associateBy.ts new file mode 100644 index 0000000..455f338 --- /dev/null +++ b/src/operators/async/associateBy.ts @@ -0,0 +1,58 @@ +import {asAsyncSelector} from "../../internal"; +import {AsyncSequence} from "../../sequency"; + +export class AssociateBy { + + /** + * Returns a map consisting of the elements mapped by the given `keySelector`. + * + * @param {(value: T) => Promise | K} keySelector + * @returns {Promise>} + */ + async associateBy(keySelector: (value: T) => Promise | K): Promise>; + + /** + * Returns a map consisting of the elements indexed by the given `key`. + * + * @param {K} key + * @returns {Map} + */ + async associateBy>(key: K): Promise[K], T>>; + + /** + * Returns a map consisting of the elements mapped by the given `keySelector`. The value + * is transformed into another value by the `valueTransformer`. + * + * @param {(value: T) => Promise | K} keySelector + * @param {(value: T) => Promise | V} valueTransformer + * @returns {Map} + */ + async associateBy(keySelector: (value: T) => Promise | K, valueTransformer: (value: T) => Promise | V): Promise>; + + /** + * Returns a map consisting of the elements indexed by the given `key`. The value + * is transformed into another value by the `valueTransformer`. + * + * @param {K} key + * @param {(value: T) => Promise | V} valueTransformer + * @returns {Map} + */ + async associateBy, V>(key: K, valueTransformer: (value: T) => Promise | V): Promise[K], V>>; + + async associateBy(this: AsyncSequence, + keyOrSelector: ((value: T) => Promise | K) | keyof NonNullable, + valueTransform?: (value: T) => V): Promise> { + const selector = asAsyncSelector(keyOrSelector); + const result = new Map(); + const transform = valueTransform != null + ? valueTransform + : (value: T) => value; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + const key = await selector(item.value); + const value = await transform(item.value); + result.set(key, value); + } + return result; + } + +} \ No newline at end of file diff --git a/src/operators/async/average.ts b/src/operators/async/average.ts new file mode 100644 index 0000000..d9a6d30 --- /dev/null +++ b/src/operators/async/average.ts @@ -0,0 +1,22 @@ +import {AsyncSequence} from "../../sequency"; + +export class Average { + + /** + * Returns the average of all numbers of the sequence or `NaN` if the sequence is empty. + * + * @returns {Promise} + */ + async average(this: AsyncSequence): Promise { + let sum = 0; + let count = 0; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + sum += item.value; + count++; + } + return count === 0 + ? Number.NaN + : sum / count; + } + +} \ No newline at end of file diff --git a/src/operators/async/chunk.ts b/src/operators/async/chunk.ts new file mode 100644 index 0000000..4d45bc4 --- /dev/null +++ b/src/operators/async/chunk.ts @@ -0,0 +1,30 @@ +import {AsyncSequence} from "../../sequency"; + +export class Chunk { + + /** + * Splits the elements of the sequence into arrays which length is determined by + * the given `chunkSize` and returns all chunks as array. + * + * @param {number} chunkSize + * @returns {Promise} + */ + async chunk(this: AsyncSequence, chunkSize: number): Promise { + if (chunkSize < 1) { + throw new Error("chunkSize must be > 0 but is " + chunkSize); + } + const result: T[][] = []; + let index = 0; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + const chunkIndex = Math.floor(index / chunkSize); + if (result[chunkIndex] == null) { + result[chunkIndex] = [item.value]; + } else { + result[chunkIndex].push(item.value); + } + index++; + } + return result; + } + +} \ No newline at end of file diff --git a/src/operators/async/contains.ts b/src/operators/async/contains.ts new file mode 100644 index 0000000..9d1165a --- /dev/null +++ b/src/operators/async/contains.ts @@ -0,0 +1,21 @@ +import {AsyncSequence} from "../../sequency"; + +export class Contains { + + /** + * Returns `true` if the sequence contains the given `element`. + * + * @param {T} element + * @returns {Promise} + */ + async contains(this: AsyncSequence, element: T): Promise { + const elem = await element; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + if (elem === item.value) { + return true; + } + } + return false; + } + +} \ No newline at end of file diff --git a/src/operators/async/count.ts b/src/operators/async/count.ts new file mode 100644 index 0000000..71c76c8 --- /dev/null +++ b/src/operators/async/count.ts @@ -0,0 +1,20 @@ +import {AsyncSequence} from "../../sequency"; + +export class Count { + + /** + * Returns the number of elements of this sequence. If `predicate` is present, returns + * the number of elements matching the given `predicate`. + * + * @param {(T) => Promise | boolean} predicate + * @returns {Promise} + */ + async count(this: AsyncSequence, predicate?: (item: T) => Promise | boolean): Promise { + if (predicate == null) { + return this.fold(0, (acc, _item) => acc + 1); + } else { + return this.fold(0, async (acc, item) => await predicate(item) ? acc + 1 : acc); + } + } + +} \ No newline at end of file diff --git a/src/operators/async/distinct.ts b/src/operators/async/distinct.ts new file mode 100644 index 0000000..a346157 --- /dev/null +++ b/src/operators/async/distinct.ts @@ -0,0 +1,33 @@ +import {createAsyncSequence, AsyncSequence} from "../../sequency"; + +class DistinctIterator implements AsyncIterator { + private set: Set = new Set(); + + constructor(private readonly iterator: AsyncIterator) { + } + + async next(value?: any): Promise> { + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + const sizeBeforeAdd = this.set.size; + this.set.add(item.value); + if (this.set.size > sizeBeforeAdd) { + return {done: false, value: item.value}; + } + } + this.set.clear(); + return {done: true, value: undefined}; + } +} + +export class Distinct { + + /** + * Returns a new sequence which discards all duplicate elements. + * + * @returns {AsyncSequence} + */ + distinct(this: AsyncSequence): AsyncSequence { + return createAsyncSequence(new DistinctIterator(this.iterator)); + } + +} diff --git a/src/operators/async/distinctBy.ts b/src/operators/async/distinctBy.ts new file mode 100644 index 0000000..5931840 --- /dev/null +++ b/src/operators/async/distinctBy.ts @@ -0,0 +1,37 @@ +import {createAsyncSequence, AsyncSequence} from "../../sequency"; + +class DistinctByIterator implements AsyncIterator { + private set: Set = new Set(); + + constructor(private readonly iterator: AsyncIterator, + private readonly selector: (item: T) => Promise | K) { + } + + async next(value?: any): Promise> { + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + const key = await this.selector(item.value); + const sizeBeforeAdd = this.set.size; + this.set.add(key); + if (this.set.size > sizeBeforeAdd) { + return {done: false, value: item.value}; + } + } + this.set.clear(); + return {done: true, value: undefined}; + } +} + +export class DistinctBy { + + /** + * Returns a new sequence which discards all elements with duplicate items determined + * by the given `selector`. + * + * @param {(item: T) => Promise | K} selector + * @returns {AsyncSequence} + */ + distinctBy(this: AsyncSequence, selector: (item: T) => Promise | K): AsyncSequence { + return createAsyncSequence(new DistinctByIterator(this.iterator, selector)); + } + +} diff --git a/src/operators/async/drop.ts b/src/operators/async/drop.ts new file mode 100644 index 0000000..68a6bdd --- /dev/null +++ b/src/operators/async/drop.ts @@ -0,0 +1,17 @@ +import {AsyncSequence} from "../../sequency"; + +export class Drop { + + /** + * Returns a new sequence which discards the first `n` elements; + * + * @param {number} n + * @returns {AsyncSequence} + */ + drop(this: AsyncSequence, n: number): AsyncSequence { + return this.withIndex() + .dropWhile(it => it.index < n) + .map(it => it.value); + } + +} \ No newline at end of file diff --git a/src/operators/async/dropWhile.ts b/src/operators/async/dropWhile.ts new file mode 100644 index 0000000..cba7667 --- /dev/null +++ b/src/operators/async/dropWhile.ts @@ -0,0 +1,36 @@ +import {createAsyncSequence, AsyncSequence} from "../../sequency"; + +class DropWhileIterator implements AsyncIterator { + private dropping = true; + + constructor(private readonly iterator: AsyncIterator, + private readonly predicate: (item: T) => Promise | boolean) { + } + + async next(value?: any): Promise> { + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + if (!this.dropping) { + return {done: false, value: item.value}; + } + if (!await this.predicate(item.value)) { + this.dropping = false; + return {done: false, value: item.value}; + } + } + return {done: true, value: undefined}; + } +} + +export class DropWhile { + + /** + * Drops all elements of the sequence as long as the given `predicate` evaluates to true. + * + * @param {(item: T) => Promise | boolean} predicate + * @returns {AsyncSequence} + */ + dropWhile(this: AsyncSequence, predicate: (item: T) => Promise | boolean): AsyncSequence { + return createAsyncSequence(new DropWhileIterator(this.iterator, predicate)); + } + +} \ No newline at end of file diff --git a/src/operators/async/elementAt.ts b/src/operators/async/elementAt.ts new file mode 100644 index 0000000..2dad7af --- /dev/null +++ b/src/operators/async/elementAt.ts @@ -0,0 +1,23 @@ +import {AsyncSequence} from "../../sequency"; + +export class ElementAt { + + /** + * Returns the element at position `index` (zero-based) or throws an error if `index` + * is out of bounds. + * + * @param {number} index + * @returns {Promise} + */ + async elementAt(this: AsyncSequence, index: number): Promise { + let i = 0; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + if (i === index) { + return item.value; + } + i++; + } + throw new Error("Index out of bounds: " + index); + } + +} \ No newline at end of file diff --git a/src/operators/async/elementAtOrElse.ts b/src/operators/async/elementAtOrElse.ts new file mode 100644 index 0000000..c21b792 --- /dev/null +++ b/src/operators/async/elementAtOrElse.ts @@ -0,0 +1,24 @@ +import {AsyncSequence} from "../../sequency"; + +export class ElementAtOrElse { + + /** + * Returns the element at position `index` (zero-based). If `index` is out of bounds returns + * the result of the given `defaultValue` function. + * + * @param {number} index + * @param {(index: number) => Promise | T} defaultValue + * @returns {Promise} + */ + async elementAtOrElse(this: AsyncSequence, index: number, defaultValue: (index: number) => Promise | T): Promise { + let i = 0; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + if (i === index) { + return item.value; + } + i++; + } + return await defaultValue(index); + } + +} \ No newline at end of file diff --git a/src/operators/async/elementAtOrNull.ts b/src/operators/async/elementAtOrNull.ts new file mode 100644 index 0000000..29350ed --- /dev/null +++ b/src/operators/async/elementAtOrNull.ts @@ -0,0 +1,16 @@ +import {AsyncSequence} from "../../sequency"; + +export class ElementAtOrNull { + + /** + * Returns the element at position `index` (zero-based) or `null` if `index` + * is out of bounds. + * + * @param {number} index + * @returns {Promise} + */ + async elementAtOrNull(this: AsyncSequence, index: number): Promise { + return await this.elementAtOrElse(index, () => null); + } + +} \ No newline at end of file diff --git a/src/operators/async/filter.ts b/src/operators/async/filter.ts new file mode 100644 index 0000000..853ee7c --- /dev/null +++ b/src/operators/async/filter.ts @@ -0,0 +1,30 @@ +import {createAsyncSequence, AsyncSequence} from "../../sequency"; + +class FilterIterator implements AsyncIterator { + constructor(private readonly predicate: (item: T) => Promise | boolean, + private readonly iterator: AsyncIterator) { + } + + async next(value?: any): Promise> { + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + if (await this.predicate(item.value)) { + return {done: false, value: item.value}; + } + } + return {done: true, value: undefined}; + } +} + +export class Filter { + + /** + * Returns a new sequence consisting of all elements that match the given `predicate`. + * + * @param {(item: T) => Promise | boolean} predicate + * @returns {AsyncSequence} + */ + filter(this: AsyncSequence, predicate: (item: T) => Promise | boolean): AsyncSequence { + return createAsyncSequence(new FilterIterator(predicate, this.iterator)); + } + +} \ No newline at end of file diff --git a/src/operators/async/filterHolistically.ts b/src/operators/async/filterHolistically.ts new file mode 100644 index 0000000..5016db9 --- /dev/null +++ b/src/operators/async/filterHolistically.ts @@ -0,0 +1,49 @@ +import {createAsyncSequence, AsyncSequence} from "../../sequency"; + +class FilterIterator implements AsyncIterator { + private readonly data: T[] = []; + /** Iterator to initialize data with */ + private iterator: AsyncIterator | null = null; + /** Current data index */ + private index: number = 0; + + constructor(iterator: AsyncIterator, private readonly predicate: (item: T, index: number, array: Readonly) => Promise | boolean) { + this.iterator = iterator; + } + + private async init() { + if (this.iterator != null) { + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + if (!item.done) { + this.data.push(item.value); + } + } + Object.freeze(this.data); + this.iterator = null; + } + } + + async next(value?: any): Promise> { + await this.init(); + for (let item = this.data[this.index++]; this.index < this.data.length; item = this.data[this.index++]) { + if (await this.predicate(item, this.index, this.data)) { + return {done: false, value: item}; + } + } + return {done: true, value: undefined}; + } +} + +export class FilterHolistically { + + /** + * Returns a new sequence consisting of all elements that match the given `predicate`. + * + * @param {(value: T, index: number, array: T[]) => Promise | boolean} predicate + * @returns {AsyncSequence} + */ + filterHolistically(this: AsyncSequence, predicate: (item: T, index: number, array: Readonly) => Promise | boolean): AsyncSequence { + return createAsyncSequence(new FilterIterator(this.iterator, predicate)); + } + +} \ No newline at end of file diff --git a/src/operators/async/filterIndexed.ts b/src/operators/async/filterIndexed.ts new file mode 100644 index 0000000..99a7f8d --- /dev/null +++ b/src/operators/async/filterIndexed.ts @@ -0,0 +1,17 @@ +import {AsyncSequence} from "../../sequency"; + +export class FilterIndexed { + + /** + * Returns a new sequence consisting of all elements that match the given `predicate`. + * + * @param {(index: number, value: T) => Promise | boolean} predicate + * @returns {AsyncSequence} + */ + filterIndexed(this: AsyncSequence, predicate: (index: number, value: T) => Promise | boolean): AsyncSequence { + return this.withIndex() + .filter(async it => await predicate(it.index, it.value)) + .map(it => it.value); + } + +} \ No newline at end of file diff --git a/src/operators/async/filterNot.ts b/src/operators/async/filterNot.ts new file mode 100644 index 0000000..039dd13 --- /dev/null +++ b/src/operators/async/filterNot.ts @@ -0,0 +1,15 @@ +import {AsyncSequence} from "../../sequency"; + +export class FilterNot { + + /** + * Returns a new sequence consisting of all elements that don't match the given `predicate`. + * + * @param {(value: T) => Promise | boolean} predicate + * @returns {AsyncSequence} + */ + filterNot(this: AsyncSequence, predicate: (value: T) => Promise | boolean): AsyncSequence { + return this.filter(async (value: T) => !await predicate(value)); + } + +} \ No newline at end of file diff --git a/src/operators/async/filterNotNull.ts b/src/operators/async/filterNotNull.ts new file mode 100644 index 0000000..f358990 --- /dev/null +++ b/src/operators/async/filterNotNull.ts @@ -0,0 +1,14 @@ +import {AsyncSequence} from "../../sequency"; + +export class FilterNotNull { + + /** + * Returns a new sequence consisting of all non-null elements. + * + * @returns {AsyncSequence} + */ + filterNotNull(this: AsyncSequence): AsyncSequence> { + return this.filter(it => it != null) as AsyncSequence>; + } + +} \ No newline at end of file diff --git a/src/operators/async/first.ts b/src/operators/async/first.ts new file mode 100644 index 0000000..045081a --- /dev/null +++ b/src/operators/async/first.ts @@ -0,0 +1,23 @@ +import {AsyncSequence} from "../../sequency"; + +export class First { + + /** + * Returns the first element of the sequence or the first element matching `predicate` if present, otherwise throws + * an error. + * + * @param {(T) => Promise | boolean} predicate + * @returns {Promise} + */ + async first(this: AsyncSequence, predicate?: (item: T) => Promise | boolean): Promise { + if (predicate != null) { + return await this.filter(predicate).first(); + } + const item = await this.iterator.next(); + if (item.done) { + throw new Error("No such element"); + } + return item.value; + } + +} \ No newline at end of file diff --git a/src/operators/async/firstOrNull.ts b/src/operators/async/firstOrNull.ts new file mode 100644 index 0000000..6b5d51b --- /dev/null +++ b/src/operators/async/firstOrNull.ts @@ -0,0 +1,31 @@ +import {AsyncSequence} from "../../sequency"; + +export class FirstOrNull { + + /** + * Returns the first element of the sequence or the first element matching `predicate` if present, otherwise returns `null`. + * + * @param {(T) => Promise | boolean} predicate + * @returns {Promise} + */ + async firstOrNull(this: AsyncSequence, predicate?: (item: T) => Promise | boolean): Promise { + if (predicate != null) { + return this.filter(predicate).firstOrNull(); + } + const item = await this.iterator.next(); + return item.done + ? null + : item.value; + } + + /** + * Returns the first element of the sequence or the first element matching `predicate` if present, otherwise returns `null`. + * + * @param {(T) => Promise | boolean} predicate + * @returns {Promise} + */ + async find(this: AsyncSequence, predicate?: (item: T) => Promise | boolean): Promise { + return this.firstOrNull(predicate); + } + +} \ No newline at end of file diff --git a/src/operators/async/flatMap.ts b/src/operators/async/flatMap.ts new file mode 100644 index 0000000..8bcbb41 --- /dev/null +++ b/src/operators/async/flatMap.ts @@ -0,0 +1,39 @@ +import {createAsyncSequence, AsyncSequence} from "../../sequency"; + +class FlatMapIterator implements AsyncIterator { + private current: AsyncIterator | undefined; + + constructor(private readonly transform: (item: S) => Promise> | AsyncSequence, + private readonly iterator: AsyncIterator) { + } + + async next(value?: any): Promise> { + if (this.current != null) { + const item = await this.current.next(); + if (!item.done) { + return item; + } + } + const next = await this.iterator.next(); + if (!next.done) { + const sequence = await this.transform(next.value); + this.current = sequence.iterator; + return this.next(); + } + return {done: true, value: undefined}; + } +} + +export class FlatMap { + + /** + * Transforms each element into a sequence of items and returns a flat single sequence of all those items. + * + * @param {(value: S) => Promise> | AsyncSequence} transform + * @returns {AsyncSequence} + */ + flatMap(this: AsyncSequence, transform: (value: S) => Promise> | AsyncSequence): AsyncSequence { + return createAsyncSequence(new FlatMapIterator(transform, this.iterator)); + } + +} \ No newline at end of file diff --git a/src/operators/async/flatten.ts b/src/operators/async/flatten.ts new file mode 100644 index 0000000..e7fe829 --- /dev/null +++ b/src/operators/async/flatten.ts @@ -0,0 +1,20 @@ +import {asAsyncSequence, isAsyncSequence, AsyncSequence} from "../../sequency"; + +export class Flatten { + + /** + * Returns a single flat sequence of all the items from all sequences or iterables. + * + * @returns {AsyncSequence} + */ + flatten(this: AsyncSequence | AsyncIterable | Iterable>): AsyncSequence { + return this.flatMap(it => { + if (isAsyncSequence(it)) { + return it; + } else { + return asAsyncSequence(it); + } + }); + } + +} \ No newline at end of file diff --git a/src/operators/async/fold.ts b/src/operators/async/fold.ts new file mode 100644 index 0000000..0d3f4c3 --- /dev/null +++ b/src/operators/async/fold.ts @@ -0,0 +1,22 @@ +import {AsyncSequence} from "../../sequency"; + +export class Fold { + + /** + * Accumulates all elements of the sequence into a single result by applying the given `operation` starting with + * the `initial` value. The result of the last operation will be passed as accumulated value to the getNext invocation + * of the operation until all elements of the sequence are processed. + * + * @param {R} initial + * @param {(acc: R, element: T) => Promise | R} operation + * @returns {Promise} + */ + async fold(this: AsyncSequence, initial: R, operation: (acc: R, element: T) => Promise | R): Promise { + let result = initial; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + result = await operation(result, item.value); + } + return result; + } + +} \ No newline at end of file diff --git a/src/operators/async/foldIndexed.ts b/src/operators/async/foldIndexed.ts new file mode 100644 index 0000000..e4d5094 --- /dev/null +++ b/src/operators/async/foldIndexed.ts @@ -0,0 +1,25 @@ +import {AsyncSequence} from "../../sequency"; + +export class FoldIndexed { + + /** + * Accumulates all elements of the sequence into a single result by applying the given `operation` starting with + * the `initial` value. The result of the last operation will be passed as accumulated value to the getNext invocation + * of the operation as well as the `index` of the current element (zero-based) until all elements of the sequence + * are processed. + * + * @param {R} initial + * @param {(index: number, acc: R, element: T) => Promise | R} operation + * @returns {Promise} + */ + async foldIndexed(this: AsyncSequence, initial: R, operation: (index: number, acc: R, element: T) => Promise | R): Promise { + let result = initial; + let index = 0; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + result = await operation(index, result, item.value); + index++; + } + return result; + } + +} \ No newline at end of file diff --git a/src/operators/async/forEach.ts b/src/operators/async/forEach.ts new file mode 100644 index 0000000..060ee78 --- /dev/null +++ b/src/operators/async/forEach.ts @@ -0,0 +1,16 @@ +import {AsyncSequence} from "../../sequency"; + +export class ForEach { + + /** + * Performs the given `action` (side-effect) for each element of the sequence. + * + * @param {(item: T) => Promise | void} action + */ + async forEach(this: AsyncSequence, action: (item: T) => Promise | unknown) { + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + await action(item.value); + } + } + +} \ No newline at end of file diff --git a/src/operators/async/forEachIndexed.ts b/src/operators/async/forEachIndexed.ts new file mode 100644 index 0000000..6a511d8 --- /dev/null +++ b/src/operators/async/forEachIndexed.ts @@ -0,0 +1,16 @@ +import {AsyncSequence} from "../../sequency"; + +export class ForEachIndexed { + + /** + * Performs the given `action` (side-effect) for each element of the sequence and passes the `index` of the current + * element (zero-based). + * + * @param {(index: number, value: T) => Promise | void} action + */ + async forEachIndexed(this: AsyncSequence, action: (index: number, value: T) => Promise | unknown) { + await this.withIndex() + .forEach(async it => await action(it.index, it.value)); + } + +} \ No newline at end of file diff --git a/src/operators/async/groupBy.ts b/src/operators/async/groupBy.ts new file mode 100644 index 0000000..e5972ac --- /dev/null +++ b/src/operators/async/groupBy.ts @@ -0,0 +1,25 @@ +import {AsyncSequence} from "../../sequency"; + +export class GroupBy { + + /** + * Groups all elements of the sequence into a map. Keys are determined by the given `keySelector` function. + * + * @param {(value: T) => Promise | K} keySelector + * @returns {Promise>} + */ + async groupBy(this: AsyncSequence, keySelector: (value: T) => Promise | K): Promise> { + const result = new Map(); + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + const key = await keySelector(item.value); + const array = result.get(key); + if (array == null) { + result.set(key, [item.value]); + } else { + array.push(item.value); + } + } + return result; + } + +} \ No newline at end of file diff --git a/src/operators/async/indexOf.ts b/src/operators/async/indexOf.ts new file mode 100644 index 0000000..f23c984 --- /dev/null +++ b/src/operators/async/indexOf.ts @@ -0,0 +1,15 @@ +import {AsyncSequence} from "../../sequency"; + +export class IndexOf { + + /** + * Returns the zero-based index of the given `element` or -1 if the sequence does not contain the element. + * + * @param {T} element + * @returns {Promise} + */ + async indexOf(this: AsyncSequence, element: T): Promise { + return await this.indexOfFirst(value => value === element); + } + +} \ No newline at end of file diff --git a/src/operators/async/indexOfFirst.ts b/src/operators/async/indexOfFirst.ts new file mode 100644 index 0000000..e2b8c7f --- /dev/null +++ b/src/operators/async/indexOfFirst.ts @@ -0,0 +1,23 @@ +import {AsyncSequence} from "../../sequency"; + +export class IndexOfFirst { + + /** + * Returns the zero-based index of the first element matching the given `predicate` or -1 if no element matches + * the predicate. + * + * @param {(value: T) => Promise | boolean} predicate + * @returns {Promise} + */ + async indexOfFirst(this: AsyncSequence, predicate: (value: T) => Promise | boolean): Promise { + let index = 0; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + if (await predicate(item.value)) { + return index; + } + index++; + } + return -1; + } + +} diff --git a/src/operators/async/indexOfLast.ts b/src/operators/async/indexOfLast.ts new file mode 100644 index 0000000..073cd30 --- /dev/null +++ b/src/operators/async/indexOfLast.ts @@ -0,0 +1,24 @@ +import {AsyncSequence} from "../../sequency"; + +export class IndexOfLast { + + /** + * Returns the zero-based index of the last element matching the given `predicate` or -1 if no element matches + * the predicate. + * + * @param {(value: T) => Promise | boolean} predicate + * @returns {Promise} + */ + async indexOfLast(this: AsyncSequence, predicate: (value: T) => Promise | boolean): Promise { + let index = 0; + let result = -1; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + if (await predicate(item.value)) { + result = index; + } + index++; + } + return result; + } + +} \ No newline at end of file diff --git a/src/operators/async/joinToString.ts b/src/operators/async/joinToString.ts new file mode 100644 index 0000000..d0e442a --- /dev/null +++ b/src/operators/async/joinToString.ts @@ -0,0 +1,77 @@ +import {AsyncSequence} from "../../sequency"; +import {BaseJoinToStringConfig} from "../../BaseJoinToStringConfig"; + +export interface JoinConfig extends BaseJoinToStringConfig { + /** + * Transform function + * @param value Sequence element + * @returns {Promise | string} String representation + */ + transform?: (value: T) => Promise | string; +} + +const defaults = { + value: "", + separator: ", ", + prefix: "", + postfix: "", + limit: -1, + truncated: "...", + transform: undefined +} satisfies JoinConfig; + +export class JoinToString { + + /** + * Joins all elements of the sequence into a string with the given configuration. + * + * @param {JoinConfig} config + * @returns {Promise} + */ + async joinToString(this: AsyncSequence, config: JoinConfig = defaults): Promise { + const { + value = defaults.value, + separator = defaults.separator, + prefix = defaults.prefix, + postfix = defaults.postfix, + limit = defaults.limit, + truncated = defaults.truncated, + transform = defaults.transform + } = config; + + let result = `${value}${prefix}`; + let count = 0; + + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + count++; + if (count > 1) { + result += separator; + } + if (limit < 0 || count <= limit) { + result += transform != null + ? await transform(item.value) + : String(item.value); + } else { + break; + } + } + + if (limit >= 0 && count > limit) { + result += truncated; + } + + result += postfix; + return result; + } + + /** + * Joins all elements of the sequence into a string with the given configuration. + * + * @param {JoinConfig} config + * @returns {Promise} + */ + async joinTo(this: AsyncSequence, config: JoinConfig = defaults): Promise { + return this.joinToString(config); + } + +} \ No newline at end of file diff --git a/src/operators/async/last.ts b/src/operators/async/last.ts new file mode 100644 index 0000000..690a059 --- /dev/null +++ b/src/operators/async/last.ts @@ -0,0 +1,28 @@ +import {AsyncSequence} from "../../sequency"; + +export class Last { + + /** + * Returns the last element of the sequence or the last element matching `predicate` if present, otherwise throws + * an error. + * + * @param {(value: T) => Promise | boolean} predicate + * @returns {Promise} + */ + async last(this: AsyncSequence, predicate?: (value: T) => Promise | boolean): Promise { + if (predicate != null) { + return this.filter(predicate).last(); + } + let result: T; + let empty = true; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + result = item.value; + empty = false; + } + if (empty) { + throw new Error("No such element"); + } + return result!; + } + +} \ No newline at end of file diff --git a/src/operators/async/lastOrNull.ts b/src/operators/async/lastOrNull.ts new file mode 100644 index 0000000..b6bde0e --- /dev/null +++ b/src/operators/async/lastOrNull.ts @@ -0,0 +1,32 @@ +import {AsyncSequence} from "../../sequency"; + +export class LastOrNull { + + /** + * Returns the last element of the sequence or the last element matching `predicate` if present, otherwise returns `null`. + * + * @param {(value: T) => Promise | boolean} predicate + * @returns {Promise} + */ + async lastOrNull(this: AsyncSequence, predicate?: (value: T) => Promise | boolean): Promise { + if (predicate != null) { + return this.filter(predicate).lastOrNull(); + } + let result: T | null = null; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + result = item.value; + } + return result; + } + + /** + * Returns the last element of the sequence or the last element matching `predicate` if present, otherwise returns `null`. + * + * @param {(value: T) => Promise | boolean} predicate + * @returns {Promise} + */ + async findLast(this: AsyncSequence, predicate?: (value: T) => Promise | boolean): Promise { + return this.lastOrNull(predicate); + } + +} \ No newline at end of file diff --git a/src/operators/async/map.ts b/src/operators/async/map.ts new file mode 100644 index 0000000..0160e93 --- /dev/null +++ b/src/operators/async/map.ts @@ -0,0 +1,28 @@ +import {createAsyncSequence, AsyncSequence} from "../../sequency"; + +class MapIterator implements AsyncIterator { + constructor(private readonly transform: (item: S) => Promise | T, + private readonly iterator: AsyncIterator) { + } + + async next(value?: any): Promise> { + const item = await this.iterator.next(); + return item.done + ? {done: true, value: undefined} + : {done: false, value: await this.transform(item.value)}; + } +} + +export class Map { + + /** + * Transforms each element into another value by applying the given `transform` function and returns a new sequence. + * + * @param {(S) => Promise | T} transform + * @returns {AsyncSequence} + */ + map(this: AsyncSequence, transform: (element: S) => Promise | T): AsyncSequence { + return createAsyncSequence(new MapIterator(transform, this.iterator)); + } + +} \ No newline at end of file diff --git a/src/operators/async/mapIndexed.ts b/src/operators/async/mapIndexed.ts new file mode 100644 index 0000000..fc95825 --- /dev/null +++ b/src/operators/async/mapIndexed.ts @@ -0,0 +1,16 @@ +import {AsyncSequence} from "../../sequency"; + +export class MapIndexed { + + /** + * Transforms each element into another value by applying the given `transform` function and returns a new sequence. + * + * @param {(index: number, value: T) => Promise | R} transform + * @returns {AsyncSequence} + */ + mapIndexed(this: AsyncSequence, transform: (index: number, value: T) => Promise | R): AsyncSequence { + return this.withIndex() + .map(it => transform(it.index, it.value)); + } + +} \ No newline at end of file diff --git a/src/operators/async/mapNotNull.ts b/src/operators/async/mapNotNull.ts new file mode 100644 index 0000000..3d380c6 --- /dev/null +++ b/src/operators/async/mapNotNull.ts @@ -0,0 +1,21 @@ +import {emptyAsyncSequence, asyncSequenceOf, AsyncSequence} from "../../sequency"; + +export class MapNotNull { + + /** + * Transforms each element into another value by applying the given `transform` function and returns a new sequence. + * Transformations into `null` values are discarded. + * + * @param {(value: T) => R | null} transform + * @returns {AsyncSequence} + */ + mapNotNull(this: AsyncSequence, transform: (value: T) => Promise | R | null): AsyncSequence { + return this.flatMap(async (value: T) => { + const item = await transform(value); + return item !== null + ? asyncSequenceOf(item) + : emptyAsyncSequence(); + }); + } + +} \ No newline at end of file diff --git a/src/operators/async/max.ts b/src/operators/async/max.ts new file mode 100644 index 0000000..41faa59 --- /dev/null +++ b/src/operators/async/max.ts @@ -0,0 +1,20 @@ +import {AsyncSequence} from "../../sequency"; + +export class Max { + + /** + * Returns the maximum element of the sequence or `null` if sequence is empty. + * + * @returns {Promise} + */ + async max(this: AsyncSequence): Promise { + let result: T | null = null; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + if (result == null || item.value > result) { + result = item.value; + } + } + return result; + } + +} \ No newline at end of file diff --git a/src/operators/async/maxBy.ts b/src/operators/async/maxBy.ts new file mode 100644 index 0000000..a48cf70 --- /dev/null +++ b/src/operators/async/maxBy.ts @@ -0,0 +1,25 @@ +import {AsyncSequence} from "../../sequency"; + +export class MaxBy { + + /** + * Returns the maximum element by comparing the results of the given `selector` function + * for each element of the sequence or `null` if the sequence is empty. + * + * @param {(value: T) => Promise | R} selector + * @returns {Promise} + */ + async maxBy(this: AsyncSequence, selector: (value: T) => Promise | R): Promise { + let max: T | null = null; + let maxSelected: R | null = null; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + const value = await selector(item.value); + if (maxSelected == null || value > maxSelected) { + maxSelected = value; + max = item.value; + } + } + return max; + } + +} \ No newline at end of file diff --git a/src/operators/async/maxWith.ts b/src/operators/async/maxWith.ts new file mode 100644 index 0000000..85dcdfa --- /dev/null +++ b/src/operators/async/maxWith.ts @@ -0,0 +1,22 @@ +import {AsyncSequence} from "../../sequency"; + +export class MaxWith { + + /** + * Returns the maximum element of the sequence by evaluating the given `compare` + * function or `null` if sequence is empty. + * + * @param {(a: T, b: T) => Promise | number} compare + * @returns {Promise} + */ + async maxWith(this: AsyncSequence, compare: (a: T, b: T) => Promise | number): Promise { + let max: T | null = null; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + if (max == null || await compare(item.value, max) > 0) { + max = item.value; + } + } + return max; + } + +} \ No newline at end of file diff --git a/src/operators/async/merge.ts b/src/operators/async/merge.ts new file mode 100644 index 0000000..b870a9f --- /dev/null +++ b/src/operators/async/merge.ts @@ -0,0 +1,103 @@ +import {asAsyncIterator} from "../../internal"; +import {asyncSequenceOf, createAsyncSequence, isAsyncSequence, AsyncSequence} from "../../sequency"; + +class MergeIterator implements AsyncIterator { + private firstData: T[] = []; + private secondData: T[] = []; + /** Iterator to initialize data with */ + private firstIterator: AsyncIterator | null = null; + /** Iterator to initialize data with */ + private secondIterator: AsyncIterator | null = null; + /** First data index */ + private firstIndex: number = 0; + /** Second data index */ + private secondIndex: number = 0; + + constructor(firstIterator: AsyncIterator, + secondIterator: AsyncIterator, + private readonly selector: (value: T) => Promise | S, + private readonly prependNewValues: boolean) { + this.firstIterator = firstIterator; + this.secondIterator = secondIterator; + } + + private async init() { + if (this.firstIterator != null && this.secondIterator != null) { + // Init first data (self) + for (let item = await this.firstIterator.next(); !item.done; item = await this.firstIterator.next()) { + if (!item.done) { + this.firstData.push(item.value); + } + } + this.firstIterator = null; + // Init second data (other) + for (let item = await this.secondIterator.next(); !item.done; item = await this.secondIterator.next()) { + if (!item.done) { + this.secondData.push(item.value); + } + } + this.secondIterator = null; + + // Replace values with those from second data if selector result of both (first and second) match, otherwise retain values from first data + this.firstData = await asyncSequenceOf(...this.firstData) + .map(async left => { + const selected = await this.selector(left); + const right = await asyncSequenceOf(...this.secondData) + .find(async it => await this.selector(it) === selected); + if (right != null) { + this.secondData = this.secondData.filter(it => it !== right); + return right; + } else { + return left; + } + }) + .toArray(); + + // First data now contains merged values and second data the remaining ones, swap them if new values should be prepended + if (this.prependNewValues) { + const tmp = this.firstData; + this.firstData = this.secondData; + this.secondData = tmp; + } + } + } + + async next(value?: any): Promise> { + await this.init(); + if (this.firstIndex < this.firstData.length) { + return {done: false, value: this.firstData[this.firstIndex++]}; + } + if (this.secondIndex < this.secondData.length) { + return {done: false, value: this.secondData[this.secondIndex++]}; + } + return {done: true, value: undefined}; + } +} + +export class Merge { + + /** + * Merges the elements of both sequences into a new sequence. Each element of this sequence is eventually replaced with + * an element of the other sequence by comparing results of the given `selector` function. If no value is found in the other + * sequence the element is retained. New elements of the other sequence are appended to the end of the new sequence or + * prepended to the start of the new sequence, if `prependNewValues` is set to `true`. This operation is not lazy evaluated. + * + * @param {AsyncSequence} other + * @param {(value: T) => Promise | S} selector + * @param prependNewValues + * @returns {AsyncSequence} + */ + merge(this: AsyncSequence, other: AsyncSequence | AsyncIterable | Iterable, selector: (value: T) => Promise | S, prependNewValues: boolean = false): AsyncSequence { + return createAsyncSequence(new MergeIterator( + this.iterator, + isAsyncSequence(other) + ? other.iterator + : (other as AsyncIterable)[Symbol.asyncIterator] + ? (other as AsyncIterable)[Symbol.asyncIterator]() + : asAsyncIterator((other as Iterable)[Symbol.iterator]()), + selector, + prependNewValues + )); + } + +} \ No newline at end of file diff --git a/src/operators/async/min.ts b/src/operators/async/min.ts new file mode 100644 index 0000000..b9510f4 --- /dev/null +++ b/src/operators/async/min.ts @@ -0,0 +1,20 @@ +import {AsyncSequence} from "../../sequency"; + +export class Min { + + /** + * Returns the minimum element of the sequence or `null` if sequence is empty. + * + * @returns {Promise} + */ + async min(this: AsyncSequence): Promise { + let result: T | null = null; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + if (result == null || item.value < result) { + result = item.value; + } + } + return result; + } + +} \ No newline at end of file diff --git a/src/operators/async/minBy.ts b/src/operators/async/minBy.ts new file mode 100644 index 0000000..ba310e3 --- /dev/null +++ b/src/operators/async/minBy.ts @@ -0,0 +1,25 @@ +import {AsyncSequence} from "../../sequency"; + +export class MinBy { + + /** + * Returns the minimum element by comparing the results of the given `selector` function + * for each element of the sequence or `null` if the sequence is empty. + * + * @param {(value: T) => Promise | R} selector + * @returns {Promise} + */ + async minBy(this: AsyncSequence, selector: (value: T) => Promise | R): Promise { + let min: T | null = null; + let minSelected: R | null = null; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + const value = await selector(item.value); + if (minSelected == null || value < minSelected) { + minSelected = value; + min = item.value; + } + } + return min; + } + +} \ No newline at end of file diff --git a/src/operators/async/minWith.ts b/src/operators/async/minWith.ts new file mode 100644 index 0000000..c35e81f --- /dev/null +++ b/src/operators/async/minWith.ts @@ -0,0 +1,22 @@ +import {AsyncSequence} from "../../sequency"; + +export class MinWith { + + /** + * Returns the minimum element of the sequence by evaluating the given `compare` + * function or `null` if sequence is empty. + * + * @param {(a: T, b: T) => Promise | number} compare + * @returns {Promise} + */ + async minWith(this: AsyncSequence, compare: (a: T, b: T) => Promise | number): Promise { + let min: T | null = null; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + if (min == null || await compare(item.value, min) < 0) { + min = item.value; + } + } + return min; + } + +} \ No newline at end of file diff --git a/src/operators/async/minus.ts b/src/operators/async/minus.ts new file mode 100644 index 0000000..69bbc33 --- /dev/null +++ b/src/operators/async/minus.ts @@ -0,0 +1,22 @@ +import {isAsyncSequence, AsyncSequence} from "../../sequency"; + +export class Minus { + + /** + * Removes the given `data` and returns a new sequence. Data can either be a single element, an array of elements + * or a sequence of elements. + * + * @param {AsyncSequence | T[] | T} data + * @returns {AsyncSequence} + */ + minus(this: AsyncSequence, data: T | AsyncSequence | T[]): AsyncSequence { + if (isAsyncSequence(data)) { + return this.filter(async (it) => !await data.contains(it)); + } else if (data instanceof Array) { + return this.filter(it => !data.includes(it)); + } else { + return this.filter(it => it !== data); + } + } + +} \ No newline at end of file diff --git a/src/operators/async/none.ts b/src/operators/async/none.ts new file mode 100644 index 0000000..7567d36 --- /dev/null +++ b/src/operators/async/none.ts @@ -0,0 +1,24 @@ +import {AsyncSequence} from "../../sequency"; + +export class None { + + /** + * Returns `true` if no element match the given `predicate` or if the sequence is empty + * if no predicate is present. + * + * @param {(value: T) => Promise | boolean} predicate + * @returns {Promise} + */ + async none(this: AsyncSequence, predicate?: (value: T) => Promise | boolean): Promise { + if (predicate == null) { + return (await this.iterator.next())?.done ?? false; + } + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + if (await predicate(item.value)) { + return false; + } + } + return true; + } + +} diff --git a/src/operators/async/onEach.ts b/src/operators/async/onEach.ts new file mode 100644 index 0000000..9d35fc2 --- /dev/null +++ b/src/operators/async/onEach.ts @@ -0,0 +1,18 @@ +import {AsyncSequence} from "../../sequency"; + +export class OnEach { + + /** + * Performs the given `action` for each element and returns the sequence. + * + * @param {(value: T) => Promise | void} action + * @returns {AsyncSequence} + */ + onEach(this: AsyncSequence, action: (value: T) => Promise | unknown): AsyncSequence { + return this.map(async it => { + await action(it); + return it; + }); + } + +} \ No newline at end of file diff --git a/src/operators/async/onEachIndexed.ts b/src/operators/async/onEachIndexed.ts new file mode 100644 index 0000000..69638e1 --- /dev/null +++ b/src/operators/async/onEachIndexed.ts @@ -0,0 +1,20 @@ +import {AsyncSequence} from "../../sequency"; + +export class OnEachIndexed { + + /** + * Performs the given `action` for each element and returns the sequence and passes the `index` of the current + * element (zero-based). + * + * @param {(index: number, value: T) => Promise | void} action + * @returns {AsyncSequence} + */ + onEachIndexed(this: AsyncSequence, action: (index: number, value: T) => Promise | unknown): AsyncSequence { + return this.withIndex() + .map(async it => { + await action(it.index, it.value); + return it.value; + }); + } + +} \ No newline at end of file diff --git a/src/operators/async/partition.ts b/src/operators/async/partition.ts new file mode 100644 index 0000000..9cf1104 --- /dev/null +++ b/src/operators/async/partition.ts @@ -0,0 +1,25 @@ +import {AsyncSequence} from "../../sequency"; + +export class Partition { + + /** + * Evaluates the given `predicate` for each element of the sequence and assorts each element into one of two lists + * according to the result of the predicate. Returns both lists as an object. + * + * @param {(value: T) => Promise | boolean} predicate + * @returns {Promise<{true: T[]; false: T[]}>} + */ + async partition(this: AsyncSequence, predicate: (value: T) => Promise | boolean): Promise<{true: T[], false: T[]}> { + const arrayTrue: T[] = []; + const arrayFalse: T[] = []; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + if (await predicate(item.value)) { + arrayTrue.push(item.value); + } else { + arrayFalse.push(item.value); + } + } + return {true: arrayTrue, false: arrayFalse}; + } + +} \ No newline at end of file diff --git a/src/operators/async/plus.ts b/src/operators/async/plus.ts new file mode 100644 index 0000000..db92fe7 --- /dev/null +++ b/src/operators/async/plus.ts @@ -0,0 +1,58 @@ +import {asAsyncIterable} from "../../internal"; +import {createAsyncSequence, isAsyncSequence, AsyncSequence} from "../../sequency"; + +class AppendIterator implements AsyncIterator { + constructor(private readonly first: AsyncIterator, + private readonly second: AsyncIterator) { + } + + async next(value?: any): Promise> { + const item1 = await this.first.next(); + if (!item1.done) { + return {done: false, value: item1.value}; + } + const item2 = await this.second.next(); + if (!item2.done) { + return {done: false, value: item2.value}; + } + return {done: true, value: undefined}; + } +} + +export class Plus { + + /** + * Appends the given `element` to the end of the sequence and returns a new sequence. + * + * @param {T} element + * @returns {AsyncSequence} + */ + plus(this: AsyncSequence, element: T): AsyncSequence; + + /** + * Appends the given array to the end of the sequence and returns a new sequence. + * + * @param {T[]} other + * @returns {AsyncSequence} + */ + plus(this: AsyncSequence, other: T[]): AsyncSequence; + + /** + * Appends the given sequence to the end of the sequence and returns a new sequence. + * + * @param {AsyncSequence} other + * @returns {AsyncSequence} + */ + plus(this: AsyncSequence, other: AsyncSequence): AsyncSequence; + + plus(this: AsyncSequence, data: T | AsyncSequence | T[]): AsyncSequence { + if (isAsyncSequence(data)) { + return createAsyncSequence(new AppendIterator(this.iterator, data.iterator)); + } else if (data instanceof Array) { + return createAsyncSequence(new AppendIterator(this.iterator, asAsyncIterable(data)[Symbol.asyncIterator]())); + } else { + return createAsyncSequence(new AppendIterator(this.iterator, asAsyncIterable([data])[Symbol.asyncIterator]())); + } + } + +} \ No newline at end of file diff --git a/src/operators/async/reduce.ts b/src/operators/async/reduce.ts new file mode 100644 index 0000000..5481f35 --- /dev/null +++ b/src/operators/async/reduce.ts @@ -0,0 +1,26 @@ +import {AsyncSequence} from "../../sequency"; + +export class Reduce { + + /** + * Reduces the whole sequence to a single value by invoking `operation` with each element + * from left to right. For every invocation of the operation `acc` is the result of the last + * invocation. For the first invocation of the operation `acc` is the first element of the + * sequence. + * + * @param {(acc: S, value: T) => Promise | S} operation + * @returns {Promise} + */ + async reduce(this: AsyncSequence, operation: (acc: S, value: T) => Promise | S): Promise { + const first = await this.iterator.next(); + if (first.done) { + throw new Error("Cannot reduce empty sequence"); + } + let result: S = first.value; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + result = await operation(result, item.value); + } + return result; + } + +} \ No newline at end of file diff --git a/src/operators/async/reduceIndexed.ts b/src/operators/async/reduceIndexed.ts new file mode 100644 index 0000000..7cb203c --- /dev/null +++ b/src/operators/async/reduceIndexed.ts @@ -0,0 +1,28 @@ +import {AsyncSequence} from "../../sequency"; + +export class ReduceIndexed { + + /** + * Reduces the whole sequence to a single value by invoking `operation` with each element + * from left to right. For every invocation of the operation `acc` is the result of the last + * invocation. For the first invocation of the operation `acc` is the first element of the + * sequence. In addition the `index` of the current element is also passed to the operation. + * + * @param {(index: number, acc: S, element: T) => Promise | S} operation + * @returns {Promise} + */ + async reduceIndexed(this: AsyncSequence, operation: (index: number, acc: S, element: T) => Promise | S): Promise { + const first = await this.iterator.next(); + if (first.done) { + throw new Error("Cannot reduce empty sequence"); + } + let index = 1; + let result: S = first.value; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + result = await operation(index, result, item.value); + index++; + } + return result; + } + +} \ No newline at end of file diff --git a/src/operators/async/reverse.ts b/src/operators/async/reverse.ts new file mode 100644 index 0000000..14f0a4f --- /dev/null +++ b/src/operators/async/reverse.ts @@ -0,0 +1,16 @@ +import {AsyncSequence} from "../../sequency"; + +export class Reverse { + + /** + * Returns a new sequence with all elements of the sequence in reverse order. + * + * @returns {AsyncSequence} + */ + reverse(this: AsyncSequence): AsyncSequence { + return this.withIndex() + .sortedByDescending(it => it.index) + .map(it => it.value); + } + +} \ No newline at end of file diff --git a/src/operators/async/single.ts b/src/operators/async/single.ts new file mode 100644 index 0000000..6b7b492 --- /dev/null +++ b/src/operators/async/single.ts @@ -0,0 +1,27 @@ +import {AsyncSequence} from "../../sequency"; + +export class Single { + + /** + * Returns the single element of the sequence or throws error if the sequence has more than + * one element or none at all. If a `predicate` is passed returns the single element matching + * the predicate or throws an error if more or less than one element match the predicate. + * + * @param {(value: T) => Promise | boolean} predicate + * @returns {Promise} + */ + async single(this: AsyncSequence, predicate?: (value: T) => Promise | boolean): Promise { + if (predicate != null) { + return this.filter(predicate).single(); + } + const first = await this.iterator.next(); + if (first.done) { + throw new Error("No such element"); + } + if (!(await this.iterator.next()).done) { + throw new Error("Expect single element"); + } + return first.value; + } + +} \ No newline at end of file diff --git a/src/operators/async/singleOrNull.ts b/src/operators/async/singleOrNull.ts new file mode 100644 index 0000000..07bef3c --- /dev/null +++ b/src/operators/async/singleOrNull.ts @@ -0,0 +1,27 @@ +import {AsyncSequence} from "../../sequency"; + +export class SingleOrNull { + + /** + * Returns the single element of the sequence or `null` if the sequence has more than + * one element or none at all. If a `predicate` is passed returns the single element matching + * the predicate or `null` if more or less than one element match the predicate. + * + * @param {(value: T) => Promise | boolean} predicate + * @returns {Promise} + */ + async singleOrNull(this: AsyncSequence, predicate?: (value: T) => Promise | boolean): Promise { + if (predicate != null) { + return this.filter(predicate).singleOrNull(); + } + const first = await this.iterator.next(); + if (first.done) { + return null; + } + if (!(await this.iterator.next()).done) { + return null; + } + return first.value; + } + +} \ No newline at end of file diff --git a/src/operators/async/sorted.ts b/src/operators/async/sorted.ts new file mode 100644 index 0000000..e7dd3ec --- /dev/null +++ b/src/operators/async/sorted.ts @@ -0,0 +1,58 @@ +import {createAsyncSequence, AsyncSequence} from "../../sequency"; +import ComparatorFactory from "../../ComparatorFactory"; +import Comparator from "../../Comparator"; + +class SortIterator implements AsyncIterator { + private readonly factory: ComparatorFactory = new ComparatorFactory(); + private readonly comparator: Comparator | null; + private readonly data: T[] = []; + /** Iterator to initialize data with */ + private iterator: AsyncIterator | null = null; + /** Current data index */ + private index: number = 0; + + constructor(iterator: AsyncIterator, composeComparator?: (factory: ComparatorFactory) => Comparator) { + this.comparator = composeComparator?.(this.factory) ?? null; + this.iterator = iterator; + } + + private async init() { + if (this.iterator != null) { + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + if (!item.done) { + this.data.push(item.value); + } + } + if (this.comparator != null) { + this.data.sort(this.comparator.compare); + } else { + this.data.sort(); + } + Object.freeze(this.data); + this.iterator = null; + } + } + + async next(value?: any): Promise> { + await this.init(); + if (this.index < this.data.length) { + return {done: false, value: this.data[this.index++]}; + } + return {done: true, value: undefined}; + } +} + +export class Sorted { + + /** + * Returns a new sequence with all elements sorted by the comparator specified by the given `composeComparator` function + * or in natural order if no arguments are given. + * + * @param {(factory: ComparatorFactory) => Comparator} composeComparator + * @returns {AsyncSequence} + */ + sorted(this: AsyncSequence, composeComparator?: (factory: ComparatorFactory) => Comparator): AsyncSequence { + return createAsyncSequence(new SortIterator(this.iterator, composeComparator)); + } + +} \ No newline at end of file diff --git a/src/operators/async/sortedBy.ts b/src/operators/async/sortedBy.ts new file mode 100644 index 0000000..de1a81d --- /dev/null +++ b/src/operators/async/sortedBy.ts @@ -0,0 +1,16 @@ +import {AsyncSequence} from "../../sequency"; + +export class SortedBy { + + /** + * Returns a new sequence with all elements sorted ascending by the value specified + * by the given `selector` function. + * + * @param {(value: T) => Promise | R} selector + * @returns {AsyncSequence} + */ + sortedBy(this: AsyncSequence, selector: (value: T) => Promise | R): AsyncSequence { + return this.sorted(it => it.compareBy(selector)); + } + +} \ No newline at end of file diff --git a/src/operators/async/sortedByDescending.ts b/src/operators/async/sortedByDescending.ts new file mode 100644 index 0000000..cf923cf --- /dev/null +++ b/src/operators/async/sortedByDescending.ts @@ -0,0 +1,16 @@ +import {AsyncSequence} from "../../sequency"; + +export class SortedByDescending { + + /** + * Returns a new sequence with all elements sorted descending by the value specified + * by the given `selector` function. + * + * @param {(value: T) => Promise | R} selector + * @returns {AsyncSequence} + */ + sortedByDescending(this: AsyncSequence, selector: (value: T) => Promise | R): AsyncSequence { + return this.sorted(it => it.compareByDescending(selector)); + } + +} \ No newline at end of file diff --git a/src/operators/async/sortedDescending.ts b/src/operators/async/sortedDescending.ts new file mode 100644 index 0000000..012b47c --- /dev/null +++ b/src/operators/async/sortedDescending.ts @@ -0,0 +1,14 @@ +import {AsyncSequence} from "../../sequency"; + +export class SortedDescending { + + /** + * Returns a new sequence with all elements sorted in reverse (descending) natural order. + * + * @returns {AsyncSequence} + */ + sortedDescending(this: AsyncSequence): AsyncSequence { + return this.sorted(it => it.reverseOrder()); + } + +} \ No newline at end of file diff --git a/src/operators/async/sortedWith.ts b/src/operators/async/sortedWith.ts new file mode 100644 index 0000000..2186ee4 --- /dev/null +++ b/src/operators/async/sortedWith.ts @@ -0,0 +1,15 @@ +import {AsyncSequence} from "../../sequency"; + +export class SortedWith { + + /** + * Returns a new sequence with all elements sorted be the given `compare` function. + * + * @param {(a: T, b: T) => number} comparison + * @returns {AsyncSequence} + */ + sortedWith(this: AsyncSequence, comparison: (a: T, b: T) => number): AsyncSequence { + return this.sorted(it => it.compare(comparison)); + } + +} \ No newline at end of file diff --git a/src/operators/async/sum.ts b/src/operators/async/sum.ts new file mode 100644 index 0000000..1db37c9 --- /dev/null +++ b/src/operators/async/sum.ts @@ -0,0 +1,18 @@ +import {AsyncSequence} from "../../sequency"; + +export class Sum { + + /** + * Returns the sum of all numbers. + * + * @returns {Promise} + */ + async sum(this: AsyncSequence): Promise { + let result = 0; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + result += item.value; + } + return result; + } + +} \ No newline at end of file diff --git a/src/operators/async/sumBy.ts b/src/operators/async/sumBy.ts new file mode 100644 index 0000000..7368aab --- /dev/null +++ b/src/operators/async/sumBy.ts @@ -0,0 +1,19 @@ +import {AsyncSequence} from "../../sequency"; + +export class SumBy { + + /** + * Returns the sum of all numbers specified by the given `selector` function. + * + * @param {(value: T) => Promise | number} selector + * @returns {Promise} + */ + async sumBy(this: AsyncSequence, selector: (value: T) => Promise | number): Promise { + let result = 0; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + result += await selector(item.value); + } + return result; + } + +} \ No newline at end of file diff --git a/src/operators/async/take.ts b/src/operators/async/take.ts new file mode 100644 index 0000000..280bc98 --- /dev/null +++ b/src/operators/async/take.ts @@ -0,0 +1,18 @@ +import {AsyncSequence} from "../../sequency"; + +export class Take { + + /** + * Returns a new sequence consisting of the first `n` elements. All other elements + * are discarded. + * + * @param {number} n + * @returns {AsyncSequence} + */ + take(this: AsyncSequence, n: number): AsyncSequence { + return this.withIndex() + .takeWhile(it => it.index < n) + .map(it => it.value); + } + +} \ No newline at end of file diff --git a/src/operators/async/takeWhile.ts b/src/operators/async/takeWhile.ts new file mode 100644 index 0000000..7110765 --- /dev/null +++ b/src/operators/async/takeWhile.ts @@ -0,0 +1,31 @@ +import {createAsyncSequence, AsyncSequence} from "../../sequency"; + +class TakeWhileIterator implements AsyncIterator { + constructor(private readonly iterator: AsyncIterator, + private readonly predicate: (item: T) => Promise | boolean) { + } + + async next(value?: any): Promise> { + const item = await this.iterator.next(); + if (!item.done) { + if (await this.predicate(item.value)) { + return {done: false, value: item.value}; + } + } + return {done: true, value: undefined}; + } +} + +export class TakeWhile { + + /** + * Takes all elements of the sequence as long as the given `predicate` evaluates to true. + * + * @param {(item: T) => Promise | boolean} predicate + * @returns {AsyncSequence} + */ + takeWhile(this: AsyncSequence, predicate: (item: T) => Promise | boolean): AsyncSequence { + return createAsyncSequence(new TakeWhileIterator(this.iterator, predicate)); + } + +} \ No newline at end of file diff --git a/src/operators/async/toArray.ts b/src/operators/async/toArray.ts new file mode 100644 index 0000000..360dbae --- /dev/null +++ b/src/operators/async/toArray.ts @@ -0,0 +1,31 @@ +import {AsyncSequence} from "../../sequency"; + +export class ToArray { + + /** + * Returns all elements of the sequence as array. If an `array` is passed + * the elements are appended to the end of the array. + * + * @param {T[]} array + * @returns {Promise} + */ + async toArray(this: AsyncSequence, array?: T[]): Promise { + const result: T[] = array ?? []; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + result.push(item.value); + } + return result; + } + + /** + * Returns all elements of the sequence as array. If an `array` is passed + * the elements are appended to the end of the array. + * + * @param {T[]} array + * @returns {Promise} + */ + async toList(this: AsyncSequence, array?: T[]): Promise { + return this.toArray(array); + } + +} \ No newline at end of file diff --git a/src/operators/async/toMap.ts b/src/operators/async/toMap.ts new file mode 100644 index 0000000..0cbab35 --- /dev/null +++ b/src/operators/async/toMap.ts @@ -0,0 +1,23 @@ +import {AsyncSequence} from "../../sequency"; + +export class ToMap { + + /** + * Returns a map consisting of each key-value pair. If a `map` is passed + * the pairs are set on this map. Duplicate keys override each other. + * + * @param {Map} map + * @returns {Promise>} + */ + async toMap(this: AsyncSequence<[K, V]>, map?: Map): Promise> { + const result = map ?? new Map(); + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + const pair = item.value; + const key = pair[0]; + const value = pair[1]; + result.set(key, value); + } + return result; + } + +} \ No newline at end of file diff --git a/src/operators/async/toSequence.ts b/src/operators/async/toSequence.ts new file mode 100644 index 0000000..f253e70 --- /dev/null +++ b/src/operators/async/toSequence.ts @@ -0,0 +1,15 @@ +import {emptySequence, AsyncSequence, Sequence} from "../../sequency"; + +export class ToSequence { + + /** + * Returns an async variant of the sequence. + * + * @returns {Sequence} + */ + async toSequence(this: AsyncSequence, sequence?: Sequence): Promise> { + const result = sequence ?? emptySequence(); + return result.plus(await this.toArray()); + } + +} \ No newline at end of file diff --git a/src/operators/async/toSet.ts b/src/operators/async/toSet.ts new file mode 100644 index 0000000..a548e4f --- /dev/null +++ b/src/operators/async/toSet.ts @@ -0,0 +1,20 @@ +import {AsyncSequence} from "../../sequency"; + +export class ToSet { + + /** + * Returns all elements of the sequence as set. If a `set` is passed + * the elements are added to this set. + * + * @param {Set} set + * @returns {Promise>} + */ + async toSet(this: AsyncSequence, set?: Set): Promise> { + const result = set ?? new Set(); + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + result.add(item.value); + } + return result; + } + +} \ No newline at end of file diff --git a/src/operators/async/unzip.ts b/src/operators/async/unzip.ts new file mode 100644 index 0000000..4fc0cd7 --- /dev/null +++ b/src/operators/async/unzip.ts @@ -0,0 +1,22 @@ +import {AsyncSequence} from "../../sequency"; + +export class Unzip { + + /** + * Returns a pair of arrays where the first array contains all first values + * and the second array all second values from each input pair of the sequence. + * + * @returns {Promise<[T[], S[]]>} + */ + async unzip(this: AsyncSequence<[T, S]>): Promise<[T[], S[]]> { + const array1: T[] = []; + const array2: S[] = []; + for (let item = await this.iterator.next(); !item.done; item = await this.iterator.next()) { + const [first, second] = item.value; + array1.push(first); + array2.push(second); + } + return [array1, array2]; + } + +} \ No newline at end of file diff --git a/src/operators/async/withIndex.ts b/src/operators/async/withIndex.ts new file mode 100644 index 0000000..353ffba --- /dev/null +++ b/src/operators/async/withIndex.ts @@ -0,0 +1,37 @@ +import {createAsyncSequence, AsyncSequence} from "../../sequency"; +import IndexedValue from "../../IndexedValue"; + +class IndexIterator implements AsyncIterator> { + private index = -1; + + constructor(private readonly iterator: AsyncIterator) { + } + + async next(value?: any): Promise>> { + const item = await this.iterator.next(); + if (item.done) { + return {done: true, value: undefined}; + } + this.index++; + return { + done: false, + value: { + index: this.index, + value: item.value + } + }; + } +} + +export class WithIndex { + + /** + * Returns a new sequence consisting of indexed values for all original elements. + * + * @returns {AsyncSequence>} + */ + withIndex(this: AsyncSequence): AsyncSequence> { + return createAsyncSequence(new IndexIterator(this.iterator)); + } + +} \ No newline at end of file diff --git a/src/operators/async/zip.ts b/src/operators/async/zip.ts new file mode 100644 index 0000000..1f2ea69 --- /dev/null +++ b/src/operators/async/zip.ts @@ -0,0 +1,34 @@ +import {createAsyncSequence, AsyncSequence} from "../../sequency"; + +class ZipIterator implements AsyncIterator<[T, S]> { + constructor(private readonly iterator1: AsyncIterator, + private readonly iterator2: AsyncIterator) { + } + + async next(value?: any): Promise> { + const item1 = await this.iterator1.next(); + const item2 = await this.iterator2.next(); + if (item1.done || item2.done) { + return {done: true, value: undefined}; + } else { + return {done: false, value: [item1.value, item2.value]}; + } + } + +} + +export class Zip { + + /** + * Returns a new sequence consisting of pairs built the elements of both sequences + * with the same index. The resulting sequence has the length of the shortest input + * sequence. All other elements are discarded. + * + * @param {AsyncSequence} other + * @returns {AsyncSequence<[T , S]>} + */ + zip(this: AsyncSequence, other: AsyncSequence): AsyncSequence<[T, S]> { + return createAsyncSequence(new ZipIterator(this.iterator, other.iterator)); + } + +} \ No newline at end of file diff --git a/src/all.ts b/src/operators/sync/all.ts similarity index 91% rename from src/all.ts rename to src/operators/sync/all.ts index 2a14f2b..827a273 100644 --- a/src/all.ts +++ b/src/operators/sync/all.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class All { diff --git a/src/any.ts b/src/operators/sync/any.ts similarity index 93% rename from src/any.ts rename to src/operators/sync/any.ts index 23a0edf..2c3ea9c 100644 --- a/src/any.ts +++ b/src/operators/sync/any.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class Any { diff --git a/src/asIterable.ts b/src/operators/sync/asIterable.ts similarity index 89% rename from src/asIterable.ts rename to src/operators/sync/asIterable.ts index 9482a4b..a9cb3cb 100644 --- a/src/asIterable.ts +++ b/src/operators/sync/asIterable.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class AsIterable { diff --git a/src/associate.ts b/src/operators/sync/associate.ts similarity index 93% rename from src/associate.ts rename to src/operators/sync/associate.ts index 33e15e2..e28e007 100644 --- a/src/associate.ts +++ b/src/operators/sync/associate.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class Associate { diff --git a/src/associateBy.ts b/src/operators/sync/associateBy.ts similarity index 79% rename from src/associateBy.ts rename to src/operators/sync/associateBy.ts index 0f7625a..d5cc04f 100644 --- a/src/associateBy.ts +++ b/src/operators/sync/associateBy.ts @@ -1,4 +1,5 @@ -import Sequence from "./Sequence"; +import {asSelector} from "../../internal"; +import {Sequence} from "../../sequency"; export class AssociateBy { @@ -16,7 +17,7 @@ export class AssociateBy { * @param {K} key * @returns {Map} */ - associateBy(key: K): Map; + associateBy>(key: K): Map[K], T>; /** * Returns a map consisting of the elements mapped by the given `keySelector`. The value @@ -36,14 +37,12 @@ export class AssociateBy { * @param {(value: T) => V} valueTransformer * @returns {Map} */ - associateBy(key: K, valueTransformer: (value: T) => V): Map; + associateBy, V>(key: K, valueTransformer: (value: T) => V): Map[K], V>; associateBy(this: Sequence, - keyOrSelector: any, + keyOrSelector: ((value: T) => K) | keyof NonNullable, valueTransform?: (value: T) => V): Map { - const selector = typeof keyOrSelector === "function" - ? keyOrSelector - : (value: T) => value[keyOrSelector as keyof T]; + const selector = asSelector(keyOrSelector); const result = new Map(); const transform = valueTransform != null ? valueTransform diff --git a/src/average.ts b/src/operators/sync/average.ts similarity index 92% rename from src/average.ts rename to src/operators/sync/average.ts index 8242f47..9401c05 100644 --- a/src/average.ts +++ b/src/operators/sync/average.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class Average { diff --git a/src/chunk.ts b/src/operators/sync/chunk.ts similarity index 80% rename from src/chunk.ts rename to src/operators/sync/chunk.ts index 824c2c6..89543b9 100644 --- a/src/chunk.ts +++ b/src/operators/sync/chunk.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class Chunk { @@ -7,13 +7,13 @@ export class Chunk { * the given `chunkSize` and returns all chunks as array. * * @param {number} chunkSize - * @returns {Array>} + * @returns {T[][]} */ - chunk(this: Sequence, chunkSize: number): Array> { + chunk(this: Sequence, chunkSize: number): T[][] { if (chunkSize < 1) { throw new Error("chunkSize must be > 0 but is " + chunkSize); } - const result: Array> = []; + const result: T[][] = []; let index = 0; for (let item = this.iterator.next(); !item.done; item = this.iterator.next()) { const chunkIndex = Math.floor(index / chunkSize); diff --git a/src/contains.ts b/src/operators/sync/contains.ts similarity index 91% rename from src/contains.ts rename to src/operators/sync/contains.ts index 421ec95..f7d3728 100644 --- a/src/contains.ts +++ b/src/operators/sync/contains.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class Contains { diff --git a/src/count.ts b/src/operators/sync/count.ts similarity index 50% rename from src/count.ts rename to src/operators/sync/count.ts index d3d80b4..a498ce0 100644 --- a/src/count.ts +++ b/src/operators/sync/count.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class Count { @@ -10,19 +10,11 @@ export class Count { * @returns {number} */ count(this: Sequence, predicate?: (item: T) => boolean): number { - let num = 0; if (predicate == null) { - for (let item = this.iterator.next(); !item.done; item = this.iterator.next()) { - num++; - } + return this.fold(0, (acc, _item) => acc + 1); } else { - for (let item = this.iterator.next(); !item.done; item = this.iterator.next()) { - if (predicate(item.value)) { - num++; - } - } + return this.fold(0, (acc, item) => predicate(item) ? acc + 1 : acc); } - return num; } } \ No newline at end of file diff --git a/src/distinct.ts b/src/operators/sync/distinct.ts similarity index 88% rename from src/distinct.ts rename to src/operators/sync/distinct.ts index df8ea49..a0b582d 100644 --- a/src/distinct.ts +++ b/src/operators/sync/distinct.ts @@ -1,4 +1,4 @@ -import Sequence, {createSequence} from "./Sequence"; +import {createSequence, Sequence} from "../../sequency"; class DistinctIterator implements Iterator { private set: Set = new Set(); @@ -15,7 +15,7 @@ class DistinctIterator implements Iterator { } } this.set.clear(); - return {done: true, value: undefined as any}; + return {done: true, value: undefined}; } } diff --git a/src/distinctBy.ts b/src/operators/sync/distinctBy.ts similarity index 90% rename from src/distinctBy.ts rename to src/operators/sync/distinctBy.ts index beacb24..176bcd0 100644 --- a/src/distinctBy.ts +++ b/src/operators/sync/distinctBy.ts @@ -1,4 +1,4 @@ -import Sequence, {createSequence} from "./Sequence"; +import {createSequence, Sequence} from "../../sequency"; class DistinctByIterator implements Iterator { private set: Set = new Set(); @@ -17,7 +17,7 @@ class DistinctByIterator implements Iterator { } } this.set.clear(); - return {done: true, value: undefined as any}; + return {done: true, value: undefined}; } } diff --git a/src/drop.ts b/src/operators/sync/drop.ts similarity index 89% rename from src/drop.ts rename to src/operators/sync/drop.ts index b2bc82b..39e3458 100644 --- a/src/drop.ts +++ b/src/operators/sync/drop.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class Drop { diff --git a/src/dropWhile.ts b/src/operators/sync/dropWhile.ts similarity index 83% rename from src/dropWhile.ts rename to src/operators/sync/dropWhile.ts index da800e6..9f821be 100644 --- a/src/dropWhile.ts +++ b/src/operators/sync/dropWhile.ts @@ -1,4 +1,4 @@ -import Sequence, {createSequence} from "./Sequence"; +import {createSequence, Sequence} from "../../sequency"; class DropWhileIterator implements Iterator { private dropping = true; @@ -12,13 +12,12 @@ class DropWhileIterator implements Iterator { if (!this.dropping) { return {done: false, value: item.value}; } - const result = this.predicate(item.value); - if (!result) { + if (!this.predicate(item.value)) { this.dropping = false; return {done: false, value: item.value}; } } - return {done: true, value: undefined as any}; + return {done: true, value: undefined}; } } diff --git a/src/elementAt.ts b/src/operators/sync/elementAt.ts similarity index 93% rename from src/elementAt.ts rename to src/operators/sync/elementAt.ts index c859bca..020b8f5 100644 --- a/src/elementAt.ts +++ b/src/operators/sync/elementAt.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class ElementAt { diff --git a/src/elementAtOrElse.ts b/src/operators/sync/elementAtOrElse.ts similarity index 87% rename from src/elementAtOrElse.ts rename to src/operators/sync/elementAtOrElse.ts index f7f3641..9c18c8a 100644 --- a/src/elementAtOrElse.ts +++ b/src/operators/sync/elementAtOrElse.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class ElementAtOrElse { @@ -7,7 +7,7 @@ export class ElementAtOrElse { * the result of the given `defaultValue` function. * * @param {number} index - * @param defaultValue + * @param {(index: number) => T} defaultValue * @returns {T} */ elementAtOrElse(this: Sequence, index: number, defaultValue: (index: number) => T): T { diff --git a/src/operators/sync/elementAtOrNull.ts b/src/operators/sync/elementAtOrNull.ts new file mode 100644 index 0000000..7677fcb --- /dev/null +++ b/src/operators/sync/elementAtOrNull.ts @@ -0,0 +1,16 @@ +import {Sequence} from "../../sequency"; + +export class ElementAtOrNull { + + /** + * Returns the element at position `index` (zero-based) or `null` if `index` + * is out of bounds. + * + * @param {number} index + * @returns {T | null} + */ + elementAtOrNull(this: Sequence, index: number): T | null { + return this.elementAtOrElse(index, () => null); + } + +} \ No newline at end of file diff --git a/src/filter.ts b/src/operators/sync/filter.ts similarity index 83% rename from src/filter.ts rename to src/operators/sync/filter.ts index 5d1bbc0..899c117 100644 --- a/src/filter.ts +++ b/src/operators/sync/filter.ts @@ -1,4 +1,4 @@ -import Sequence, {createSequence} from "./Sequence"; +import {createSequence, Sequence} from "../../sequency"; class FilterIterator implements Iterator { constructor(private readonly predicate: (item: T) => boolean, @@ -11,7 +11,7 @@ class FilterIterator implements Iterator { return {done: false, value: item.value}; } } - return {done: true, value: undefined as any}; + return {done: true, value: undefined}; } } @@ -20,7 +20,7 @@ export class Filter { /** * Returns a new sequence consisting of all elements that match the given `predicate`. * - * @param {(T) => boolean} predicate + * @param {(item: T) => boolean} predicate * @returns {Sequence} */ filter(this: Sequence, predicate: (item: T) => boolean): Sequence { diff --git a/src/operators/sync/filterHolistically.ts b/src/operators/sync/filterHolistically.ts new file mode 100644 index 0000000..48e04ca --- /dev/null +++ b/src/operators/sync/filterHolistically.ts @@ -0,0 +1,49 @@ +import {createSequence, Sequence} from "../../sequency"; + +class FilterIterator implements Iterator { + private readonly data: T[] = []; + /** Iterator to initialize data with */ + private iterator: Iterator | null = null; + /** Current data index */ + private index: number = 0; + + constructor(iterator: Iterator, private readonly predicate: (item: T, index: number, array: Readonly) => boolean) { + this.iterator = iterator; + } + + private init() { + if (this.iterator != null) { + for (let item = this.iterator.next(); !item.done; item = this.iterator.next()) { + if (!item.done) { + this.data.push(item.value); + } + } + Object.freeze(this.data); + this.iterator = null; + } + } + + next(value?: any): IteratorResult { + this.init(); + for (let item = this.data[this.index++]; this.index < this.data.length; item = this.data[this.index++]) { + if (this.predicate(item, this.index, this.data)) { + return {done: false, value: item}; + } + } + return {done: true, value: undefined}; + } +} + +export class FilterHolistically { + + /** + * Returns a new sequence consisting of all elements that match the given `predicate`. + * + * @param {(value: T, index: number, array: T[]) => boolean} predicate + * @returns {Sequence} + */ + filterHolistically(this: Sequence, predicate: (item: T, index: number, array: Readonly) => boolean): Sequence { + return createSequence(new FilterIterator(this.iterator, predicate)); + } + +} \ No newline at end of file diff --git a/src/filterIndexed.ts b/src/operators/sync/filterIndexed.ts similarity index 92% rename from src/filterIndexed.ts rename to src/operators/sync/filterIndexed.ts index 30b97a3..ad66cc1 100644 --- a/src/filterIndexed.ts +++ b/src/operators/sync/filterIndexed.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class FilterIndexed { diff --git a/src/filterNot.ts b/src/operators/sync/filterNot.ts similarity index 90% rename from src/filterNot.ts rename to src/operators/sync/filterNot.ts index 87bf57d..7499e2d 100644 --- a/src/filterNot.ts +++ b/src/operators/sync/filterNot.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class FilterNot { diff --git a/src/operators/sync/filterNotNull.ts b/src/operators/sync/filterNotNull.ts new file mode 100644 index 0000000..f835e49 --- /dev/null +++ b/src/operators/sync/filterNotNull.ts @@ -0,0 +1,14 @@ +import {Sequence} from "../../sequency"; + +export class FilterNotNull { + + /** + * Returns a new sequence consisting of all non-null elements. + * + * @returns {Sequence} + */ + filterNotNull(this: Sequence): Sequence> { + return this.filter(it => it != null) as Sequence>; + } + +} \ No newline at end of file diff --git a/src/first.ts b/src/operators/sync/first.ts similarity index 93% rename from src/first.ts rename to src/operators/sync/first.ts index b426856..d547459 100644 --- a/src/first.ts +++ b/src/operators/sync/first.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class First { diff --git a/src/firstOrNull.ts b/src/operators/sync/firstOrNull.ts similarity index 95% rename from src/firstOrNull.ts rename to src/operators/sync/firstOrNull.ts index 137d561..2249865 100644 --- a/src/firstOrNull.ts +++ b/src/operators/sync/firstOrNull.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class FirstOrNull { diff --git a/src/flatMap.ts b/src/operators/sync/flatMap.ts similarity index 91% rename from src/flatMap.ts rename to src/operators/sync/flatMap.ts index 98109d4..f047016 100644 --- a/src/flatMap.ts +++ b/src/operators/sync/flatMap.ts @@ -1,4 +1,4 @@ -import Sequence, {createSequence} from "./Sequence"; +import {createSequence, Sequence} from "../../sequency"; class FlatMapIterator implements Iterator { private current: Iterator | undefined; @@ -20,7 +20,7 @@ class FlatMapIterator implements Iterator { this.current = sequence.iterator; return this.next(); } - return {done: true, value: undefined as any}; + return {done: true, value: undefined}; } } diff --git a/src/flatten.ts b/src/operators/sync/flatten.ts similarity index 86% rename from src/flatten.ts rename to src/operators/sync/flatten.ts index 9754b2f..5c8d123 100644 --- a/src/flatten.ts +++ b/src/operators/sync/flatten.ts @@ -1,4 +1,4 @@ -import Sequence, {asSequence, isSequence} from "./Sequence"; +import {asSequence, isSequence, Sequence} from "../../sequency"; export class Flatten { diff --git a/src/fold.ts b/src/operators/sync/fold.ts similarity index 94% rename from src/fold.ts rename to src/operators/sync/fold.ts index ed8dfe3..4ee65e4 100644 --- a/src/fold.ts +++ b/src/operators/sync/fold.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class Fold { diff --git a/src/foldIndexed.ts b/src/operators/sync/foldIndexed.ts similarity index 95% rename from src/foldIndexed.ts rename to src/operators/sync/foldIndexed.ts index f23275c..f040a2a 100644 --- a/src/foldIndexed.ts +++ b/src/operators/sync/foldIndexed.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class FoldIndexed { diff --git a/src/forEach.ts b/src/operators/sync/forEach.ts similarity index 64% rename from src/forEach.ts rename to src/operators/sync/forEach.ts index 8120d6a..3c3a53b 100644 --- a/src/forEach.ts +++ b/src/operators/sync/forEach.ts @@ -1,13 +1,13 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class ForEach { /** * Performs the given `action` (side-effect) for each element of the sequence. * - * @param {(T) => void} action + * @param {(item: T) => void} action */ - forEach(this: Sequence, action: (item: T) => void) { + forEach(this: Sequence, action: (item: T) => unknown) { for (let item = this.iterator.next(); !item.done; item = this.iterator.next()) { action(item.value); } diff --git a/src/forEachIndexed.ts b/src/operators/sync/forEachIndexed.ts similarity index 86% rename from src/forEachIndexed.ts rename to src/operators/sync/forEachIndexed.ts index 920746a..7304e99 100644 --- a/src/forEachIndexed.ts +++ b/src/operators/sync/forEachIndexed.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class ForEachIndexed { @@ -8,7 +8,7 @@ export class ForEachIndexed { * * @param {(index: number, value: T) => void} action */ - forEachIndexed(this: Sequence, action: (index: number, value: T) => void) { + forEachIndexed(this: Sequence, action: (index: number, value: T) => unknown) { this.withIndex() .forEach(it => action(it.index, it.value)); } diff --git a/src/groupBy.ts b/src/operators/sync/groupBy.ts similarity index 82% rename from src/groupBy.ts rename to src/operators/sync/groupBy.ts index 924a97e..141a506 100644 --- a/src/groupBy.ts +++ b/src/operators/sync/groupBy.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class GroupBy { @@ -6,10 +6,10 @@ export class GroupBy { * Groups all elements of the sequence into a map. Keys are determined by the given `keySelector` function. * * @param {(value: T) => K} keySelector - * @returns {Map>} + * @returns {Map} */ - groupBy(this: Sequence, keySelector: (value: T) => K): Map> { - const result = new Map>(); + groupBy(this: Sequence, keySelector: (value: T) => K): Map { + const result = new Map(); for (let item = this.iterator.next(); !item.done; item = this.iterator.next()) { const key = keySelector(item.value); const array = result.get(key); diff --git a/src/operators/sync/indexOf.ts b/src/operators/sync/indexOf.ts new file mode 100644 index 0000000..62d3922 --- /dev/null +++ b/src/operators/sync/indexOf.ts @@ -0,0 +1,15 @@ +import {Sequence} from "../../sequency"; + +export class IndexOf { + + /** + * Returns the zero-based index of the given `element` or -1 if the sequence does not contain the element. + * + * @param {T} element + * @returns {number} + */ + indexOf(this: Sequence, element: T): number { + return this.indexOfFirst(value => value === element); + } + +} \ No newline at end of file diff --git a/src/indexOfFirst.ts b/src/operators/sync/indexOfFirst.ts similarity index 93% rename from src/indexOfFirst.ts rename to src/operators/sync/indexOfFirst.ts index ab90f14..cf2b195 100644 --- a/src/indexOfFirst.ts +++ b/src/operators/sync/indexOfFirst.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class IndexOfFirst { diff --git a/src/indexOfLast.ts b/src/operators/sync/indexOfLast.ts similarity index 93% rename from src/indexOfLast.ts rename to src/operators/sync/indexOfLast.ts index 54e6a4e..4ba8414 100644 --- a/src/indexOfLast.ts +++ b/src/operators/sync/indexOfLast.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class IndexOfLast { diff --git a/src/joinToString.ts b/src/operators/sync/joinToString.ts similarity index 83% rename from src/joinToString.ts rename to src/operators/sync/joinToString.ts index 7eb5736..6da38c5 100644 --- a/src/joinToString.ts +++ b/src/operators/sync/joinToString.ts @@ -1,12 +1,12 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; +import {BaseJoinToStringConfig} from "../../BaseJoinToStringConfig"; -export interface JoinConfig { - value?: string; - separator?: string; - prefix?: string; - postfix?: string; - limit?: number; - truncated?: string; +export interface JoinConfig extends BaseJoinToStringConfig { + /** + * Transform function + * @param value Sequence element + * @returns {string} String representation + */ transform?: (value: T) => string; } @@ -18,7 +18,7 @@ const defaults = { limit: -1, truncated: "...", transform: undefined -}; +} satisfies JoinConfig; export class JoinToString { diff --git a/src/last.ts b/src/operators/sync/last.ts similarity index 94% rename from src/last.ts rename to src/operators/sync/last.ts index 92033c2..27cccec 100644 --- a/src/last.ts +++ b/src/operators/sync/last.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class Last { diff --git a/src/lastOrNull.ts b/src/operators/sync/lastOrNull.ts similarity index 95% rename from src/lastOrNull.ts rename to src/operators/sync/lastOrNull.ts index 645bf27..a58fa10 100644 --- a/src/lastOrNull.ts +++ b/src/operators/sync/lastOrNull.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class LastOrNull { diff --git a/src/map.ts b/src/operators/sync/map.ts similarity index 87% rename from src/map.ts rename to src/operators/sync/map.ts index 84b00b0..d203163 100644 --- a/src/map.ts +++ b/src/operators/sync/map.ts @@ -1,4 +1,4 @@ -import Sequence, {createSequence} from "./Sequence"; +import {createSequence, Sequence} from "../../sequency"; class MapIterator implements Iterator { constructor(private readonly transform: (item: S) => T, @@ -8,7 +8,7 @@ class MapIterator implements Iterator { next(value?: any): IteratorResult { const item = this.iterator.next(); return item.done - ? {done: true, value: undefined as any} + ? {done: true, value: undefined} : {done: false, value: this.transform(item.value)}; } } @@ -25,4 +25,4 @@ export class Map { return createSequence(new MapIterator(transform, this.iterator)); } -} +} \ No newline at end of file diff --git a/src/mapIndexed.ts b/src/operators/sync/mapIndexed.ts similarity index 91% rename from src/mapIndexed.ts rename to src/operators/sync/mapIndexed.ts index 9cede3b..8d4783c 100644 --- a/src/mapIndexed.ts +++ b/src/operators/sync/mapIndexed.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class MapIndexed { diff --git a/src/mapNotNull.ts b/src/operators/sync/mapNotNull.ts similarity index 89% rename from src/mapNotNull.ts rename to src/operators/sync/mapNotNull.ts index cfd27ce..7b247d1 100644 --- a/src/mapNotNull.ts +++ b/src/operators/sync/mapNotNull.ts @@ -1,4 +1,4 @@ -import Sequence, {emptySequence, sequenceOf} from "./Sequence"; +import {emptySequence, sequenceOf, Sequence} from "../../sequency"; export class MapNotNull { diff --git a/src/max.ts b/src/operators/sync/max.ts similarity index 86% rename from src/max.ts rename to src/operators/sync/max.ts index 286f7c0..2b33d05 100644 --- a/src/max.ts +++ b/src/operators/sync/max.ts @@ -1,11 +1,11 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class Max { /** * Returns the maximum element of the sequence or `null` if sequence is empty. * - * @returns {T} + * @returns {T | null} */ max(this: Sequence): T | null { let result: T | null = null; diff --git a/src/maxBy.ts b/src/operators/sync/maxBy.ts similarity index 91% rename from src/maxBy.ts rename to src/operators/sync/maxBy.ts index 11b6f32..ad76928 100644 --- a/src/maxBy.ts +++ b/src/operators/sync/maxBy.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class MaxBy { @@ -7,7 +7,7 @@ export class MaxBy { * for each element of the sequence or `null` if the sequence is empty. * * @param {(value: T) => R} selector - * @returns {T} + * @returns {T | null} */ maxBy(this: Sequence, selector: (value: T) => R): T | null { let max: T | null = null; diff --git a/src/maxWith.ts b/src/operators/sync/maxWith.ts similarity index 82% rename from src/maxWith.ts rename to src/operators/sync/maxWith.ts index 5d1c9be..6a5f964 100644 --- a/src/maxWith.ts +++ b/src/operators/sync/maxWith.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class MaxWith { @@ -6,7 +6,8 @@ export class MaxWith { * Returns the maximum element of the sequence by evaluating the given `compare` * function or `null` if sequence is empty. * - * @returns {T} + * @param {(a: T, b: T) => number} compare + * @returns {T | null} */ maxWith(this: Sequence, compare: (a: T, b: T) => number): T | null { let max: T | null = null; diff --git a/src/operators/sync/merge.ts b/src/operators/sync/merge.ts new file mode 100644 index 0000000..478ed17 --- /dev/null +++ b/src/operators/sync/merge.ts @@ -0,0 +1,98 @@ +import {createSequence, isSequence, sequenceOf, Sequence} from "../../sequency"; + +class MergeIterator implements Iterator { + private firstData: T[] = []; + private secondData: T[] = []; + /** Iterator to initialize data with */ + private firstIterator: Iterator | null = null; + /** Iterator to initialize data with */ + private secondIterator: Iterator | null = null; + /** First data index */ + private firstIndex: number = 0; + /** Second data index */ + private secondIndex: number = 0; + + constructor(firstIterator: Iterator, + secondIterator: Iterator, + private readonly selector: (value: T) => S, + private readonly prependNewValues: boolean) { + this.firstIterator = firstIterator; + this.secondIterator = secondIterator; + } + + private init() { + if (this.firstIterator != null && this.secondIterator != null) { + // Init first data (self) + for (let item = this.firstIterator.next(); !item.done; item = this.firstIterator.next()) { + if (!item.done) { + this.firstData.push(item.value); + } + } + this.firstIterator = null; + // Init second data (other) + for (let item = this.secondIterator.next(); !item.done; item = this.secondIterator.next()) { + if (!item.done) { + this.secondData.push(item.value); + } + } + this.secondIterator = null; + + // Replace values with those from second data if selector result of both (first and second) match, otherwise retain values from first data + this.firstData = sequenceOf(...this.firstData) + .map(left => { + const selected = this.selector(left); + const right = sequenceOf(...this.secondData) + .find(it => this.selector(it) === selected); + if (right != null) { + this.secondData = this.secondData.filter(it => it !== right); + return right; + } else { + return left; + } + }) + .toArray(); + + // First data now contains merged values and second data the remaining ones, swap them if new values should be prepended + if (this.prependNewValues) { + const tmp = this.firstData; + this.firstData = this.secondData; + this.secondData = tmp; + } + } + } + + next(value?: any): IteratorResult { + this.init(); + if (this.firstIndex < this.firstData.length) { + return {done: false, value: this.firstData[this.firstIndex++]}; + } + if (this.secondIndex < this.secondData.length) { + return {done: false, value: this.secondData[this.secondIndex++]}; + } + return {done: true, value: undefined}; + } +} + +export class Merge { + + /** + * Merges the elements of both sequences into a new sequence. Each element of this sequence is eventually replaced with + * an element of the other sequence by comparing results of the given `selector` function. If no value is found in the other + * sequence the element is retained. New elements of the other sequence are appended to the end of the new sequence or + * prepended to the start of the new sequence, if `prependNewValues` is set to `true`. This operation is not lazy evaluated. + * + * @param {Sequence} other + * @param {(value: T) => S} selector + * @param prependNewValues + * @returns {Sequence} + */ + merge(this: Sequence, other: Sequence | Iterable, selector: (value: T) => S, prependNewValues: boolean = false): Sequence { + return createSequence(new MergeIterator( + this.iterator, + isSequence(other) ? other.iterator : other[Symbol.iterator](), + selector, + prependNewValues + )); + } + +} \ No newline at end of file diff --git a/src/min.ts b/src/operators/sync/min.ts similarity index 86% rename from src/min.ts rename to src/operators/sync/min.ts index 30d9be3..4ae9db4 100644 --- a/src/min.ts +++ b/src/operators/sync/min.ts @@ -1,11 +1,11 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class Min { /** * Returns the minimum element of the sequence or `null` if sequence is empty. * - * @returns {T} + * @returns {T | null} */ min(this: Sequence): T | null { let result: T | null = null; diff --git a/src/minBy.ts b/src/operators/sync/minBy.ts similarity index 91% rename from src/minBy.ts rename to src/operators/sync/minBy.ts index fc06aca..bad5c2e 100644 --- a/src/minBy.ts +++ b/src/operators/sync/minBy.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class MinBy { @@ -7,7 +7,7 @@ export class MinBy { * for each element of the sequence or `null` if the sequence is empty. * * @param {(value: T) => R} selector - * @returns {T} + * @returns {T | null} */ minBy(this: Sequence, selector: (value: T) => R): T | null { let min: T | null = null; diff --git a/src/minWith.ts b/src/operators/sync/minWith.ts similarity index 88% rename from src/minWith.ts rename to src/operators/sync/minWith.ts index e74748d..9ccf5f3 100644 --- a/src/minWith.ts +++ b/src/operators/sync/minWith.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class MinWith { @@ -6,7 +6,7 @@ export class MinWith { * Returns the minimum element of the sequence by evaluating the given `compare` * function or `null` if sequence is empty. * - * @returns {T} + * @returns {T | null} */ minWith(this: Sequence, compare: (a: T, b: T) => number): T | null { let min: T | null = null; diff --git a/src/minus.ts b/src/operators/sync/minus.ts similarity index 52% rename from src/minus.ts rename to src/operators/sync/minus.ts index 9fefebe..faef380 100644 --- a/src/minus.ts +++ b/src/operators/sync/minus.ts @@ -1,4 +1,4 @@ -import Sequence, {isSequence} from "./Sequence"; +import {isSequence, Sequence} from "../../sequency"; export class Minus { @@ -6,15 +6,14 @@ export class Minus { * Removes the given `data` and returns a new sequence. Data can either be a single element, an array of elements * or a sequence of elements. * - * @param {Sequence | Array | T} data + * @param {Sequence | T[] | T} data * @returns {Sequence} */ - minus(this: Sequence, data: T | Sequence | Array): Sequence { + minus(this: Sequence, data: T | Sequence | T[]): Sequence { if (isSequence(data)) { - const array: Array = data.toArray(); - return this.filter(it => array.indexOf(it) < 0); + return this.filter((it) => !data.contains(it)); } else if (data instanceof Array) { - return this.filter(it => data.indexOf(it) < 0); + return this.filter(it => !data.includes(it)); } else { return this.filter(it => it !== data); } diff --git a/src/none.ts b/src/operators/sync/none.ts similarity index 93% rename from src/none.ts rename to src/operators/sync/none.ts index 3950b15..035319e 100644 --- a/src/none.ts +++ b/src/operators/sync/none.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class None { diff --git a/src/onEach.ts b/src/operators/sync/onEach.ts similarity index 71% rename from src/onEach.ts rename to src/operators/sync/onEach.ts index 3fc3645..a198dd5 100644 --- a/src/onEach.ts +++ b/src/operators/sync/onEach.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class OnEach { @@ -8,7 +8,7 @@ export class OnEach { * @param {(value: T) => void} action * @returns {Sequence} */ - onEach(this: Sequence, action: (value: T) => void): Sequence { + onEach(this: Sequence, action: (value: T) => unknown): Sequence { return this.map(it => { action(it); return it; diff --git a/src/operators/sync/onEachIndexed.ts b/src/operators/sync/onEachIndexed.ts new file mode 100644 index 0000000..91c1d9b --- /dev/null +++ b/src/operators/sync/onEachIndexed.ts @@ -0,0 +1,20 @@ +import {Sequence} from "../../sequency"; + +export class OnEachIndexed { + + /** + * Performs the given `action` for each element and returns the sequence and passes the `index` of the current + * element (zero-based). + * + * @param {(index: number, value: T) => void} action + * @returns {Sequence} + */ + onEachIndexed(this: Sequence, action: (index: number, value: T) => unknown): Sequence { + return this.withIndex() + .map(it => { + action(it.index, it.value); + return it.value; + }); + } + +} \ No newline at end of file diff --git a/src/partition.ts b/src/operators/sync/partition.ts similarity index 69% rename from src/partition.ts rename to src/operators/sync/partition.ts index 45bd067..818f765 100644 --- a/src/partition.ts +++ b/src/operators/sync/partition.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class Partition { @@ -7,11 +7,11 @@ export class Partition { * according to the result of the predicate. Returns both lists as an object. * * @param {(value: T) => boolean} predicate - * @returns {{true: Array; false: Array}} + * @returns {{true: T[]; false: T[]}} */ - partition(this: Sequence, predicate: (value: T) => boolean): { "true": Array, "false": Array } { - const arrayTrue: Array = []; - const arrayFalse: Array = []; + partition(this: Sequence, predicate: (value: T) => boolean): {true: T[], false: T[]} { + const arrayTrue: T[] = []; + const arrayFalse: T[] = []; for (let item = this.iterator.next(); !item.done; item = this.iterator.next()) { if (predicate(item.value)) { arrayTrue.push(item.value); @@ -19,7 +19,7 @@ export class Partition { arrayFalse.push(item.value); } } - return { "true": arrayTrue, "false": arrayFalse }; + return {true: arrayTrue, false: arrayFalse}; } } \ No newline at end of file diff --git a/src/plus.ts b/src/operators/sync/plus.ts similarity index 84% rename from src/plus.ts rename to src/operators/sync/plus.ts index 29a5649..7af671c 100644 --- a/src/plus.ts +++ b/src/operators/sync/plus.ts @@ -1,4 +1,4 @@ -import Sequence, {createSequence, isSequence} from "./Sequence"; +import {createSequence, isSequence, Sequence} from "../../sequency"; class AppendIterator implements Iterator { constructor(private readonly first: Iterator, @@ -14,7 +14,7 @@ class AppendIterator implements Iterator { if (!item2.done) { return {done: false, value: item2.value}; } - return {done: true, value: undefined as any}; + return {done: true, value: undefined}; } } @@ -31,10 +31,10 @@ export class Plus { /** * Appends the given array to the end of the sequence and returns a new sequence. * - * @param {Array} other + * @param {T[]} other * @returns {Sequence} */ - plus(this: Sequence, other: Array): Sequence; + plus(this: Sequence, other: T[]): Sequence; /** * Appends the given sequence to the end of the sequence and returns a new sequence. @@ -44,7 +44,7 @@ export class Plus { */ plus(this: Sequence, other: Sequence): Sequence; - plus(this: Sequence, data: T | Sequence | Array): Sequence { + plus(this: Sequence, data: T | Sequence | T[]): Sequence { if (isSequence(data)) { return createSequence(new AppendIterator(this.iterator, data.iterator)); } else if (data instanceof Array) { diff --git a/src/reduce.ts b/src/operators/sync/reduce.ts similarity index 95% rename from src/reduce.ts rename to src/operators/sync/reduce.ts index b79cd1f..e1f970a 100644 --- a/src/reduce.ts +++ b/src/operators/sync/reduce.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class Reduce { diff --git a/src/reduceIndexed.ts b/src/operators/sync/reduceIndexed.ts similarity index 96% rename from src/reduceIndexed.ts rename to src/operators/sync/reduceIndexed.ts index f523875..e480506 100644 --- a/src/reduceIndexed.ts +++ b/src/operators/sync/reduceIndexed.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class ReduceIndexed { diff --git a/src/reverse.ts b/src/operators/sync/reverse.ts similarity index 88% rename from src/reverse.ts rename to src/operators/sync/reverse.ts index d2633cf..21c8e9e 100644 --- a/src/reverse.ts +++ b/src/operators/sync/reverse.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class Reverse { diff --git a/src/single.ts b/src/operators/sync/single.ts similarity index 95% rename from src/single.ts rename to src/operators/sync/single.ts index dfebbd0..f93e066 100644 --- a/src/single.ts +++ b/src/operators/sync/single.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class Single { diff --git a/src/singleOrNull.ts b/src/operators/sync/singleOrNull.ts similarity index 91% rename from src/singleOrNull.ts rename to src/operators/sync/singleOrNull.ts index 90ff541..99000e6 100644 --- a/src/singleOrNull.ts +++ b/src/operators/sync/singleOrNull.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class SingleOrNull { @@ -8,7 +8,7 @@ export class SingleOrNull { * the predicate or `null` if more or less than one element match the predicate. * * @param {(value: T) => boolean} predicate - * @returns {T} + * @returns {T | null} */ singleOrNull(this: Sequence, predicate?: (value: T) => boolean): T | null { if (predicate != null) { diff --git a/src/operators/sync/sorted.ts b/src/operators/sync/sorted.ts new file mode 100644 index 0000000..80fd18a --- /dev/null +++ b/src/operators/sync/sorted.ts @@ -0,0 +1,58 @@ +import {createSequence, Sequence} from "../../sequency"; +import ComparatorFactory from "../../ComparatorFactory"; +import Comparator from "../../Comparator"; + +class SortIterator implements Iterator { + private readonly factory: ComparatorFactory = new ComparatorFactory(); + private readonly comparator: Comparator | null; + private readonly data: T[] = []; + /** Iterator to initialize data with */ + private iterator: Iterator | null = null; + /** Current data index */ + private index: number = 0; + + constructor(iterator: Iterator, composeComparator?: (factory: ComparatorFactory) => Comparator) { + this.comparator = composeComparator?.(this.factory) ?? null; + this.iterator = iterator; + } + + private async init() { + if (this.iterator != null) { + for (let item = this.iterator.next(); !item.done; item = this.iterator.next()) { + if (!item.done) { + this.data.push(item.value); + } + } + if (this.comparator != null) { + this.data.sort(this.comparator.compare); + } else { + this.data.sort(); + } + Object.freeze(this.data); + this.iterator = null; + } + } + + next(value?: any): IteratorResult { + this.init(); + if (this.index < this.data.length) { + return {done: false, value: this.data[this.index++]}; + } + return {done: true, value: undefined}; + } +} + +export class Sorted { + + /** + * Returns a new sequence with all elements sorted by the comparator specified by the given `composeComparator` function + * or in natural order if no arguments are given. + * + * @param {(factory: ComparatorFactory) => Comparator} composeComparator + * @returns {Sequence} + */ + sorted(this: Sequence, composeComparator?: (factory: ComparatorFactory) => Comparator): Sequence { + return createSequence(new SortIterator(this.iterator, composeComparator)); + } + +} \ No newline at end of file diff --git a/src/sortedBy.ts b/src/operators/sync/sortedBy.ts similarity index 90% rename from src/sortedBy.ts rename to src/operators/sync/sortedBy.ts index 26412a2..a8b093f 100644 --- a/src/sortedBy.ts +++ b/src/operators/sync/sortedBy.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class SortedBy { diff --git a/src/sortedByDescending.ts b/src/operators/sync/sortedByDescending.ts similarity index 91% rename from src/sortedByDescending.ts rename to src/operators/sync/sortedByDescending.ts index 1a03761..098a1d2 100644 --- a/src/sortedByDescending.ts +++ b/src/operators/sync/sortedByDescending.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class SortedByDescending { diff --git a/src/sortedDescending.ts b/src/operators/sync/sortedDescending.ts similarity index 87% rename from src/sortedDescending.ts rename to src/operators/sync/sortedDescending.ts index 104d22f..0b773f3 100644 --- a/src/sortedDescending.ts +++ b/src/operators/sync/sortedDescending.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class SortedDescending { diff --git a/src/sortedWith.ts b/src/operators/sync/sortedWith.ts similarity index 90% rename from src/sortedWith.ts rename to src/operators/sync/sortedWith.ts index 34a74a6..ecb4626 100644 --- a/src/sortedWith.ts +++ b/src/operators/sync/sortedWith.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class SortedWith { diff --git a/src/sum.ts b/src/operators/sync/sum.ts similarity index 89% rename from src/sum.ts rename to src/operators/sync/sum.ts index e87ac51..727463f 100644 --- a/src/sum.ts +++ b/src/operators/sync/sum.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class Sum { diff --git a/src/sumBy.ts b/src/operators/sync/sumBy.ts similarity index 91% rename from src/sumBy.ts rename to src/operators/sync/sumBy.ts index a53f919..59641b7 100644 --- a/src/sumBy.ts +++ b/src/operators/sync/sumBy.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class SumBy { diff --git a/src/take.ts b/src/operators/sync/take.ts similarity index 90% rename from src/take.ts rename to src/operators/sync/take.ts index 06fc68c..8d76d97 100644 --- a/src/take.ts +++ b/src/operators/sync/take.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class Take { diff --git a/src/takeWhile.ts b/src/operators/sync/takeWhile.ts similarity index 80% rename from src/takeWhile.ts rename to src/operators/sync/takeWhile.ts index 6f7dc9c..41b7441 100644 --- a/src/takeWhile.ts +++ b/src/operators/sync/takeWhile.ts @@ -1,4 +1,4 @@ -import Sequence, {createSequence} from "./Sequence"; +import {createSequence, Sequence} from "../../sequency"; class TakeWhileIterator implements Iterator { constructor(private readonly iterator: Iterator, @@ -8,12 +8,11 @@ class TakeWhileIterator implements Iterator { next(value?: any): IteratorResult { const item = this.iterator.next(); if (!item.done) { - const result = this.predicate(item.value); - if (result) { + if (this.predicate(item.value)) { return {done: false, value: item.value}; } } - return {done: true, value: undefined as any}; + return {done: true, value: undefined}; } } diff --git a/src/toArray.ts b/src/operators/sync/toArray.ts similarity index 63% rename from src/toArray.ts rename to src/operators/sync/toArray.ts index 72e9a33..6ce8a17 100644 --- a/src/toArray.ts +++ b/src/operators/sync/toArray.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class ToArray { @@ -6,11 +6,11 @@ export class ToArray { * Returns all elements of the sequence as array. If an `array` is passed * the elements are appended to the end of the array. * - * @param {Array} array - * @returns {Array} + * @param {T[]} array + * @returns {T[]} */ - toArray(this: Sequence, array?: Array): Array { - const result: Array = array || []; + toArray(this: Sequence, array?: T[]): T[] { + const result: T[] = array ?? []; for (let item = this.iterator.next(); !item.done; item = this.iterator.next()) { result.push(item.value); } @@ -21,10 +21,10 @@ export class ToArray { * Returns all elements of the sequence as array. If an `array` is passed * the elements are appended to the end of the array. * - * @param {Array} array - * @returns {Array} + * @param {T[]} array + * @returns {T[]} */ - toList(this: Sequence, array?: Array): Array { + toList(this: Sequence, array?: T[]): T[] { return this.toArray(array); } diff --git a/src/operators/sync/toAsyncSequence.ts b/src/operators/sync/toAsyncSequence.ts new file mode 100644 index 0000000..e787d8c --- /dev/null +++ b/src/operators/sync/toAsyncSequence.ts @@ -0,0 +1,15 @@ +import {emptyAsyncSequence, AsyncSequence, Sequence} from "../../sequency"; + +export class ToAsyncSequence { + + /** + * Returns an async variant of the sequence. + * + * @returns {AsyncSequence} + */ + toAsyncSequence(this: Sequence, sequence?: AsyncSequence): AsyncSequence { + const result = sequence ?? emptyAsyncSequence(); + return result.plus(this.toArray()); + } + +} \ No newline at end of file diff --git a/src/toMap.ts b/src/operators/sync/toMap.ts similarity index 87% rename from src/toMap.ts rename to src/operators/sync/toMap.ts index 077aa2a..ce10568 100644 --- a/src/toMap.ts +++ b/src/operators/sync/toMap.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class ToMap { @@ -10,7 +10,7 @@ export class ToMap { * @returns {Map} */ toMap(this: Sequence<[K, V]>, map?: Map): Map { - const result = map || new Map(); + const result = map ?? new Map(); for (let item = this.iterator.next(); !item.done; item = this.iterator.next()) { const pair = item.value; const key = pair[0]; diff --git a/src/toSet.ts b/src/operators/sync/toSet.ts similarity index 84% rename from src/toSet.ts rename to src/operators/sync/toSet.ts index 85b10c2..8f453c6 100644 --- a/src/toSet.ts +++ b/src/operators/sync/toSet.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class ToSet { @@ -10,7 +10,7 @@ export class ToSet { * @returns {Set} */ toSet(this: Sequence, set?: Set): Set { - const result = set || new Set(); + const result = set ?? new Set(); for (let item = this.iterator.next(); !item.done; item = this.iterator.next()) { result.add(item.value); } diff --git a/src/unzip.ts b/src/operators/sync/unzip.ts similarity index 68% rename from src/unzip.ts rename to src/operators/sync/unzip.ts index ef709b1..df9b414 100644 --- a/src/unzip.ts +++ b/src/operators/sync/unzip.ts @@ -1,4 +1,4 @@ -import Sequence from "./Sequence"; +import {Sequence} from "../../sequency"; export class Unzip { @@ -6,11 +6,11 @@ export class Unzip { * Returns a pair of arrays where the first array contains all first values * and the second array all second values from each input pair of the sequence. * - * @returns {[Array , Array]} + * @returns {[T[], S[]]} */ - unzip(this: Sequence<[T, S]>): [Array, Array] { - const array1: Array = []; - const array2: Array = []; + unzip(this: Sequence<[T, S]>): [T[], S[]] { + const array1: T[] = []; + const array2: S[] = []; for (let item = this.iterator.next(); !item.done; item = this.iterator.next()) { const [first, second] = item.value; array1.push(first); diff --git a/src/withIndex.ts b/src/operators/sync/withIndex.ts similarity index 83% rename from src/withIndex.ts rename to src/operators/sync/withIndex.ts index 97ed92b..2cf26da 100644 --- a/src/withIndex.ts +++ b/src/operators/sync/withIndex.ts @@ -1,5 +1,5 @@ -import Sequence, {createSequence} from "./Sequence"; -import IndexedValue from "./IndexedValue"; +import {createSequence, Sequence} from "../../sequency"; +import IndexedValue from "../../IndexedValue"; class IndexIterator implements Iterator> { private index = -1; @@ -10,7 +10,7 @@ class IndexIterator implements Iterator> { next(value?: any): IteratorResult> { const item = this.iterator.next(); if (item.done) { - return {done: true, value: undefined as any}; + return {done: true, value: undefined}; } this.index++; return { diff --git a/src/zip.ts b/src/operators/sync/zip.ts similarity index 89% rename from src/zip.ts rename to src/operators/sync/zip.ts index 184209a..6ff41e9 100644 --- a/src/zip.ts +++ b/src/operators/sync/zip.ts @@ -1,4 +1,4 @@ -import Sequence, {createSequence} from "./Sequence"; +import {createSequence, Sequence} from "../../sequency"; class ZipIterator implements Iterator<[T, S]> { constructor(private readonly iterator1: Iterator, @@ -9,7 +9,7 @@ class ZipIterator implements Iterator<[T, S]> { const item1 = this.iterator1.next(); const item2 = this.iterator2.next(); if (item1.done || item2.done) { - return {done: true, value: undefined as any}; + return {done: true, value: undefined}; } else { return {done: false, value: [item1.value, item2.value]}; } diff --git a/src/sequency.ts b/src/sequency.ts new file mode 100644 index 0000000..94416d8 --- /dev/null +++ b/src/sequency.ts @@ -0,0 +1,268 @@ +import {applyMixins, asAsyncIterator} from "./internal"; +import {AsyncSequence, AsyncSequenceImpl} from "./AsyncSequence"; +import GeneratorIterator from "./GeneratorIterator"; +import GeneratorSeedIterator from "./GeneratorSeedIterator"; +import {Sequence, SequenceImpl} from "./Sequence"; + +export {Sequence, Sequence as default} from "./Sequence"; +export {AsyncSequence} from "./AsyncSequence"; +export {default as Comparator} from "./Comparator"; +export {default as ComparatorFactory} from "./ComparatorFactory"; +export {default as IndexedValue} from "./IndexedValue"; +export {JoinConfig as JoinToStringConfig} from "./operators/sync/joinToString"; +export {JoinConfig as AsyncJoinToStringConfig} from "./operators/async/joinToString"; + +/** + * Create sequence of multiple arguments of an array of arguments + * @param {...T} args Arguments + * @returns Sequence + * @example + * // Sequence + * sequenceOf(1, 2, 3); + * // Sequence + * sequenceOf([1, 2, 3]); + */ +export function sequenceOf(...args: T[]): Sequence { + return asSequence(args); +} + +/** + * Create async sequence of multiple arguments of an array of arguments + * @param {...T} args Arguments + * @returns AsyncSequence + * @example + * asyncSequenceOf(1, 2, 3); // AsyncSequence + * asyncSequenceOf([1, 2, 3]); // AsyncSequence + */ +export function asyncSequenceOf(...args: T[]): AsyncSequence { + return asAsyncSequence(args); +} + +/** + * Create empty sequence + * @returns Sequence + */ +export function emptySequence(): Sequence { + return sequenceOf(); +} + +/** + * Create empty async sequence + * @returns AsyncSequence + */ +export function emptyAsyncSequence(): AsyncSequence { + return asyncSequenceOf(); +} + +/** + * Create sequence for iterable object / generator + * @param {Iterable} iterable Iterable object / generator + * @returns Sequence + * @example + * // Sequence => 1, 2, 3 + * asSequence([1, 2, 3]); + * // Sequence => 1, 2, 3 + * asSequence(new Set([1, 2, 3])); + * // Sequence<[string, number]> => ["a", 1], ["b", 2], ["c", 3] + * asSequence(new Map([["a", 1], ["b", 2], ["c", 3]])); + * // Sequence => "a", "b", "c" + * asSequence("abc"); + * // Sequence => 0, 1, 2, 3, ... + * asSequence((function* () { + * let i = 0; + * while (true) { + * yield i++; + * } + * })()); + */ +export function asSequence(iterable: Iterable): Sequence { + if (iterable == null) { + throw new Error("Cannot create sequence for non-existing input: " + iterable); + } + if (iterable[Symbol.iterator] == null) { + throw new Error("Cannot create sequence for non-iterable input: " + iterable); + } + const iterator = iterable[Symbol.iterator](); + return createSequence(iterator); +} + +/** + * Create async sequence for iterable object / generator + * @param {Iterable | AsyncIterable} iterable Iterable object / generator + * @returns AsyncSequence + * @example + * // AsyncSequence => 1, 2, 3 + * asAsyncSequence([1, 2, 3]); + * // AsyncSequence => 1, 2, 3 + * asAsyncSequence(new Set([1, 2, 3])); + * // AsyncSequence<[string, number]> => ["a", 1], ["b", 2], ["c", 3] + * asAsyncSequence(new Map([["a", 1], ["b", 2], ["c", 3]])); + * // AsyncSequence => "a", "b", "c" + * asAsyncSequence("abc"); + * // AsyncSequence => 0, 1, 2, 3, ... + * asAsyncSequence((async function* () { + * let i = 0; + * while (true) { + * yield i++; + * } + * })()); + */ +export function asAsyncSequence(iterable: Iterable | AsyncIterable): AsyncSequence { + if (iterable == null) { + throw new Error("Cannot create sequence for non-existing input: " + iterable); + } + + if((iterable as Iterable)[Symbol.iterator] != null) { + const iterator = (iterable as Iterable)[Symbol.iterator](); + return createAsyncSequence(asAsyncIterator(iterator)); + } + if ((iterable as AsyncIterable)[Symbol.asyncIterator] != null) { + const iterator = (iterable as AsyncIterable)[Symbol.asyncIterator](); + return createAsyncSequence(iterator); + } + + throw new Error("Cannot create sequence for non-iterable input: " + iterable); +} + +/** + * Create sequence for iterator + * @param {Iterator} iterator Iterator + * @returns Sequence + * @example + * // Sequence + * createSequence({ + * next(value) { + * return {done: true, value: null}; + * } + * }); + */ +export function createSequence(iterator: Iterator): Sequence { + return new SequenceImpl(iterator) as Sequence; +} + +/** + * Create async sequence for async iterator + * @param {AsyncIterator} iterator AsyncIterator + * @returns AsyncSequence + * @example + * // Sequence + * createAsyncSequence({ + * async next(value) { + * return {done: true, value: null}; + * } + * }); + */ +export function createAsyncSequence(iterator: AsyncIterator): AsyncSequence { + return new AsyncSequenceImpl(iterator) as AsyncSequence; +} + +/** + * Check if an object is a sequence + * @param {unknown} object Object of interest + * @returns Whether it is or not + */ +export function isSequence(object: unknown): object is Sequence { + return object instanceof SequenceImpl; +} + +/** + * Check if an object is an async sequence + * @param {unknown} object Object of interest + * @returns Whether it is or not + */ +export function isAsyncSequence(object: unknown): object is AsyncSequence { + return object instanceof AsyncSequenceImpl; +} + +/** + * Extend the basic sequence implementation + * @param {{new(): any}} mixin Mixin operators + */ +export function extendSequence(mixin: {new(): any}) { + applyMixins(SequenceImpl, [mixin]); +} + +/** + * Extend the basic async sequence implementation + * @param {{new(): any}} mixin Mixin operators + */ +export function extendAsyncSequence(mixin: {new(): any}) { + applyMixins(AsyncSequenceImpl, [mixin]); +} + +/** + * Generate a sequence + * @param nextFunction Function to generate next value with (null/undefined to end sequence) + * @example + * // Sequence => 0, 1, ..., 8, 9 + * let i = 0; + * generateSequence(() => count < 10 ? count++ : null); + */ +export function generateSequence(nextFunction: () => T | null | undefined): Sequence; +/** + * Generate a sequence + * @param seedFunction Function to generate initial value with (seed) + * @param nextFunction Function to generate next value with (null/undefined to end sequence) + * @example + * // Sequence => 0, 1, ..., 8, 9 + * generateSequence(() => 0, value => value < 10 ? value + 1 : null); + */ +export function generateSequence(seedFunction: () => T | null | undefined, nextFunction: (item: T) => T | null | undefined): Sequence; +/** + * Generate a sequence + * @param seed Initial value (seed) + * @param nextFunction Function to generate next value with (null/undefined to end sequence) + * @example + * // Sequence => 0, 1, ..., 8, 9 + * generateSequence(0, value => value < 10 ? value + 1 : null); + */ +export function generateSequence(seed: T | null | undefined, nextFunction: (item: T) => T | null | undefined): Sequence; +/** + * Generate a sequence + * @param a seed/seedFunction/nextFunction + * @param b nextFunction + * @returns Sequence + */ +export function generateSequence(a: (() => T | null | undefined) | T | null | undefined, b?: (item: T) => T | null | undefined): Sequence { + // seed/seedFunction + nextFunction + if (typeof b === "function") { + const seed = typeof a === "function" ? (a as () => T | null | undefined)() : a; + return seed != null + ? createSequence(new GeneratorSeedIterator(seed, b)) // seed + nextFunction + : emptySequence(); // Missing seed + // nextFunction + } else if (typeof a === "function") { + return createSequence(new GeneratorIterator(a as () => T | null | undefined)); + // Missing nextFunction + } else { + return emptySequence(); + } +} + +/** + * Generate sequence from range + * @param start Range start + * @param endInclusive Range end (inclusive) + * @param step Step size + * @returns Sequence + * @example + * // Sequence => 0, 1, 2, 3, 4 + * range(0, 4); + * // Sequence => 0, 0.5, 1, ..., 3.5, 4 + * range(0, 4, 0.5); + */ +export function range(start: number, endInclusive: number, step: number = 1): Sequence { + if (start > endInclusive) { + throw new Error(`start [${start}] must be lower then endInclusive [${endInclusive}]`); + } + let current = start; + return generateSequence(() => { + try { + return current <= endInclusive + ? current + : undefined; + } finally { + current += step; + } + }); +} \ No newline at end of file diff --git a/src/sorted.ts b/src/sorted.ts deleted file mode 100644 index 4f1e93e..0000000 --- a/src/sorted.ts +++ /dev/null @@ -1,30 +0,0 @@ -import Sequence, {createSequence} from "./Sequence"; -import ComparatorFactory from "./ComparatorFactory"; -import Comparator from "./Comparator"; -import createComparatorFactory from "./createComparatorFactory"; - -export class Sorted { - - /** - * Returns a new sequence with all elements sorted by the comparator specified by the given `composeComparator` function - * or in natural order if no arguments are given. - * - * @returns {Sequence} - */ - sorted(this: Sequence, composeComparator?: (factory: ComparatorFactory) => Comparator): Sequence { - const result: Array = []; - for (let item = this.iterator.next(); !item.done; item = this.iterator.next()) { - result.push(item.value); - } - if (composeComparator == null) { - result.sort(); - } else { - const factory: ComparatorFactory = createComparatorFactory(); - const comparator = composeComparator(factory); - result.sort(comparator); - } - const iterator = result[Symbol.iterator](); - return createSequence(iterator); - } - -} \ No newline at end of file diff --git a/test/asSequence.test.ts b/test/asSequence.test.ts index c0a9eb7..5837aa0 100644 --- a/test/asSequence.test.ts +++ b/test/asSequence.test.ts @@ -1,4 +1,4 @@ -import {asSequence} from "../src/Sequence"; +import {asSequence} from "../src/sequency"; describe("asSequence", () => { it("should create sequence from array", () => { @@ -7,45 +7,39 @@ describe("asSequence", () => { .map(it => `num ${it}`) .toArray(); - expect(array.length).toBe(2); - expect(array[0]).toBe("num 2"); - expect(array[1]).toBe("num 3"); + expect(array).toEqual(["num 2", "num 3"]); }); it("should create sequence from object keys", () => { - const keys = (Object as any).keys({"a": 1, "b": 2, "c": 3}); + const keys = Object.keys({"a": 1, "b": 2, "c": 3}); const array = asSequence(keys) .toArray(); - expect(array.length).toBe(3); - expect(array[0]).toBe("a"); - expect(array[1]).toBe("b"); - expect(array[2]).toBe("c"); + expect(array).toEqual(["a", "b", "c"]); }); it("should create sequence from object values", () => { - const values = (Object as any).values({"a": 1, "b": 2, "c": 3}); + const values = Object.values({"a": 1, "b": 2, "c": 3}); const array = asSequence(values) .toArray(); - expect(array.length).toBe(3); - expect(array[0]).toBe(1); - expect(array[1]).toBe(2); - expect(array[2]).toBe(3); + expect(array).toEqual([1, 2, 3]); }); it("should create sequence from set", () => { - const array = asSequence(new Set([1, 2, 3])) + const set = new Set(); + set.add(1); + set.add(2); + set.add(3); + + const array = asSequence(set) .toArray(); - expect(array.length).toBe(3); - expect(array[0]).toBe(1); - expect(array[1]).toBe(2); - expect(array[2]).toBe(3); + expect(array).toEqual([1, 2, 3]); }); it("should create sequence from map", () => { - const map = new Map(); + const map = new Map(); map.set("a", 1); map.set("b", 2); map.set("c", 3); @@ -53,27 +47,29 @@ describe("asSequence", () => { const array = asSequence(map) .toArray(); - expect(array.length).toBe(3); - expect(array[0]).toEqual(["a", 1]); - expect(array[1]).toEqual(["b", 2]); - expect(array[2]).toEqual(["c", 3]); + expect(array) + .toEqual([ + ["a", 1], + ["b", 2], + ["c", 3] + ]); }); it("should throw understandable error message if input is undefined", () => { expect( - () => asSequence(undefined as Array).toArray() - ).toThrowError("Cannot create sequence for input: undefined"); + () => asSequence(undefined as unknown as number[]).toArray() + ).toThrow("Cannot create sequence for non-existing input: undefined"); }); it("should throw understandable error message if input is null", () => { expect( - () => asSequence(null as Array).toArray() - ).toThrowError("Cannot create sequence for input: null"); + () => asSequence(null as unknown as number[]).toArray() + ).toThrow("Cannot create sequence for non-existing input: null"); }); it("should throw understandable error message if input is not iterable", () => { expect( - () => asSequence({} as Array).toArray() - ).toThrowError("Cannot create sequence for non-iterable input: [object Object]"); + () => asSequence({} as unknown as number[]).toArray() + ).toThrow("Cannot create sequence for non-iterable input: [object Object]"); }); }); \ No newline at end of file diff --git a/test/chunk.test.ts b/test/chunk.test.ts deleted file mode 100644 index e977d26..0000000 --- a/test/chunk.test.ts +++ /dev/null @@ -1,51 +0,0 @@ -import {sequenceOf} from "../src/Sequence"; - -describe("chunk", () => { - it("should return list of chunks", () => { - const chunks = sequenceOf(1, 2, 3, 4, 5) - .chunk(2); - expect(chunks.length).toBe(3); - - expect(chunks[0].length).toBe(2); - expect(chunks[0][0]).toBe(1); - expect(chunks[0][1]).toBe(2); - - expect(chunks[1].length).toBe(2); - expect(chunks[1][0]).toBe(3); - expect(chunks[1][1]).toBe(4); - - expect(chunks[2].length).toBe(1); - expect(chunks[2][0]).toBe(5); - }); - - it("should return single chunk", () => { - const chunks = sequenceOf(1, 2, 3) - .chunk(5); - expect(chunks.length).toBe(1); - expect(chunks[0].length).toBe(3); - expect(chunks[0][0]).toBe(1); - expect(chunks[0][1]).toBe(2); - expect(chunks[0][2]).toBe(3); - }); - - it("should return one-size chunks", () => { - const chunks = sequenceOf(1, 2, 3) - .chunk(1); - expect(chunks.length).toBe(3); - expect(chunks[0].length).toBe(1); - expect(chunks[0][0]).toBe(1); - expect(chunks[1].length).toBe(1); - expect(chunks[1][0]).toBe(2); - expect(chunks[2].length).toBe(1); - expect(chunks[2][0]).toBe(3); - }); - - it("should throw", () => { - expect( - () => sequenceOf(1, 2, 3).chunk(0) - ).toThrow(); - expect( - () => sequenceOf(1, 2, 3).chunk(-1) - ).toThrow(); - }); -}); \ No newline at end of file diff --git a/test/emptySequence.test.ts b/test/emptySequence.test.ts index 8a59ead..7346efa 100644 --- a/test/emptySequence.test.ts +++ b/test/emptySequence.test.ts @@ -1,8 +1,9 @@ -import {emptySequence} from "../src/Sequence"; +import {emptySequence} from "../src/sequency"; describe("emptySequence", () => { it("should return empty array", () => { const result = emptySequence().toArray(); + expect(result.length).toBe(0); }); }); \ No newline at end of file diff --git a/test/examples.test.ts b/test/examples.test.ts index 6b5790d..34f351e 100644 --- a/test/examples.test.ts +++ b/test/examples.test.ts @@ -1,26 +1,27 @@ -import {asSequence, generateSequence, sequenceOf} from "../src/Sequence"; +import {asSequence, generateSequence, sequenceOf} from "../src/sequency"; describe("examples", () => { - it("should be beer-o-clock", () => { const result = sequenceOf("🍻", "🍻") - .flatMap(it => sequenceOf("🍺", "🍺")) + .flatMap(_it => sequenceOf("🍺", "🍺")) .toArray(); + expect(result).toEqual(["🍺", "🍺", "🍺", "🍺"]); }); it("should generate sequence of fibonacci numbers", () => { - const nums = - generateSequence([0, 1], ([a, b]) => [b, a + b]) + const nums = generateSequence([0, 1], ([a, b]) => [b, a + b]) .map(([a, _]) => a) .take(10) .toArray(); + expect(nums).toEqual([0, 1, 1, 2, 3, 5, 8, 13, 21, 34]); }); it("should iterate over chars of the given string", () => { const result = asSequence("abc") .toArray(); + expect(result).toEqual(["a", "b", "c"]); }); @@ -35,7 +36,7 @@ describe("examples", () => { const result = asSequence(generator()) .take(3) .toArray(); + expect(result).toEqual([0, 1, 2]); }); - }); \ No newline at end of file diff --git a/test/extendSequence.test.ts b/test/extendSequence.test.ts index 0c8cdd4..eade5f7 100644 --- a/test/extendSequence.test.ts +++ b/test/extendSequence.test.ts @@ -1,4 +1,4 @@ -import Sequence, {extendSequence, sequenceOf} from "../src/Sequence"; +import {extendSequence, sequenceOf, Sequence} from "../src/sequency"; class GreetAll { greetAll(this: Sequence): string { @@ -7,7 +7,7 @@ class GreetAll { } } -declare module "../src/Sequence" { +declare module "../src/sequency" { export default interface Sequence extends GreetAll { } } @@ -17,6 +17,7 @@ describe("extendSequence", () => { extendSequence(GreetAll); const names = sequenceOf("John", "Bob", "Steve"); const greetings = names.greetAll(); + expect(greetings).toBe("Hello John, Bob, Steve !"); }); }); diff --git a/test/filterIndexed.test.ts b/test/filterIndexed.test.ts deleted file mode 100644 index ee568b0..0000000 --- a/test/filterIndexed.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {sequenceOf} from "../src/Sequence"; - -describe("filterIndexed", () => { - it("should filter elements by index", () => { - const array = sequenceOf(1, 2, 3) - .filterIndexed((index, value) => index < 2) - .toArray(); - - expect(array.length).toBe(2); - expect(array[0]).toBe(1); - expect(array[1]).toBe(2); - }); -}); \ No newline at end of file diff --git a/test/filterNotNull.test.ts b/test/filterNotNull.test.ts deleted file mode 100644 index 24c68ca..0000000 --- a/test/filterNotNull.test.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {sequenceOf} from "../src/Sequence"; - -describe("filterNotNull", () => { - it("should skip null elements", () => { - const array = sequenceOf(1, null, 2, null, 3) - .filterNotNull() - .toArray(); - - expect(array.length).toBe(3); - expect(array[0]).toBe(1); - expect(array[1]).toBe(2); - expect(array[2]).toBe(3); - }); -}); \ No newline at end of file diff --git a/test/flatMap.test.ts b/test/flatMap.test.ts deleted file mode 100644 index 05baf13..0000000 --- a/test/flatMap.test.ts +++ /dev/null @@ -1,17 +0,0 @@ -import {asSequence, sequenceOf} from "../src/Sequence"; - -describe("flatMap", () => { - it("should flatten element arrays", () => { - const array = sequenceOf([1, 2], [3, 4], [5, 6]) - .flatMap(it => asSequence(it)) - .toArray(); - - expect(array.length).toBe(6); - expect(array[0]).toBe(1); - expect(array[1]).toBe(2); - expect(array[2]).toBe(3); - expect(array[3]).toBe(4); - expect(array[4]).toBe(5); - expect(array[5]).toBe(6); - }); -}); \ No newline at end of file diff --git a/test/flatten.test.ts b/test/flatten.test.ts deleted file mode 100644 index faf9d09..0000000 --- a/test/flatten.test.ts +++ /dev/null @@ -1,29 +0,0 @@ -import {sequenceOf} from "../src/Sequence"; - -describe("flatten", () => { - it("should flatten sequence of sequences", () => { - const array = sequenceOf(sequenceOf(1, 2), sequenceOf(3, 4), sequenceOf(5, 6)) - .flatten() - .toArray(); - expect(array.length).toBe(6); - expect(array[0]).toBe(1); - expect(array[1]).toBe(2); - expect(array[2]).toBe(3); - expect(array[3]).toBe(4); - expect(array[4]).toBe(5); - expect(array[5]).toBe(6); - }); - - it("should flatten sequence of arrays", () => { - const array = sequenceOf([1, 2], [3, 4], [5, 6]) - .flatten() - .toArray(); - expect(array.length).toBe(6); - expect(array[0]).toBe(1); - expect(array[1]).toBe(2); - expect(array[2]).toBe(3); - expect(array[3]).toBe(4); - expect(array[4]).toBe(5); - expect(array[5]).toBe(6); - }); -}); \ No newline at end of file diff --git a/test/forEach.test.ts b/test/forEach.test.ts deleted file mode 100644 index 2fb9f81..0000000 --- a/test/forEach.test.ts +++ /dev/null @@ -1,12 +0,0 @@ -import {sequenceOf} from "../src/Sequence"; - -describe("forEach", () => { - it("should call action for each element", () => { - const array: Array = []; - sequenceOf(1, 2, 3) - .forEach(it => array.push(it)); - expect(array[0]).toBe(1); - expect(array[1]).toBe(2); - expect(array[2]).toBe(3); - }); -}); \ No newline at end of file diff --git a/test/generateSequence.test.ts b/test/generateSequence.test.ts index 66123c1..295a011 100644 --- a/test/generateSequence.test.ts +++ b/test/generateSequence.test.ts @@ -1,4 +1,4 @@ -import {generateSequence} from "../src/Sequence"; +import {generateSequence} from "../src/sequency"; describe("generateSequence", () => { it("should generate sequence", () => { @@ -6,12 +6,8 @@ describe("generateSequence", () => { const result = generateSequence(() => count++) .take(5) .toArray(); - expect(result.length).toBe(5); - expect(result[0]).toBe(0); - expect(result[1]).toBe(1); - expect(result[2]).toBe(2); - expect(result[3]).toBe(3); - expect(result[4]).toBe(4); + + expect(result).toEqual([0, 1, 2, 3, 4]); }); it("should generate sequence with drop and take", () => { @@ -20,35 +16,29 @@ describe("generateSequence", () => { .drop(5) .take(5) .toArray(); - expect(result.length).toBe(5); - expect(result[0]).toBe(5); - expect(result[1]).toBe(6); - expect(result[2]).toBe(7); - expect(result[3]).toBe(8); - expect(result[4]).toBe(9); + + expect(result).toEqual([5, 6, 7, 8, 9]); }); it("should generate sequence with seed", () => { const result = generateSequence(10, value => value + 1) .takeWhile(it => it < 15) .toArray(); - expect(result.length).toBe(5); - expect(result[0]).toBe(10); - expect(result[1]).toBe(11); - expect(result[2]).toBe(12); - expect(result[3]).toBe(13); - expect(result[4]).toBe(14); + + expect(result).toEqual([10, 11, 12, 13, 14]); }); it("should generate empty sequence with seed of null", () => { - const result = generateSequence(null as number, a => a) + const result = generateSequence(null as unknown as number, a => a) .count(); + expect(result).toBe(0); }); it("should generate empty sequence with seed of undefined", () => { - const result = generateSequence(undefined as number, a => a) + const result = generateSequence(undefined as unknown as number, a => a) .count(); + expect(result).toBe(0); }); @@ -56,23 +46,21 @@ describe("generateSequence", () => { const result = generateSequence(() => 10, value => value + 1) .takeWhile(it => it < 15) .toArray(); - expect(result.length).toBe(5); - expect(result[0]).toBe(10); - expect(result[1]).toBe(11); - expect(result[2]).toBe(12); - expect(result[3]).toBe(13); - expect(result[4]).toBe(14); + + expect(result).toEqual([10, 11, 12, 13, 14]); }); it("should generate empty sequence with seedFunction result of null", () => { - const result = generateSequence(() => null as number, a => a) + const result = generateSequence(() => null as unknown as number, a => a) .count(); + expect(result).toBe(0); }); it("should generate empty sequence with seedFunction result of undefined", () => { - const result = generateSequence(() => undefined as number, a => a) + const result = generateSequence(() => undefined as unknown as number, a => a) .count(); + expect(result).toBe(0); }); }); \ No newline at end of file diff --git a/test/groupBy.test.ts b/test/groupBy.test.ts deleted file mode 100644 index 59dedb4..0000000 --- a/test/groupBy.test.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {sequenceOf} from "../src/Sequence"; - -describe("groupBy", () => { - it("should group by keySelector", () => { - const a = {k: 1, v: 11}; - const b = {k: 2, v: 22}; - const c = {k: 3, v: 33}; - const d = {k: 2, v: 222}; - - const map = sequenceOf(a, b, c, d) - .groupBy(it => it.k); - - expect(map.size).toBe(3); - expect(map.get(1)[0]).toBe(a); - expect(map.get(2)[0]).toBe(b); - expect(map.get(2)[1]).toBe(d); - expect(map.get(3)[0]).toBe(c); - }); -}); \ No newline at end of file diff --git a/test/map.test.ts b/test/map.test.ts deleted file mode 100644 index aca0314..0000000 --- a/test/map.test.ts +++ /dev/null @@ -1,14 +0,0 @@ -import {sequenceOf} from "../src/Sequence"; - -describe("map", () => { - it("should map numbers to strings", () => { - const array = sequenceOf(1, 2, 3) - .map(it => `num ${it}`) - .toArray(); - - expect(array.length).toBe(3); - expect(array[0]).toBe("num 1"); - expect(array[1]).toBe("num 2"); - expect(array[2]).toBe("num 3"); - }); -}); \ No newline at end of file diff --git a/test/operators/async/all.test.ts b/test/operators/async/all.test.ts new file mode 100644 index 0000000..a61d529 --- /dev/null +++ b/test/operators/async/all.test.ts @@ -0,0 +1,17 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("all", () => { + it("should return false", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .all(async it => it > 1); + + expect(result).toBe(false); + }); + + it("should return true", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .all(async it => it > 0); + + expect(result).toBe(true); + }); +}); \ No newline at end of file diff --git a/test/operators/async/any.test.ts b/test/operators/async/any.test.ts new file mode 100644 index 0000000..fc2b037 --- /dev/null +++ b/test/operators/async/any.test.ts @@ -0,0 +1,33 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("any", () => { + it("should return false", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .filter(async it => it > 3) + .any(); + + expect(result).toBe(false); + }); + + it("should return true", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .filter(async it => it > 1) + .any(); + + expect(result).toBe(true); + }); + + it("should evaluate predicate and return false", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .any(async it => it > 3); + + expect(result).toBe(false); + }); + + it("should evaluate predicate and return true", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .any(async it => it > 2); + + expect(result).toBe(true); + }); +}); \ No newline at end of file diff --git a/test/operators/async/asIterable.test.ts b/test/operators/async/asIterable.test.ts new file mode 100644 index 0000000..9aa41a6 --- /dev/null +++ b/test/operators/async/asIterable.test.ts @@ -0,0 +1,19 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("asIterable", () => { + it("should return an iterable object conforming to the iterator-protocol", async () => { + const iterable = asyncSequenceOf(1, 2, 3, 4, 5) + .filter(async it => it % 2 === 1) + .asIterable(); + + const iterator = iterable[Symbol.asyncIterator](); + const results = [1, 3, 5]; + + for (let i = 0; i < results.length; i++) { + const result = await iterator.next(); + expect(result.value).toBe(results[i]); + } + + expect((await iterator.next()).done).toBe(true); + }); +}); \ No newline at end of file diff --git a/test/operators/async/associate.test.ts b/test/operators/async/associate.test.ts new file mode 100644 index 0000000..f838c57 --- /dev/null +++ b/test/operators/async/associate.test.ts @@ -0,0 +1,29 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("associate", () => { + it("should associate map", async () => { + const map = await asyncSequenceOf(1, 2, 3) + .associate(async it => [`key_${it}`, it]); + expect(map.size).toBe(3); + + expect(map).toEqual( + new Map([ + ["key_1", 1], + ["key_2", 2], + ["key_3", 3] + ]) + ); + }); + + it("latest entries should win in case of duplicates", async () => { + const map = await asyncSequenceOf({k: 1, v: 1}, {k: 1, v: 11}, {k: 1, v: 111}, {k: 2, v: 222}) + .associate(async it => [it.k, it.v]); + + expect(map).toEqual( + new Map([ + [1, 111], + [2, 222] + ]) + ); + }); +}); \ No newline at end of file diff --git a/test/operators/async/associateBy.test.ts b/test/operators/async/associateBy.test.ts new file mode 100644 index 0000000..5b9f887 --- /dev/null +++ b/test/operators/async/associateBy.test.ts @@ -0,0 +1,98 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("associateBy", () => { + it("should associate map by keySelector", async () => { + const a = {k: 1, v: 11}; + const b = {k: 2, v: 22}; + const c = {k: 3, v: 33}; + + const map = await asyncSequenceOf(a, b, c) + .associateBy(async it => it.k); + + expect(map).toEqual( + new Map([ + [1, a], + [2, b], + [3, c] + ]) + ); + }); + + it("should associate map by key", async () => { + const a = {k: 1, v: 11}; + const b = {k: 2, v: 22}; + const c = {k: 3, v: 33}; + + const map = await asyncSequenceOf(a, b, c) + .associateBy("k"); + + expect(map).toEqual( + new Map([ + [1, a], + [2, b], + [3, c] + ]) + ); + }); + + it("should associate map by keySelector and valueTransformer", async () => { + const a = {k: 1, v: 11}; + const b = {k: 2, v: 22}; + const c = {k: 3, v: 33}; + + const map = await asyncSequenceOf(a, b, c) + .associateBy( + async it => it.k, + async it => it.v + ); + + expect(map).toEqual( + new Map([ + [1, 11], + [2, 22], + [3, 33] + ]) + ); + }); + + it("should associate map by key and valueTransformer", async () => { + const a = {k: 1, v: 11}; + const b = {k: 2, v: 22}; + const c = {k: 3, v: 33}; + + const map = await asyncSequenceOf(a, b, c) + .associateBy( + "k", + async it => it.v + ); + + expect(map).toEqual( + new Map([ + [1, 11], + [2, 22], + [3, 33] + ]) + ); + }); + + it("latest entries should win in case of duplicates", async () => { + const a = {k: 1, v: 11}; + const b = {k: 2, v: 22}; + const c = {k: 3, v: 33}; + const d = {k: 2, v: 222}; + + const map = await asyncSequenceOf(a, b, c, d) + .associateBy( + async it => it.k, + async it => it.v + ); + + expect(map).toEqual( + new Map([ + [1, 11], + [2, 222], + [3, 33] + ]) + ); + }); +}); \ No newline at end of file diff --git a/test/operators/async/average.test.ts b/test/operators/async/average.test.ts new file mode 100644 index 0000000..9112bd4 --- /dev/null +++ b/test/operators/async/average.test.ts @@ -0,0 +1,17 @@ +import {emptyAsyncSequence, asyncSequenceOf} from "../../../src/sequency"; + +describe("average", () => { + it("should calculate average", async () => { + const avg = await asyncSequenceOf(1, 2, 3, 4) + .average(); + + expect(avg).toBe(2.5); + }); + + it("should return NaN on empty sequence", async () => { + const sequence = emptyAsyncSequence(); + const avg = await sequence.average(); + + expect(avg).toBeNaN(); + }); +}); \ No newline at end of file diff --git a/test/operators/async/chunk.test.ts b/test/operators/async/chunk.test.ts new file mode 100644 index 0000000..66bfb6b --- /dev/null +++ b/test/operators/async/chunk.test.ts @@ -0,0 +1,43 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("chunk", () => { + it("should return list of chunks", async () => { + const chunks = await asyncSequenceOf(1, 2, 3, 4, 5) + .chunk(2); + + expect(chunks).toEqual([ + [1, 2], + [3, 4], + [5] + ]); + }); + + it("should return single chunk", async () => { + const chunks = await asyncSequenceOf(1, 2, 3) + .chunk(5); + + expect(chunks).toEqual([ + [1, 2, 3] + ]); + }); + + it("should return one-size chunks", async () => { + const chunks = await asyncSequenceOf(1, 2, 3) + .chunk(1); + + expect(chunks).toEqual([ + [1], + [2], + [3] + ]); + }); + + it("should throw", async () => { + await expect( + () => asyncSequenceOf(1, 2, 3).chunk(0) + ).rejects.toThrow("chunkSize must be > 0 but is 0"); + await expect( + () => asyncSequenceOf(1, 2, 3).chunk(-1) + ).rejects.toThrow("chunkSize must be > 0 but is -1"); + }); +}); \ No newline at end of file diff --git a/test/operators/async/contains.test.ts b/test/operators/async/contains.test.ts new file mode 100644 index 0000000..3213650 --- /dev/null +++ b/test/operators/async/contains.test.ts @@ -0,0 +1,17 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("contains", () => { + it("should contain element", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .contains(3); + + expect(result).toBe(true); + }); + + it("should not contain element", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .contains(4); + + expect(result).toBe(false); + }); +}); \ No newline at end of file diff --git a/test/operators/async/count.test.ts b/test/operators/async/count.test.ts new file mode 100644 index 0000000..d401763 --- /dev/null +++ b/test/operators/async/count.test.ts @@ -0,0 +1,16 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("count", () => { + it("should count results", async () => { + const num = await asyncSequenceOf(1, 2, 3).count(); + + expect(num).toBe(3); + }); + + it("should evaluate predicate and count results", async () => { + const num = await asyncSequenceOf(1, 2, 3) + .count(async it => it > 1); + + expect(num).toBe(2); + }); +}); \ No newline at end of file diff --git a/test/operators/async/distinct.test.ts b/test/operators/async/distinct.test.ts new file mode 100644 index 0000000..b3d09df --- /dev/null +++ b/test/operators/async/distinct.test.ts @@ -0,0 +1,11 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("distinct", () => { + it("should dismiss duplicate items", async () => { + const result = await asyncSequenceOf(1, 1, 2, 3) + .distinct() + .toArray(); + + expect(result).toEqual([1, 2, 3]); + }); +}); diff --git a/test/operators/async/distinctBy.test.ts b/test/operators/async/distinctBy.test.ts new file mode 100644 index 0000000..5854d5f --- /dev/null +++ b/test/operators/async/distinctBy.test.ts @@ -0,0 +1,15 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("distinctBy", () => { + it("should dismiss items with duplicate selections", async () => { + const result = await asyncSequenceOf({a: 1}, {a: 2}, {a: 1}, {a: 3}) + .distinctBy(async it => it.a) + .toArray(); + + expect(result).toEqual([ + {a: 1}, + {a: 2}, + {a: 3} + ]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/drop.test.ts b/test/operators/async/drop.test.ts new file mode 100644 index 0000000..2782378 --- /dev/null +++ b/test/operators/async/drop.test.ts @@ -0,0 +1,43 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("drop", () => { + it("should drop 2 items", async () => { + const result = await asyncSequenceOf(1, 2, 3, 4) + .drop(2) + .toArray(); + + expect(result).toEqual([3, 4]); + }); + + it("should drop all items", async () => { + const result = await asyncSequenceOf(1, 2, 3, 4) + .drop(4) + .toArray(); + + expect(result.length).toBe(0); + }); + + it("should drop all items even if overflow", async () => { + const result = await asyncSequenceOf(1, 2, 3, 4) + .drop(10) + .toArray(); + + expect(result.length).toBe(0); + }); + + it("should drop nothing for n = 0", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .drop(0) + .toArray(); + + expect(result).toEqual([1, 2, 3]); + }); + + it("should drop nothing for n < 0", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .drop(-10) + .toArray(); + + expect(result).toEqual([1, 2, 3]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/dropWhile.test.ts b/test/operators/async/dropWhile.test.ts new file mode 100644 index 0000000..33afaf6 --- /dev/null +++ b/test/operators/async/dropWhile.test.ts @@ -0,0 +1,27 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("dropWhile", () => { + it("should drop elements until predicate evaluates to false", async () => { + const result = await asyncSequenceOf(1, 2, 3, 2, 1) + .dropWhile(async it => it < 3) + .toArray(); + + expect(result).toEqual([3, 2, 1]); + }); + + it("should drop no elements", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .dropWhile(async it => it > 3) + .toArray(); + + expect(result).toEqual([1, 2, 3]); + }); + + it("should drop all elements", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .dropWhile(async it => it > 0) + .toArray(); + + expect(result.length).toBe(0); + }); +}); \ No newline at end of file diff --git a/test/operators/async/elementAt.test.ts b/test/operators/async/elementAt.test.ts new file mode 100644 index 0000000..eb156e7 --- /dev/null +++ b/test/operators/async/elementAt.test.ts @@ -0,0 +1,30 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("elementAt", () => { + it("should return element at first index", async () => { + const item = await asyncSequenceOf(1, 2, 3) + .elementAt(0); + + expect(item).toBe(1); + }); + + it("should return element at middle index", async () => { + const item = await asyncSequenceOf(1, 2, 3) + .elementAt(1); + + expect(item).toBe(2); + }); + + it("should return element at last index", async () => { + const item = await asyncSequenceOf(1, 2, 3) + .elementAt(2); + + expect(item).toBe(3); + }); + + it("should throw error when index out of bounds", () => { + expect( + () => asyncSequenceOf(1, 2, 3).elementAt(3) + ).rejects.toThrow("Index out of bounds: 3"); + }); +}); \ No newline at end of file diff --git a/test/operators/async/elementAtOrElse.test.ts b/test/operators/async/elementAtOrElse.test.ts new file mode 100644 index 0000000..c529fb3 --- /dev/null +++ b/test/operators/async/elementAtOrElse.test.ts @@ -0,0 +1,31 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("elementAtOrElse", () => { + it("should return element at first index", async () => { + const item = await asyncSequenceOf(1, 2, 3) + .elementAtOrElse(0, async () => -1); + + expect(item).toBe(1); + }); + + it("should return element at middle index", async () => { + const item = await asyncSequenceOf(1, 2, 3) + .elementAtOrElse(1, async () => -1); + + expect(item).toBe(2); + }); + + it("should return element at last index", async () => { + const item = await asyncSequenceOf(1, 2, 3) + .elementAtOrElse(2, async () => -1); + + expect(item).toBe(3); + }); + + it("should return default value when index out of bounds", async () => { + const item = await asyncSequenceOf(1, 2, 3) + .elementAtOrElse(3, async () => 1234); + + expect(item).toBe(1234); + }); +}); \ No newline at end of file diff --git a/test/operators/async/elementAtOrNull.test.ts b/test/operators/async/elementAtOrNull.test.ts new file mode 100644 index 0000000..fafbc31 --- /dev/null +++ b/test/operators/async/elementAtOrNull.test.ts @@ -0,0 +1,31 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("elementAtOrNull", () => { + it("should return element at first index", async () => { + const item = await asyncSequenceOf(1, 2, 3) + .elementAtOrNull(0); + + expect(item).toBe(1); + }); + + it("should return element at middle index", async () => { + const item = await asyncSequenceOf(1, 2, 3) + .elementAtOrNull(1); + + expect(item).toBe(2); + }); + + it("should return element at last index", async () => { + const item = await asyncSequenceOf(1, 2, 3) + .elementAtOrNull(2); + + expect(item).toBe(3); + }); + + it("should return null when index out of bounds", async () => { + const item = await asyncSequenceOf(1, 2, 3) + .elementAtOrNull(3); + + expect(item).toBeNull(); + }); +}); \ No newline at end of file diff --git a/test/operators/async/filter.test.ts b/test/operators/async/filter.test.ts new file mode 100644 index 0000000..6be1613 --- /dev/null +++ b/test/operators/async/filter.test.ts @@ -0,0 +1,11 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("filter", () => { + it("should filter elements", async () => { + const array = await asyncSequenceOf(1, 2, 3) + .filter(async it => it > 1) + .toArray(); + + expect(array).toEqual([2, 3]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/filterHolistically.test.ts b/test/operators/async/filterHolistically.test.ts new file mode 100644 index 0000000..58fc560 --- /dev/null +++ b/test/operators/async/filterHolistically.test.ts @@ -0,0 +1,11 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("filterHolistically", () => { + it("should filter elements as a whole", async () => { + const array = await asyncSequenceOf(1, 2, 2, 3, 3, 3) + .filterHolistically(async (value, _index, array) => array.filter(v => v === value).length < 3) + .toArray(); + + expect(array).toEqual([1, 2, 2]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/filterIndexed.test.ts b/test/operators/async/filterIndexed.test.ts new file mode 100644 index 0000000..6b77441 --- /dev/null +++ b/test/operators/async/filterIndexed.test.ts @@ -0,0 +1,11 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("filterIndexed", () => { + it("should filter elements by index", async () => { + const array = await asyncSequenceOf(1, 2, 3) + .filterIndexed(async (index, _value) => index < 2) + .toArray(); + + expect(array).toEqual([1, 2]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/filterNot.test.ts b/test/operators/async/filterNot.test.ts new file mode 100644 index 0000000..e82cb6c --- /dev/null +++ b/test/operators/async/filterNot.test.ts @@ -0,0 +1,11 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("filterNot", () => { + it("should filter elements", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .filterNot(async it => it > 2) + .toArray(); + + expect(result).toEqual([1, 2]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/filterNotNull.test.ts b/test/operators/async/filterNotNull.test.ts new file mode 100644 index 0000000..906faed --- /dev/null +++ b/test/operators/async/filterNotNull.test.ts @@ -0,0 +1,11 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("filterNotNull", () => { + it("should skip null elements", async () => { + const array: number[] = await asyncSequenceOf(1, null, 2, null, 3) + .filterNotNull() + .toArray(); + + expect(array).toEqual([1, 2, 3]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/find.test.ts b/test/operators/async/find.test.ts new file mode 100644 index 0000000..0e2ffa9 --- /dev/null +++ b/test/operators/async/find.test.ts @@ -0,0 +1,26 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("find", () => { + it("should return first element of sequence", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .filter(async it => it > 2) + .find(); + + expect(result).toBe(3); + }); + + it("should return null on empty sequence", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .filter(async it => it > 3) + .find(); + + expect(result).toBeNull(); + }); + + it("should return first element matching predicate", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .find(async it => it > 2); + + expect(result).toBe(3); + }); +}); \ No newline at end of file diff --git a/test/operators/async/findLast.test.ts b/test/operators/async/findLast.test.ts new file mode 100644 index 0000000..c59bbe0 --- /dev/null +++ b/test/operators/async/findLast.test.ts @@ -0,0 +1,25 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("findLast", () => { + it("should return last element of sequence", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .findLast(); + + expect(result).toBe(3); + }); + + it("should return null on empty sequence", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .filter(async it => it > 3) + .findLast(); + + expect(result).toBeNull(); + }); + + it("should return last element matching predicate", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .findLast(async it => it > 1); + + expect(result).toBe(3); + }); +}); \ No newline at end of file diff --git a/test/operators/async/first.test.ts b/test/operators/async/first.test.ts new file mode 100644 index 0000000..d8dd832 --- /dev/null +++ b/test/operators/async/first.test.ts @@ -0,0 +1,33 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("first", () => { + it("should return first element of sequence", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .filter(async it => it > 2) + .first(); + + expect(result).toBe(3); + }); + + it("should throw error on empty sequence", async () => { + expect( + () => asyncSequenceOf(1, 2, 3) + .filter(async it => it > 3) + .first() + ).rejects.toThrow("No such element"); + }); + + it("should return first element matching predicate", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .first(async it => it > 2); + + expect(result).toBe(3); + }); + + it("should return null if the first element is null", async () => { + const result = await asyncSequenceOf(null) + .first(); + + expect(result).toBeNull(); + }); +}); \ No newline at end of file diff --git a/test/operators/async/firstOrNull.test.ts b/test/operators/async/firstOrNull.test.ts new file mode 100644 index 0000000..bf310b1 --- /dev/null +++ b/test/operators/async/firstOrNull.test.ts @@ -0,0 +1,26 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("firstOrNull", () => { + it("should return first element of sequence", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .filter(async it => it > 2) + .firstOrNull(); + + expect(result).toBe(3); + }); + + it("should return null on empty sequence", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .filter(async it => it > 3) + .firstOrNull(); + + expect(result).toBeNull(); + }); + + it("should return first element matching predicate", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .firstOrNull(async it => it > 2); + + expect(result).toBe(3); + }); +}); \ No newline at end of file diff --git a/test/operators/async/flatMap.test.ts b/test/operators/async/flatMap.test.ts new file mode 100644 index 0000000..c89b8c4 --- /dev/null +++ b/test/operators/async/flatMap.test.ts @@ -0,0 +1,11 @@ +import {asAsyncSequence, asyncSequenceOf} from "../../../src/sequency"; + +describe("flatMap", () => { + it("should flatten element arrays", async () => { + const array = await asyncSequenceOf([1, 2], [3, 4], [5, 6]) + .flatMap(async it => asAsyncSequence(it)) + .toArray(); + + expect(array).toEqual([1, 2, 3, 4, 5, 6]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/flatten.test.ts b/test/operators/async/flatten.test.ts new file mode 100644 index 0000000..f3dc8ca --- /dev/null +++ b/test/operators/async/flatten.test.ts @@ -0,0 +1,19 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("flatten", () => { + it("should flatten sequence of sequences", async () => { + const array = await asyncSequenceOf(asyncSequenceOf(1, 2), asyncSequenceOf(3, 4), asyncSequenceOf(5, 6)) + .flatten() + .toArray(); + + expect(array).toEqual([1, 2, 3, 4, 5, 6]); + }); + + it("should flatten sequence of arrays", async () => { + const array = await asyncSequenceOf([1, 2], [3, 4], [5, 6]) + .flatten() + .toArray(); + + expect(array).toEqual([1, 2, 3, 4, 5, 6]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/fold.test.ts b/test/operators/async/fold.test.ts new file mode 100644 index 0000000..ecda2db --- /dev/null +++ b/test/operators/async/fold.test.ts @@ -0,0 +1,17 @@ +import {emptyAsyncSequence, asyncSequenceOf} from "../../../src/sequency"; + +describe("fold", () => { + it("should 23 + sum of all numbers", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .fold(23, async (acc: number, value: number) => acc + value); + + expect(result).toBe(29); + }); + + it("should return initial value on empty sequence", async () => { + const result = await emptyAsyncSequence() + .fold(23, async (acc: number, value: number) => acc + value); + + expect(result).toBe(23); + }); +}); \ No newline at end of file diff --git a/test/operators/async/foldIndexed.test.ts b/test/operators/async/foldIndexed.test.ts new file mode 100644 index 0000000..dff9aa8 --- /dev/null +++ b/test/operators/async/foldIndexed.test.ts @@ -0,0 +1,17 @@ +import {emptyAsyncSequence, asyncSequenceOf} from "../../../src/sequency"; + +describe("foldIndexed", () => { + it("should 23 + sum of all numbers and indices", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .foldIndexed(23, async (index: number, acc: number, element: number) => acc + element + index); + + expect(result).toBe(32); + }); + + it("should return initial value on empty sequence", async () => { + const result = await emptyAsyncSequence() + .foldIndexed(23, async (index: number, acc: number, element: number) => acc + element + index); + + expect(result).toBe(23); + }); +}); \ No newline at end of file diff --git a/test/operators/async/forEach.test.ts b/test/operators/async/forEach.test.ts new file mode 100644 index 0000000..dec68f6 --- /dev/null +++ b/test/operators/async/forEach.test.ts @@ -0,0 +1,11 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("forEach", () => { + it("should call action for each element", async () => { + const array: number[] = []; + await asyncSequenceOf(1, 2, 3) + .forEach(async it => array.push(it)); + + expect(array).toEqual([1, 2, 3]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/forEachIndexed.test.ts b/test/operators/async/forEachIndexed.test.ts new file mode 100644 index 0000000..626c18b --- /dev/null +++ b/test/operators/async/forEachIndexed.test.ts @@ -0,0 +1,11 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("forEach", () => { + it("should call action for each element", async () => { + const array: string[] = []; + await asyncSequenceOf(1, 2, 3) + .forEachIndexed(async (index, value) => array.push(`${index}: ${value}`)); + + expect(array).toEqual(["0: 1", "1: 2", "2: 3"]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/groupBy.test.ts b/test/operators/async/groupBy.test.ts new file mode 100644 index 0000000..23b10d8 --- /dev/null +++ b/test/operators/async/groupBy.test.ts @@ -0,0 +1,21 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("groupBy", () => { + it("should group by keySelector", async () => { + const a = {k: 1, v: 11} as const; + const b = {k: 2, v: 22} as const; + const c = {k: 3, v: 33} as const; + const d = {k: 2, v: 222} as const; + + const map = await asyncSequenceOf<{k: (typeof a | typeof b | typeof c | typeof d)["k"], v: number}>(a, b, c, d) + .groupBy(async it => it.k); + + expect(map).toEqual( + new Map([ + [1, [a]], + [2, [b, d]], + [3, [c]] + ]) + ); + }); +}); \ No newline at end of file diff --git a/test/operators/async/indexOf.test.ts b/test/operators/async/indexOf.test.ts new file mode 100644 index 0000000..0375c91 --- /dev/null +++ b/test/operators/async/indexOf.test.ts @@ -0,0 +1,17 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("indexOf", () => { + it("should return index of element", async () => { + const index = await asyncSequenceOf(1, 2, 3) + .indexOf(3); + + expect(index).toBe(2); + }); + + it("should return -1 if element not found", async () => { + const index = await asyncSequenceOf(1, 2, 3) + .indexOf(4); + + expect(index).toBe(-1); + }); +}); \ No newline at end of file diff --git a/test/operators/async/indexOfFirst.test.ts b/test/operators/async/indexOfFirst.test.ts new file mode 100644 index 0000000..9aba843 --- /dev/null +++ b/test/operators/async/indexOfFirst.test.ts @@ -0,0 +1,10 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("indexOfFirst", () => { + it("should return index of first element matching given predicate", async () => { + const index = await asyncSequenceOf(1, 2, 2, 3) + .indexOfFirst(async it => it > 1); + + expect(index).toBe(1); + }); +}); \ No newline at end of file diff --git a/test/operators/async/indexOfLast.test.ts b/test/operators/async/indexOfLast.test.ts new file mode 100644 index 0000000..949d899 --- /dev/null +++ b/test/operators/async/indexOfLast.test.ts @@ -0,0 +1,10 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("indexOfLast", () => { + it("should return index of last element matching given predicate", async () => { + const index = await asyncSequenceOf(1, 2, 2, 1) + .indexOfLast(async it => it > 1); + + expect(index).toBe(2); + }); +}); \ No newline at end of file diff --git a/test/operators/async/joinTo.test.ts b/test/operators/async/joinTo.test.ts new file mode 100644 index 0000000..1a81c74 --- /dev/null +++ b/test/operators/async/joinTo.test.ts @@ -0,0 +1,10 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("joinTo", () => { + it("should join to given string", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .joinTo({value: "List: ", prefix: "[ ", postfix: " ]"}); + + expect(result).toBe("List: [ 1, 2, 3 ]"); + }); +}); \ No newline at end of file diff --git a/test/operators/async/joinToString.test.ts b/test/operators/async/joinToString.test.ts new file mode 100644 index 0000000..9293ee1 --- /dev/null +++ b/test/operators/async/joinToString.test.ts @@ -0,0 +1,38 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("joinToString", () => { + it("should join to string using default config", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .joinToString(); + + expect(result).toBe("1, 2, 3"); + }); + + it("should join to string using different separator", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .joinToString({separator: " | "}); + + expect(result).toBe("1 | 2 | 3"); + }); + + it("should join to string using different prefix and postfix", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .joinToString({prefix: "[ ", postfix: " ]"}); + + expect(result).toBe("[ 1, 2, 3 ]"); + }); + + it("should join to string using transform function", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .joinToString({transform: async num => `a${num}`}); + + expect(result).toBe("a1, a2, a3"); + }); + + it("should join to string limiting number of items joined", async () => { + const result = await asyncSequenceOf(1, 2, 3, 4, 5) + .joinToString({limit: 3}); + + expect(result).toBe("1, 2, 3, ..."); + }); +}); \ No newline at end of file diff --git a/test/operators/async/last.test.ts b/test/operators/async/last.test.ts new file mode 100644 index 0000000..e3b1e1b --- /dev/null +++ b/test/operators/async/last.test.ts @@ -0,0 +1,33 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("last", () => { + it("should return last element of sequence", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .filter(async it => it > 1) + .last(); + + expect(result).toBe(3); + }); + + it("should throw error on empty sequence", async () => { + expect( + () => asyncSequenceOf(1, 2, 3) + .filter(async it => it > 3) + .last() + ).rejects.toThrow("No such element"); + }); + + it("should return last element matching predicate", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .last(async it => it > 1); + + expect(result).toBe(3); + }); + + it("should return null if the last element is null", async () => { + const result = await asyncSequenceOf(1, 2, null) + .last(); + + expect(result).toBeNull(); + }); +}); \ No newline at end of file diff --git a/test/operators/async/lastOrNull.test.ts b/test/operators/async/lastOrNull.test.ts new file mode 100644 index 0000000..b0f06ed --- /dev/null +++ b/test/operators/async/lastOrNull.test.ts @@ -0,0 +1,25 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("lastOrNull", () => { + it("should return last element of sequence", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .lastOrNull(); + + expect(result).toBe(3); + }); + + it("should return null on empty sequence", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .filter(async it => it > 3) + .lastOrNull(); + + expect(result).toBeNull(); + }); + + it("should return last element matching predicate", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .lastOrNull(async it => it > 1); + + expect(result).toBe(3); + }); +}); \ No newline at end of file diff --git a/test/operators/async/map.test.ts b/test/operators/async/map.test.ts new file mode 100644 index 0000000..bab4921 --- /dev/null +++ b/test/operators/async/map.test.ts @@ -0,0 +1,11 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("map", () => { + it("should map numbers to strings", async () => { + const array = await asyncSequenceOf(1, 2, 3) + .map(async it => `num ${it}`) + .toArray(); + + expect(array).toEqual(["num 1", "num 2", "num 3"]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/mapIndexed.test.ts b/test/operators/async/mapIndexed.test.ts new file mode 100644 index 0000000..98f0e93 --- /dev/null +++ b/test/operators/async/mapIndexed.test.ts @@ -0,0 +1,11 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("mapIndexed", () => { + it("should map elements by index and value", async () => { + const array = await asyncSequenceOf(1, 2, 3) + .mapIndexed(async (index, value) => `${index}: ${value}`) + .toArray(); + + expect(array).toEqual(["0: 1", "1: 2", "2: 3"]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/mapNotNull.test.ts b/test/operators/async/mapNotNull.test.ts new file mode 100644 index 0000000..595d8f9 --- /dev/null +++ b/test/operators/async/mapNotNull.test.ts @@ -0,0 +1,16 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("mapNotNull", () => { + it("should map to non-null items", async () => { + const a1 = {a: 1}; + const a2 = {a: null}; + const a3 = {a: null}; + const a4 = {a: 4}; + + const array = await asyncSequenceOf<{a: number | null}>(a1, a2, a3, a4) + .mapNotNull(async it => it.a) + .toArray(); + + expect(array).toEqual([1, 4]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/max.test.ts b/test/operators/async/max.test.ts new file mode 100644 index 0000000..6aad89d --- /dev/null +++ b/test/operators/async/max.test.ts @@ -0,0 +1,17 @@ +import {emptyAsyncSequence, asyncSequenceOf} from "../../../src/sequency"; + +describe("max", () => { + it("should return max element", async () => { + const num = await asyncSequenceOf(1, 3, 2, 6, 3) + .max(); + + expect(num).toBe(6); + }); + + it("should return null on empty sequence", async () => { + const num = await emptyAsyncSequence() + .max(); + + expect(num).toBeNull(); + }); +}); \ No newline at end of file diff --git a/test/operators/async/maxBy.test.ts b/test/operators/async/maxBy.test.ts new file mode 100644 index 0000000..b14d59b --- /dev/null +++ b/test/operators/async/maxBy.test.ts @@ -0,0 +1,17 @@ +import {emptyAsyncSequence, asyncSequenceOf} from "../../../src/sequency"; + +describe("maxBy", () => { + it("should return max element by selector", async () => { + const num = await asyncSequenceOf({a: 1}, {a: 3}, {a: 2}) + .maxBy(async it => it.a); + + expect(num).toEqual({a: 3}); + }); + + it("should return null on empty sequence", async () => { + const num = await emptyAsyncSequence() + .maxBy(async () => 0); + + expect(num).toBeNull(); + }); +}); \ No newline at end of file diff --git a/test/operators/async/maxWith.test.ts b/test/operators/async/maxWith.test.ts new file mode 100644 index 0000000..a70e94e --- /dev/null +++ b/test/operators/async/maxWith.test.ts @@ -0,0 +1,17 @@ +import {emptyAsyncSequence, asyncSequenceOf} from "../../../src/sequency"; + +describe("maxWith", () => { + it("should return max element by comparator", async () => { + const num = await asyncSequenceOf({a: 1}, {a: 3}, {a: 2}) + .maxWith(async (o1, o2) => o1.a > o2.a ? 1 : (o1.a < o2.a ? -1 : 0)); + + expect(num).toEqual({a: 3}); + }); + + it("should return null on empty sequence", async () => { + const num = await emptyAsyncSequence() + .maxWith(async () => 0); + + expect(num).toBeNull(); + }); +}); \ No newline at end of file diff --git a/test/operators/async/merge.test.ts b/test/operators/async/merge.test.ts new file mode 100644 index 0000000..33dc28d --- /dev/null +++ b/test/operators/async/merge.test.ts @@ -0,0 +1,35 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("merge", () => { + it("should merge both sequences", async () => { + const result = await asyncSequenceOf({id: 1, val: "a"}, {id: 2, val: "b"}, {id: 3, val: "c"}) + .merge(asyncSequenceOf({id: 2, val: "bb"}), async it => it.id) + .toArray(); + + expect(result).toEqual([{id: 1, val: "a"}, {id: 2, val: "bb"}, {id: 3, val: "c"}]); + }); + + it("should merge given array", async () => { + const result = await asyncSequenceOf({id: 1, val: "a"}, {id: 2, val: "b"}, {id: 3, val: "c"}) + .merge([{id: 2, val: "bb"}], async it => it.id) + .toArray(); + + expect(result).toEqual([{id: 1, val: "a"}, {id: 2, val: "bb"}, {id: 3, val: "c"}]); + }); + + it("should merge both sequences and append new values", async () => { + const result = await asyncSequenceOf({id: 1, val: "a"}, {id: 2, val: "b"}, {id: 3, val: "c"}) + .merge(asyncSequenceOf({id: 2, val: "bb"}, {id: 4, val: "d"}), async it => it.id) + .toArray(); + + expect(result).toEqual([{id: 1, val: "a"}, {id: 2, val: "bb"}, {id: 3, val: "c"}, {id: 4, val: "d"}]); + }); + + it("should merge both sequences and prepend new values", async () => { + const result = await asyncSequenceOf({id: 1, val: "a"}, {id: 2, val: "b"}, {id: 3, val: "c"}) + .merge(asyncSequenceOf({id: 2, val: "bb"}, {id: 4, val: "d"}), async it => it.id, true) + .toArray(); + + expect(result).toEqual([{id: 4, val: "d"}, {id: 1, val: "a"}, {id: 2, val: "bb"}, {id: 3, val: "c"}]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/min.test.ts b/test/operators/async/min.test.ts new file mode 100644 index 0000000..26b1a29 --- /dev/null +++ b/test/operators/async/min.test.ts @@ -0,0 +1,17 @@ +import {emptyAsyncSequence, asyncSequenceOf} from "../../../src/sequency"; + +describe("min", () => { + it("should return min element", async () => { + const num = await asyncSequenceOf(3, 1, 2, 6, 3) + .min(); + + expect(num).toBe(1); + }); + + it("should return null on empty sequence", async () => { + const num = await emptyAsyncSequence() + .min(); + + expect(num).toBeNull(); + }); +}); \ No newline at end of file diff --git a/test/operators/async/minBy.test.ts b/test/operators/async/minBy.test.ts new file mode 100644 index 0000000..a06cb4f --- /dev/null +++ b/test/operators/async/minBy.test.ts @@ -0,0 +1,17 @@ +import {emptyAsyncSequence, asyncSequenceOf} from "../../../src/sequency"; + +describe("minBy", () => { + it("should return min element by selector", async () => { + const num = await asyncSequenceOf({a: 1}, {a: 3}, {a: 2}) + .minBy(async it => it.a); + + expect(num).toEqual({a: 1}); + }); + + it("should return null on empty sequence", async () => { + const num = await emptyAsyncSequence() + .minBy(async () => 0); + + expect(num).toBeNull(); + }); +}); \ No newline at end of file diff --git a/test/operators/async/minWith.test.ts b/test/operators/async/minWith.test.ts new file mode 100644 index 0000000..61b43fc --- /dev/null +++ b/test/operators/async/minWith.test.ts @@ -0,0 +1,17 @@ +import {emptyAsyncSequence, asyncSequenceOf} from "../../../src/sequency"; + +describe("minWith", () => { + it("should return min element by comparator", async () => { + const num = await asyncSequenceOf({a: 1}, {a: 3}, {a: 2}) + .minWith(async (o1, o2) => o1.a > o2.a ? 1 : (o1.a < o2.a ? -1 : 0)); + + expect(num).toEqual({a: 1}); + }); + + it("should return null on empty sequence", async () => { + const num = await emptyAsyncSequence() + .maxWith(async () => 0); + + expect(num).toBeNull(); + }); +}); \ No newline at end of file diff --git a/test/operators/async/minus.test.ts b/test/operators/async/minus.test.ts new file mode 100644 index 0000000..2942d7d --- /dev/null +++ b/test/operators/async/minus.test.ts @@ -0,0 +1,35 @@ +import {emptyAsyncSequence, asyncSequenceOf} from "../../../src/sequency"; + +describe("minus", () => { + it("should remove element", async () => { + const array = await asyncSequenceOf(1, 2, 3) + .minus(1) + .toArray(); + + expect(array).toEqual([2, 3]); + }); + + it("should remove array", async () => { + const array = await asyncSequenceOf(1, 2, 3, 4, 5) + .minus([2, 4]) + .toArray(); + + expect(array).toEqual([1, 3, 5]); + }); + + it("should append sequence", async () => { + const array = await asyncSequenceOf(1, 2, 3) + .minus(asyncSequenceOf(1, 2)) + .toArray(); + + expect(array).toEqual([3]); + }); + + it("should append empty sequence", async () => { + const array = await asyncSequenceOf(1, 2, 3) + .minus(emptyAsyncSequence()) + .toArray(); + + expect(array).toEqual([1, 2, 3]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/none.test.ts b/test/operators/async/none.test.ts new file mode 100644 index 0000000..9a65093 --- /dev/null +++ b/test/operators/async/none.test.ts @@ -0,0 +1,33 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("none", () => { + it("should return false", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .filter(async it => it > 1) + .none(); + + expect(result).toBe(false); + }); + + it("should return true", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .filter(async it => it > 3) + .none(); + + expect(result).toBe(true); + }); + + it("should evaluate predicate and return false", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .none(async it => it > 1); + + expect(result).toBe(false); + }); + + it("should evaluate predicate and return true", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .none(async it => it > 3); + + expect(result).toBe(true); + }); +}); \ No newline at end of file diff --git a/test/operators/async/onEach.test.ts b/test/operators/async/onEach.test.ts new file mode 100644 index 0000000..6defe41 --- /dev/null +++ b/test/operators/async/onEach.test.ts @@ -0,0 +1,13 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("onEach", () => { + it("should call action for each element", async () => { + const array: number[] = []; + const result = await asyncSequenceOf(1, 2, 3) + .onEach(async it => array.push(it)) + .toArray(); + + expect(array).toEqual([1, 2, 3]); + expect(result).toEqual(array); + }); +}); \ No newline at end of file diff --git a/test/operators/async/onEachIndexed.test.ts b/test/operators/async/onEachIndexed.test.ts new file mode 100644 index 0000000..4d105c6 --- /dev/null +++ b/test/operators/async/onEachIndexed.test.ts @@ -0,0 +1,12 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("onEachIndexed", () => { + it("should call action for each element", async () => { + const array: string[] = []; + await asyncSequenceOf(1, 2, 3) + .onEachIndexed(async (index, value) => array.push(`${index}: ${value}`)) + .toArray(); + + expect(array).toEqual(["0: 1", "1: 2", "2: 3"]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/partition.test.ts b/test/operators/async/partition.test.ts new file mode 100644 index 0000000..adb71f6 --- /dev/null +++ b/test/operators/async/partition.test.ts @@ -0,0 +1,13 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("partition", () => { + it("should partition based on the given predicate", async () => { + const result = await asyncSequenceOf(1, 2, 3, 4) + .partition(async it => it % 2 === 1); + + expect(result).toHaveProperty("true"); + expect(result).toHaveProperty("false"); + expect(result.true).toEqual([1, 3]); + expect(result.false).toEqual([2, 4]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/plus.test.ts b/test/operators/async/plus.test.ts new file mode 100644 index 0000000..63915ae --- /dev/null +++ b/test/operators/async/plus.test.ts @@ -0,0 +1,35 @@ +import {emptyAsyncSequence, asyncSequenceOf} from "../../../src/sequency"; + +describe("plus", () => { + it("should append element", async () => { + const array = await asyncSequenceOf(1, 2, 3) + .plus(4) + .toArray(); + + expect(array).toEqual([1, 2, 3, 4]); + }); + + it("should append array", async () => { + const array = await asyncSequenceOf(1, 2, 3) + .plus([4, 5]) + .toArray(); + + expect(array).toEqual([1, 2, 3, 4, 5]); + }); + + it("should append sequence", async () => { + const array = await asyncSequenceOf(1, 2, 3) + .plus(asyncSequenceOf(4, 5)) + .toArray(); + + expect(array).toEqual([1, 2, 3, 4, 5]); + }); + + it("should append empty sequence", async () => { + const array = await asyncSequenceOf(1, 2, 3) + .plus(emptyAsyncSequence()) + .toArray(); + + expect(array).toEqual([1, 2, 3]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/reduce.test.ts b/test/operators/async/reduce.test.ts new file mode 100644 index 0000000..d0c14c3 --- /dev/null +++ b/test/operators/async/reduce.test.ts @@ -0,0 +1,17 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("reduce", () => { + it("should sum all numbers", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .reduce(async (acc: number, value: number) => acc + value); + + expect(result).toBe(6); + }); + + it("should concat all strings", async () => { + const result = await asyncSequenceOf("a", "b", "c") + .reduce(async (acc: string, value: string) => `${acc}, ${value}`); + + expect(result).toBe("a, b, c"); + }); +}); \ No newline at end of file diff --git a/test/operators/async/reduceIndexed.test.ts b/test/operators/async/reduceIndexed.test.ts new file mode 100644 index 0000000..dddbd04 --- /dev/null +++ b/test/operators/async/reduceIndexed.test.ts @@ -0,0 +1,10 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("reduceIndexed", () => { + it("should sum all numbers + indices", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .reduceIndexed(async (index: number, acc: number, value: number) => acc + value + index); + + expect(result).toBe(9); + }); +}); \ No newline at end of file diff --git a/test/operators/async/reverse.test.ts b/test/operators/async/reverse.test.ts new file mode 100644 index 0000000..b65161a --- /dev/null +++ b/test/operators/async/reverse.test.ts @@ -0,0 +1,11 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("reverse", () => { + it("should reverse order", async () => { + const array = await asyncSequenceOf(1, 2, 3) + .reverse() + .toArray(); + + expect(array).toEqual([3, 2, 1]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/single.test.ts b/test/operators/async/single.test.ts new file mode 100644 index 0000000..c004bc1 --- /dev/null +++ b/test/operators/async/single.test.ts @@ -0,0 +1,43 @@ +import {emptyAsyncSequence, asyncSequenceOf} from "../../../src/sequency"; + +describe("single", () => { + it("should return single element", async () => { + const result = await asyncSequenceOf(23) + .single(); + + expect(result).toBe(23); + }); + + it("should throw with more than one element", () => { + expect( + () => asyncSequenceOf(1, 2).single() + ).rejects.toThrow("Expect single element"); + }); + + it("should throw with zero elements", () => { + expect( + () => emptyAsyncSequence().single() + ).rejects.toThrow("No such element"); + }); + + it("should evaluate predicate and return single element", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .single(async it => it > 2); + + expect(result).toBe(3); + }); + + it("should evaluate predicate and throw with more than one element", () => { + expect( + () => asyncSequenceOf(1, 2) + .single(async it => it > 0) + ).rejects.toThrow("Expect single element"); + }); + + it("should evaluate predicate and throw with zero elements", () => { + expect( + () => asyncSequenceOf(1, 2, 3) + .single(async it => it > 3) + ).rejects.toThrow("No such element"); + }); +}); \ No newline at end of file diff --git a/test/operators/async/singleOrNull.test.ts b/test/operators/async/singleOrNull.test.ts new file mode 100644 index 0000000..4115d1a --- /dev/null +++ b/test/operators/async/singleOrNull.test.ts @@ -0,0 +1,45 @@ +import {emptyAsyncSequence, asyncSequenceOf} from "../../../src/sequency"; + +describe("singleOrNull", () => { + it("should return single element", async () => { + const result = await asyncSequenceOf(23) + .singleOrNull(); + + expect(result).toBe(23); + }); + + it("should return null with more than one element", async () => { + const result = await asyncSequenceOf(1, 2) + .singleOrNull(); + + expect(result).toBeNull(); + }); + + it("should return null with zero elements", async () => { + const result = await emptyAsyncSequence() + .singleOrNull(); + + expect(result).toBeNull(); + }); + + it("should evaluate predicate and return single element", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .singleOrNull(async it => it > 2); + + expect(result).toBe(3); + }); + + it("should evaluate predicate and return null with more than one element", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .singleOrNull(async it => it > 1); + + expect(result).toBeNull(); + }); + + it("should evaluate predicate and return null with zero elements", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .singleOrNull(async it => it > 3); + + expect(result).toBeNull(); + }); +}); \ No newline at end of file diff --git a/test/operators/async/sorted.test.ts b/test/operators/async/sorted.test.ts new file mode 100644 index 0000000..d06f73c --- /dev/null +++ b/test/operators/async/sorted.test.ts @@ -0,0 +1,164 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("sorted", () => { + it("should sort numbers ascending", async () => { + const array = await asyncSequenceOf(1, 4, 3, 5, 2) + .sorted() + .toArray(); + + expect(array).toEqual([1, 2, 3, 4, 5]); + }); + + it("should sort strings ascending", async () => { + const array = await asyncSequenceOf("1", "4", "3", "5", "2") + .sorted() + .toArray(); + + expect(array).toEqual(["1", "2", "3", "4", "5"]); + }); + + it("should sort numbers by natural order", async () => { + const array = await asyncSequenceOf(1, 4, 3, 5, 2) + .sorted(it => it.naturalOrder()) + .toArray(); + + expect(array).toEqual([1, 2, 3, 4, 5]); + }); + + it("should sort numbers by natural order reversed", async () => { + const array = await asyncSequenceOf(1, 4, 3, 5, 2) + .sorted(it => it.naturalOrder() + .reversed()) + .toArray(); + + expect(array).toEqual([5, 4, 3, 2, 1]); + }); + + it("should sort numbers by reverse order", async () => { + const array = await asyncSequenceOf(1, 4, 3, 5, 2) + .sorted(it => it.reverseOrder()) + .toArray(); + + expect(array).toEqual([5, 4, 3, 2, 1]); + }); + + it("should sort by given compareFn", async () => { + const fn = (a: number, b: number) => a < b ? 1 : a > b ? -1 : 0; + const array = await asyncSequenceOf(1, 4, 3, 5, 2) + .sorted(it => it.compare(fn)) + .toArray(); + + expect(array).toEqual([5, 4, 3, 2, 1]); + }); + + it("should sort by comparing the selected property", async () => { + const array = await asyncSequenceOf({x: 2}, {x: 1}, {x: 3}) + .sorted(it => it.compareBy(it => it.x)) + .toArray(); + + expect(array).toEqual([{x: 1}, {x: 2}, {x: 3}]); + }); + + it("should sort by comparing the given key", async () => { + const array = await asyncSequenceOf({x: 2}, {x: 1}, {x: 3}) + .sorted(it => it.compareBy("x")) + .toArray(); + + expect(array).toEqual([{x: 1}, {x: 2}, {x: 3}]); + }); + + it("should sort by comparing the selected property in reversed order", async () => { + const array = await asyncSequenceOf({x: 2}, {x: 1}, {x: 3}) + .sorted(it => it.compareBy(it => it.x) + .reversed()) + .toArray(); + + expect(array).toEqual([{x: 3}, {x: 2}, {x: 1}]); + }); + + it("should sort by comparing the selected property descending", async () => { + const array = await asyncSequenceOf({x: 2}, {x: 1}, {x: 3}) + .sorted(it => it.compareByDescending(it => it.x)) + .toArray(); + + expect(array).toEqual([{x: 3}, {x: 2}, {x: 1}]); + }); + + it("should sort by comparing the given key descending", async () => { + const array = await asyncSequenceOf({x: 2}, {x: 1}, {x: 3}) + .sorted(it => it.compareByDescending("x")) + .toArray(); + + expect(array).toEqual([{x: 3}, {x: 2}, {x: 1}]); + }); + + it("should sort by comparing the selected property then other property", async () => { + const array = await asyncSequenceOf({x: 2, y: 2}, {x: 1, y: 2}, {x: 1, y: 1}) + .sorted(it => it.compareBy(it => it.x) + .thenBy(it => it.y)) + .toArray(); + + expect(array).toEqual([{x: 1, y: 1}, {x: 1, y: 2}, {x: 2, y: 2}]); + }); + + it("should sort by comparing the given key then other key", async () => { + const array = await asyncSequenceOf({x: 2, y: 2}, {x: 1, y: 2}, {x: 1, y: 1}) + .sorted(it => it.compareBy("x") + .thenBy("y")) + .toArray(); + + expect(array).toEqual([{x: 1, y: 1}, {x: 1, y: 2}, {x: 2, y: 2}]); + }); + + it("should sort by comparing the selected property then other property with nulls last", async () => { + const array = await asyncSequenceOf({x: 2, y: 2}, undefined, null, {x: 1, y: 2}, {x: null, y: undefined}, {x: 1, y: 1}) + .sorted(it => it.compareBy(it => it?.x) + .thenBy(it => it?.y)) + .toArray(); + + expect(array).toEqual([{x: 1, y: 1}, {x: 1, y: 2}, {x: 2, y: 2}, {x: null, y: undefined}, null, undefined]); + }); + + it("should sort by comparing the given key then other key with nulls last", async () => { + const array = await asyncSequenceOf({x: 2, y: 2}, undefined, null, {x: 1, y: 2}, {x: null, y: undefined}, {x: 1, y: 1}) + .sorted(it => it.compareBy("x") + .thenBy("y")) + .toArray(); + + expect(array).toEqual([{x: 1, y: 1}, {x: 1, y: 2}, {x: 2, y: 2}, {x: null, y: undefined}, null, undefined]); + }); + + it("should order nulls first", async () => { + const array = await asyncSequenceOf({x: 2}, null, {x: 1}, {x: 3}, null) + .sorted(it => it.nullsFirst()) + .toArray(); + + expect(array).toEqual([null, null, {x: 2}, {x: 1}, {x: 3}]); + }); + + it("should order nulls last", async () => { + const array = await asyncSequenceOf({x: 2}, null, {x: 1}, {x: 3}, null) + .sorted(it => it.nullsLast()) + .toArray(); + + expect(array).toEqual([{x: 2}, {x: 1}, {x: 3}, null, null]); + }); + + it("should order nulls first then by descending selected property", async () => { + const array = await asyncSequenceOf({x: 2}, null, {x: 1}, {x: 3}, null) + .sorted(it => it.nullsFirst() + .thenByDescending(it => it?.x)) + .toArray(); + + expect(array).toEqual([null, null, {x: 3}, {x: 2}, {x: 1}]); + }); + + it("should order nulls first then by descending key", async () => { + const array = await asyncSequenceOf({x: 2}, null, {x: 1}, {x: 3}, null) + .sorted(it => it.nullsFirst() + .thenByDescending("x")) + .toArray(); + + expect(array).toEqual([null, null, {x: 3}, {x: 2}, {x: 1}]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/sortedBy.test.ts b/test/operators/async/sortedBy.test.ts new file mode 100644 index 0000000..e5c4e9c --- /dev/null +++ b/test/operators/async/sortedBy.test.ts @@ -0,0 +1,16 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("sortedBy", () => { + it("should sort by the given key ascending", async () => { + const a4 = {a: 4}; + const a1 = {a: 1}; + const a3 = {a: 3}; + const a23 = {a: 23}; + + const array = await asyncSequenceOf(a4, a1, a3, a23) + .sortedBy(it => it.a) + .toArray(); + + expect(array).toEqual([a1, a3, a4, a23]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/sortedByDescending.test.ts b/test/operators/async/sortedByDescending.test.ts new file mode 100644 index 0000000..948086d --- /dev/null +++ b/test/operators/async/sortedByDescending.test.ts @@ -0,0 +1,16 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("sortedBy", () => { + it("should sort by the given key descending", async () => { + const a4 = {a: 4}; + const a1 = {a: 1}; + const a3 = {a: 3}; + const a23 = {a: 23}; + + const array = await asyncSequenceOf(a4, a1, a3, a23) + .sortedByDescending(it => it.a) + .toArray(); + + expect(array).toEqual([a23, a4, a3, a1]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/sortedDescending.test.ts b/test/operators/async/sortedDescending.test.ts new file mode 100644 index 0000000..3c98ce8 --- /dev/null +++ b/test/operators/async/sortedDescending.test.ts @@ -0,0 +1,19 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("sorted", () => { + it("should sort numbers descending", async () => { + const array = await asyncSequenceOf(1, 4, 3, 5, 2) + .sortedDescending() + .toArray(); + + expect(array).toEqual([5, 4, 3, 2, 1]); + }); + + it("should sort strings descending", async () => { + const array = await asyncSequenceOf("1", "4", "3", "5", "2") + .sortedDescending() + .toArray(); + + expect(array).toEqual(["5", "4", "3", "2", "1"]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/sortedWith.test.ts b/test/operators/async/sortedWith.test.ts new file mode 100644 index 0000000..263907b --- /dev/null +++ b/test/operators/async/sortedWith.test.ts @@ -0,0 +1,19 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("sortedWith", () => { + it("should sort numbers by given comparator", async () => { + const array = await asyncSequenceOf(1, 4, 3, 5, 2) + .sortedWith((a, b) => { + if (a < b) { + return 1; + } + if (a > b) { + return -1; + } + return 0; + }) + .toArray(); + + expect(array).toEqual([5, 4, 3, 2, 1]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/sum.test.ts b/test/operators/async/sum.test.ts new file mode 100644 index 0000000..9144a63 --- /dev/null +++ b/test/operators/async/sum.test.ts @@ -0,0 +1,10 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("sum", () => { + it("should sum all numbers", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .sum(); + + expect(result).toBe(6); + }); +}); \ No newline at end of file diff --git a/test/operators/async/sumBy.test.ts b/test/operators/async/sumBy.test.ts new file mode 100644 index 0000000..d966835 --- /dev/null +++ b/test/operators/async/sumBy.test.ts @@ -0,0 +1,10 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("sumBy", () => { + it("should sum all selected numbers", async () => { + const result = await asyncSequenceOf({a: 2}, {a: 4}, {a: 6}) + .sumBy(async it => it.a); + + expect(result).toBe(12); + }); +}); \ No newline at end of file diff --git a/test/operators/async/take.test.ts b/test/operators/async/take.test.ts new file mode 100644 index 0000000..97febdb --- /dev/null +++ b/test/operators/async/take.test.ts @@ -0,0 +1,35 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("take", () => { + it("should take first 2 items", async () => { + const result = await asyncSequenceOf(1, 2, 3, 4) + .take(2) + .toArray(); + + expect(result).toEqual([1, 2]); + }); + + it("should take no items", async () => { + const result = await asyncSequenceOf(1, 2, 3, 4) + .take(0) + .toArray(); + + expect(result.length).toBe(0); + }); + + it("should take all items even if overflow", async () => { + const result = await asyncSequenceOf(1, 2, 3, 4) + .take(10) + .toArray(); + + expect(result).toEqual([1, 2, 3, 4]); + }); + + it("should take nothing for n < 0", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .take(-10) + .toArray(); + + expect(result.length).toBe(0); + }); +}); \ No newline at end of file diff --git a/test/operators/async/takeWhile.test.ts b/test/operators/async/takeWhile.test.ts new file mode 100644 index 0000000..3cce6ca --- /dev/null +++ b/test/operators/async/takeWhile.test.ts @@ -0,0 +1,27 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("takeWhile", () => { + it("should take elements until predicate evaluates to false", async () => { + const result = await asyncSequenceOf(1, 2, 3, 2, 1) + .takeWhile(async it => it < 3) + .toArray(); + + expect(result).toEqual([1, 2]); + }); + + it("should take no elements", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .takeWhile(async it => it > 3) + .toArray(); + + expect(result.length).toBe(0); + }); + + it("should take all elements", async () => { + const result = await asyncSequenceOf(1, 2, 3) + .takeWhile(async it => it > 0) + .toArray(); + + expect(result).toEqual([1, 2, 3]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/toArray.test.ts b/test/operators/async/toArray.test.ts new file mode 100644 index 0000000..691cf46 --- /dev/null +++ b/test/operators/async/toArray.test.ts @@ -0,0 +1,21 @@ +import {asAsyncSequence, asyncSequenceOf} from "../../../src/sequency"; + +describe("toArray", () => { + it("should return new array", async () => { + const input = [1, 2, 3]; + const array = await asAsyncSequence(input) + .toArray(); + + expect(array).not.toBe(input); + expect(array).toEqual(input); + }); + + it("should append items to passed array", async () => { + const array = [1]; + const result = await asyncSequenceOf(2, 3, 4) + .toArray(array); + + expect(result).toBe(array); + expect(result).toEqual([1, 2, 3, 4]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/toList.test.ts b/test/operators/async/toList.test.ts new file mode 100644 index 0000000..c7536f8 --- /dev/null +++ b/test/operators/async/toList.test.ts @@ -0,0 +1,21 @@ +import {asAsyncSequence, asyncSequenceOf} from "../../../src/sequency"; + +describe("toList", () => { + it("should return new array", async () => { + const input = [1, 2, 3]; + const array = await asAsyncSequence(input) + .toList(); + + expect(array).not.toBe(input); + expect(array).toEqual(input); + }); + + it("should append items to passed array", async () => { + const array = [1]; + const result = await asyncSequenceOf(2, 3, 4) + .toList(array); + + expect(result).toBe(array); + expect(result).toEqual([1, 2, 3, 4]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/toMap.test.ts b/test/operators/async/toMap.test.ts new file mode 100644 index 0000000..f1da2a0 --- /dev/null +++ b/test/operators/async/toMap.test.ts @@ -0,0 +1,43 @@ +import {asAsyncSequence} from "../../../src/sequency"; + +describe("toMap", () => { + it("should return items as new map", async () => { + const key1 = {k: 1}; + const key2 = {k: 2}; + const key3 = {k: 3}; + const array: [object, string][] = [[key1, "a"], [key2, "b"], [key3, "c"]]; + const map = await asAsyncSequence(array) + .toMap(); + + expect(map).toEqual( + new Map([ + [key1, "a"], + [key2, "b"], + [key3, "c"] + ]) + ); + }); + + it("should append items to passed map", async () => { + const key0 = {k: 0}; + const key1 = {k: 1}; + const key2 = {k: 2}; + const key3 = {k: 3}; + + const existingMap = new Map(); + existingMap.set(key0, "_"); + + const array: [object, string][] = [[key1, "a"], [key2, "b"], [key3, "c"]]; + const result = await asAsyncSequence(array) + .toMap(existingMap); + + expect(result).toEqual( + new Map([ + [key0, "_"], + [key1, "a"], + [key2, "b"], + [key3, "c"] + ]) + ); + }); +}); \ No newline at end of file diff --git a/test/operators/async/toSequence.test.ts b/test/operators/async/toSequence.test.ts new file mode 100644 index 0000000..c63e93a --- /dev/null +++ b/test/operators/async/toSequence.test.ts @@ -0,0 +1,19 @@ +import {asyncSequenceOf, asAsyncSequence, sequenceOf} from "../../../src/sequency"; + +describe("toSequence", () => { + it("should return a regular sequence", async () => { + const input = [1, 2, 3]; + const array = (await asAsyncSequence(input).toSequence()) + .toArray(); + + expect(array).not.toBe(input); + expect(array).toEqual(input); + }); + + it("should append items to passed regular sequence", async () => { + const result = (await asyncSequenceOf(2, 3, 4).toSequence(sequenceOf(1))) + .toArray(); + + expect(result).toEqual([1, 2, 3, 4]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/toSet.test.ts b/test/operators/async/toSet.test.ts new file mode 100644 index 0000000..b0d9a52 --- /dev/null +++ b/test/operators/async/toSet.test.ts @@ -0,0 +1,19 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("toSet", () => { + it("should return new set of distinct items", async () => { + const result = await asyncSequenceOf(1, 2, 2, 3, 3, 3) + .toSet(); + + expect(result).toEqual(new Set([1, 2, 3])); + }); + + it("should add distinct items to existing set", async () => { + const existingSet = new Set([4]); + const result = await asyncSequenceOf(1, 2, 2, 3, 3, 3) + .toSet(existingSet); + + expect(result).toBe(existingSet); + expect(result).toEqual(new Set([1, 2, 3, 4])); + }); +}); \ No newline at end of file diff --git a/test/operators/async/unzip.test.ts b/test/operators/async/unzip.test.ts new file mode 100644 index 0000000..49a3079 --- /dev/null +++ b/test/operators/async/unzip.test.ts @@ -0,0 +1,12 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("unzip", () => { + it("should unzip items", async () => { + const [first, second] = await asyncSequenceOf("a", "b", "c") + .zip(asyncSequenceOf(1, 2, 3)) + .unzip(); + + expect(first).toEqual(["a", "b", "c"]); + expect(second).toEqual([1, 2, 3]); + }); +}); \ No newline at end of file diff --git a/test/operators/async/zip.test.ts b/test/operators/async/zip.test.ts new file mode 100644 index 0000000..df5cb8e --- /dev/null +++ b/test/operators/async/zip.test.ts @@ -0,0 +1,27 @@ +import {asyncSequenceOf} from "../../../src/sequency"; + +describe("zip", () => { + it("should combine items from both sequences into pairs", async () => { + const array = await asyncSequenceOf("a", "b", "c") + .zip(asyncSequenceOf(1, 2, 3)) + .toArray(); + + expect(array).toEqual([ + ["a", 1], + ["b", 2], + ["c", 3] + ]); + }); + + it("should discard elements if length of sequences is different", async () => { + const array = await asyncSequenceOf(1, 2, 3) + .zip(asyncSequenceOf(1, 2, 3, 4, 5, 6, 7)) + .toArray(); + + expect(array).toEqual([ + [1, 1], + [2, 2], + [3, 3] + ]); + }); +}); \ No newline at end of file diff --git a/test/all.test.ts b/test/operators/sync/all.test.ts similarity index 86% rename from test/all.test.ts rename to test/operators/sync/all.test.ts index 0bd26ce..9e269e0 100644 --- a/test/all.test.ts +++ b/test/operators/sync/all.test.ts @@ -1,15 +1,17 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("all", () => { it("should return false", () => { const result = sequenceOf(1, 2, 3) .all(it => it > 1); + expect(result).toBe(false); }); it("should return true", () => { const result = sequenceOf(1, 2, 3) .all(it => it > 0); + expect(result).toBe(true); }); }); \ No newline at end of file diff --git a/test/any.test.ts b/test/operators/sync/any.test.ts similarity index 93% rename from test/any.test.ts rename to test/operators/sync/any.test.ts index bb04e45..acccffa 100644 --- a/test/any.test.ts +++ b/test/operators/sync/any.test.ts @@ -1,10 +1,11 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("any", () => { it("should return false", () => { const result = sequenceOf(1, 2, 3) .filter(it => it > 3) .any(); + expect(result).toBe(false); }); @@ -12,18 +13,21 @@ describe("any", () => { const result = sequenceOf(1, 2, 3) .filter(it => it > 1) .any(); + expect(result).toBe(true); }); it("should evaluate predicate and return false", () => { const result = sequenceOf(1, 2, 3) .any(it => it > 3); + expect(result).toBe(false); }); it("should evaluate predicate and return true", () => { const result = sequenceOf(1, 2, 3) .any(it => it > 2); + expect(result).toBe(true); }); }); \ No newline at end of file diff --git a/test/asIterable.test.ts b/test/operators/sync/asIterable.test.ts similarity index 59% rename from test/asIterable.test.ts rename to test/operators/sync/asIterable.test.ts index f894d96..07b4105 100644 --- a/test/asIterable.test.ts +++ b/test/operators/sync/asIterable.test.ts @@ -1,4 +1,4 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("asIterable", () => { it("should return an iterable object conforming to the iterator-protocol", () => { @@ -7,9 +7,13 @@ describe("asIterable", () => { .asIterable(); const iterator = iterable[Symbol.iterator](); - expect(iterator.next().value).toBe(1); - expect(iterator.next().value).toBe(3); - expect(iterator.next().value).toBe(5); + const results = [1, 3, 5]; + + for (let i = 0; i < results.length; i++) { + const result = iterator.next(); + expect(result.value).toBe(results[i]); + } + expect(iterator.next().done).toBe(true); }); }); \ No newline at end of file diff --git a/test/associate.test.ts b/test/operators/sync/associate.test.ts similarity index 54% rename from test/associate.test.ts rename to test/operators/sync/associate.test.ts index 4e082c7..94e395e 100644 --- a/test/associate.test.ts +++ b/test/operators/sync/associate.test.ts @@ -1,20 +1,29 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("associate", () => { it("should associate map", () => { const map = sequenceOf(1, 2, 3) .associate(it => ([`key_${it}`, it])); expect(map.size).toBe(3); - expect(map.get("key_1")).toBe(1); - expect(map.get("key_2")).toBe(2); - expect(map.get("key_3")).toBe(3); + + expect(map).toEqual( + new Map([ + ["key_1", 1], + ["key_2", 2], + ["key_3", 3] + ]) + ); }); it("latest entries should win in case of duplicates", () => { const map = sequenceOf({k: 1, v: 1}, {k: 1, v: 11}, {k: 1, v: 111}, {k: 2, v: 222}) .associate(it => ([it.k, it.v])); - expect(map.size).toBe(2); - expect(map.get(1)).toBe(111); - expect(map.get(2)).toBe(222); + + expect(map).toEqual( + new Map([ + [1, 111], + [2, 222] + ]) + ); }); }); \ No newline at end of file diff --git a/test/associateBy.test.ts b/test/operators/sync/associateBy.test.ts similarity index 64% rename from test/associateBy.test.ts rename to test/operators/sync/associateBy.test.ts index ec2c6bf..1ed0622 100644 --- a/test/associateBy.test.ts +++ b/test/operators/sync/associateBy.test.ts @@ -1,4 +1,4 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("associateBy", () => { it("should associate map by keySelector", () => { @@ -9,10 +9,13 @@ describe("associateBy", () => { const map = sequenceOf(a, b, c) .associateBy(it => it.k); - expect(map.size).toBe(3); - expect(map.get(1)).toBe(a); - expect(map.get(2)).toBe(b); - expect(map.get(3)).toBe(c); + expect(map).toEqual( + new Map([ + [1, a], + [2, b], + [3, c] + ]) + ); }); it("should associate map by key", () => { @@ -23,10 +26,13 @@ describe("associateBy", () => { const map = sequenceOf(a, b, c) .associateBy("k"); - expect(map.size).toBe(3); - expect(map.get(1)).toBe(a); - expect(map.get(2)).toBe(b); - expect(map.get(3)).toBe(c); + expect(map).toEqual( + new Map([ + [1, a], + [2, b], + [3, c] + ]) + ); }); it("should associate map by keySelector and valueTransformer", () => { @@ -40,10 +46,13 @@ describe("associateBy", () => { it => it.v ); - expect(map.size).toBe(3); - expect(map.get(1)).toBe(11); - expect(map.get(2)).toBe(22); - expect(map.get(3)).toBe(33); + expect(map).toEqual( + new Map([ + [1, 11], + [2, 22], + [3, 33] + ]) + ); }); it("should associate map by key and valueTransformer", () => { @@ -57,10 +66,13 @@ describe("associateBy", () => { it => it.v ); - expect(map.size).toBe(3); - expect(map.get(1)).toBe(11); - expect(map.get(2)).toBe(22); - expect(map.get(3)).toBe(33); + expect(map).toEqual( + new Map([ + [1, 11], + [2, 22], + [3, 33] + ]) + ); }); it("latest entries should win in case of duplicates", () => { @@ -75,9 +87,12 @@ describe("associateBy", () => { it => it.v ); - expect(map.size).toBe(3); - expect(map.get(1)).toBe(11); - expect(map.get(2)).toBe(222); - expect(map.get(3)).toBe(33); + expect(map).toEqual( + new Map([ + [1, 11], + [2, 222], + [3, 33] + ]) + ); }); }); \ No newline at end of file diff --git a/test/average.test.ts b/test/operators/sync/average.test.ts similarity index 70% rename from test/average.test.ts rename to test/operators/sync/average.test.ts index fed4076..827ba12 100644 --- a/test/average.test.ts +++ b/test/operators/sync/average.test.ts @@ -1,15 +1,17 @@ -import Sequence, {emptySequence, sequenceOf} from "../src/Sequence"; +import {emptySequence, sequenceOf} from "../../../src/sequency"; describe("average", () => { it("should calculate average", () => { const avg = sequenceOf(1, 2, 3, 4) .average(); + expect(avg).toBe(2.5); }); it("should return NaN on empty sequence", () => { - const sequence = emptySequence() as Sequence; + const sequence = emptySequence(); const avg = sequence.average(); + expect(avg).toBeNaN(); }); }); \ No newline at end of file diff --git a/test/operators/sync/chunk.test.ts b/test/operators/sync/chunk.test.ts new file mode 100644 index 0000000..4f179ed --- /dev/null +++ b/test/operators/sync/chunk.test.ts @@ -0,0 +1,43 @@ +import {sequenceOf} from "../../../src/sequency"; + +describe("chunk", () => { + it("should return list of chunks", () => { + const chunks = sequenceOf(1, 2, 3, 4, 5) + .chunk(2); + + expect(chunks).toEqual([ + [1, 2], + [3, 4], + [5] + ]); + }); + + it("should return single chunk", () => { + const chunks = sequenceOf(1, 2, 3) + .chunk(5); + + expect(chunks).toEqual([ + [1, 2, 3] + ]); + }); + + it("should return one-size chunks", () => { + const chunks = sequenceOf(1, 2, 3) + .chunk(1); + + expect(chunks).toEqual([ + [1], + [2], + [3] + ]); + }); + + it("should throw", () => { + expect( + () => sequenceOf(1, 2, 3).chunk(0) + ).toThrow("chunkSize must be > 0 but is 0"); + expect( + () => sequenceOf(1, 2, 3).chunk(-1) + ).toThrow("chunkSize must be > 0 but is -1"); + }); +}); \ No newline at end of file diff --git a/test/contains.test.ts b/test/operators/sync/contains.test.ts similarity index 86% rename from test/contains.test.ts rename to test/operators/sync/contains.test.ts index ae42d64..7d0f567 100644 --- a/test/contains.test.ts +++ b/test/operators/sync/contains.test.ts @@ -1,15 +1,17 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("contains", () => { it("should contain element", () => { const result = sequenceOf(1, 2, 3) .contains(3); + expect(result).toBe(true); }); it("should not contain element", () => { const result = sequenceOf(1, 2, 3) .contains(4); + expect(result).toBe(false); }); }); \ No newline at end of file diff --git a/test/count.test.ts b/test/operators/sync/count.test.ts similarity index 86% rename from test/count.test.ts rename to test/operators/sync/count.test.ts index 563aae3..1d279f6 100644 --- a/test/count.test.ts +++ b/test/operators/sync/count.test.ts @@ -1,16 +1,16 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("count", () => { - it("should count results", () => { const num = sequenceOf(1, 2, 3).count(); + expect(num).toBe(3); }); it("should evaluate predicate and count results", () => { const num = sequenceOf(1, 2, 3) .count(it => it > 1); + expect(num).toBe(2); }); - }); \ No newline at end of file diff --git a/test/distinct.test.ts b/test/operators/sync/distinct.test.ts similarity index 71% rename from test/distinct.test.ts rename to test/operators/sync/distinct.test.ts index 7524d23..6acabf2 100644 --- a/test/distinct.test.ts +++ b/test/operators/sync/distinct.test.ts @@ -1,14 +1,12 @@ -import {range, sequenceOf} from "../src/Sequence"; +import {range, sequenceOf} from "../../../src/sequency"; describe("distinct", () => { it("should dismiss duplicate items", () => { const result = sequenceOf(1, 1, 2, 3) .distinct() .toArray(); - expect(result.length).toBe(3); - expect(result[0]).toBe(1); - expect(result[1]).toBe(2); - expect(result[2]).toBe(3); + + expect(result).toEqual([1, 2, 3]); }); it.skip("distinct performance test", () => { @@ -16,6 +14,7 @@ describe("distinct", () => { const result = range(1, 1_000_000) .distinct() .toArray(); + expect(result.length).toBe(1_000_000); const took = Date.now() - t0; console.log("Took %s ms", took); diff --git a/test/distinctBy.test.ts b/test/operators/sync/distinctBy.test.ts similarity index 54% rename from test/distinctBy.test.ts rename to test/operators/sync/distinctBy.test.ts index 171b3ef..dc4549b 100644 --- a/test/distinctBy.test.ts +++ b/test/operators/sync/distinctBy.test.ts @@ -1,13 +1,15 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("distinctBy", () => { it("should dismiss items with duplicate selections", () => { const result = sequenceOf({a: 1}, {a: 2}, {a: 1}, {a: 3}) .distinctBy(it => it.a) .toArray(); - expect(result.length).toBe(3); - expect(result[0].a).toBe(1); - expect(result[1].a).toBe(2); - expect(result[2].a).toBe(3); + + expect(result).toEqual([ + {a: 1}, + {a: 2}, + {a: 3} + ]); }); }); \ No newline at end of file diff --git a/test/drop.test.ts b/test/operators/sync/drop.test.ts similarity index 65% rename from test/drop.test.ts rename to test/operators/sync/drop.test.ts index 9ed8a50..9a11ca6 100644 --- a/test/drop.test.ts +++ b/test/operators/sync/drop.test.ts @@ -1,19 +1,19 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("drop", () => { it("should drop 2 items", () => { const result = sequenceOf(1, 2, 3, 4) .drop(2) .toArray(); - expect(result.length).toBe(2); - expect(result[0]).toBe(3); - expect(result[1]).toBe(4); + + expect(result).toEqual([3, 4]); }); it("should drop all items", () => { const result = sequenceOf(1, 2, 3, 4) .drop(4) .toArray(); + expect(result.length).toBe(0); }); @@ -21,6 +21,7 @@ describe("drop", () => { const result = sequenceOf(1, 2, 3, 4) .drop(10) .toArray(); + expect(result.length).toBe(0); }); @@ -28,19 +29,15 @@ describe("drop", () => { const result = sequenceOf(1, 2, 3) .drop(0) .toArray(); - expect(result.length).toBe(3); - expect(result[0]).toBe(1); - expect(result[1]).toBe(2); - expect(result[2]).toBe(3); + + expect(result).toEqual([1, 2, 3]); }); it("should drop nothing for n < 0", () => { const result = sequenceOf(1, 2, 3) .drop(-10) .toArray(); - expect(result.length).toBe(3); - expect(result[0]).toBe(1); - expect(result[1]).toBe(2); - expect(result[2]).toBe(3); + + expect(result).toEqual([1, 2, 3]); }); }); \ No newline at end of file diff --git a/test/dropWhile.test.ts b/test/operators/sync/dropWhile.test.ts similarity index 63% rename from test/dropWhile.test.ts rename to test/operators/sync/dropWhile.test.ts index 65236d4..e31bd63 100644 --- a/test/dropWhile.test.ts +++ b/test/operators/sync/dropWhile.test.ts @@ -1,30 +1,27 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("dropWhile", () => { it("should drop elements until predicate evaluates to false", () => { const result = sequenceOf(1, 2, 3, 2, 1) .dropWhile(it => it < 3) .toArray(); - expect(result.length).toBe(3); - expect(result[0]).toBe(3); - expect(result[1]).toBe(2); - expect(result[2]).toBe(1); + + expect(result).toEqual([3, 2, 1]); }); it("should drop no elements", () => { const result = sequenceOf(1, 2, 3) .dropWhile(it => it > 3) .toArray(); - expect(result.length).toBe(3); - expect(result[0]).toBe(1); - expect(result[1]).toBe(2); - expect(result[2]).toBe(3); + + expect(result).toEqual([1, 2, 3]); }); it("should drop all elements", () => { const result = sequenceOf(1, 2, 3) .dropWhile(it => it > 0) .toArray(); + expect(result.length).toBe(0); }); }); \ No newline at end of file diff --git a/test/elementAt.test.ts b/test/operators/sync/elementAt.test.ts similarity index 87% rename from test/elementAt.test.ts rename to test/operators/sync/elementAt.test.ts index 80a6d28..660b024 100644 --- a/test/elementAt.test.ts +++ b/test/operators/sync/elementAt.test.ts @@ -1,27 +1,30 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("elementAt", () => { it("should return element at first index", () => { const item = sequenceOf(1, 2, 3) .elementAt(0); + expect(item).toBe(1); }); it("should return element at middle index", () => { const item = sequenceOf(1, 2, 3) .elementAt(1); + expect(item).toBe(2); }); it("should return element at last index", () => { const item = sequenceOf(1, 2, 3) .elementAt(2); + expect(item).toBe(3); }); it("should throw error when index out of bounds", () => { expect( () => sequenceOf(1, 2, 3).elementAt(3) - ).toThrow(); + ).toThrow("Index out of bounds: 3"); }); }); \ No newline at end of file diff --git a/test/elementAtOrElse.test.ts b/test/operators/sync/elementAtOrElse.test.ts similarity index 93% rename from test/elementAtOrElse.test.ts rename to test/operators/sync/elementAtOrElse.test.ts index efe6c65..109eed1 100644 --- a/test/elementAtOrElse.test.ts +++ b/test/operators/sync/elementAtOrElse.test.ts @@ -1,27 +1,31 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("elementAtOrElse", () => { it("should return element at first index", () => { const item = sequenceOf(1, 2, 3) .elementAtOrElse(0, () => -1); + expect(item).toBe(1); }); it("should return element at middle index", () => { const item = sequenceOf(1, 2, 3) .elementAtOrElse(1, () => -1); + expect(item).toBe(2); }); it("should return element at last index", () => { const item = sequenceOf(1, 2, 3) .elementAtOrElse(2, () => -1); + expect(item).toBe(3); }); it("should return default value when index out of bounds", () => { const item = sequenceOf(1, 2, 3) .elementAtOrElse(3, () => 1234); + expect(item).toBe(1234); }); }); \ No newline at end of file diff --git a/test/elementAtOrNull.test.ts b/test/operators/sync/elementAtOrNull.test.ts similarity index 93% rename from test/elementAtOrNull.test.ts rename to test/operators/sync/elementAtOrNull.test.ts index eda6bc0..27b042c 100644 --- a/test/elementAtOrNull.test.ts +++ b/test/operators/sync/elementAtOrNull.test.ts @@ -1,27 +1,31 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("elementAtOrNull", () => { it("should return element at first index", () => { const item = sequenceOf(1, 2, 3) .elementAtOrNull(0); + expect(item).toBe(1); }); it("should return element at middle index", () => { const item = sequenceOf(1, 2, 3) .elementAtOrNull(1); + expect(item).toBe(2); }); it("should return element at last index", () => { const item = sequenceOf(1, 2, 3) .elementAtOrNull(2); + expect(item).toBe(3); }); it("should return null when index out of bounds", () => { const item = sequenceOf(1, 2, 3) .elementAtOrNull(3); + expect(item).toBeNull(); }); }); \ No newline at end of file diff --git a/test/filter.test.ts b/test/operators/sync/filter.test.ts similarity index 54% rename from test/filter.test.ts rename to test/operators/sync/filter.test.ts index 7f63c95..b9cd9c6 100644 --- a/test/filter.test.ts +++ b/test/operators/sync/filter.test.ts @@ -1,4 +1,4 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("filter", () => { it("should filter elements", () => { @@ -6,8 +6,6 @@ describe("filter", () => { .filter(it => it > 1) .toArray(); - expect(array.length).toBe(2); - expect(array[0]).toBe(2); - expect(array[1]).toBe(3); + expect(array).toEqual([2, 3]); }); }); \ No newline at end of file diff --git a/test/operators/sync/filterHolistically.test.ts b/test/operators/sync/filterHolistically.test.ts new file mode 100644 index 0000000..3b68eac --- /dev/null +++ b/test/operators/sync/filterHolistically.test.ts @@ -0,0 +1,11 @@ +import {sequenceOf} from "../../../src/sequency"; + +describe("filterHolistically", () => { + it("should filter elements as a whole", () => { + const array = sequenceOf(1, 2, 2, 3, 3, 3) + .filterHolistically((value, _index, array) => array.filter(v => v === value).length < 3) + .toArray(); + + expect(array).toEqual([1, 2, 2]); + }); +}); \ No newline at end of file diff --git a/test/operators/sync/filterIndexed.test.ts b/test/operators/sync/filterIndexed.test.ts new file mode 100644 index 0000000..ded6b8f --- /dev/null +++ b/test/operators/sync/filterIndexed.test.ts @@ -0,0 +1,11 @@ +import {sequenceOf} from "../../../src/sequency"; + +describe("filterIndexed", () => { + it("should filter elements by index", () => { + const array = sequenceOf(1, 2, 3) + .filterIndexed((index, _value) => index < 2) + .toArray(); + + expect(array).toEqual([1, 2]); + }); +}); \ No newline at end of file diff --git a/test/filterNot.test.ts b/test/operators/sync/filterNot.test.ts similarity index 55% rename from test/filterNot.test.ts rename to test/operators/sync/filterNot.test.ts index 61bb11f..bafafcd 100644 --- a/test/filterNot.test.ts +++ b/test/operators/sync/filterNot.test.ts @@ -1,12 +1,11 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("filterNot", () => { it("should filter elements", () => { const result = sequenceOf(1, 2, 3) .filterNot(it => it > 2) .toArray(); - expect(result.length).toBe(2); - expect(result[0]).toBe(1); - expect(result[1]).toBe(2); + + expect(result).toEqual([1, 2]); }); }); \ No newline at end of file diff --git a/test/operators/sync/filterNotNull.test.ts b/test/operators/sync/filterNotNull.test.ts new file mode 100644 index 0000000..73180e2 --- /dev/null +++ b/test/operators/sync/filterNotNull.test.ts @@ -0,0 +1,11 @@ +import {sequenceOf} from "../../../src/sequency"; + +describe("filterNotNull", () => { + it("should skip null elements", () => { + const array: number[] = sequenceOf(1, null, 2, null, 3) + .filterNotNull() + .toArray(); + + expect(array).toEqual([1, 2, 3]); + }); +}); \ No newline at end of file diff --git a/test/find.test.ts b/test/operators/sync/find.test.ts similarity index 91% rename from test/find.test.ts rename to test/operators/sync/find.test.ts index de42fa1..8ddb5c9 100644 --- a/test/find.test.ts +++ b/test/operators/sync/find.test.ts @@ -1,10 +1,11 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("find", () => { it("should return first element of sequence", () => { const result = sequenceOf(1, 2, 3) .filter(it => it > 2) .find(); + expect(result).toBe(3); }); @@ -12,12 +13,14 @@ describe("find", () => { const result = sequenceOf(1, 2, 3) .filter(it => it > 3) .find(); + expect(result).toBeNull(); }); it("should return first element matching predicate", () => { const result = sequenceOf(1, 2, 3) .find(it => it > 2); + expect(result).toBe(3); }); }); \ No newline at end of file diff --git a/test/findLast.test.ts b/test/operators/sync/findLast.test.ts similarity index 91% rename from test/findLast.test.ts rename to test/operators/sync/findLast.test.ts index a84059f..45b256b 100644 --- a/test/findLast.test.ts +++ b/test/operators/sync/findLast.test.ts @@ -1,9 +1,10 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("findLast", () => { it("should return last element of sequence", () => { const result = sequenceOf(1, 2, 3) .findLast(); + expect(result).toBe(3); }); @@ -11,12 +12,14 @@ describe("findLast", () => { const result = sequenceOf(1, 2, 3) .filter(it => it > 3) .findLast(); + expect(result).toBeNull(); }); it("should return last element matching predicate", () => { const result = sequenceOf(1, 2, 3) .findLast(it => it > 1); + expect(result).toBe(3); }); }); \ No newline at end of file diff --git a/test/first.test.ts b/test/operators/sync/first.test.ts similarity index 93% rename from test/first.test.ts rename to test/operators/sync/first.test.ts index fca8d39..2b34496 100644 --- a/test/first.test.ts +++ b/test/operators/sync/first.test.ts @@ -1,10 +1,11 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("first", () => { it("should return first element of sequence", () => { const result = sequenceOf(1, 2, 3) .filter(it => it > 2) .first(); + expect(result).toBe(3); }); @@ -19,12 +20,14 @@ describe("first", () => { it("should return first element matching predicate", () => { const result = sequenceOf(1, 2, 3) .first(it => it > 2); + expect(result).toBe(3); }); it("should return null if the first element is null", () => { const result = sequenceOf(null) .first(); + expect(result).toBeNull(); }); }); \ No newline at end of file diff --git a/test/firstOrNull.test.ts b/test/operators/sync/firstOrNull.test.ts similarity index 92% rename from test/firstOrNull.test.ts rename to test/operators/sync/firstOrNull.test.ts index dde6bbd..e62781b 100644 --- a/test/firstOrNull.test.ts +++ b/test/operators/sync/firstOrNull.test.ts @@ -1,10 +1,11 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("firstOrNull", () => { it("should return first element of sequence", () => { const result = sequenceOf(1, 2, 3) .filter(it => it > 2) .firstOrNull(); + expect(result).toBe(3); }); @@ -12,12 +13,14 @@ describe("firstOrNull", () => { const result = sequenceOf(1, 2, 3) .filter(it => it > 3) .firstOrNull(); + expect(result).toBeNull(); }); it("should return first element matching predicate", () => { const result = sequenceOf(1, 2, 3) .firstOrNull(it => it > 2); + expect(result).toBe(3); }); }); \ No newline at end of file diff --git a/test/operators/sync/flatMap.test.ts b/test/operators/sync/flatMap.test.ts new file mode 100644 index 0000000..5620b1b --- /dev/null +++ b/test/operators/sync/flatMap.test.ts @@ -0,0 +1,11 @@ +import {asSequence, sequenceOf} from "../../../src/sequency"; + +describe("flatMap", () => { + it("should flatten element arrays", () => { + const array = sequenceOf([1, 2], [3, 4], [5, 6]) + .flatMap(it => asSequence(it)) + .toArray(); + + expect(array).toEqual([1, 2, 3, 4, 5, 6]); + }); +}); \ No newline at end of file diff --git a/test/operators/sync/flatten.test.ts b/test/operators/sync/flatten.test.ts new file mode 100644 index 0000000..394f9db --- /dev/null +++ b/test/operators/sync/flatten.test.ts @@ -0,0 +1,19 @@ +import {sequenceOf} from "../../../src/sequency"; + +describe("flatten", () => { + it("should flatten sequence of sequences", () => { + const array = sequenceOf(sequenceOf(1, 2), sequenceOf(3, 4), sequenceOf(5, 6)) + .flatten() + .toArray(); + + expect(array).toEqual([1, 2, 3, 4, 5, 6]); + }); + + it("should flatten sequence of arrays", () => { + const array = sequenceOf([1, 2], [3, 4], [5, 6]) + .flatten() + .toArray(); + + expect(array).toEqual([1, 2, 3, 4, 5, 6]); + }); +}); \ No newline at end of file diff --git a/test/fold.test.ts b/test/operators/sync/fold.test.ts similarity index 77% rename from test/fold.test.ts rename to test/operators/sync/fold.test.ts index 1873145..962adc8 100644 --- a/test/fold.test.ts +++ b/test/operators/sync/fold.test.ts @@ -1,15 +1,17 @@ -import {emptySequence, sequenceOf} from "../src/Sequence"; +import {emptySequence, sequenceOf} from "../../../src/sequency"; describe("fold", () => { it("should 23 + sum of all numbers", () => { const result = sequenceOf(1, 2, 3) .fold(23, (acc: number, value: number) => acc + value); + expect(result).toBe(29); }); it("should return initial value on empty sequence", () => { - const result = emptySequence() + const result = emptySequence() .fold(23, (acc: number, value: number) => acc + value); + expect(result).toBe(23); }); }); \ No newline at end of file diff --git a/test/foldIndexed.test.ts b/test/operators/sync/foldIndexed.test.ts similarity index 81% rename from test/foldIndexed.test.ts rename to test/operators/sync/foldIndexed.test.ts index edb1f26..75c7fd7 100644 --- a/test/foldIndexed.test.ts +++ b/test/operators/sync/foldIndexed.test.ts @@ -1,15 +1,17 @@ -import {emptySequence, sequenceOf} from "../src/Sequence"; +import {emptySequence, sequenceOf} from "../../../src/sequency"; describe("foldIndexed", () => { it("should 23 + sum of all numbers and indices", () => { const result = sequenceOf(1, 2, 3) .foldIndexed(23, (index: number, acc: number, element: number) => acc + element + index); + expect(result).toBe(32); }); it("should return initial value on empty sequence", () => { - const result = emptySequence() + const result = emptySequence() .foldIndexed(23, (index: number, acc: number, element: number) => acc + element + index); + expect(result).toBe(23); }); }); \ No newline at end of file diff --git a/test/operators/sync/forEach.test.ts b/test/operators/sync/forEach.test.ts new file mode 100644 index 0000000..a543dcb --- /dev/null +++ b/test/operators/sync/forEach.test.ts @@ -0,0 +1,11 @@ +import {sequenceOf} from "../../../src/sequency"; + +describe("forEach", () => { + it("should call action for each element", () => { + const array: number[] = []; + sequenceOf(1, 2, 3) + .forEach(it => array.push(it)); + + expect(array).toEqual([1, 2, 3]); + }); +}); \ No newline at end of file diff --git a/test/forEachIndexed.test.ts b/test/operators/sync/forEachIndexed.test.ts similarity index 52% rename from test/forEachIndexed.test.ts rename to test/operators/sync/forEachIndexed.test.ts index ac5a91b..e6d63a3 100644 --- a/test/forEachIndexed.test.ts +++ b/test/operators/sync/forEachIndexed.test.ts @@ -1,12 +1,11 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("forEach", () => { it("should call action for each element", () => { - const array = []; + const array: string[] = []; sequenceOf(1, 2, 3) .forEachIndexed((index, value) => array.push(`${index}: ${value}`)); - expect(array[0]).toBe("0: 1"); - expect(array[1]).toBe("1: 2"); - expect(array[2]).toBe("2: 3"); + + expect(array).toEqual(["0: 1", "1: 2", "2: 3"]); }); }); \ No newline at end of file diff --git a/test/operators/sync/groupBy.test.ts b/test/operators/sync/groupBy.test.ts new file mode 100644 index 0000000..191efcb --- /dev/null +++ b/test/operators/sync/groupBy.test.ts @@ -0,0 +1,21 @@ +import {sequenceOf} from "../../../src/sequency"; + +describe("groupBy", () => { + it("should group by keySelector", () => { + const a = {k: 1, v: 11} as const; + const b = {k: 2, v: 22} as const; + const c = {k: 3, v: 33} as const; + const d = {k: 2, v: 222} as const; + + const map = sequenceOf<{k: (typeof a | typeof b | typeof c | typeof d)["k"], v: number}>(a, b, c, d) + .groupBy(it => it.k); + + expect(map).toEqual( + new Map([ + [1, [a]], + [2, [b, d]], + [3, [c]] + ]) + ); + }); +}); \ No newline at end of file diff --git a/test/indexOf.test.ts b/test/operators/sync/indexOf.test.ts similarity index 87% rename from test/indexOf.test.ts rename to test/operators/sync/indexOf.test.ts index 72bab96..c48454a 100644 --- a/test/indexOf.test.ts +++ b/test/operators/sync/indexOf.test.ts @@ -1,15 +1,17 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("indexOf", () => { it("should return index of element", () => { const index = sequenceOf(1, 2, 3) .indexOf(3); + expect(index).toBe(2); }); it("should return -1 if element not found", () => { const index = sequenceOf(1, 2, 3) .indexOf(4); + expect(index).toBe(-1); }); }); \ No newline at end of file diff --git a/test/indexOfFirst.test.ts b/test/operators/sync/indexOfFirst.test.ts similarity index 82% rename from test/indexOfFirst.test.ts rename to test/operators/sync/indexOfFirst.test.ts index 5733b19..d570fc5 100644 --- a/test/indexOfFirst.test.ts +++ b/test/operators/sync/indexOfFirst.test.ts @@ -1,9 +1,10 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("indexOfFirst", () => { it("should return index of first element matching given predicate", () => { const index = sequenceOf(1, 2, 2, 3) .indexOfFirst(it => it > 1); + expect(index).toBe(1); }); }); \ No newline at end of file diff --git a/test/indexOfLast.test.ts b/test/operators/sync/indexOfLast.test.ts similarity index 82% rename from test/indexOfLast.test.ts rename to test/operators/sync/indexOfLast.test.ts index 21f735d..1adab5f 100644 --- a/test/indexOfLast.test.ts +++ b/test/operators/sync/indexOfLast.test.ts @@ -1,9 +1,10 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("indexOfLast", () => { it("should return index of last element matching given predicate", () => { const index = sequenceOf(1, 2, 2, 1) .indexOfLast(it => it > 1); + expect(index).toBe(2); }); }); \ No newline at end of file diff --git a/test/joinTo.test.ts b/test/operators/sync/joinTo.test.ts similarity index 82% rename from test/joinTo.test.ts rename to test/operators/sync/joinTo.test.ts index d31999a..6fbd3be 100644 --- a/test/joinTo.test.ts +++ b/test/operators/sync/joinTo.test.ts @@ -1,9 +1,10 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("joinTo", () => { it("should join to given string", () => { const result = sequenceOf(1, 2, 3) .joinTo({value: "List: ", prefix: "[ ", postfix: " ]"}); + expect(result).toBe("List: [ 1, 2, 3 ]"); }); }); \ No newline at end of file diff --git a/test/joinToString.test.ts b/test/operators/sync/joinToString.test.ts similarity index 95% rename from test/joinToString.test.ts rename to test/operators/sync/joinToString.test.ts index 1711b54..4f2eaee 100644 --- a/test/joinToString.test.ts +++ b/test/operators/sync/joinToString.test.ts @@ -1,33 +1,38 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("joinToString", () => { it("should join to string using default config", () => { const result = sequenceOf(1, 2, 3) .joinToString(); + expect(result).toBe("1, 2, 3"); }); it("should join to string using different separator", () => { const result = sequenceOf(1, 2, 3) .joinToString({separator: " | "}); + expect(result).toBe("1 | 2 | 3"); }); it("should join to string using different prefix and postfix", () => { const result = sequenceOf(1, 2, 3) .joinToString({prefix: "[ ", postfix: " ]"}); + expect(result).toBe("[ 1, 2, 3 ]"); }); it("should join to string using transform function", () => { const result = sequenceOf(1, 2, 3) .joinToString({transform: num => `a${num}`}); + expect(result).toBe("a1, a2, a3"); }); it("should join to string limiting number of items joined", () => { const result = sequenceOf(1, 2, 3, 4, 5) .joinToString({limit: 3}); + expect(result).toBe("1, 2, 3, ..."); }); }); \ No newline at end of file diff --git a/test/last.test.ts b/test/operators/sync/last.test.ts similarity index 93% rename from test/last.test.ts rename to test/operators/sync/last.test.ts index f6fe2b3..fde07f8 100644 --- a/test/last.test.ts +++ b/test/operators/sync/last.test.ts @@ -1,10 +1,11 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("last", () => { it("should return last element of sequence", () => { const result = sequenceOf(1, 2, 3) .filter(it => it > 1) .last(); + expect(result).toBe(3); }); @@ -19,12 +20,14 @@ describe("last", () => { it("should return last element matching predicate", () => { const result = sequenceOf(1, 2, 3) .last(it => it > 1); + expect(result).toBe(3); }); it("should return null if the last element is null", () => { const result = sequenceOf(1, 2, null) .last(); + expect(result).toBeNull(); }); }); \ No newline at end of file diff --git a/test/lastOrNull.test.ts b/test/operators/sync/lastOrNull.test.ts similarity index 91% rename from test/lastOrNull.test.ts rename to test/operators/sync/lastOrNull.test.ts index 7bdbb44..1caa1c2 100644 --- a/test/lastOrNull.test.ts +++ b/test/operators/sync/lastOrNull.test.ts @@ -1,9 +1,10 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("lastOrNull", () => { it("should return last element of sequence", () => { const result = sequenceOf(1, 2, 3) .lastOrNull(); + expect(result).toBe(3); }); @@ -11,12 +12,14 @@ describe("lastOrNull", () => { const result = sequenceOf(1, 2, 3) .filter(it => it > 3) .lastOrNull(); + expect(result).toBeNull(); }); it("should return last element matching predicate", () => { const result = sequenceOf(1, 2, 3) .lastOrNull(it => it > 1); + expect(result).toBe(3); }); }); \ No newline at end of file diff --git a/test/operators/sync/map.test.ts b/test/operators/sync/map.test.ts new file mode 100644 index 0000000..200cd02 --- /dev/null +++ b/test/operators/sync/map.test.ts @@ -0,0 +1,11 @@ +import {sequenceOf} from "../../../src/sequency"; + +describe("map", () => { + it("should map numbers to strings", () => { + const array = sequenceOf(1, 2, 3) + .map(it => `num ${it}`) + .toArray(); + + expect(array).toEqual(["num 1", "num 2", "num 3"]); + }); +}); \ No newline at end of file diff --git a/test/mapIndexed.test.ts b/test/operators/sync/mapIndexed.test.ts similarity index 53% rename from test/mapIndexed.test.ts rename to test/operators/sync/mapIndexed.test.ts index 594e3f9..0dd16a9 100644 --- a/test/mapIndexed.test.ts +++ b/test/operators/sync/mapIndexed.test.ts @@ -1,4 +1,4 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("mapIndexed", () => { it("should map elements by index and value", () => { @@ -6,9 +6,6 @@ describe("mapIndexed", () => { .mapIndexed((index, value) => `${index}: ${value}`) .toArray(); - expect(array.length).toBe(3); - expect(array[0]).toBe("0: 1"); - expect(array[1]).toBe("1: 2"); - expect(array[2]).toBe("2: 3"); + expect(array).toEqual(["0: 1", "1: 2", "2: 3"]); }); }); \ No newline at end of file diff --git a/test/mapNotNull.test.ts b/test/operators/sync/mapNotNull.test.ts similarity index 57% rename from test/mapNotNull.test.ts rename to test/operators/sync/mapNotNull.test.ts index 8dfa65d..197e3c0 100644 --- a/test/mapNotNull.test.ts +++ b/test/operators/sync/mapNotNull.test.ts @@ -1,4 +1,4 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("mapNotNull", () => { it("should map to non-null items", () => { @@ -7,12 +7,10 @@ describe("mapNotNull", () => { const a3 = {a: null}; const a4 = {a: 4}; - const array = sequenceOf(a1, a2, a3, a4) + const array = sequenceOf<{a: number | null}>(a1, a2, a3, a4) .mapNotNull(it => it.a) .toArray(); - expect(array.length).toBe(2); - expect(array[0]).toBe(1); - expect(array[1]).toBe(4); + expect(array).toEqual([1, 4]); }); }); \ No newline at end of file diff --git a/test/max.test.ts b/test/operators/sync/max.test.ts similarity index 82% rename from test/max.test.ts rename to test/operators/sync/max.test.ts index 415a118..9f23c26 100644 --- a/test/max.test.ts +++ b/test/operators/sync/max.test.ts @@ -1,15 +1,17 @@ -import {emptySequence, sequenceOf} from "../src/Sequence"; +import {emptySequence, sequenceOf} from "../../../src/sequency"; describe("max", () => { it("should return max element", () => { const num = sequenceOf(1, 3, 2, 6, 3) .max(); + expect(num).toBe(6); }); it("should return null on empty sequence", () => { const num = emptySequence() .max(); + expect(num).toBeNull(); }); }); \ No newline at end of file diff --git a/test/maxBy.test.ts b/test/operators/sync/maxBy.test.ts similarity index 78% rename from test/maxBy.test.ts rename to test/operators/sync/maxBy.test.ts index 7d9980a..9884aa0 100644 --- a/test/maxBy.test.ts +++ b/test/operators/sync/maxBy.test.ts @@ -1,15 +1,17 @@ -import {emptySequence, sequenceOf} from "../src/Sequence"; +import {emptySequence, sequenceOf} from "../../../src/sequency"; describe("maxBy", () => { it("should return max element by selector", () => { const num = sequenceOf({a: 1}, {a: 3}, {a: 2}) .maxBy(it => it.a); + expect(num).toEqual({a: 3}); }); it("should return null on empty sequence", () => { const num = emptySequence() - .maxBy(() => void(0)); + .maxBy(() => 0); + expect(num).toBeNull(); }); }); \ No newline at end of file diff --git a/test/maxWith.test.ts b/test/operators/sync/maxWith.test.ts similarity index 80% rename from test/maxWith.test.ts rename to test/operators/sync/maxWith.test.ts index 701c738..90382c1 100644 --- a/test/maxWith.test.ts +++ b/test/operators/sync/maxWith.test.ts @@ -1,15 +1,17 @@ -import {emptySequence, sequenceOf} from "../src/Sequence"; +import {emptySequence, sequenceOf} from "../../../src/sequency"; describe("maxWith", () => { it("should return max element by comparator", () => { const num = sequenceOf({a: 1}, {a: 3}, {a: 2}) .maxWith((o1, o2) => o1.a > o2.a ? 1 : (o1.a < o2.a ? -1 : 0)); + expect(num).toEqual({a: 3}); }); it("should return null on empty sequence", () => { const num = emptySequence() - .maxWith(() => void(0)); + .maxWith(() => 0); + expect(num).toBeNull(); }); }); \ No newline at end of file diff --git a/test/merge.test.ts b/test/operators/sync/merge.test.ts similarity index 96% rename from test/merge.test.ts rename to test/operators/sync/merge.test.ts index c62da42..9a71e6f 100644 --- a/test/merge.test.ts +++ b/test/operators/sync/merge.test.ts @@ -1,10 +1,11 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("merge", () => { it("should merge both sequences", () => { const result = sequenceOf({id: 1, val: "a"}, {id: 2, val: "b"}, {id: 3, val: "c"}) .merge(sequenceOf({id: 2, val: "bb"}), it => it.id) .toArray(); + expect(result).toEqual([{id: 1, val: "a"}, {id: 2, val: "bb"}, {id: 3, val: "c"}]); }); @@ -12,6 +13,7 @@ describe("merge", () => { const result = sequenceOf({id: 1, val: "a"}, {id: 2, val: "b"}, {id: 3, val: "c"}) .merge([{id: 2, val: "bb"}], it => it.id) .toArray(); + expect(result).toEqual([{id: 1, val: "a"}, {id: 2, val: "bb"}, {id: 3, val: "c"}]); }); @@ -19,6 +21,7 @@ describe("merge", () => { const result = sequenceOf({id: 1, val: "a"}, {id: 2, val: "b"}, {id: 3, val: "c"}) .merge(sequenceOf({id: 2, val: "bb"}, {id: 4, val: "d"}), it => it.id) .toArray(); + expect(result).toEqual([{id: 1, val: "a"}, {id: 2, val: "bb"}, {id: 3, val: "c"}, {id: 4, val: "d"}]); }); @@ -26,6 +29,7 @@ describe("merge", () => { const result = sequenceOf({id: 1, val: "a"}, {id: 2, val: "b"}, {id: 3, val: "c"}) .merge(sequenceOf({id: 2, val: "bb"}, {id: 4, val: "d"}), it => it.id, true) .toArray(); + expect(result).toEqual([{id: 4, val: "d"}, {id: 1, val: "a"}, {id: 2, val: "bb"}, {id: 3, val: "c"}]); }); }); \ No newline at end of file diff --git a/test/min.test.ts b/test/operators/sync/min.test.ts similarity index 82% rename from test/min.test.ts rename to test/operators/sync/min.test.ts index 896a1ff..31b2531 100644 --- a/test/min.test.ts +++ b/test/operators/sync/min.test.ts @@ -1,15 +1,17 @@ -import {emptySequence, sequenceOf} from "../src/Sequence"; +import {emptySequence, sequenceOf} from "../../../src/sequency"; describe("min", () => { it("should return min element", () => { const num = sequenceOf(3, 1, 2, 6, 3) .min(); + expect(num).toBe(1); }); it("should return null on empty sequence", () => { const num = emptySequence() .min(); + expect(num).toBeNull(); }); }); \ No newline at end of file diff --git a/test/minBy.test.ts b/test/operators/sync/minBy.test.ts similarity index 78% rename from test/minBy.test.ts rename to test/operators/sync/minBy.test.ts index e1d8cf5..7123f49 100644 --- a/test/minBy.test.ts +++ b/test/operators/sync/minBy.test.ts @@ -1,15 +1,17 @@ -import {emptySequence, sequenceOf} from "../src/Sequence"; +import {emptySequence, sequenceOf} from "../../../src/sequency"; describe("minBy", () => { it("should return min element by selector", () => { const num = sequenceOf({a: 1}, {a: 3}, {a: 2}) .minBy(it => it.a); + expect(num).toEqual({a: 1}); }); it("should return null on empty sequence", () => { const num = emptySequence() - .minBy(() => void(0)); + .minBy(() => 0); + expect(num).toBeNull(); }); }); \ No newline at end of file diff --git a/test/minWith.test.ts b/test/operators/sync/minWith.test.ts similarity index 80% rename from test/minWith.test.ts rename to test/operators/sync/minWith.test.ts index 05af31b..8aaaec9 100644 --- a/test/minWith.test.ts +++ b/test/operators/sync/minWith.test.ts @@ -1,15 +1,17 @@ -import {emptySequence, sequenceOf} from "../src/Sequence"; +import {emptySequence, sequenceOf} from "../../../src/sequency"; describe("minWith", () => { it("should return min element by comparator", () => { const num = sequenceOf({a: 1}, {a: 3}, {a: 2}) .minWith((o1, o2) => o1.a > o2.a ? 1 : (o1.a < o2.a ? -1 : 0)); + expect(num).toEqual({a: 1}); }); it("should return null on empty sequence", () => { const num = emptySequence() - .maxWith(() => void(0)); + .maxWith(() => 0); + expect(num).toBeNull(); }); }); \ No newline at end of file diff --git a/test/minus.test.ts b/test/operators/sync/minus.test.ts similarity index 54% rename from test/minus.test.ts rename to test/operators/sync/minus.test.ts index 6210362..4fe6982 100644 --- a/test/minus.test.ts +++ b/test/operators/sync/minus.test.ts @@ -1,40 +1,35 @@ -import {emptySequence, sequenceOf} from "../src/Sequence"; +import {emptySequence, sequenceOf} from "../../../src/sequency"; describe("minus", () => { it("should remove element", () => { const array = sequenceOf(1, 2, 3) .minus(1) .toArray(); - expect(array.length).toBe(2); - expect(array[0]).toBe(2); - expect(array[1]).toBe(3); + + expect(array).toEqual([2, 3]); }); it("should remove array", () => { const array = sequenceOf(1, 2, 3, 4, 5) .minus([2, 4]) .toArray(); - expect(array.length).toBe(3); - expect(array[0]).toBe(1); - expect(array[1]).toBe(3); - expect(array[2]).toBe(5); + + expect(array).toEqual([1, 3, 5]); }); it("should append sequence", () => { const array = sequenceOf(1, 2, 3) .minus(sequenceOf(1, 2)) .toArray(); - expect(array.length).toBe(1); - expect(array[0]).toBe(3); + + expect(array).toEqual([3]); }); it("should append empty sequence", () => { const array = sequenceOf(1, 2, 3) .minus(emptySequence()) .toArray(); - expect(array.length).toBe(3); - expect(array[0]).toBe(1); - expect(array[1]).toBe(2); - expect(array[2]).toBe(3); + + expect(array).toEqual([1, 2, 3]); }); }); \ No newline at end of file diff --git a/test/none.test.ts b/test/operators/sync/none.test.ts similarity index 93% rename from test/none.test.ts rename to test/operators/sync/none.test.ts index c2f02ec..f642f75 100644 --- a/test/none.test.ts +++ b/test/operators/sync/none.test.ts @@ -1,10 +1,11 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("none", () => { it("should return false", () => { const result = sequenceOf(1, 2, 3) .filter(it => it > 1) .none(); + expect(result).toBe(false); }); @@ -12,18 +13,21 @@ describe("none", () => { const result = sequenceOf(1, 2, 3) .filter(it => it > 3) .none(); + expect(result).toBe(true); }); it("should evaluate predicate and return false", () => { const result = sequenceOf(1, 2, 3) .none(it => it > 1); + expect(result).toBe(false); }); it("should evaluate predicate and return true", () => { const result = sequenceOf(1, 2, 3) .none(it => it > 3); + expect(result).toBe(true); }); }); \ No newline at end of file diff --git a/test/onEach.test.ts b/test/operators/sync/onEach.test.ts similarity index 50% rename from test/onEach.test.ts rename to test/operators/sync/onEach.test.ts index 7b002db..b88a3a6 100644 --- a/test/onEach.test.ts +++ b/test/operators/sync/onEach.test.ts @@ -1,13 +1,13 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("onEach", () => { it("should call action for each element", () => { - const array = []; + const array: number[] = []; const result = sequenceOf(1, 2, 3) .onEach(it => array.push(it)) .toArray(); - expect(array[0]).toBe(result[0]); - expect(array[1]).toBe(result[1]); - expect(array[2]).toBe(result[2]); + + expect(array).toEqual([1, 2, 3]); + expect(result).toEqual(array); }); }); \ No newline at end of file diff --git a/test/operators/sync/onEachIndexed.test.ts b/test/operators/sync/onEachIndexed.test.ts new file mode 100644 index 0000000..d28d9f9 --- /dev/null +++ b/test/operators/sync/onEachIndexed.test.ts @@ -0,0 +1,12 @@ +import {sequenceOf} from "../../../src/sequency"; + +describe("onEachIndexed", () => { + it("should call action for each element", () => { + const array: string[] = []; + sequenceOf(1, 2, 3) + .onEachIndexed((index, value) => array.push(`${index}: ${value}`)) + .toArray(); + + expect(array).toEqual(["0: 1", "1: 2", "2: 3"]); + }); +}); \ No newline at end of file diff --git a/test/operators/sync/partition.test.ts b/test/operators/sync/partition.test.ts new file mode 100644 index 0000000..46fd051 --- /dev/null +++ b/test/operators/sync/partition.test.ts @@ -0,0 +1,13 @@ +import {sequenceOf} from "../../../src/sequency"; + +describe("partition", () => { + it("should partition based on the given predicate", () => { + const result = sequenceOf(1, 2, 3, 4) + .partition(it => it % 2 === 1); + + expect(result).toHaveProperty("true"); + expect(result).toHaveProperty("false"); + expect(result.true).toEqual([1, 3]); + expect(result.false).toEqual([2, 4]); + }); +}); \ No newline at end of file diff --git a/test/operators/sync/plus.test.ts b/test/operators/sync/plus.test.ts new file mode 100644 index 0000000..dfa6843 --- /dev/null +++ b/test/operators/sync/plus.test.ts @@ -0,0 +1,35 @@ +import {emptySequence, sequenceOf} from "../../../src/sequency"; + +describe("plus", () => { + it("should append element", () => { + const array = sequenceOf(1, 2, 3) + .plus(4) + .toArray(); + + expect(array).toEqual([1, 2, 3, 4]); + }); + + it("should append array", () => { + const array = sequenceOf(1, 2, 3) + .plus([4, 5]) + .toArray(); + + expect(array).toEqual([1, 2, 3, 4, 5]); + }); + + it("should append sequence", () => { + const array = sequenceOf(1, 2, 3) + .plus(sequenceOf(4, 5)) + .toArray(); + + expect(array).toEqual([1, 2, 3, 4, 5]); + }); + + it("should append empty sequence", () => { + const array = sequenceOf(1, 2, 3) + .plus(emptySequence()) + .toArray(); + + expect(array).toEqual([1, 2, 3]); + }); +}); \ No newline at end of file diff --git a/test/reduce.test.ts b/test/operators/sync/reduce.test.ts similarity index 89% rename from test/reduce.test.ts rename to test/operators/sync/reduce.test.ts index 0406a83..3d1b25f 100644 --- a/test/reduce.test.ts +++ b/test/operators/sync/reduce.test.ts @@ -1,15 +1,17 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("reduce", () => { it("should sum all numbers", () => { const result = sequenceOf(1, 2, 3) .reduce((acc: number, value: number) => acc + value); + expect(result).toBe(6); }); it("should concat all strings", () => { const result = sequenceOf("a", "b", "c") .reduce((acc: string, value: string) => `${acc}, ${value}`); + expect(result).toBe("a, b, c"); }); }); \ No newline at end of file diff --git a/test/reduceIndexed.test.ts b/test/operators/sync/reduceIndexed.test.ts similarity index 84% rename from test/reduceIndexed.test.ts rename to test/operators/sync/reduceIndexed.test.ts index 53cf09e..acd8d62 100644 --- a/test/reduceIndexed.test.ts +++ b/test/operators/sync/reduceIndexed.test.ts @@ -1,9 +1,10 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("reduceIndexed", () => { it("should sum all numbers + indices", () => { const result = sequenceOf(1, 2, 3) .reduceIndexed((index: number, acc: number, value: number) => acc + value + index); + expect(result).toBe(9); }); }); \ No newline at end of file diff --git a/test/operators/sync/reverse.test.ts b/test/operators/sync/reverse.test.ts new file mode 100644 index 0000000..e64126d --- /dev/null +++ b/test/operators/sync/reverse.test.ts @@ -0,0 +1,11 @@ +import {sequenceOf} from "../../../src/sequency"; + +describe("reverse", () => { + it("should reverse order", () => { + const array = sequenceOf(1, 2, 3) + .reverse() + .toArray(); + + expect(array).toEqual([3, 2, 1]); + }); +}); \ No newline at end of file diff --git a/test/single.test.ts b/test/operators/sync/single.test.ts similarity index 91% rename from test/single.test.ts rename to test/operators/sync/single.test.ts index c35cba2..613d2a6 100644 --- a/test/single.test.ts +++ b/test/operators/sync/single.test.ts @@ -1,10 +1,10 @@ -import {emptySequence, sequenceOf} from "../src/Sequence"; -import single from "../src/single"; +import {emptySequence, sequenceOf} from "../../../src/sequency"; describe("single", () => { it("should return single element", () => { const result = sequenceOf(23) .single(); + expect(result).toBe(23); }); @@ -23,6 +23,7 @@ describe("single", () => { it("should evaluate predicate and return single element", () => { const result = sequenceOf(1, 2, 3) .single(it => it > 2); + expect(result).toBe(3); }); diff --git a/test/singleOrNull.test.ts b/test/operators/sync/singleOrNull.test.ts similarity index 94% rename from test/singleOrNull.test.ts rename to test/operators/sync/singleOrNull.test.ts index 0cd3947..d8fe9c7 100644 --- a/test/singleOrNull.test.ts +++ b/test/operators/sync/singleOrNull.test.ts @@ -1,39 +1,45 @@ -import {emptySequence, sequenceOf} from "../src/Sequence"; +import {emptySequence, sequenceOf} from "../../../src/sequency"; describe("singleOrNull", () => { it("should return single element", () => { const result = sequenceOf(23) .singleOrNull(); + expect(result).toBe(23); }); it("should return null with more than one element", () => { const result = sequenceOf(1, 2) .singleOrNull(); + expect(result).toBeNull(); }); it("should return null with zero elements", () => { const result = emptySequence() .singleOrNull(); + expect(result).toBeNull(); }); it("should evaluate predicate and return single element", () => { const result = sequenceOf(1, 2, 3) .singleOrNull(it => it > 2); + expect(result).toBe(3); }); it("should evaluate predicate and return null with more than one element", () => { const result = sequenceOf(1, 2, 3) .singleOrNull(it => it > 1); + expect(result).toBeNull(); }); it("should evaluate predicate and return null with zero elements", () => { const result = sequenceOf(1, 2, 3) .singleOrNull(it => it > 3); + expect(result).toBeNull(); }); }); \ No newline at end of file diff --git a/test/sorted.test.ts b/test/operators/sync/sorted.test.ts similarity index 64% rename from test/sorted.test.ts rename to test/operators/sync/sorted.test.ts index 693e40f..e51711d 100644 --- a/test/sorted.test.ts +++ b/test/operators/sync/sorted.test.ts @@ -1,34 +1,27 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("sorted", () => { it("should sort numbers ascending", () => { const array = sequenceOf(1, 4, 3, 5, 2) .sorted() .toArray(); - expect(array.length).toBe(5); - expect(array[0]).toBe(1); - expect(array[1]).toBe(2); - expect(array[2]).toBe(3); - expect(array[3]).toBe(4); - expect(array[4]).toBe(5); + + expect(array).toEqual([1, 2, 3, 4, 5]); }); it("should sort strings ascending", () => { const array = sequenceOf("1", "4", "3", "5", "2") .sorted() .toArray(); - expect(array.length).toBe(5); - expect(array[0]).toBe("1"); - expect(array[1]).toBe("2"); - expect(array[2]).toBe("3"); - expect(array[3]).toBe("4"); - expect(array[4]).toBe("5"); + + expect(array).toEqual(["1", "2", "3", "4", "5"]); }); it("should sort numbers by natural order", () => { const array = sequenceOf(1, 4, 3, 5, 2) .sorted(it => it.naturalOrder()) .toArray(); + expect(array).toEqual([1, 2, 3, 4, 5]); }); @@ -37,6 +30,7 @@ describe("sorted", () => { .sorted(it => it.naturalOrder() .reversed()) .toArray(); + expect(array).toEqual([5, 4, 3, 2, 1]); }); @@ -44,21 +38,24 @@ describe("sorted", () => { const array = sequenceOf(1, 4, 3, 5, 2) .sorted(it => it.reverseOrder()) .toArray(); + expect(array).toEqual([5, 4, 3, 2, 1]); }); it("should sort by given compareFn", () => { - const fn = (a, b) => a < b ? 1 : a > b ? -1 : 0; + const fn = (a: number, b: number) => a < b ? 1 : a > b ? -1 : 0; const array = sequenceOf(1, 4, 3, 5, 2) .sorted(it => it.compare(fn)) .toArray(); + expect(array).toEqual([5, 4, 3, 2, 1]); }); - it("should sort by comparing the given property", () => { + it("should sort by comparing the selected property", () => { const array = sequenceOf({x: 2}, {x: 1}, {x: 3}) .sorted(it => it.compareBy(it => it.x)) .toArray(); + expect(array).toEqual([{x: 1}, {x: 2}, {x: 3}]); }); @@ -66,21 +63,24 @@ describe("sorted", () => { const array = sequenceOf({x: 2}, {x: 1}, {x: 3}) .sorted(it => it.compareBy("x")) .toArray(); + expect(array).toEqual([{x: 1}, {x: 2}, {x: 3}]); }); - it("should sort by comparing the given property in reversed order", () => { + it("should sort by comparing the selected property in reversed order", () => { const array = sequenceOf({x: 2}, {x: 1}, {x: 3}) .sorted(it => it.compareBy(it => it.x) .reversed()) .toArray(); + expect(array).toEqual([{x: 3}, {x: 2}, {x: 1}]); }); - it("should sort by comparing the given property descending", () => { + it("should sort by comparing the selected property descending", () => { const array = sequenceOf({x: 2}, {x: 1}, {x: 3}) .sorted(it => it.compareByDescending(it => it.x)) .toArray(); + expect(array).toEqual([{x: 3}, {x: 2}, {x: 1}]); }); @@ -88,18 +88,17 @@ describe("sorted", () => { const array = sequenceOf({x: 2}, {x: 1}, {x: 3}) .sorted(it => it.compareByDescending("x")) .toArray(); + expect(array).toEqual([{x: 3}, {x: 2}, {x: 1}]); }); - it("should sort by comparing the given property then other property", () => { + it("should sort by comparing the selected property then other property", () => { const array = sequenceOf({x: 2, y: 2}, {x: 1, y: 2}, {x: 1, y: 1}) .sorted(it => it.compareBy(it => it.x) .thenBy(it => it.y)) .toArray(); - expect(array.length).toBe(3); - expect(array[0]).toEqual({x: 1, y: 1}); - expect(array[1]).toEqual({x: 1, y: 2}); - expect(array[2]).toEqual({x: 2, y: 2}); + + expect(array).toEqual([{x: 1, y: 1}, {x: 1, y: 2}, {x: 2, y: 2}]); }); it("should sort by comparing the given key then other key", () => { @@ -107,25 +106,50 @@ describe("sorted", () => { .sorted(it => it.compareBy("x") .thenBy("y")) .toArray(); - expect(array.length).toBe(3); - expect(array[0]).toEqual({x: 1, y: 1}); - expect(array[1]).toEqual({x: 1, y: 2}); - expect(array[2]).toEqual({x: 2, y: 2}); + + expect(array).toEqual([{x: 1, y: 1}, {x: 1, y: 2}, {x: 2, y: 2}]); + }); + + it("should sort by comparing the selected property then other property with nulls last", () => { + const array = sequenceOf({x: 2, y: 2}, undefined, null, {x: 1, y: 2}, {x: null, y: undefined}, {x: 1, y: 1}) + .sorted(it => it.compareBy(it => it?.x) + .thenBy(it => it?.y)) + .toArray(); + + expect(array).toEqual([{x: 1, y: 1}, {x: 1, y: 2}, {x: 2, y: 2}, {x: null, y: undefined}, null, undefined]); + }); + + it("should sort by comparing the given key then other key with nulls last", () => { + const array = sequenceOf({x: 2, y: 2}, undefined, null, {x: 1, y: 2}, {x: null, y: undefined}, {x: 1, y: 1}) + .sorted(it => it.compareBy("x") + .thenBy("y")) + .toArray(); + + expect(array).toEqual([{x: 1, y: 1}, {x: 1, y: 2}, {x: 2, y: 2}, {x: null, y: undefined}, null, undefined]); + }); + + it("should order nulls first", () => { + const array = sequenceOf({x: 2}, null, {x: 1}, {x: 3}, null) + .sorted(it => it.nullsFirst()) + .toArray(); + + expect(array).toEqual([null, null, {x: 2}, {x: 1}, {x: 3}]); }); it("should order nulls last", () => { const array = sequenceOf({x: 2}, null, {x: 1}, {x: 3}, null) - .sorted(it => it.nullsLast() - .thenBy(it => it.x)) + .sorted(it => it.nullsLast()) .toArray(); - expect(array).toEqual([{x: 1}, {x: 2}, {x: 3}, null, null]); + + expect(array).toEqual([{x: 2}, {x: 1}, {x: 3}, null, null]); }); it("should order nulls first then by descending selected property", () => { const array = sequenceOf({x: 2}, null, {x: 1}, {x: 3}, null) .sorted(it => it.nullsFirst() - .thenByDescending(it => it.x)) + .thenByDescending(it => it?.x)) .toArray(); + expect(array).toEqual([null, null, {x: 3}, {x: 2}, {x: 1}]); }); @@ -134,6 +158,7 @@ describe("sorted", () => { .sorted(it => it.nullsFirst() .thenByDescending("x")) .toArray(); + expect(array).toEqual([null, null, {x: 3}, {x: 2}, {x: 1}]); }); }); \ No newline at end of file diff --git a/test/sortedBy.test.ts b/test/operators/sync/sortedBy.test.ts similarity index 58% rename from test/sortedBy.test.ts rename to test/operators/sync/sortedBy.test.ts index fc1b426..3d44b08 100644 --- a/test/sortedBy.test.ts +++ b/test/operators/sync/sortedBy.test.ts @@ -1,4 +1,4 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("sortedBy", () => { it("should sort by the given key ascending", () => { @@ -11,10 +11,6 @@ describe("sortedBy", () => { .sortedBy(it => it.a) .toArray(); - expect(array.length).toBe(4); - expect(array[0]).toBe(a1); - expect(array[1]).toBe(a3); - expect(array[2]).toBe(a4); - expect(array[3]).toBe(a23); + expect(array).toEqual([a1, a3, a4, a23]); }); }); \ No newline at end of file diff --git a/test/sortedByDescending.test.ts b/test/operators/sync/sortedByDescending.test.ts similarity index 59% rename from test/sortedByDescending.test.ts rename to test/operators/sync/sortedByDescending.test.ts index 27fc2d8..feef60d 100644 --- a/test/sortedByDescending.test.ts +++ b/test/operators/sync/sortedByDescending.test.ts @@ -1,4 +1,4 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("sortedBy", () => { it("should sort by the given key descending", () => { @@ -11,10 +11,6 @@ describe("sortedBy", () => { .sortedByDescending(it => it.a) .toArray(); - expect(array.length).toBe(4); - expect(array[0]).toBe(a23); - expect(array[1]).toBe(a4); - expect(array[2]).toBe(a3); - expect(array[3]).toBe(a1); + expect(array).toEqual([a23, a4, a3, a1]); }); }); \ No newline at end of file diff --git a/test/operators/sync/sortedDescending.test.ts b/test/operators/sync/sortedDescending.test.ts new file mode 100644 index 0000000..166865d --- /dev/null +++ b/test/operators/sync/sortedDescending.test.ts @@ -0,0 +1,19 @@ +import {sequenceOf} from "../../../src/sequency"; + +describe("sorted", () => { + it("should sort numbers descending", () => { + const array = sequenceOf(1, 4, 3, 5, 2) + .sortedDescending() + .toArray(); + + expect(array).toEqual([5, 4, 3, 2, 1]); + }); + + it("should sort strings descending", () => { + const array = sequenceOf("1", "4", "3", "5", "2") + .sortedDescending() + .toArray(); + + expect(array).toEqual(["5", "4", "3", "2", "1"]); + }); +}); \ No newline at end of file diff --git a/test/sortedWith.test.ts b/test/operators/sync/sortedWith.test.ts similarity index 61% rename from test/sortedWith.test.ts rename to test/operators/sync/sortedWith.test.ts index c0d3d26..8e9c3fc 100644 --- a/test/sortedWith.test.ts +++ b/test/operators/sync/sortedWith.test.ts @@ -1,4 +1,4 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("sortedWith", () => { it("should sort numbers by given comparator", () => { @@ -13,11 +13,7 @@ describe("sortedWith", () => { return 0; }) .toArray(); - expect(array.length).toBe(5); - expect(array[0]).toBe(5); - expect(array[1]).toBe(4); - expect(array[2]).toBe(3); - expect(array[3]).toBe(2); - expect(array[4]).toBe(1); + + expect(array).toEqual([5, 4, 3, 2, 1]); }); }); \ No newline at end of file diff --git a/test/sum.test.ts b/test/operators/sync/sum.test.ts similarity index 77% rename from test/sum.test.ts rename to test/operators/sync/sum.test.ts index 81bb2af..68f7aa7 100644 --- a/test/sum.test.ts +++ b/test/operators/sync/sum.test.ts @@ -1,9 +1,10 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("sum", () => { it("should sum all numbers", () => { const result = sequenceOf(1, 2, 3) .sum(); + expect(result).toBe(6); }); }); \ No newline at end of file diff --git a/test/sumBy.test.ts b/test/operators/sync/sumBy.test.ts similarity index 80% rename from test/sumBy.test.ts rename to test/operators/sync/sumBy.test.ts index b4a82d5..c9b1a3b 100644 --- a/test/sumBy.test.ts +++ b/test/operators/sync/sumBy.test.ts @@ -1,9 +1,10 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("sumBy", () => { it("should sum all selected numbers", () => { const result = sequenceOf({a: 2}, {a: 4}, {a: 6}) .sumBy(it => it.a); + expect(result).toBe(12); }); }); \ No newline at end of file diff --git a/test/take.test.ts b/test/operators/sync/take.test.ts similarity index 67% rename from test/take.test.ts rename to test/operators/sync/take.test.ts index e0b3946..c6fc451 100644 --- a/test/take.test.ts +++ b/test/operators/sync/take.test.ts @@ -1,19 +1,19 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("take", () => { it("should take first 2 items", () => { const result = sequenceOf(1, 2, 3, 4) .take(2) .toArray(); - expect(result.length).toBe(2); - expect(result[0]).toBe(1); - expect(result[1]).toBe(2); + + expect(result).toEqual([1, 2]); }); it("should take no items", () => { const result = sequenceOf(1, 2, 3, 4) .take(0) .toArray(); + expect(result.length).toBe(0); }); @@ -21,17 +21,15 @@ describe("take", () => { const result = sequenceOf(1, 2, 3, 4) .take(10) .toArray(); - expect(result.length).toBe(4); - expect(result[0]).toBe(1); - expect(result[1]).toBe(2); - expect(result[2]).toBe(3); - expect(result[3]).toBe(4); + + expect(result).toEqual([1, 2, 3, 4]); }); it("should take nothing for n < 0", () => { const result = sequenceOf(1, 2, 3) .take(-10) .toArray(); + expect(result.length).toBe(0); }); }); \ No newline at end of file diff --git a/test/takeWhile.test.ts b/test/operators/sync/takeWhile.test.ts similarity index 65% rename from test/takeWhile.test.ts rename to test/operators/sync/takeWhile.test.ts index c047cbf..347af41 100644 --- a/test/takeWhile.test.ts +++ b/test/operators/sync/takeWhile.test.ts @@ -1,19 +1,19 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("takeWhile", () => { it("should take elements until predicate evaluates to false", () => { const result = sequenceOf(1, 2, 3, 2, 1) .takeWhile(it => it < 3) .toArray(); - expect(result.length).toBe(2); - expect(result[0]).toBe(1); - expect(result[1]).toBe(2); + + expect(result).toEqual([1, 2]); }); it("should take no elements", () => { const result = sequenceOf(1, 2, 3) .takeWhile(it => it > 3) .toArray(); + expect(result.length).toBe(0); }); @@ -21,9 +21,7 @@ describe("takeWhile", () => { const result = sequenceOf(1, 2, 3) .takeWhile(it => it > 0) .toArray(); - expect(result.length).toBe(3); - expect(result[0]).toBe(1); - expect(result[1]).toBe(2); - expect(result[2]).toBe(3); + + expect(result).toEqual([1, 2, 3]); }); }); \ No newline at end of file diff --git a/test/operators/sync/toArray.test.ts b/test/operators/sync/toArray.test.ts new file mode 100644 index 0000000..bc86ec8 --- /dev/null +++ b/test/operators/sync/toArray.test.ts @@ -0,0 +1,21 @@ +import {asSequence, sequenceOf} from "../../../src/sequency"; + +describe("toArray", () => { + it("should return new array", () => { + const input = [1, 2, 3]; + const array = asSequence(input) + .toArray(); + + expect(array).not.toBe(input); + expect(array).toEqual(input); + }); + + it("should append items to passed array", () => { + const array = [1]; + const result = sequenceOf(2, 3, 4) + .toArray(array); + + expect(result).toBe(array); + expect(result).toEqual([1, 2, 3, 4]); + }); +}); \ No newline at end of file diff --git a/test/operators/sync/toAsyncSequence.test.ts b/test/operators/sync/toAsyncSequence.test.ts new file mode 100644 index 0000000..d9b0ba2 --- /dev/null +++ b/test/operators/sync/toAsyncSequence.test.ts @@ -0,0 +1,19 @@ +import {asyncSequenceOf, asSequence, sequenceOf} from "../../../src/sequency"; + +describe("toAsyncSequence", () => { + it("should return an async sequence", async () => { + const input = [1, 2, 3]; + const array = await asSequence(input).toAsyncSequence() + .toArray(); + + expect(array).not.toBe(input); + expect(array).toEqual(input); + }); + + it("should append items to passed async sequence", async () => { + const result = await sequenceOf(2, 3, 4).toAsyncSequence(asyncSequenceOf(1)) + .toArray(); + + expect(result).toEqual([1, 2, 3, 4]); + }); +}); \ No newline at end of file diff --git a/test/operators/sync/toList.test.ts b/test/operators/sync/toList.test.ts new file mode 100644 index 0000000..e5a65bb --- /dev/null +++ b/test/operators/sync/toList.test.ts @@ -0,0 +1,21 @@ +import {asSequence, sequenceOf} from "../../../src/sequency"; + +describe("toList", () => { + it("should return new array", () => { + const input = [1, 2, 3]; + const array = asSequence(input) + .toList(); + + expect(array).not.toBe(input); + expect(array).toEqual(input); + }); + + it("should append items to passed array", () => { + const array = [1]; + const result = sequenceOf(2, 3, 4) + .toList(array); + + expect(result).toBe(array); + expect(result).toEqual([1, 2, 3, 4]); + }); +}); \ No newline at end of file diff --git a/test/operators/sync/toMap.test.ts b/test/operators/sync/toMap.test.ts new file mode 100644 index 0000000..c3564a0 --- /dev/null +++ b/test/operators/sync/toMap.test.ts @@ -0,0 +1,43 @@ +import {asSequence} from "../../../src/sequency"; + +describe("toMap", () => { + it("should return items as new map", () => { + const key1 = {k: 1}; + const key2 = {k: 2}; + const key3 = {k: 3}; + const array: [object, string][] = [[key1, "a"], [key2, "b"], [key3, "c"]]; + const map = asSequence(array) + .toMap(); + + expect(map).toEqual( + new Map([ + [key1, "a"], + [key2, "b"], + [key3, "c"] + ]) + ); + }); + + it("should append items to passed map", () => { + const key0 = {k: 0}; + const key1 = {k: 1}; + const key2 = {k: 2}; + const key3 = {k: 3}; + + const existingMap = new Map(); + existingMap.set(key0, "_"); + + const array: [object, string][] = [[key1, "a"], [key2, "b"], [key3, "c"]]; + const result = asSequence(array) + .toMap(existingMap); + + expect(result).toEqual( + new Map([ + [key0, "_"], + [key1, "a"], + [key2, "b"], + [key3, "c"] + ]) + ); + }); +}); \ No newline at end of file diff --git a/test/operators/sync/toSet.test.ts b/test/operators/sync/toSet.test.ts new file mode 100644 index 0000000..70fe104 --- /dev/null +++ b/test/operators/sync/toSet.test.ts @@ -0,0 +1,19 @@ +import {sequenceOf} from "../../../src/sequency"; + +describe("toSet", () => { + it("should return new set of distinct items", () => { + const result = sequenceOf(1, 2, 2, 3, 3, 3) + .toSet(); + + expect(result).toEqual(new Set([1, 2, 3])); + }); + + it("should add distinct items to existing set", () => { + const existingSet = new Set([4]); + const result = sequenceOf(1, 2, 2, 3, 3, 3) + .toSet(existingSet); + + expect(result).toBe(existingSet); + expect(result).toEqual(new Set([1, 2, 3, 4])); + }); +}); \ No newline at end of file diff --git a/test/operators/sync/unzip.test.ts b/test/operators/sync/unzip.test.ts new file mode 100644 index 0000000..048b325 --- /dev/null +++ b/test/operators/sync/unzip.test.ts @@ -0,0 +1,12 @@ +import {sequenceOf} from "../../../src/sequency"; + +describe("unzip", () => { + it("should unzip items", () => { + const [first, second] = sequenceOf("a", "b", "c") + .zip(sequenceOf(1, 2, 3)) + .unzip(); + + expect(first).toEqual(["a", "b", "c"]); + expect(second).toEqual([1, 2, 3]); + }); +}); \ No newline at end of file diff --git a/test/zip.test.ts b/test/operators/sync/zip.test.ts similarity index 61% rename from test/zip.test.ts rename to test/operators/sync/zip.test.ts index cd481d0..0e248c5 100644 --- a/test/zip.test.ts +++ b/test/operators/sync/zip.test.ts @@ -1,20 +1,27 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../../../src/sequency"; describe("zip", () => { it("should combine items from both sequences into pairs", () => { const array = sequenceOf("a", "b", "c") .zip(sequenceOf(1, 2, 3)) .toArray(); - expect(array.length).toBe(3); - expect(array[0]).toEqual(["a", 1]); - expect(array[1]).toEqual(["b", 2]); - expect(array[2]).toEqual(["c", 3]); + + expect(array).toEqual([ + ["a", 1], + ["b", 2], + ["c", 3] + ]); }); it("should discard elements if length of sequences is different", () => { const array = sequenceOf(1, 2, 3) .zip(sequenceOf(1, 2, 3, 4, 5, 6, 7)) .toArray(); - expect(array.length).toBe(3); + + expect(array).toEqual([ + [1, 1], + [2, 2], + [3, 3] + ]); }); }); \ No newline at end of file diff --git a/test/partition.test.ts b/test/partition.test.ts deleted file mode 100644 index f5058b7..0000000 --- a/test/partition.test.ts +++ /dev/null @@ -1,16 +0,0 @@ -import {sequenceOf} from "../src/Sequence"; - -describe("partition", () => { - it("should partition based on the given predicate", () => { - const result = sequenceOf(1, 2, 3, 4) - .partition(it => it % 2 === 1); - - expect(result.true.length).toBe(2); - expect(result.true[0]).toBe(1); - expect(result.true[1]).toBe(3); - - expect(result.false.length).toBe(2); - expect(result.false[0]).toBe(2); - expect(result.false[1]).toBe(4); - }); -}); \ No newline at end of file diff --git a/test/plus.test.ts b/test/plus.test.ts deleted file mode 100644 index 05c3fb1..0000000 --- a/test/plus.test.ts +++ /dev/null @@ -1,48 +0,0 @@ -import {emptySequence, sequenceOf} from "../src/Sequence"; - -describe("plus", () => { - it("should append element", () => { - const array = sequenceOf(1, 2, 3) - .plus(4) - .toArray(); - expect(array.length).toBe(4); - expect(array[0]).toBe(1); - expect(array[1]).toBe(2); - expect(array[2]).toBe(3); - expect(array[3]).toBe(4); - }); - - it("should append array", () => { - const array = sequenceOf(1, 2, 3) - .plus([4, 5]) - .toArray(); - expect(array.length).toBe(5); - expect(array[0]).toBe(1); - expect(array[1]).toBe(2); - expect(array[2]).toBe(3); - expect(array[3]).toBe(4); - expect(array[4]).toBe(5); - }); - - it("should append sequence", () => { - const array = sequenceOf(1, 2, 3) - .plus(sequenceOf(4, 5)) - .toArray(); - expect(array.length).toBe(5); - expect(array[0]).toBe(1); - expect(array[1]).toBe(2); - expect(array[2]).toBe(3); - expect(array[3]).toBe(4); - expect(array[4]).toBe(5); - }); - - it("should append empty sequence", () => { - const array = sequenceOf(1, 2, 3) - .plus(emptySequence()) - .toArray(); - expect(array.length).toBe(3); - expect(array[0]).toBe(1); - expect(array[1]).toBe(2); - expect(array[2]).toBe(3); - }); -}); \ No newline at end of file diff --git a/test/range.test.ts b/test/range.test.ts index 4b2403e..8420985 100644 --- a/test/range.test.ts +++ b/test/range.test.ts @@ -1,27 +1,37 @@ -import {range} from "../src/Sequence"; +import {range} from "../src/sequency"; describe("range", () => { it("should create range of numbers with step = 1", () => { - const numbers = range(0, 5).toArray(); + const numbers = range(0, 5) + .toArray(); + expect(numbers).toEqual([0, 1, 2, 3, 4, 5]); }); it("should create range of numbers with step = .5", () => { - const numbers = range(0, 4, .5).toArray(); + const numbers = range(0, 4, .5) + .toArray(); + expect(numbers).toEqual([0, .5, 1, 1.5, 2, 2.5, 3, 3.5, 4.0]); }); it("should include one element", () => { - const numbers = range(0, 0).toArray(); + const numbers = range(0, 0) + .toArray(); + expect(numbers).toEqual([0]); }); it("should include two element", () => { - const numbers = range(0, 1).toArray(); + const numbers = range(0, 1) + .toArray(); + expect(numbers).toEqual([0, 1]); }); it("should throw on invalid boundaries", () => { - expect(() => range(1, 0)).toThrow(); + expect( + () => range(1, 0) + ).toThrow(); }); }); diff --git a/test/reverse.test.ts b/test/reverse.test.ts deleted file mode 100644 index 4588d50..0000000 --- a/test/reverse.test.ts +++ /dev/null @@ -1,13 +0,0 @@ -import {sequenceOf} from "../src/Sequence"; - -describe("reverse", () => { - it("should reverse order", () => { - const array = sequenceOf(1, 2, 3) - .reverse() - .toArray(); - expect(array.length).toBe(3); - expect(array[0]).toBe(3); - expect(array[1]).toBe(2); - expect(array[2]).toBe(1); - }); -}); \ No newline at end of file diff --git a/test/sequenceOf.test.ts b/test/sequenceOf.test.ts index 49e9fe9..f5c4839 100644 --- a/test/sequenceOf.test.ts +++ b/test/sequenceOf.test.ts @@ -1,4 +1,4 @@ -import {sequenceOf} from "../src/Sequence"; +import {sequenceOf} from "../src/sequency"; describe("sequenceOf", () => { it("filter-map-toArray", () => { @@ -7,8 +7,6 @@ describe("sequenceOf", () => { .map(it => `num ${it}`) .toArray(); - expect(array.length).toBe(2); - expect(array[0]).toBe("num 2"); - expect(array[1]).toBe("num 3"); + expect(array).toEqual(["num 2", "num 3"]); }); }); \ No newline at end of file diff --git a/test/sortedDescending.test.ts b/test/sortedDescending.test.ts deleted file mode 100644 index 6e2bbde..0000000 --- a/test/sortedDescending.test.ts +++ /dev/null @@ -1,27 +0,0 @@ -import {sequenceOf} from "../src/Sequence"; - -describe("sorted", () => { - it("should sort numbers descending", () => { - const array = sequenceOf(1, 4, 3, 5, 2) - .sortedDescending() - .toArray(); - expect(array.length).toBe(5); - expect(array[0]).toBe(5); - expect(array[1]).toBe(4); - expect(array[2]).toBe(3); - expect(array[3]).toBe(2); - expect(array[4]).toBe(1); - }); - - it("should sort strings descending", () => { - const array = sequenceOf("1", "4", "3", "5", "2") - .sortedDescending() - .toArray(); - expect(array.length).toBe(5); - expect(array[0]).toBe("5"); - expect(array[1]).toBe("4"); - expect(array[2]).toBe("3"); - expect(array[3]).toBe("2"); - expect(array[4]).toBe("1"); - }); -}); \ No newline at end of file diff --git a/test/toArray.test.ts b/test/toArray.test.ts deleted file mode 100644 index b2bd140..0000000 --- a/test/toArray.test.ts +++ /dev/null @@ -1,26 +0,0 @@ -import {asSequence, sequenceOf} from "../src/Sequence"; - -describe("toArray", () => { - it("should return new array", () => { - const input = [1, 2, 3]; - const array = asSequence(input) - .toArray(); - expect(input).not.toBe(array); - expect(array.length).toBe(3); - expect(array[0]).toBe(1); - expect(array[1]).toBe(2); - expect(array[2]).toBe(3); - }); - - it("should append items to passed array", () => { - const array = [1]; - const result = sequenceOf(2, 3, 4) - .toArray(array); - expect(result).toBe(array); - expect(array.length).toBe(4); - expect(array[0]).toBe(1); - expect(array[1]).toBe(2); - expect(array[2]).toBe(3); - expect(array[3]).toBe(4); - }); -}); diff --git a/test/toList.test.ts b/test/toList.test.ts deleted file mode 100644 index b5e7236..0000000 --- a/test/toList.test.ts +++ /dev/null @@ -1,26 +0,0 @@ -import {asSequence, sequenceOf} from "../src/Sequence"; - -describe("toList", () => { - it("should return new array", () => { - const input = [1, 2, 3]; - const array = asSequence(input) - .toList(); - expect(input).not.toBe(array); - expect(array.length).toBe(3); - expect(array[0]).toBe(1); - expect(array[1]).toBe(2); - expect(array[2]).toBe(3); - }); - - it("should append items to passed array", () => { - const array = [1]; - const result = sequenceOf(2, 3, 4) - .toList(array); - expect(result).toBe(array); - expect(array.length).toBe(4); - expect(array[0]).toBe(1); - expect(array[1]).toBe(2); - expect(array[2]).toBe(3); - expect(array[3]).toBe(4); - }); -}); diff --git a/test/toMap.test.ts b/test/toMap.test.ts deleted file mode 100644 index 42e7106..0000000 --- a/test/toMap.test.ts +++ /dev/null @@ -1,36 +0,0 @@ -import {asSequence} from "../src/Sequence"; - -describe("toMap", () => { - it("should return items as new map", () => { - const key1 = {k: 1}; - const key2 = {k: 2}; - const key3 = {k: 3}; - const array: Array<[object, string]> = [[key1, "a"], [key2, "b"], [key3, "c"]]; - const map = asSequence(array) - .toMap(); - expect(map.size).toBe(3); - expect(map.get(key1)).toBe("a"); - expect(map.get(key2)).toBe("b"); - expect(map.get(key3)).toBe("c"); - }); - - it("should append items to passed map", () => { - const key0 = {k: 0}; - const key1 = {k: 1}; - const key2 = {k: 2}; - const key3 = {k: 3}; - - const existingMap = new Map(); - existingMap.set(key0, "_"); - - const array: Array<[object, string]> = [[key1, "a"], [key2, "b"], [key3, "c"]]; - const result = asSequence(array) - .toMap(existingMap); - - expect(result.size).toBe(4); - expect(result.get(key0)).toBe("_"); - expect(result.get(key1)).toBe("a"); - expect(result.get(key2)).toBe("b"); - expect(result.get(key3)).toBe("c"); - }); -}); \ No newline at end of file diff --git a/test/toSet.test.ts b/test/toSet.test.ts deleted file mode 100644 index 575fa4a..0000000 --- a/test/toSet.test.ts +++ /dev/null @@ -1,24 +0,0 @@ -import {sequenceOf} from "../src/Sequence"; - -describe("toSet", () => { - it("should return new set of distinct items", () => { - const result = sequenceOf(1, 2, 2, 3, 3, 3) - .toSet(); - expect(result.size).toBe(3); - expect(result.has(1)).toBe(true); - expect(result.has(2)).toBe(true); - expect(result.has(3)).toBe(true); - }); - - it("should add distinct items to existing set", () => { - const existingSet = new Set([4]); - const result = sequenceOf(1, 2, 2, 3, 3, 3) - .toSet(existingSet); - expect(result).toBe(existingSet); - expect(result.size).toBe(4); - expect(result.has(1)).toBe(true); - expect(result.has(2)).toBe(true); - expect(result.has(3)).toBe(true); - expect(result.has(4)).toBe(true); - }); -}); \ No newline at end of file diff --git a/test/undefinedAndNull.test.ts b/test/undefinedAndNull.test.ts index e5fce95..7b91624 100644 --- a/test/undefinedAndNull.test.ts +++ b/test/undefinedAndNull.test.ts @@ -1,15 +1,17 @@ -import {asSequence, sequenceOf} from "../src/Sequence"; +import {asSequence, sequenceOf} from "../src/sequency"; describe("undefinedAndNull", () => { it("should pass null values", () => { const result = sequenceOf(1, 2, null, 3, null, null, null, 4) .toList(); + expect(result).toEqual([1, 2, null, 3, null, null, null, 4]); }); it("should pass undefined values", () => { const result = sequenceOf(1, 2, undefined, 3, undefined, undefined, undefined, 4) .toList(); + expect(result).toEqual([1, 2, undefined, 3, undefined, undefined, undefined, 4]); }); @@ -18,6 +20,7 @@ describe("undefinedAndNull", () => { .filter(it => it == null || it % 2 === 1) .map(it => String(it)) .toList(); + expect(result).toEqual(["1", "null", "null", "3", "undefined", "undefined"]); }); }); \ No newline at end of file diff --git a/test/unzip.test.ts b/test/unzip.test.ts deleted file mode 100644 index 3166156..0000000 --- a/test/unzip.test.ts +++ /dev/null @@ -1,19 +0,0 @@ -import {sequenceOf} from "../src/Sequence"; - -describe("unzip", () => { - it("should unzip items", () => { - const [first, second] = sequenceOf("a", "b", "c") - .zip(sequenceOf(1, 2, 3)) - .unzip(); - - expect(first.length).toBe(3); - expect(first[0]).toBe("a"); - expect(first[1]).toBe("b"); - expect(first[2]).toBe("c"); - - expect(second.length).toBe(3); - expect(second[0]).toBe(1); - expect(second[1]).toBe(2); - expect(second[2]).toBe(3); - }); -}); \ No newline at end of file diff --git a/tsconfig.cjs.json b/tsconfig.cjs.json new file mode 100644 index 0000000..3862fd9 --- /dev/null +++ b/tsconfig.cjs.json @@ -0,0 +1,11 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "CommonJS", + "target": "ES2015", + "outDir": "./lib/cjs", + "declaration": false, + "emitDeclarationOnly": false, + "declarationDir": null + } +} \ No newline at end of file diff --git a/tsconfig.esm.json b/tsconfig.esm.json new file mode 100644 index 0000000..9193786 --- /dev/null +++ b/tsconfig.esm.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "module": "ES2015", + "target": "ES2015", + "outDir": "./lib/esm", + "declaration": false, + "emitDeclarationOnly": false, + "declarationDir": null, + "esModuleInterop": true + } +} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 1e50381..2c64517 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,18 +1,16 @@ { "compilerOptions": { - "module": "commonjs", - "target": "es5", - "lib": ["es2015"], - "outDir": "lib", + "module": "ES2015", + "target": "ES2015", + "outDir": "./lib", "declaration": true, + "emitDeclarationOnly": true, + "declarationDir": "./lib/types", "sourceMap": true, "skipLibCheck": true, "removeComments": false, - "strictNullChecks": true, - "noImplicitReturns": true, - "noImplicitUseStrict": true, - "noImplicitThis": true, - "noImplicitAny": true + "strict": true, + "noImplicitReturns": true }, "include": [ "src" diff --git a/webpack.config.js b/webpack.config.js index 64a42bd..4935f09 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,14 +1,15 @@ const path = require('path'); const webpack = require('webpack'); -const UglifyJsPlugin = require('uglifyjs-webpack-plugin'); +const TerserPlugin = require("terser-webpack-plugin"); +/** @type {webpack.Configuration} */ module.exports = { entry: { - 'sequency': './src/Sequence.ts', - 'sequency.min': './src/Sequence.ts' + 'sequency': './src/sequency.ts', + 'sequency.min': './src/sequency.ts' }, output: { - path: path.resolve(__dirname, 'lib-umd'), + path: path.resolve(__dirname, 'lib/umd'), filename: '[name].js', libraryTarget: 'umd', library: 'Sequency', @@ -22,12 +23,16 @@ module.exports = { rules: [{ test: /\.ts$/, loader: 'ts-loader', + options: { + transpileOnly: true, + configFile: 'tsconfig.cjs.json' + }, exclude: /node_modules/ }] }, optimization: { minimize: true, - minimizer: [new UglifyJsPlugin({ + minimizer: [new TerserPlugin({ include: /\.min\.js$/ })] } diff --git a/yarn.lock b/yarn.lock index 0971cd2..d182ac6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1,5380 +1,5242 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ampproject/remapping@^2.1.0": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.1.2.tgz#4edca94973ded9630d20101cd8559cedb8d8bd34" - integrity sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg== - dependencies: - "@jridgewell/trace-mapping" "^0.3.0" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== - dependencies: - "@babel/highlight" "^7.16.7" - -"@babel/compat-data@^7.16.4": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.17.0.tgz#86850b8597ea6962089770952075dcaabb8dba34" - integrity sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng== - -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.17.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.17.5.tgz#6cd2e836058c28f06a4ca8ee7ed955bbf37c8225" - integrity sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.3" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helpers" "^7.17.2" - "@babel/parser" "^7.17.3" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - -"@babel/generator@^7.17.3", "@babel/generator@^7.7.2": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.3.tgz#a2c30b0c4f89858cb87050c3ffdfd36bdf443200" - integrity sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg== - dependencies: - "@babel/types" "^7.17.0" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-compilation-targets@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" - integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== - dependencies: - "@babel/compat-data" "^7.16.4" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.17.5" - semver "^6.3.0" - -"@babel/helper-environment-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" - integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" - integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== - dependencies: - "@babel/helper-get-function-arity" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-get-function-arity@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" - integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-imports@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-transforms@^7.16.7": - version "7.17.6" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.6.tgz#3c3b03cc6617e33d68ef5a27a67419ac5199ccd0" - integrity sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.3" - "@babel/types" "^7.17.0" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" - integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== - -"@babel/helper-simple-access@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" - integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== - -"@babel/helpers@^7.17.2": - version "7.17.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.17.2.tgz#23f0a0746c8e287773ccd27c14be428891f63417" - integrity sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ== - dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.17.0" - "@babel/types" "^7.17.0" - -"@babel/highlight@^7.16.7": - version "7.16.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88" - integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.7", "@babel/parser@^7.17.3": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.3.tgz#b07702b982990bf6fdc1da5049a23fece4c5c3d0" - integrity sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA== - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.7.2": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8" - integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/template@^7.16.7", "@babel/template@^7.3.3": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/traverse@^7.17.0", "@babel/traverse@^7.17.3", "@babel/traverse@^7.7.2": - version "7.17.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57" - integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.17.3" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.17.3" - "@babel/types" "^7.17.0" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.0.0", "@babel/types@^7.16.7", "@babel/types@^7.17.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - version "7.17.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b" - integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" - -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - 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" - -"@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/console@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.5.1.tgz#260fe7239602fe5130a94f1aa386eff54b014bba" - integrity sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg== - dependencies: - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^27.5.1" - jest-util "^27.5.1" - slash "^3.0.0" - -"@jest/core@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626" - integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ== - dependencies: - "@jest/console" "^27.5.1" - "@jest/reporters" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.8.1" - exit "^0.1.2" - graceful-fs "^4.2.9" - jest-changed-files "^27.5.1" - jest-config "^27.5.1" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-resolve-dependencies "^27.5.1" - jest-runner "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - jest-watcher "^27.5.1" - micromatch "^4.0.4" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74" - integrity sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA== - dependencies: - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - -"@jest/fake-timers@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.5.1.tgz#76979745ce0579c8a94a4678af7a748eda8ada74" - integrity sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ== - dependencies: - "@jest/types" "^27.5.1" - "@sinonjs/fake-timers" "^8.0.1" - "@types/node" "*" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-util "^27.5.1" - -"@jest/globals@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.5.1.tgz#7ac06ce57ab966566c7963431cef458434601b2b" - integrity sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/types" "^27.5.1" - expect "^27.5.1" - -"@jest/reporters@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04" - integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.9" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-haste-map "^27.5.1" - jest-resolve "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^8.1.0" - -"@jest/source-map@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.5.1.tgz#6608391e465add4205eae073b55e7f279e04e8cf" - integrity sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.9" - source-map "^0.6.0" - -"@jest/test-result@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.5.1.tgz#56a6585fa80f7cdab72b8c5fc2e871d03832f5bb" - integrity sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag== - dependencies: - "@jest/console" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz#4057e0e9cea4439e544c6353c6affe58d095745b" - integrity sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ== - dependencies: - "@jest/test-result" "^27.5.1" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-runtime "^27.5.1" - -"@jest/transform@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.5.1.tgz#6c3501dcc00c4c08915f292a600ece5ecfe1f409" - integrity sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^27.5.1" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-regex-util "^27.5.1" - jest-util "^27.5.1" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - -"@jest/types@^27.5.1": - version "27.5.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" - integrity sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^16.0.0" - chalk "^4.0.0" - -"@jridgewell/resolve-uri@^3.0.3": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz#68eb521368db76d040a6315cdb24bf2483037b9c" - integrity sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.11" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz#771a1d8d744eeb71b6adb35808e1a6c7b9b8c8ec" - integrity sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg== - -"@jridgewell/trace-mapping@^0.3.0": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.4.tgz#f6a0832dffd5b8a6aaa633b7d9f8e8e94c83a0c3" - integrity sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@sinonjs/commons@^1.7.0": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^8.0.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== - dependencies: - "@sinonjs/commons" "^1.7.0" - -"@size-limit/esbuild@7.0.8": - version "7.0.8" - resolved "https://registry.yarnpkg.com/@size-limit/esbuild/-/esbuild-7.0.8.tgz#1dff3b41ab2c2b5b07ec61a124ecb19aa68661d0" - integrity sha512-AzCrxJJThDvHrBNoolebYVgXu46c6HuS3fOxoXr3V0YWNM0qz81z5F3j7RruzboZnls8ZgME4WrH6GM5rB9gtA== - dependencies: - esbuild "^0.14.18" - nanoid "^3.2.0" - -"@size-limit/file@7.0.8": - version "7.0.8" - resolved "https://registry.yarnpkg.com/@size-limit/file/-/file-7.0.8.tgz#05c43fa01bf164c2fba24e13f1695bf7e861e277" - integrity sha512-1KeFQuMXIXAH/iELqIX7x+YNYDFvzIvmxcp9PrdwEoSNL0dXdaDIo9WE/yz8xvOmUcKaLfqbWkL75DM0k91WHQ== - dependencies: - semver "7.3.5" - -"@size-limit/preset-small-lib@^7.0.8": - version "7.0.8" - resolved "https://registry.yarnpkg.com/@size-limit/preset-small-lib/-/preset-small-lib-7.0.8.tgz#e787fd1c5cddd51ff02a7a5bef34cbd13e17c2bf" - integrity sha512-CT8nIYA/c2CSD+X4rAUgwqYccQMahJ6rBnaZxvi3YKFdkXIbuGNXHNjHsYaFksgwG9P4UjG/unyO5L73f3zQBw== - dependencies: - "@size-limit/esbuild" "7.0.8" - "@size-limit/file" "7.0.8" - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.1.18" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.18.tgz#1a29abcc411a9c05e2094c98f9a1b7da6cdf49f8" - integrity sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" - integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== - dependencies: - "@babel/types" "^7.3.0" - -"@types/graceful-fs@^4.1.2": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" - integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== - dependencies: - "@types/istanbul-lib-report" "*" - -"@types/jest@^27.4.1": - version "27.4.1" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.4.1.tgz#185cbe2926eaaf9662d340cc02e548ce9e11ab6d" - integrity sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw== - dependencies: - jest-matcher-utils "^27.0.0" - pretty-format "^27.0.0" - -"@types/node@*": - version "17.0.21" - resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.21.tgz#864b987c0c68d07b4345845c3e63b75edd143644" - integrity sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ== - -"@types/prettier@^2.1.5": - version "2.4.4" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.4.tgz#5d9b63132df54d8909fce1c3f8ca260fdd693e17" - integrity sha512-ReVR2rLTV1kvtlWFyuot+d1pkpG2Fw/XKE3PDAdj57rbM97ttSp9JZ2UsP+2EHTylra9cUf6JA7tGwW1INzUrA== - -"@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== - -"@types/yargs-parser@*": - version "21.0.0" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" - integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== - -"@types/yargs@^16.0.0": - version "16.0.4" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" - integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== - dependencies: - "@types/yargs-parser" "*" - -"@webassemblyjs/ast@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" - integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== - dependencies: - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - -"@webassemblyjs/floating-point-hex-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" - integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== - -"@webassemblyjs/helper-api-error@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" - integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== - -"@webassemblyjs/helper-buffer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" - integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== - -"@webassemblyjs/helper-code-frame@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" - integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== - dependencies: - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/helper-fsm@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" - integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== - -"@webassemblyjs/helper-module-context@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" - integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== - dependencies: - "@webassemblyjs/ast" "1.9.0" - -"@webassemblyjs/helper-wasm-bytecode@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" - integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== - -"@webassemblyjs/helper-wasm-section@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" - integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - -"@webassemblyjs/ieee754@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" - integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== - dependencies: - "@xtuc/ieee754" "^1.2.0" - -"@webassemblyjs/leb128@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" - integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== - dependencies: - "@xtuc/long" "4.2.2" - -"@webassemblyjs/utf8@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" - integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== - -"@webassemblyjs/wasm-edit@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" - integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/helper-wasm-section" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-opt" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - "@webassemblyjs/wast-printer" "1.9.0" - -"@webassemblyjs/wasm-gen@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" - integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wasm-opt@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" - integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-buffer" "1.9.0" - "@webassemblyjs/wasm-gen" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - -"@webassemblyjs/wasm-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" - integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-wasm-bytecode" "1.9.0" - "@webassemblyjs/ieee754" "1.9.0" - "@webassemblyjs/leb128" "1.9.0" - "@webassemblyjs/utf8" "1.9.0" - -"@webassemblyjs/wast-parser@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" - integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/floating-point-hex-parser" "1.9.0" - "@webassemblyjs/helper-api-error" "1.9.0" - "@webassemblyjs/helper-code-frame" "1.9.0" - "@webassemblyjs/helper-fsm" "1.9.0" - "@xtuc/long" "4.2.2" - -"@webassemblyjs/wast-printer@1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" - integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/wast-parser" "1.9.0" - "@xtuc/long" "4.2.2" - -"@xtuc/ieee754@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" - integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== - -"@xtuc/long@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" - integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== - -abab@^2.0.3, abab@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== - -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^6.4.1: - version "6.4.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" - integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.2.4: - version "8.7.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" - integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -ajv-errors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" - integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== - -ajv-keywords@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" - -ajv-keywords@^3.4.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" - integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== - -ajv@^6.1.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.2.tgz#678495f9b82f7cca6be248dd92f59bff5e1f4360" - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.1" - -ajv@^6.10.2: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@^3.0.3, anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -aproba@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - dependencies: - array-uniq "^1.0.1" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -assert@^1.1.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" - dependencies: - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async@^2.6.1: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - -atob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.1.tgz#ae2d5a729477f289d60dd7f96a6314a22dd6c22a" - -babel-code-frame@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444" - integrity sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg== - dependencies: - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^27.5.1" - chalk "^4.0.0" - graceful-fs "^4.2.9" - slash "^3.0.0" - -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - 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" - -babel-plugin-jest-hoist@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz#9be98ecf28c331eb9f5df9c72d6f89deb8181c2e" - integrity sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" - "@types/babel__traverse" "^7.0.6" - -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== - 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" - -babel-preset-jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz#91f10f58034cb7989cb4f962b69fa6eef6a6bc81" - integrity sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag== - dependencies: - babel-plugin-jest-hoist "^27.5.1" - babel-preset-current-node-syntax "^1.0.0" - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - -base64-js@^1.0.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -big.js@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" - integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== - -binary-extensions@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bluebird@^3.5.5: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.1, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - dependencies: - bn.js "^4.1.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" - -browserify-zlib@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - dependencies: - pako "~1.0.5" - -browserslist@^4.17.5: - version "4.20.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.20.0.tgz#35951e3541078c125d36df76056e94738a52ebe9" - integrity sha512-bnpOoa+DownbciXj0jVGENf8VYQnE2LNWomhYuCsMmmx9Jd9lwq0WXODuwpSsp8AVdKM2/HorrzxAfbKvWTByQ== - dependencies: - caniuse-lite "^1.0.30001313" - electron-to-chromium "^1.4.76" - escalade "^3.1.1" - node-releases "^2.0.2" - picocolors "^1.0.0" - -bser@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" - dependencies: - node-int64 "^0.4.0" - -buffer-from@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.0.tgz#87fcaa3a298358e0ade6e442cfce840740d1ad04" - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - -buffer@^4.3.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - isarray "^1.0.0" - -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - -bytes-iec@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/bytes-iec/-/bytes-iec-3.1.1.tgz#94cd36bf95c2c22a82002c247df8772d1d591083" - integrity sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA== - -cacache@^12.0.2: - version "12.0.4" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" - integrity sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ== - dependencies: - bluebird "^3.5.5" - chownr "^1.1.1" - figgy-pudding "^3.5.1" - glob "^7.1.4" - graceful-fs "^4.1.15" - infer-owner "^1.0.3" - lru-cache "^5.1.1" - mississippi "^3.0.0" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - promise-inflight "^1.0.1" - rimraf "^2.6.3" - ssri "^6.0.1" - unique-filename "^1.1.1" - y18n "^4.0.0" - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase@^5.0.0, camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001313: - version "1.0.30001314" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001314.tgz#65c7f9fb7e4594fca0a333bec1d8939662377596" - integrity sha512-0zaSO+TnCHtHJIbpLroX7nsD+vYuOVjl3uzFbJO1wMVbuveJA0RK2WcQA9ZUIOiO0/ArMiMgHJLxfEZhQiC0kw== - -chalk@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.3.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -char-regex@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== - -chokidar@^2.1.8: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chokidar@^3.4.1, chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -chrome-trace-event@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" - integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== - -ci-info@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" - integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== - -ci-job-number@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/ci-job-number/-/ci-job-number-1.2.2.tgz#f4e5918fcaeeda95b604f214be7d7d4a961fe0c0" - integrity sha512-CLOGsVDrVamzv8sXJGaILUVI6dsuAkouJP/n6t+OxLPeeA4DDby7zn9SB6EUpa1H7oIKoE+rMmkW80zYsFfUjA== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -cjs-module-lexer@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" - integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -cliui@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" - integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== - dependencies: - string-width "^3.1.0" - strip-ansi "^5.2.0" - wrap-ansi "^5.1.0" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - -collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0: - version "1.9.2" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.2.tgz#49881b8fba67df12a96bdf3f56c0aab9e7913147" - dependencies: - color-name "1.1.1" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^2.12.1: - version "2.16.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50" - -commander@^2.18.0, commander@^2.20.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - -component-emitter@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - -concat-stream@^1.5.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -console-browserify@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" - dependencies: - date-now "^0.1.4" - -constants-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - -convert-source-map@^1.4.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" - -convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - -copy-concurrently@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" - dependencies: - aproba "^1.1.1" - fs-write-stream-atomic "^1.0.8" - iferr "^0.1.5" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.0" - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - -core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - -create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - dependencies: - bn.js "^4.1.0" - elliptic "^6.0.0" - -create-hash@^1.1.0, create-hash@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-browserify@^3.11.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - -cyclist@~0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" - -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - -date-now@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" - -debug@4, debug@^4.1.0, debug@^4.1.1: - version "4.3.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" - integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== - dependencies: - ms "2.1.2" - -debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" - -decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - -decimal.js@^10.2.1: - version "10.3.1" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" - integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - -des.js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= - -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -diff-sequences@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" - integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== - -diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -domain-browser@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.0.tgz#592903f5d80b38d037220541264d69a198fb3410" - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -electron-to-chromium@^1.4.76: - version "1.4.77" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.77.tgz#c26e454cb8721d4ebdae3e276c57cd32e51c32ed" - integrity sha512-fiDxw8mO9Ph1Z0bjX2sFTPpi0J0QkOiwOJF+5Q0J0baNc/F9lLePAvDPlnoxvbUYYMizqrKPeotRRkJ9LtxAew== - -elliptic@^6.0.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" - -email-addresses@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-3.1.0.tgz#cabf7e085cbdb63008a70319a74e6136188812fb" - integrity sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg== - -emittery@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" - integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emojis-list@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" - integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== - -end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - dependencies: - once "^1.4.0" - -enhanced-resolve@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.4.0" - tapable "^1.0.0" - -enhanced-resolve@^4.1.1, enhanced-resolve@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" - integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - -errno@^0.1.3, errno@~0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" - dependencies: - prr "~1.0.1" - -error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -esbuild-android-64@0.14.25: - version "0.14.25" - resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.25.tgz#d532d38cb5fe0ae45167ce35f4bbc784c636be40" - integrity sha512-L5vCUk7TzFbBnoESNoXjU3x9+/+7TDIE/1mTfy/erAfvZAqC+S3sp/Qa9wkypFMcFvN9FzvESkTlpeQDolREtQ== - -esbuild-android-arm64@0.14.25: - version "0.14.25" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.25.tgz#9c5bb3366aabfd14a1c726d36978b79441dfcb6e" - integrity sha512-4jv5xPjM/qNm27T5j3ZEck0PvjgQtoMHnz4FzwF5zNP56PvY2CT0WStcAIl6jNlsuDdN63rk2HRBIsO6xFbcFw== - -esbuild-darwin-64@0.14.25: - version "0.14.25" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.25.tgz#05dcdb6d884f427039ffee5e92ff97527e56c26d" - integrity sha512-TGp8tuudIxOyWd1+8aYPxQmC1ZQyvij/AfNBa35RubixD0zJ1vkKHVAzo0Zao1zcG6pNqiSyzfPto8vmg0s7oA== - -esbuild-darwin-arm64@0.14.25: - version "0.14.25" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.25.tgz#28e080da4ea0cfe9498071e7f8060498caee1a95" - integrity sha512-oTcDgdm0MDVEmw2DWu8BV68pYuImpFgvWREPErBZmNA4MYKGuBRaCiJqq6jZmBR1x+3y1DWCjez+5uLtuAm6mw== - -esbuild-freebsd-64@0.14.25: - version "0.14.25" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.25.tgz#200d3664a3b945bc9fdcba73614b49a11ebd1cfa" - integrity sha512-ueAqbnMZ8arnuLH8tHwTCQYeptnHOUV7vA6px6j4zjjQwDx7TdP7kACPf3TLZLdJQ3CAD1XCvQ2sPhX+8tacvQ== - -esbuild-freebsd-arm64@0.14.25: - version "0.14.25" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.25.tgz#624b08c5da6013bdc312aaa23c4ff409580f5c3c" - integrity sha512-+ZVWud2HKh+Ob6k/qiJWjBtUg4KmJGGmbvEXXW1SNKS7hW7HU+Zq2ZCcE1akFxOPkVB+EhOty/sSek30tkCYug== - -esbuild-linux-32@0.14.25: - version "0.14.25" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.25.tgz#0238e597eb0b60aa06c7e98fccbbfd6bb9a0d6c5" - integrity sha512-3OP/lwV3kCzEz45tobH9nj+uE4ubhGsfx+tn0L26WAGtUbmmcRpqy7XRG/qK7h1mClZ+eguIANcQntYMdYklfw== - -esbuild-linux-64@0.14.25: - version "0.14.25" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.25.tgz#8a8b8cf47dfce127c858e71229d9a385a82c62e8" - integrity sha512-+aKHdHZmX9qwVlQmu5xYXh7GsBFf4TWrePgeJTalhXHOG7NNuUwoHmketGiZEoNsWyyqwH9rE5BC+iwcLY30Ug== - -esbuild-linux-arm64@0.14.25: - version "0.14.25" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.25.tgz#7ac94371418a2640ba413bc1700aaedeb2794e52" - integrity sha512-UxfenPx/wSZx55gScCImPtXekvZQLI2GW3qe5dtlmU7luiqhp5GWPzGeQEbD3yN3xg/pHc671m5bma5Ns7lBHw== - -esbuild-linux-arm@0.14.25: - version "0.14.25" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.25.tgz#034bd18e9310b9f010c89f90ef7f05706689600b" - integrity sha512-aTLcE2VBoLydL943REcAcgnDi3bHtmULSXWLbjtBdtykRatJVSxKMjK9YlBXUZC4/YcNQfH7AxwVeQr9fNxPhw== - -esbuild-linux-mips64le@0.14.25: - version "0.14.25" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.25.tgz#05f98a8cf6b578eab6b4e6b0ab094f37530934f4" - integrity sha512-wLWYyqVfYx9Ur6eU5RT92yJVsaBGi5RdkoWqRHOqcJ38Kn60QMlcghsKeWfe9jcYut8LangYZ98xO1LxIoSXrQ== - -esbuild-linux-ppc64le@0.14.25: - version "0.14.25" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.25.tgz#46fd0add8d8535678439d7a9c2876ad20042d952" - integrity sha512-0dR6Csl6Zas3g4p9ULckEl8Mo8IInJh33VCJ3eaV1hj9+MHGdmDOakYMN8MZP9/5nl+NU/0ygpd14cWgy8uqRw== - -esbuild-linux-riscv64@0.14.25: - version "0.14.25" - resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.25.tgz#ea2e986f0f3e5df73c635135dd778051734fc605" - integrity sha512-J4d20HDmTrgvhR0bdkDhvvJGaikH3LzXQnNaseo8rcw9Yqby9A90gKUmWpfwqLVNRILvNnAmKLfBjCKU9ajg8w== - -esbuild-linux-s390x@0.14.25: - version "0.14.25" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.25.tgz#efe89486e9a1b1508925048076e3f3a6698aa6a3" - integrity sha512-YI2d5V6nTE73ZnhEKQD7MtsPs1EtUZJ3obS21oxQxGbbRw1G+PtJKjNyur+3t6nzHP9oTg6GHQ3S3hOLLmbDIQ== - -esbuild-netbsd-64@0.14.25: - version "0.14.25" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.25.tgz#439fe27d8ee3b5887501ee63988e85f920107db6" - integrity sha512-TKIVgNWLUOkr+Exrye70XTEE1lJjdQXdM4tAXRzfHE9iBA7LXWcNtVIuSnphTqpanPzTDFarF0yqq4kpbC6miA== - -esbuild-openbsd-64@0.14.25: - version "0.14.25" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.25.tgz#31ebf616aadf6e60674469f2b92cec92280d9930" - integrity sha512-QgFJ37A15D7NIXBTYEqz29+uw3nNBOIyog+3kFidANn6kjw0GHZ0lEYQn+cwjyzu94WobR+fes7cTl/ZYlHb1A== - -esbuild-sunos-64@0.14.25: - version "0.14.25" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.25.tgz#815e4f936d74970292a63ccfd5791fe5e3569f5f" - integrity sha512-rmWfjUItYIVlqr5EnTH1+GCxXiBOC42WBZ3w++qh7n2cS9Xo0lO5pGSG2N+huOU2fX5L+6YUuJ78/vOYvefeFw== - -esbuild-windows-32@0.14.25: - version "0.14.25" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.25.tgz#189e14df2478f2c193c86968ab1fb54e1ceaafd2" - integrity sha512-HGAxVUofl3iUIz9W10Y9XKtD0bNsK9fBXv1D55N/ljNvkrAYcGB8YCm0v7DjlwtyS6ws3dkdQyXadbxkbzaKOA== - -esbuild-windows-64@0.14.25: - version "0.14.25" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.25.tgz#3d5fbfdc3856850bb47439299e3b60dd18be111f" - integrity sha512-TirEohRkfWU9hXLgoDxzhMQD1g8I2mOqvdQF2RS9E/wbkORTAqJHyh7wqGRCQAwNzdNXdg3JAyhQ9/177AadWA== - -esbuild-windows-arm64@0.14.25: - version "0.14.25" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.25.tgz#8b243cbbad8a86cf98697da9ccb88c05df2ef458" - integrity sha512-4ype9ERiI45rSh+R8qUoBtaj6kJvUOI7oVLhKqPEpcF4Pa5PpT3hm/mXAyotJHREkHpM87PAJcA442mLnbtlNA== - -esbuild@^0.14.18: - version "0.14.25" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.25.tgz#ddb9d47b91ca76abb7d850ce3dfed0bc3dc88d16" - integrity sha512-4JHEIOMNFvK09ziiL+iVmldIhLbn49V4NAVo888tcGFKedEZY/Y8YapfStJ6zSE23tzYPKxqKwQBnQoIO0BI/Q== - optionalDependencies: - esbuild-android-64 "0.14.25" - esbuild-android-arm64 "0.14.25" - esbuild-darwin-64 "0.14.25" - esbuild-darwin-arm64 "0.14.25" - esbuild-freebsd-64 "0.14.25" - esbuild-freebsd-arm64 "0.14.25" - esbuild-linux-32 "0.14.25" - esbuild-linux-64 "0.14.25" - esbuild-linux-arm "0.14.25" - esbuild-linux-arm64 "0.14.25" - esbuild-linux-mips64le "0.14.25" - esbuild-linux-ppc64le "0.14.25" - esbuild-linux-riscv64 "0.14.25" - esbuild-linux-s390x "0.14.25" - esbuild-netbsd-64 "0.14.25" - esbuild-openbsd-64 "0.14.25" - esbuild-sunos-64 "0.14.25" - esbuild-windows-32 "0.14.25" - esbuild-windows-64 "0.14.25" - esbuild-windows-arm64 "0.14.25" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -escodegen@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" - integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - dependencies: - estraverse "^4.1.0" - -estraverse@^4.1.0, estraverse@^4.1.1: - version "4.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" - -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" - -events@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - 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" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= - dependencies: - homedir-polyfill "^1.0.1" - -expect@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74" - integrity sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw== - dependencies: - "@jest/types" "^27.5.1" - jest-get-type "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -fast-deep-equal@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" - -fast-deep-equal@^3.1.1: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-json-stable-stringify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" - -fast-levenshtein@~2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - -fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== - dependencies: - reusify "^1.0.4" - -fb-watchman@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58" - dependencies: - bser "^2.0.0" - -figgy-pudding@^3.5.1: - version "3.5.2" - resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" - integrity sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw== - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -filename-reserved-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz#abf73dfab735d045440abfea2d91f389ebbfa229" - integrity sha1-q/c9+rc10EVECr/qLZHzieu/oik= - -filenamify@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-4.3.0.tgz#62391cb58f02b09971c9d4f9d63b3cf9aba03106" - integrity sha512-hcFKyUG57yWGAzu1CMt/dPzYZuv+jAJUT85bL8mrXvNe6hWj6yEHEc4EdcgiA6Z3oi1/9wXJdZPXF2dZNgwgOg== - dependencies: - filename-reserved-regex "^2.0.0" - strip-outer "^1.0.1" - trim-repeated "^1.0.0" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-cache-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - -find-cache-dir@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" - integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== - dependencies: - commondir "^1.0.1" - make-dir "^3.0.2" - pkg-dir "^4.1.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - dependencies: - locate-path "^3.0.0" - -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -findup-sync@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" - integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== - dependencies: - detect-file "^1.0.0" - is-glob "^4.0.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - -flush-write-stream@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.4" - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - dependencies: - map-cache "^0.2.2" - -from2@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.0" - -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-write-stream-atomic@^1.0.8: - version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" - dependencies: - graceful-fs "^4.1.2" - iferr "^0.1.5" - imurmurhash "^0.1.4" - readable-stream "1 || 2" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@^2.3.2, fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.1, get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - -gh-pages@^3.2.3: - version "3.2.3" - resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-3.2.3.tgz#897e5f15e111f42af57d21d430b83e5cdf29472c" - integrity sha512-jA1PbapQ1jqzacECfjUaO9gV8uBgU6XNMV0oXLtfCX3haGLe5Atq8BxlrADhbD6/UdG9j6tZLWAkAybndOXTJg== - dependencies: - async "^2.6.1" - commander "^2.18.0" - email-addresses "^3.0.1" - filenamify "^4.3.0" - find-cache-dir "^3.3.1" - fs-extra "^8.1.0" - globby "^6.1.0" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.3, glob@^7.1.4, glob@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -globby@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" - dependencies: - array-union "^1.0.1" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -graceful-fs@^4.1.15, graceful-fs@^4.2.0, graceful-fs@^4.2.9: - version "4.2.9" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" - integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== - -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - dependencies: - ansi-regex "^2.0.0" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.5" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz#e38ab4b85dfb1e0c40fe9265c0e9b54854c23812" - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hmac-drbg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== - dependencies: - parse-passwd "^1.0.0" - -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== - dependencies: - whatwg-encoding "^1.0.5" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - -https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ieee754@^1.1.4: - version "1.1.12" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" - -iferr@^0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" - -ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - -import-local@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" - integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== - dependencies: - pkg-dir "^3.0.0" - resolve-cwd "^2.0.0" - -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - -infer-owner@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" - integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - -ini@^1.3.4, ini@^1.3.5: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -interpret@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - dependencies: - kind-of "^6.0.0" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - dependencies: - binary-extensions "^1.0.0" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - -is-core-module@^2.8.1: - version "2.8.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" - integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== - dependencies: - has "^1.0.3" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - dependencies: - kind-of "^6.0.0" - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" - dependencies: - is-extglob "^2.1.1" - -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - dependencies: - kind-of "^3.0.2" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - dependencies: - isobject "^3.0.1" - -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-windows@^1.0.1, is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== - -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" - integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== - 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" - -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.1.3: - version "3.1.4" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.4.tgz#1b6f068ecbc6c331040aab5741991273e609e40c" - integrity sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jest-changed-files@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5" - integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw== - dependencies: - "@jest/types" "^27.5.1" - execa "^5.0.0" - throat "^6.0.1" - -jest-circus@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc" - integrity sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^0.7.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - slash "^3.0.0" - stack-utils "^2.0.3" - throat "^6.0.1" - -jest-cli@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145" - integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw== - dependencies: - "@jest/core" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.9" - import-local "^3.0.2" - jest-config "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - prompts "^2.0.1" - yargs "^16.2.0" - -jest-config@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41" - integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA== - dependencies: - "@babel/core" "^7.8.0" - "@jest/test-sequencer" "^27.5.1" - "@jest/types" "^27.5.1" - babel-jest "^27.5.1" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.9" - jest-circus "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-get-type "^27.5.1" - jest-jasmine2 "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runner "^27.5.1" - jest-util "^27.5.1" - jest-validate "^27.5.1" - micromatch "^4.0.4" - parse-json "^5.2.0" - pretty-format "^27.5.1" - slash "^3.0.0" - strip-json-comments "^3.1.1" - -jest-diff@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" - integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== - dependencies: - chalk "^4.0.0" - diff-sequences "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - -jest-docblock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.5.1.tgz#14092f364a42c6108d42c33c8cf30e058e25f6c0" - integrity sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ== - dependencies: - detect-newline "^3.0.0" - -jest-each@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.5.1.tgz#5bc87016f45ed9507fed6e4702a5b468a5b2c44e" - integrity sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ== - dependencies: - "@jest/types" "^27.5.1" - chalk "^4.0.0" - jest-get-type "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - -jest-environment-jsdom@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz#ea9ccd1fc610209655a77898f86b2b559516a546" - integrity sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - jsdom "^16.6.0" - -jest-environment-node@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.5.1.tgz#dedc2cfe52fab6b8f5714b4808aefa85357a365e" - integrity sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - jest-mock "^27.5.1" - jest-util "^27.5.1" - -jest-get-type@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" - integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== - -jest-haste-map@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.5.1.tgz#9fd8bd7e7b4fa502d9c6164c5640512b4e811e7f" - integrity sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng== - dependencies: - "@jest/types" "^27.5.1" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.9" - jest-regex-util "^27.5.1" - jest-serializer "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - micromatch "^4.0.4" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.3.2" - -jest-jasmine2@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz#a037b0034ef49a9f3d71c4375a796f3b230d1ac4" - integrity sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^27.5.1" - is-generator-fn "^2.0.0" - jest-each "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-runtime "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - pretty-format "^27.5.1" - throat "^6.0.1" - -jest-leak-detector@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz#6ec9d54c3579dd6e3e66d70e3498adf80fde3fb8" - integrity sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ== - dependencies: - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - -jest-matcher-utils@^27.0.0, jest-matcher-utils@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" - integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== - dependencies: - chalk "^4.0.0" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - -jest-message-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.5.1.tgz#bdda72806da10d9ed6425e12afff38cd1458b6cf" - integrity sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.5.1" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.9" - micromatch "^4.0.4" - pretty-format "^27.5.1" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.5.1.tgz#19948336d49ef4d9c52021d34ac7b5f36ff967d6" - integrity sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og== - dependencies: - "@jest/types" "^27.5.1" - "@types/node" "*" - -jest-pnp-resolver@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" - integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== - -jest-regex-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95" - integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg== - -jest-resolve-dependencies@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8" - integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg== - dependencies: - "@jest/types" "^27.5.1" - jest-regex-util "^27.5.1" - jest-snapshot "^27.5.1" - -jest-resolve@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384" - integrity sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw== - dependencies: - "@jest/types" "^27.5.1" - chalk "^4.0.0" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-pnp-resolver "^1.2.2" - jest-util "^27.5.1" - jest-validate "^27.5.1" - resolve "^1.20.0" - resolve.exports "^1.1.0" - slash "^3.0.0" - -jest-runner@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.5.1.tgz#071b27c1fa30d90540805c5645a0ec167c7b62e5" - integrity sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ== - dependencies: - "@jest/console" "^27.5.1" - "@jest/environment" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.8.1" - graceful-fs "^4.2.9" - jest-docblock "^27.5.1" - jest-environment-jsdom "^27.5.1" - jest-environment-node "^27.5.1" - jest-haste-map "^27.5.1" - jest-leak-detector "^27.5.1" - jest-message-util "^27.5.1" - jest-resolve "^27.5.1" - jest-runtime "^27.5.1" - jest-util "^27.5.1" - jest-worker "^27.5.1" - source-map-support "^0.5.6" - throat "^6.0.1" - -jest-runtime@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.5.1.tgz#4896003d7a334f7e8e4a53ba93fb9bcd3db0a1af" - integrity sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A== - dependencies: - "@jest/environment" "^27.5.1" - "@jest/fake-timers" "^27.5.1" - "@jest/globals" "^27.5.1" - "@jest/source-map" "^27.5.1" - "@jest/test-result" "^27.5.1" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - execa "^5.0.0" - glob "^7.1.3" - graceful-fs "^4.2.9" - jest-haste-map "^27.5.1" - jest-message-util "^27.5.1" - jest-mock "^27.5.1" - jest-regex-util "^27.5.1" - jest-resolve "^27.5.1" - jest-snapshot "^27.5.1" - jest-util "^27.5.1" - slash "^3.0.0" - strip-bom "^4.0.0" - -jest-serializer@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.5.1.tgz#81438410a30ea66fd57ff730835123dea1fb1f64" - integrity sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.9" - -jest-snapshot@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.5.1.tgz#b668d50d23d38054a51b42c4039cab59ae6eb6a1" - integrity sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA== - dependencies: - "@babel/core" "^7.7.2" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/traverse" "^7.7.2" - "@babel/types" "^7.0.0" - "@jest/transform" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.1.5" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^27.5.1" - graceful-fs "^4.2.9" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - jest-haste-map "^27.5.1" - jest-matcher-utils "^27.5.1" - jest-message-util "^27.5.1" - jest-util "^27.5.1" - natural-compare "^1.4.0" - pretty-format "^27.5.1" - semver "^7.3.2" - -jest-util@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9" - integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw== - dependencies: - "@jest/types" "^27.5.1" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.9" - picomatch "^2.2.3" - -jest-validate@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.5.1.tgz#9197d54dc0bdb52260b8db40b46ae668e04df067" - integrity sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ== - dependencies: - "@jest/types" "^27.5.1" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^27.5.1" - leven "^3.1.0" - pretty-format "^27.5.1" - -jest-watcher@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2" - integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw== - dependencies: - "@jest/test-result" "^27.5.1" - "@jest/types" "^27.5.1" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - jest-util "^27.5.1" - string-length "^4.0.1" - -jest-worker@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" - integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc" - integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ== - dependencies: - "@jest/core" "^27.5.1" - import-local "^3.0.2" - jest-cli "^27.5.1" - -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -js-yaml@^3.7.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsdom@^16.6.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-parse-better-errors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - -json5@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" - integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== - dependencies: - minimist "^1.2.0" - -json5@^2.1.2: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - -jsonc-parser@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" - integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - optionalDependencies: - graceful-fs "^4.1.6" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" - -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lilconfig@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" - integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -loader-runner@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" - integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== - -loader-utils@^1.2.3, loader-utils@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" - integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^1.0.1" - -loader-utils@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.2.tgz#d6e3b4fb81870721ae4e0868ab11dd638368c129" - integrity sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A== - dependencies: - big.js "^5.2.2" - emojis-list "^3.0.0" - json5 "^2.1.2" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -lodash@^4.17.14, lodash@^4.7.0: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lunr@^2.3.9: - version "2.3.9" - resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1" - integrity sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow== - -make-dir@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-dir@^3.0.0, make-dir@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - dependencies: - object-visit "^1.0.0" - -marked@^4.0.12: - version "4.0.12" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.12.tgz#2262a4e6fd1afd2f13557726238b69a48b982f7d" - integrity sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ== - -md5.js@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -memory-fs@^0.4.0, memory-fs@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -memory-fs@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" - integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== - dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.0, micromatch@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== - dependencies: - braces "^3.0.1" - picomatch "^2.2.3" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@~1.35.0: - version "1.35.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.35.0.tgz#0569d657466491283709663ad379a99b90d9ab47" - -mime-types@^2.1.12: - version "2.1.19" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.19.tgz#71e464537a7ef81c15f2db9d97e913fc0ff606f0" - dependencies: - mime-db "~1.35.0" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== - dependencies: - brace-expansion "^2.0.1" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - -minimist@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - -minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -mississippi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" - integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== - dependencies: - concat-stream "^1.5.0" - duplexify "^3.4.2" - end-of-stream "^1.1.0" - flush-write-stream "^1.0.0" - from2 "^2.1.0" - parallel-transform "^1.1.0" - pump "^3.0.0" - pumpify "^1.3.3" - stream-each "^1.1.0" - through2 "^2.0.0" - -mixin-deep@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - dependencies: - minimist "0.0.8" - -mkdirp@^0.5.3: - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -move-concurrently@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" - dependencies: - aproba "^1.1.1" - copy-concurrently "^1.0.0" - fs-write-stream-atomic "^1.0.8" - mkdirp "^0.5.1" - rimraf "^2.5.4" - run-queue "^1.0.3" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -nan@^2.12.1: - version "2.15.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" - integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== - -nanoid@^3.2.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.1.tgz#6347a18cac88af88f58af0b3594b723d5e99bb35" - integrity sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -nanospinner@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/nanospinner/-/nanospinner-1.0.0.tgz#6af6bb0e5f0ddf0004e3426f61765fa0ab6ba010" - integrity sha512-14c2r2QQ9xfTmdbqdF51FKCNvww+0ZON9GeEHur+pBdOufoFvxD4CZQRaYWmFrGH3Nuv7PZ/9Q+wsV+hFSp32g== - dependencies: - picocolors "^1.0.0" - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - -neo-async@^2.5.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.1.tgz#acb909e327b1e87ec9ef15f41b8a269512ad41ee" - -neo-async@^2.6.1: - version "2.6.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" - integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== - -nice-try@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" - -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - -node-libs-browser@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" - integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== - dependencies: - assert "^1.1.1" - browserify-zlib "^0.2.0" - buffer "^4.3.0" - console-browserify "^1.1.0" - constants-browserify "^1.0.0" - crypto-browserify "^3.11.0" - domain-browser "^1.1.1" - events "^3.0.0" - https-browserify "^1.0.0" - os-browserify "^0.3.0" - path-browserify "0.0.1" - process "^0.11.10" - punycode "^1.2.4" - querystring-es3 "^0.2.0" - readable-stream "^2.3.3" - stream-browserify "^2.0.1" - stream-http "^2.7.2" - string_decoder "^1.0.0" - timers-browserify "^2.0.4" - tty-browserify "0.0.0" - url "^0.11.0" - util "^0.11.0" - vm-browserify "^1.0.1" - -node-releases@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.2.tgz#7139fe71e2f4f11b47d4d2986aaf8c48699e0c01" - integrity sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg== - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -nwsapi@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== - -object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - dependencies: - isobject "^3.0.0" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - dependencies: - isobject "^3.0.1" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - dependencies: - wrappy "1" - -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -optionator@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.4" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - wordwrap "~1.0.0" - -os-browserify@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - -p-limit@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" - dependencies: - p-try "^2.0.0" - -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-try@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" - -pako@~1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" - -parallel-transform@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" - dependencies: - cyclist "~0.2.2" - inherits "^2.0.3" - readable-stream "^2.1.5" - -parse-asn1@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" - dependencies: - asn1.js "^4.0.0" - browserify-aes "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - -parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - 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" - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= - -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - -path-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - -path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pbkdf2@^3.0.3: - version "3.0.16" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz#7404208ec6b01b62d85bf83853a8064f8d9c2a5c" - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - -pirates@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pkg-dir@^4.1.0, pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== - dependencies: - find-up "^4.0.0" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - -pretty-format@^27.0.0, pretty-format@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" - integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== - dependencies: - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^17.0.1" - -process-nextick-args@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - -promise-inflight@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" - -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - -psl@^1.1.33: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -public-encrypt@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.2.tgz#46eb9107206bf73489f8b85b69d91334c6610994" - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.3: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - -punycode@^1.2.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -querystring-es3@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" - dependencies: - safe-buffer "^5.1.0" - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - -repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -resolve-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" - dependencies: - resolve-from "^3.0.0" - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - -resolve.exports@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" - integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== - -resolve@^1.20.0: - version "1.22.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== - dependencies: - is-core-module "^2.8.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -resolve@^1.3.2: - version "1.8.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" - dependencies: - path-parse "^1.0.5" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^2.5.4: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - dependencies: - glob "^7.0.5" - -rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -run-queue@^1.0.0, run-queue@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" - dependencies: - aproba "^1.1.1" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - -schema-utils@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" - integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== - dependencies: - ajv "^6.1.0" - ajv-errors "^1.0.0" - ajv-keywords "^3.1.0" - -semver@7.3.5, semver@^7.3.2, semver@^7.3.4: - version "7.3.5" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -semver@^5.3.0, semver@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - -semver@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@^6.0.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -serialize-javascript@^1.7.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" - integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== - -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - -set-value@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.1" - to-object-path "^0.3.0" - -set-value@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - -sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shiki@^0.10.1: - version "0.10.1" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-0.10.1.tgz#6f9a16205a823b56c072d0f1a0bcd0f2646bef14" - integrity sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng== - dependencies: - jsonc-parser "^3.0.0" - vscode-oniguruma "^1.6.1" - vscode-textmate "5.2.0" - -signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - -signal-exit@^3.0.3: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - -size-limit@^7.0.8: - version "7.0.8" - resolved "https://registry.yarnpkg.com/size-limit/-/size-limit-7.0.8.tgz#bf0c656da9e6bc3b8eb5b8a5a634df4634309811" - integrity sha512-3h76c9E0e/nNhYLSR7IBI/bSoXICeo7EYkYjlyVqNIsu7KvN/PQmMbIXeyd2QKIF8iZKhaiZQoXLkGWbyPDtvQ== - dependencies: - bytes-iec "^3.1.1" - chokidar "^3.5.3" - ci-job-number "^1.2.2" - globby "^11.1.0" - lilconfig "^2.0.4" - mkdirp "^1.0.4" - nanospinner "^1.0.0" - picocolors "^1.0.0" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -source-list-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" - -source-map-resolve@^0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" - dependencies: - atob "^2.1.1" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.6: - version "0.5.6" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.6.tgz#4435cee46b1aab62b8e8610ce60f788091c51c13" - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-support@~0.5.12: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - -source-map@^0.5.0, source-map@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - -source-map@^0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - -ssri@^6.0.1: - version "6.0.2" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" - integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== - dependencies: - figgy-pudding "^3.5.1" - -stack-utils@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" - integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== - dependencies: - escape-string-regexp "^2.0.0" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -stream-browserify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-each@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd" - dependencies: - end-of-stream "^1.1.0" - stream-shift "^1.0.0" - -stream-http@^2.7.2: - version "2.8.3" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^2.3.6" - to-arraybuffer "^1.0.0" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -string-width@^3.0.0, string-width@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string_decoder@^1.0.0, string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-outer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-1.0.1.tgz#b2fd2abf6604b9d1e6013057195df836b8a9d631" - integrity sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg== - dependencies: - escape-string-regexp "^1.0.2" - -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - -supports-color@^5.3.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" - dependencies: - has-flag "^3.0.0" - -supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-hyperlinks@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" - integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -tapable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.0.0.tgz#cbb639d9002eed9c6b5975eb20598d7936f1f9f2" - -tapable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" - integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== - -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - -terser-webpack-plugin@^1.4.3: - version "1.4.5" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz#a217aefaea330e734ffacb6120ec1fa312d6040b" - integrity sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw== - dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^4.0.0" - source-map "^0.6.1" - terser "^4.1.2" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" - -terser@^4.1.2: - version "4.8.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" - integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - -throat@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" - integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== - -through2@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" - dependencies: - readable-stream "^2.1.5" - xtend "~4.0.1" - -timers-browserify@^2.0.4: - version "2.0.10" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" - dependencies: - setimmediate "^1.0.4" - -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== - -to-arraybuffer@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -tough-cookie@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" - integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.1.2" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - -trim-repeated@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" - dependencies: - escape-string-regexp "^1.0.2" - -ts-loader@^8.2.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-8.3.0.tgz#83360496d6f8004fab35825279132c93412edf33" - integrity sha512-MgGly4I6cStsJy27ViE32UoqxPTN9Xly4anxxVyaIWR+9BGxboV4EyJBGfR3RePV7Ksjj3rHmPZJeIt+7o4Vag== - dependencies: - chalk "^4.1.0" - enhanced-resolve "^4.0.0" - loader-utils "^2.0.0" - micromatch "^4.0.0" - semver "^7.3.4" - -tslib@^1.8.0, tslib@^1.8.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" - -tslint@^5.11.0: - version "5.11.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.11.0.tgz#98f30c02eae3cde7006201e4c33cb08b48581eed" - dependencies: - babel-code-frame "^6.22.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^3.2.0" - glob "^7.1.1" - js-yaml "^3.7.0" - minimatch "^3.0.4" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.8.0" - tsutils "^2.27.2" - -tsutils@^2.27.2: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - dependencies: - tslib "^1.8.1" - -tty-browserify@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - dependencies: - prelude-ls "~1.1.2" - -type-detect@4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - -typedoc@^0.22.13: - version "0.22.13" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.22.13.tgz#d061f8f0fb7c9d686e48814f245bddeea4564e66" - integrity sha512-NHNI7Dr6JHa/I3+c62gdRNXBIyX7P33O9TafGLd07ur3MqzcKgwTvpg18EtvCLHJyfeSthAtCLpM7WkStUmDuQ== - dependencies: - glob "^7.2.0" - lunr "^2.3.9" - marked "^4.0.12" - minimatch "^5.0.1" - shiki "^0.10.1" - -typescript@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.2.tgz#fe12d2727b708f4eef40f51598b3398baa9611d4" - integrity sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg== - -uglify-js@^3.6.0: - version "3.15.2" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.15.2.tgz#1ed2c976f448063b1f87adb68c741be79959f951" - integrity sha512-peeoTk3hSwYdoc9nrdiEJk+gx1ALCtTjdYuKSXMTDqq7n1W7dHPqWDdSi+BPL0ni2YMeHD7hKUSdbj3TZauY2A== - -uglifyjs-webpack-plugin@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-2.2.0.tgz#e75bc80e7f1937f725954c9b4c5a1e967ea9d0d7" - integrity sha512-mHSkufBmBuJ+KHQhv5H0MXijtsoA1lynJt1lXOaotja8/I0pR4L9oGaPIZw+bQBOFittXZg9OC1sXSGO9D9ZYg== - dependencies: - cacache "^12.0.2" - find-cache-dir "^2.1.0" - is-wsl "^1.1.0" - schema-utils "^1.0.0" - serialize-javascript "^1.7.0" - source-map "^0.6.1" - uglify-js "^3.6.0" - webpack-sources "^1.4.0" - worker-farm "^1.7.0" - -union-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^0.4.3" - -unique-filename@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" - integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== - dependencies: - unique-slug "^2.0.0" - -unique-slug@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab" - dependencies: - imurmurhash "^0.1.4" - -universalify@^0.1.0, universalify@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -uri-js@^4.2.1: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - dependencies: - punycode "^2.1.0" - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - -url@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - -util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - dependencies: - inherits "2.0.1" - -util@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" - integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== - dependencies: - inherits "2.0.3" - -v8-compile-cache@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -v8-to-istanbul@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" - integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" - -vm-browserify@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - -vscode-oniguruma@^1.6.1: - version "1.6.2" - resolved "https://registry.yarnpkg.com/vscode-oniguruma/-/vscode-oniguruma-1.6.2.tgz#aeb9771a2f1dbfc9083c8a7fdd9cccaa3f386607" - integrity sha512-KH8+KKov5eS/9WhofZR8M8dMHWN2gTxjMsG4jd04YhpbPR91fUj7rYQ2/XjeHCJWbg7X++ApRIU9NUwM2vTvLA== - -vscode-textmate@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-5.2.0.tgz#01f01760a391e8222fe4f33fbccbd1ad71aed74e" - integrity sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ== - -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7: - version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - -watchpack-chokidar2@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" - integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== - dependencies: - chokidar "^2.1.8" - -watchpack@^1.7.4: - version "1.7.5" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" - integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== - dependencies: - graceful-fs "^4.1.2" - neo-async "^2.5.0" - optionalDependencies: - chokidar "^3.4.1" - watchpack-chokidar2 "^2.0.1" - -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - -webpack-cli@^3.3.12: - version "3.3.12" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" - integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== - dependencies: - chalk "^2.4.2" - cross-spawn "^6.0.5" - enhanced-resolve "^4.1.1" - findup-sync "^3.0.0" - global-modules "^2.0.0" - import-local "^2.0.0" - interpret "^1.4.0" - loader-utils "^1.4.0" - supports-color "^6.1.0" - v8-compile-cache "^2.1.1" - yargs "^13.3.2" - -webpack-sources@^1.4.0, webpack-sources@^1.4.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" - integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== - dependencies: - source-list-map "^2.0.0" - source-map "~0.6.1" - -webpack@^4.46.0: - version "4.46.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" - integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== - dependencies: - "@webassemblyjs/ast" "1.9.0" - "@webassemblyjs/helper-module-context" "1.9.0" - "@webassemblyjs/wasm-edit" "1.9.0" - "@webassemblyjs/wasm-parser" "1.9.0" - acorn "^6.4.1" - ajv "^6.10.2" - ajv-keywords "^3.4.1" - chrome-trace-event "^1.0.2" - enhanced-resolve "^4.5.0" - eslint-scope "^4.0.3" - json-parse-better-errors "^1.0.2" - loader-runner "^2.4.0" - loader-utils "^1.2.3" - memory-fs "^0.4.1" - micromatch "^3.1.10" - mkdirp "^0.5.3" - neo-async "^2.6.1" - node-libs-browser "^2.2.1" - schema-utils "^1.0.0" - tapable "^1.1.3" - terser-webpack-plugin "^1.4.3" - watchpack "^1.7.4" - webpack-sources "^1.4.1" - -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - -which@^1.2.14, which@^1.2.9, which@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wordwrap@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" - -worker-farm@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" - integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== - dependencies: - errno "~0.1.7" - -wrap-ansi@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" - integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== - dependencies: - ansi-styles "^3.2.0" - string-width "^3.0.0" - strip-ansi "^5.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@^7.4.6: - version "7.5.7" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.7.tgz#9e0ac77ee50af70d58326ecff7e85eb3fa375e67" - integrity sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A== - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -xtend@^4.0.0, xtend@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" - -y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@^13.1.2: - version "13.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" - integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs@^13.3.2: - version "13.3.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" - integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== - dependencies: - cliui "^5.0.0" - find-up "^3.0.0" - get-caller-file "^2.0.1" - require-directory "^2.1.1" - require-main-filename "^2.0.0" - set-blocking "^2.0.0" - string-width "^3.0.0" - which-module "^2.0.0" - y18n "^4.0.0" - yargs-parser "^13.1.2" - -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@ampproject/remapping@npm:^2.2.0": + version: 2.3.0 + resolution: "@ampproject/remapping@npm:2.3.0" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/81d63cca5443e0f0c72ae18b544cc28c7c0ec2cea46e7cb888bb0e0f411a1191d0d6b7af798d54e30777d8d1488b2ec0732aac2be342d3d7d3ffd271c6f489ed + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.23.5, @babel/code-frame@npm:^7.24.1, @babel/code-frame@npm:^7.24.2": + version: 7.24.2 + resolution: "@babel/code-frame@npm:7.24.2" + dependencies: + "@babel/highlight": "npm:^7.24.2" + picocolors: "npm:^1.0.0" + checksum: 10c0/d1d4cba89475ab6aab7a88242e1fd73b15ecb9f30c109b69752956434d10a26a52cbd37727c4eca104b6d45227bd1dfce39a6a6f4a14c9b2f07f871e968cf406 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.23.5": + version: 7.24.1 + resolution: "@babel/compat-data@npm:7.24.1" + checksum: 10c0/8a1935450345c326b14ea632174696566ef9b353bd0d6fb682456c0774342eeee7654877ced410f24a731d386fdcbf980b75083fc764964d6f816b65792af2f5 + languageName: node + linkType: hard + +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.23.9": + version: 7.24.3 + resolution: "@babel/core@npm:7.24.3" + dependencies: + "@ampproject/remapping": "npm:^2.2.0" + "@babel/code-frame": "npm:^7.24.2" + "@babel/generator": "npm:^7.24.1" + "@babel/helper-compilation-targets": "npm:^7.23.6" + "@babel/helper-module-transforms": "npm:^7.23.3" + "@babel/helpers": "npm:^7.24.1" + "@babel/parser": "npm:^7.24.1" + "@babel/template": "npm:^7.24.0" + "@babel/traverse": "npm:^7.24.1" + "@babel/types": "npm:^7.24.0" + convert-source-map: "npm:^2.0.0" + debug: "npm:^4.1.0" + gensync: "npm:^1.0.0-beta.2" + json5: "npm:^2.2.3" + semver: "npm:^6.3.1" + checksum: 10c0/e6e756b6de27d0312514a005688fa1915c521ad4269a388913eff2120a546538078f8488d6d16e86f851872f263cb45a6bbae08738297afb9382600d2ac342a9 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.24.1, @babel/generator@npm:^7.7.2": + version: 7.24.1 + resolution: "@babel/generator@npm:7.24.1" + dependencies: + "@babel/types": "npm:^7.24.0" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + jsesc: "npm:^2.5.1" + checksum: 10c0/f0eea7497657cdf68cfb4b7d181588e1498eefd1f303d73b0d8ca9b21a6db27136a6f5beb8f988b6bdcd4249870826080950450fd310951de42ecf36df274881 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.23.6": + version: 7.23.6 + resolution: "@babel/helper-compilation-targets@npm:7.23.6" + dependencies: + "@babel/compat-data": "npm:^7.23.5" + "@babel/helper-validator-option": "npm:^7.23.5" + browserslist: "npm:^4.22.2" + lru-cache: "npm:^5.1.1" + semver: "npm:^6.3.1" + checksum: 10c0/ba38506d11185f48b79abf439462ece271d3eead1673dd8814519c8c903c708523428806f05f2ec5efd0c56e4e278698fac967e5a4b5ee842c32415da54bc6fa + languageName: node + linkType: hard + +"@babel/helper-environment-visitor@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-environment-visitor@npm:7.22.20" + checksum: 10c0/e762c2d8f5d423af89bd7ae9abe35bd4836d2eb401af868a63bbb63220c513c783e25ef001019418560b3fdc6d9a6fb67e6c0b650bcdeb3a2ac44b5c3d2bdd94 + languageName: node + linkType: hard + +"@babel/helper-function-name@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-function-name@npm:7.23.0" + dependencies: + "@babel/template": "npm:^7.22.15" + "@babel/types": "npm:^7.23.0" + checksum: 10c0/d771dd1f3222b120518176733c52b7cadac1c256ff49b1889dbbe5e3fed81db855b8cc4e40d949c9d3eae0e795e8229c1c8c24c0e83f27cfa6ee3766696c6428 + languageName: node + linkType: hard + +"@babel/helper-hoist-variables@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-hoist-variables@npm:7.22.5" + dependencies: + "@babel/types": "npm:^7.22.5" + checksum: 10c0/60a3077f756a1cd9f14eb89f0037f487d81ede2b7cfe652ea6869cd4ec4c782b0fb1de01b8494b9a2d2050e3d154d7d5ad3be24806790acfb8cbe2073bf1e208 + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.22.15": + version: 7.24.3 + resolution: "@babel/helper-module-imports@npm:7.24.3" + dependencies: + "@babel/types": "npm:^7.24.0" + checksum: 10c0/052c188adcd100f5e8b6ff0c9643ddaabc58b6700d3bbbc26804141ad68375a9f97d9d173658d373d31853019e65f62610239e3295cdd58e573bdcb2fded188d + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/helper-module-transforms@npm:7.23.3" + dependencies: + "@babel/helper-environment-visitor": "npm:^7.22.20" + "@babel/helper-module-imports": "npm:^7.22.15" + "@babel/helper-simple-access": "npm:^7.22.5" + "@babel/helper-split-export-declaration": "npm:^7.22.6" + "@babel/helper-validator-identifier": "npm:^7.22.20" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/211e1399d0c4993671e8e5c2b25383f08bee40004ace5404ed4065f0e9258cc85d99c1b82fd456c030ce5cfd4d8f310355b54ef35de9924eabfc3dff1331d946 + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.24.0, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.24.0 + resolution: "@babel/helper-plugin-utils@npm:7.24.0" + checksum: 10c0/90f41bd1b4dfe7226b1d33a4bb745844c5c63e400f9e4e8bf9103a7ceddd7d425d65333b564d9daba3cebd105985764d51b4bd4c95822b97c2e3ac1201a8a5da + languageName: node + linkType: hard + +"@babel/helper-simple-access@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-simple-access@npm:7.22.5" + dependencies: + "@babel/types": "npm:^7.22.5" + checksum: 10c0/f0cf81a30ba3d09a625fd50e5a9069e575c5b6719234e04ee74247057f8104beca89ed03e9217b6e9b0493434cedc18c5ecca4cea6244990836f1f893e140369 + languageName: node + linkType: hard + +"@babel/helper-split-export-declaration@npm:^7.22.6": + version: 7.22.6 + resolution: "@babel/helper-split-export-declaration@npm:7.22.6" + dependencies: + "@babel/types": "npm:^7.22.5" + checksum: 10c0/d83e4b623eaa9622c267d3c83583b72f3aac567dc393dda18e559d79187961cb29ae9c57b2664137fc3d19508370b12ec6a81d28af73a50e0846819cb21c6e44 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.23.4": + version: 7.24.1 + resolution: "@babel/helper-string-parser@npm:7.24.1" + checksum: 10c0/2f9bfcf8d2f9f083785df0501dbab92770111ece2f90d120352fda6dd2a7d47db11b807d111e6f32aa1ba6d763fe2dc6603d153068d672a5d0ad33ca802632b2 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-validator-identifier@npm:7.22.20" + checksum: 10c0/dcad63db345fb110e032de46c3688384b0008a42a4845180ce7cd62b1a9c0507a1bed727c4d1060ed1a03ae57b4d918570259f81724aaac1a5b776056f37504e + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.23.5": + version: 7.23.5 + resolution: "@babel/helper-validator-option@npm:7.23.5" + checksum: 10c0/af45d5c0defb292ba6fd38979e8f13d7da63f9623d8ab9ededc394f67eb45857d2601278d151ae9affb6e03d5d608485806cd45af08b4468a0515cf506510e94 + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/helpers@npm:7.24.1" + dependencies: + "@babel/template": "npm:^7.24.0" + "@babel/traverse": "npm:^7.24.1" + "@babel/types": "npm:^7.24.0" + checksum: 10c0/b3445860ae749fc664682b291f092285e949114e8336784ae29f88eb4c176279b01cc6740005a017a0389ae4b4e928d5bbbc01de7da7e400c972e3d6f792063a + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.24.2": + version: 7.24.2 + resolution: "@babel/highlight@npm:7.24.2" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.22.20" + chalk: "npm:^2.4.2" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.0.0" + checksum: 10c0/98ce00321daedeed33a4ed9362dc089a70375ff1b3b91228b9f05e6591d387a81a8cba68886e207861b8871efa0bc997ceabdd9c90f6cce3ee1b2f7f941b42db + languageName: node + linkType: hard + +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.0, @babel/parser@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/parser@npm:7.24.1" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/d2a8b99aa5f33182b69d5569367403a40e7c027ae3b03a1f81fd8ac9b06ceb85b31f6ee4267fb90726dc2ac99909c6bdaa9cf16c379efab73d8dfe85cee32c50 + languageName: node + linkType: hard + +"@babel/plugin-syntax-async-generators@npm:^7.8.4": + version: 7.8.4 + resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/d13efb282838481348c71073b6be6245b35d4f2f964a8f71e4174f235009f929ef7613df25f8d2338e2d3e44bc4265a9f8638c6aaa136d7a61fe95985f9725c8 + languageName: node + linkType: hard + +"@babel/plugin-syntax-bigint@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/686891b81af2bc74c39013655da368a480f17dd237bf9fbc32048e5865cb706d5a8f65438030da535b332b1d6b22feba336da8fa931f663b6b34e13147d12dde + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-properties@npm:^7.8.3": + version: 7.12.13 + resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.12.13" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/95168fa186416195280b1264fb18afcdcdcea780b3515537b766cb90de6ce042d42dd6a204a39002f794ae5845b02afb0fd4861a3308a861204a55e68310a120 + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-meta@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/0b08b5e4c3128523d8e346f8cfc86824f0da2697b1be12d71af50a31aff7a56ceb873ed28779121051475010c28d6146a6bfea8518b150b71eeb4e46190172ee + languageName: node + linkType: hard + +"@babel/plugin-syntax-json-strings@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/e98f31b2ec406c57757d115aac81d0336e8434101c224edd9a5c93cefa53faf63eacc69f3138960c8b25401315af03df37f68d316c151c4b933136716ed6906e + languageName: node + linkType: hard + +"@babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.24.1 + resolution: "@babel/plugin-syntax-jsx@npm:7.24.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/6cec76fbfe6ca81c9345c2904d8d9a8a0df222f9269f0962ed6eb2eb8f3f10c2f15e993d1ef09dbaf97726bf1792b5851cf5bd9a769f966a19448df6be95d19a + languageName: node + linkType: hard + +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2594cfbe29411ad5bc2ad4058de7b2f6a8c5b86eda525a993959438615479e59c012c14aec979e538d60a584a1a799b60d1b8942c3b18468cb9d99b8fd34cd0b + languageName: node + linkType: hard + +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/2024fbb1162899094cfc81152449b12bd0cc7053c6d4bda8ac2852545c87d0a851b1b72ed9560673cbf3ef6248257262c3c04aabf73117215c1b9cc7dd2542ce + languageName: node + linkType: hard + +"@babel/plugin-syntax-numeric-separator@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.10.4" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/c55a82b3113480942c6aa2fcbe976ff9caa74b7b1109ff4369641dfbc88d1da348aceb3c31b6ed311c84d1e7c479440b961906c735d0ab494f688bf2fd5b9bb9 + languageName: node + linkType: hard + +"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/ee1eab52ea6437e3101a0a7018b0da698545230015fc8ab129d292980ec6dff94d265e9e90070e8ae5fed42f08f1622c14c94552c77bcac784b37f503a82ff26 + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/27e2493ab67a8ea6d693af1287f7e9acec206d1213ff107a928e85e173741e1d594196f99fec50e9dde404b09164f39dec5864c767212154ffe1caa6af0bc5af + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.8.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/46edddf2faa6ebf94147b8e8540dfc60a5ab718e2de4d01b2c0bdf250a4d642c2bd47cbcbb739febcb2bf75514dbcefad3c52208787994b8d0f8822490f55e81 + languageName: node + linkType: hard + +"@babel/plugin-syntax-top-level-await@npm:^7.8.3": + version: 7.14.5 + resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.14.5" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/14bf6e65d5bc1231ffa9def5f0ef30b19b51c218fcecaa78cd1bdf7939dfdf23f90336080b7f5196916368e399934ce5d581492d8292b46a2fb569d8b2da106f + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.24.1 + resolution: "@babel/plugin-syntax-typescript@npm:7.24.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.24.0" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10c0/7a81e277dcfe3138847e8e5944e02a42ff3c2e864aea6f33fd9b70d1556d12b0e70f0d56cc1985d353c91bcbf8fe163e6cc17418da21129b7f7f1d8b9ac00c93 + languageName: node + linkType: hard + +"@babel/template@npm:^7.22.15, @babel/template@npm:^7.24.0, @babel/template@npm:^7.3.3": + version: 7.24.0 + resolution: "@babel/template@npm:7.24.0" + dependencies: + "@babel/code-frame": "npm:^7.23.5" + "@babel/parser": "npm:^7.24.0" + "@babel/types": "npm:^7.24.0" + checksum: 10c0/9d3dd8d22fe1c36bc3bdef6118af1f4b030aaf6d7d2619f5da203efa818a2185d717523486c111de8d99a8649ddf4bbf6b2a7a64962d8411cf6a8fa89f010e54 + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/traverse@npm:7.24.1" + dependencies: + "@babel/code-frame": "npm:^7.24.1" + "@babel/generator": "npm:^7.24.1" + "@babel/helper-environment-visitor": "npm:^7.22.20" + "@babel/helper-function-name": "npm:^7.23.0" + "@babel/helper-hoist-variables": "npm:^7.22.5" + "@babel/helper-split-export-declaration": "npm:^7.22.6" + "@babel/parser": "npm:^7.24.1" + "@babel/types": "npm:^7.24.0" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: 10c0/c087b918f6823776537ba246136c70e7ce0719fc05361ebcbfd16f4e6f2f6f1f8f4f9167f1d9b675f27d12074839605189cc9d689de20b89a85e7c140f23daab + languageName: node + linkType: hard + +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.24.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": + version: 7.24.0 + resolution: "@babel/types@npm:7.24.0" + dependencies: + "@babel/helper-string-parser": "npm:^7.23.4" + "@babel/helper-validator-identifier": "npm:^7.22.20" + to-fast-properties: "npm:^2.0.0" + checksum: 10c0/777a0bb5dbe038ca4c905fdafb1cdb6bdd10fe9d63ce13eca0bd91909363cbad554a53dc1f902004b78c1dcbc742056f877f2c99eeedff647333b1fadf51235d + languageName: node + linkType: hard + +"@bcoe/v8-coverage@npm:^0.2.3": + version: 0.2.3 + resolution: "@bcoe/v8-coverage@npm:0.2.3" + checksum: 10c0/6b80ae4cb3db53f486da2dc63b6e190a74c8c3cca16bb2733f234a0b6a9382b09b146488ae08e2b22cf00f6c83e20f3e040a2f7894f05c045c946d6a090b1d52 + languageName: node + linkType: hard + +"@discoveryjs/json-ext@npm:^0.5.0": + version: 0.5.7 + resolution: "@discoveryjs/json-ext@npm:0.5.7" + checksum: 10c0/e10f1b02b78e4812646ddf289b7d9f2cb567d336c363b266bd50cd223cf3de7c2c74018d91cd2613041568397ef3a4a2b500aba588c6e5bd78c38374ba68f38c + languageName: node + linkType: hard + +"@esbuild/aix-ppc64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/aix-ppc64@npm:0.20.2" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/android-arm64@npm:0.20.2" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/android-arm@npm:0.20.2" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/android-x64@npm:0.20.2" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/darwin-arm64@npm:0.20.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/darwin-x64@npm:0.20.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/freebsd-arm64@npm:0.20.2" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/freebsd-x64@npm:0.20.2" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/linux-arm64@npm:0.20.2" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/linux-arm@npm:0.20.2" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/linux-ia32@npm:0.20.2" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/linux-loong64@npm:0.20.2" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/linux-mips64el@npm:0.20.2" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/linux-ppc64@npm:0.20.2" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/linux-riscv64@npm:0.20.2" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/linux-s390x@npm:0.20.2" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/linux-x64@npm:0.20.2" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/netbsd-x64@npm:0.20.2" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/openbsd-x64@npm:0.20.2" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/sunos-x64@npm:0.20.2" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/win32-arm64@npm:0.20.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/win32-ia32@npm:0.20.2" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.20.2": + version: 0.20.2 + resolution: "@esbuild/win32-x64@npm:0.20.2" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + +"@istanbuljs/load-nyc-config@npm:^1.0.0": + version: 1.1.0 + resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" + dependencies: + camelcase: "npm:^5.3.1" + find-up: "npm:^4.1.0" + get-package-type: "npm:^0.1.0" + js-yaml: "npm:^3.13.1" + resolve-from: "npm:^5.0.0" + checksum: 10c0/dd2a8b094887da5a1a2339543a4933d06db2e63cbbc2e288eb6431bd832065df0c099d091b6a67436e71b7d6bf85f01ce7c15f9253b4cbebcc3b9a496165ba42 + languageName: node + linkType: hard + +"@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3": + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: 10c0/61c5286771676c9ca3eb2bd8a7310a9c063fb6e0e9712225c8471c582d157392c88f5353581c8c9adbe0dff98892317d2fdfc56c3499aa42e0194405206a963a + languageName: node + linkType: hard + +"@jest/console@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/console@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + slash: "npm:^3.0.0" + checksum: 10c0/7be408781d0a6f657e969cbec13b540c329671819c2f57acfad0dae9dbfe2c9be859f38fe99b35dba9ff1536937dc6ddc69fdcd2794812fa3c647a1619797f6c + languageName: node + linkType: hard + +"@jest/core@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/core@npm:29.7.0" + dependencies: + "@jest/console": "npm:^29.7.0" + "@jest/reporters": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + ansi-escapes: "npm:^4.2.1" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.2.0" + exit: "npm:^0.1.2" + graceful-fs: "npm:^4.2.9" + jest-changed-files: "npm:^29.7.0" + jest-config: "npm:^29.7.0" + jest-haste-map: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-regex-util: "npm:^29.6.3" + jest-resolve: "npm:^29.7.0" + jest-resolve-dependencies: "npm:^29.7.0" + jest-runner: "npm:^29.7.0" + jest-runtime: "npm:^29.7.0" + jest-snapshot: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-validate: "npm:^29.7.0" + jest-watcher: "npm:^29.7.0" + micromatch: "npm:^4.0.4" + pretty-format: "npm:^29.7.0" + slash: "npm:^3.0.0" + strip-ansi: "npm:^6.0.0" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 10c0/934f7bf73190f029ac0f96662c85cd276ec460d407baf6b0dbaec2872e157db4d55a7ee0b1c43b18874602f662b37cb973dda469a4e6d88b4e4845b521adeeb2 + languageName: node + linkType: hard + +"@jest/environment@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/environment@npm:29.7.0" + dependencies: + "@jest/fake-timers": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + jest-mock: "npm:^29.7.0" + checksum: 10c0/c7b1b40c618f8baf4d00609022d2afa086d9c6acc706f303a70bb4b67275868f620ad2e1a9efc5edd418906157337cce50589a627a6400bbdf117d351b91ef86 + languageName: node + linkType: hard + +"@jest/expect-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect-utils@npm:29.7.0" + dependencies: + jest-get-type: "npm:^29.6.3" + checksum: 10c0/60b79d23a5358dc50d9510d726443316253ecda3a7fb8072e1526b3e0d3b14f066ee112db95699b7a43ad3f0b61b750c72e28a5a1cac361d7a2bb34747fa938a + languageName: node + linkType: hard + +"@jest/expect@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect@npm:29.7.0" + dependencies: + expect: "npm:^29.7.0" + jest-snapshot: "npm:^29.7.0" + checksum: 10c0/b41f193fb697d3ced134349250aed6ccea075e48c4f803159db102b826a4e473397c68c31118259868fd69a5cba70e97e1c26d2c2ff716ca39dc73a2ccec037e + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/fake-timers@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@sinonjs/fake-timers": "npm:^10.0.2" + "@types/node": "npm:*" + jest-message-util: "npm:^29.7.0" + jest-mock: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + checksum: 10c0/cf0a8bcda801b28dc2e2b2ba36302200ee8104a45ad7a21e6c234148932f826cb3bc57c8df3b7b815aeea0861d7b6ca6f0d4778f93b9219398ef28749e03595c + languageName: node + linkType: hard + +"@jest/globals@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/globals@npm:29.7.0" + dependencies: + "@jest/environment": "npm:^29.7.0" + "@jest/expect": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + jest-mock: "npm:^29.7.0" + checksum: 10c0/a385c99396878fe6e4460c43bd7bb0a5cc52befb462cc6e7f2a3810f9e7bcce7cdeb51908fd530391ee452dc856c98baa2c5f5fa8a5b30b071d31ef7f6955cea + languageName: node + linkType: hard + +"@jest/reporters@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/reporters@npm:29.7.0" + dependencies: + "@bcoe/v8-coverage": "npm:^0.2.3" + "@jest/console": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@jridgewell/trace-mapping": "npm:^0.3.18" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + collect-v8-coverage: "npm:^1.0.0" + exit: "npm:^0.1.2" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.2.9" + istanbul-lib-coverage: "npm:^3.0.0" + istanbul-lib-instrument: "npm:^6.0.0" + istanbul-lib-report: "npm:^3.0.0" + istanbul-lib-source-maps: "npm:^4.0.0" + istanbul-reports: "npm:^3.1.3" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-worker: "npm:^29.7.0" + slash: "npm:^3.0.0" + string-length: "npm:^4.0.1" + strip-ansi: "npm:^6.0.0" + v8-to-istanbul: "npm:^9.0.1" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 10c0/a754402a799541c6e5aff2c8160562525e2a47e7d568f01ebfc4da66522de39cbb809bbb0a841c7052e4270d79214e70aec3c169e4eae42a03bc1a8a20cb9fa2 + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" + dependencies: + "@sinclair/typebox": "npm:^0.27.8" + checksum: 10c0/b329e89cd5f20b9278ae1233df74016ebf7b385e0d14b9f4c1ad18d096c4c19d1e687aa113a9c976b16ec07f021ae53dea811fb8c1248a50ac34fbe009fdf6be + languageName: node + linkType: hard + +"@jest/source-map@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/source-map@npm:29.6.3" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.18" + callsites: "npm:^3.0.0" + graceful-fs: "npm:^4.2.9" + checksum: 10c0/a2f177081830a2e8ad3f2e29e20b63bd40bade294880b595acf2fc09ec74b6a9dd98f126a2baa2bf4941acd89b13a4ade5351b3885c224107083a0059b60a219 + languageName: node + linkType: hard + +"@jest/test-result@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-result@npm:29.7.0" + dependencies: + "@jest/console": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/istanbul-lib-coverage": "npm:^2.0.0" + collect-v8-coverage: "npm:^1.0.0" + checksum: 10c0/7de54090e54a674ca173470b55dc1afdee994f2d70d185c80236003efd3fa2b753fff51ffcdda8e2890244c411fd2267529d42c4a50a8303755041ee493e6a04 + languageName: node + linkType: hard + +"@jest/test-sequencer@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-sequencer@npm:29.7.0" + dependencies: + "@jest/test-result": "npm:^29.7.0" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.7.0" + slash: "npm:^3.0.0" + checksum: 10c0/593a8c4272797bb5628984486080cbf57aed09c7cfdc0a634e8c06c38c6bef329c46c0016e84555ee55d1cd1f381518cf1890990ff845524c1123720c8c1481b + languageName: node + linkType: hard + +"@jest/transform@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/transform@npm:29.7.0" + dependencies: + "@babel/core": "npm:^7.11.6" + "@jest/types": "npm:^29.6.3" + "@jridgewell/trace-mapping": "npm:^0.3.18" + babel-plugin-istanbul: "npm:^6.1.1" + chalk: "npm:^4.0.0" + convert-source-map: "npm:^2.0.0" + fast-json-stable-stringify: "npm:^2.1.0" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.7.0" + jest-regex-util: "npm:^29.6.3" + jest-util: "npm:^29.7.0" + micromatch: "npm:^4.0.4" + pirates: "npm:^4.0.4" + slash: "npm:^3.0.0" + write-file-atomic: "npm:^4.0.2" + checksum: 10c0/7f4a7f73dcf45dfdf280c7aa283cbac7b6e5a904813c3a93ead7e55873761fc20d5c4f0191d2019004fac6f55f061c82eb3249c2901164ad80e362e7a7ede5a6 + languageName: node + linkType: hard + +"@jest/types@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/types@npm:29.6.3" + dependencies: + "@jest/schemas": "npm:^29.6.3" + "@types/istanbul-lib-coverage": "npm:^2.0.0" + "@types/istanbul-reports": "npm:^3.0.0" + "@types/node": "npm:*" + "@types/yargs": "npm:^17.0.8" + chalk: "npm:^4.0.0" + checksum: 10c0/ea4e493dd3fb47933b8ccab201ae573dcc451f951dc44ed2a86123cd8541b82aa9d2b1031caf9b1080d6673c517e2dcc25a44b2dc4f3fbc37bfc965d444888c0 + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.5 + resolution: "@jridgewell/gen-mapping@npm:0.3.5" + dependencies: + "@jridgewell/set-array": "npm:^1.2.1" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/1be4fd4a6b0f41337c4f5fdf4afc3bd19e39c3691924817108b82ffcb9c9e609c273f936932b9fba4b3a298ce2eb06d9bff4eb1cc3bd81c4f4ee1b4917e25feb + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 + languageName: node + linkType: hard + +"@jridgewell/source-map@npm:^0.3.3": + version: 0.3.6 + resolution: "@jridgewell/source-map@npm:0.3.6" + dependencies: + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + checksum: 10c0/6a4ecc713ed246ff8e5bdcc1ef7c49aaa93f7463d948ba5054dda18b02dcc6a055e2828c577bcceee058f302ce1fc95595713d44f5c45e43d459f88d267f2f04 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: 10c0/0c6b5ae663087558039052a626d2d7ed5208da36cfd707dcc5cea4a07cfc918248403dcb5989a8f7afaf245ce0573b7cc6fd94c4a30453bd10e44d9363940ba5 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.20, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^2.0.0": + version: 2.2.1 + resolution: "@npmcli/agent@npm:2.2.1" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.1" + checksum: 10c0/38ee5cbe8f3cde13be916e717bfc54fd1a7605c07af056369ff894e244c221e0b56b08ca5213457477f9bc15bca9e729d51a4788829b5c3cf296b3c996147f76 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/162b4a0b8705cd6f5c2470b851d1dc6cd228c86d2170e1769d738c1fbb69a87160901411c3c035331e9e99db72f1f1099a8b734bf1637cc32b9a5be1660e4e1e + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: 10c0/ef6351ae073c45c2ac89494dbb3e1f87cc60a93ce4cde797b782812b6f97da0d620ae81973f104b43c9b7eaa789ad20ba4f6a1359f1cc62f63729a55a7d22d4e + languageName: node + linkType: hard + +"@sindresorhus/merge-streams@npm:^2.1.0": + version: 2.3.0 + resolution: "@sindresorhus/merge-streams@npm:2.3.0" + checksum: 10c0/69ee906f3125fb2c6bb6ec5cdd84e8827d93b49b3892bce8b62267116cc7e197b5cccf20c160a1d32c26014ecd14470a72a5e3ee37a58f1d6dadc0db1ccf3894 + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^3.0.0": + version: 3.0.1 + resolution: "@sinonjs/commons@npm:3.0.1" + dependencies: + type-detect: "npm:4.0.8" + checksum: 10c0/1227a7b5bd6c6f9584274db996d7f8cee2c8c350534b9d0141fc662eaf1f292ea0ae3ed19e5e5271c8fd390d27e492ca2803acd31a1978be2cdc6be0da711403 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.3.0 + resolution: "@sinonjs/fake-timers@npm:10.3.0" + dependencies: + "@sinonjs/commons": "npm:^3.0.0" + checksum: 10c0/2e2fb6cc57f227912814085b7b01fede050cd4746ea8d49a1e44d5a0e56a804663b0340ae2f11af7559ea9bf4d087a11f2f646197a660ea3cb04e19efc04aa63 + languageName: node + linkType: hard + +"@size-limit/esbuild@npm:11.1.2": + version: 11.1.2 + resolution: "@size-limit/esbuild@npm:11.1.2" + dependencies: + esbuild: "npm:^0.20.2" + nanoid: "npm:^5.0.6" + peerDependencies: + size-limit: 11.1.2 + checksum: 10c0/fc08c201d861d0dd18120c6d67480969992bdb98593b0e39a241080e2c6bfd8d773fd4fb8574cb51eeff9074be6c19400a55f9c275da3f4fa5f0b6c7943539f4 + languageName: node + linkType: hard + +"@size-limit/file@npm:11.1.2": + version: 11.1.2 + resolution: "@size-limit/file@npm:11.1.2" + peerDependencies: + size-limit: 11.1.2 + checksum: 10c0/a21a08e24ceb8aca0521ab916ac9c7c90bd927b39b949c4869ad31027cd55f42ab87920558525bce195f35ac81641bac34ac3bea57e5e5d08b1303a0ec2ad470 + languageName: node + linkType: hard + +"@size-limit/preset-small-lib@npm:^11.1.2": + version: 11.1.2 + resolution: "@size-limit/preset-small-lib@npm:11.1.2" + dependencies: + "@size-limit/esbuild": "npm:11.1.2" + "@size-limit/file": "npm:11.1.2" + size-limit: "npm:11.1.2" + peerDependencies: + size-limit: 11.1.2 + checksum: 10c0/0a1c8d44690b341eafa9816d8b1dc1e31fa0726d404a8b598a525cab5726ce6be875f77e7986b7630203b4376a7e733ecaa13531d90bbf859280f8dd38b78061 + languageName: node + linkType: hard + +"@types/babel__core@npm:^7.1.14": + version: 7.20.5 + resolution: "@types/babel__core@npm:7.20.5" + dependencies: + "@babel/parser": "npm:^7.20.7" + "@babel/types": "npm:^7.20.7" + "@types/babel__generator": "npm:*" + "@types/babel__template": "npm:*" + "@types/babel__traverse": "npm:*" + checksum: 10c0/bdee3bb69951e833a4b811b8ee9356b69a61ed5b7a23e1a081ec9249769117fa83aaaf023bb06562a038eb5845155ff663e2d5c75dd95c1d5ccc91db012868ff + languageName: node + linkType: hard + +"@types/babel__generator@npm:*": + version: 7.6.8 + resolution: "@types/babel__generator@npm:7.6.8" + dependencies: + "@babel/types": "npm:^7.0.0" + checksum: 10c0/f0ba105e7d2296bf367d6e055bb22996886c114261e2cb70bf9359556d0076c7a57239d019dee42bb063f565bade5ccb46009bce2044b2952d964bf9a454d6d2 + languageName: node + linkType: hard + +"@types/babel__template@npm:*": + version: 7.4.4 + resolution: "@types/babel__template@npm:7.4.4" + dependencies: + "@babel/parser": "npm:^7.1.0" + "@babel/types": "npm:^7.0.0" + checksum: 10c0/cc84f6c6ab1eab1427e90dd2b76ccee65ce940b778a9a67be2c8c39e1994e6f5bbc8efa309f6cea8dc6754994524cd4d2896558df76d92e7a1f46ecffee7112b + languageName: node + linkType: hard + +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": + version: 7.20.5 + resolution: "@types/babel__traverse@npm:7.20.5" + dependencies: + "@babel/types": "npm:^7.20.7" + checksum: 10c0/033abcb2f4c084ad33e30c3efaad82161240f351e3c71b6154ed289946b33b363696c0fbd42502b68e4582a87413c418321f40eb1ea863e34fe525641345e05b + languageName: node + linkType: hard + +"@types/eslint-scope@npm:^3.7.3": + version: 3.7.7 + resolution: "@types/eslint-scope@npm:3.7.7" + dependencies: + "@types/eslint": "npm:*" + "@types/estree": "npm:*" + checksum: 10c0/a0ecbdf2f03912679440550817ff77ef39a30fa8bfdacaf6372b88b1f931828aec392f52283240f0d648cf3055c5ddc564544a626bcf245f3d09fcb099ebe3cc + languageName: node + linkType: hard + +"@types/eslint@npm:*": + version: 8.56.6 + resolution: "@types/eslint@npm:8.56.6" + dependencies: + "@types/estree": "npm:*" + "@types/json-schema": "npm:*" + checksum: 10c0/52124f0868b14f21b4c8c21cb3c6065e0671df3f64c0bb3d37efe12e41b3434f478461f5ba0dabf368cd927ddc9b36d5592e7f61b939463576ab69c3bf8f3b12 + languageName: node + linkType: hard + +"@types/estree@npm:*, @types/estree@npm:^1.0.5": + version: 1.0.5 + resolution: "@types/estree@npm:1.0.5" + checksum: 10c0/b3b0e334288ddb407c7b3357ca67dbee75ee22db242ca7c56fe27db4e1a31989cb8af48a84dd401deb787fe10cc6b2ab1ee82dc4783be87ededbe3d53c79c70d + languageName: node + linkType: hard + +"@types/graceful-fs@npm:^4.1.3": + version: 4.1.9 + resolution: "@types/graceful-fs@npm:4.1.9" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/235d2fc69741448e853333b7c3d1180a966dd2b8972c8cbcd6b2a0c6cd7f8d582ab2b8e58219dbc62cce8f1b40aa317ff78ea2201cdd8249da5025adebed6f0b + languageName: node + linkType: hard + +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": + version: 2.0.6 + resolution: "@types/istanbul-lib-coverage@npm:2.0.6" + checksum: 10c0/3948088654f3eeb45363f1db158354fb013b362dba2a5c2c18c559484d5eb9f6fd85b23d66c0a7c2fcfab7308d0a585b14dadaca6cc8bf89ebfdc7f8f5102fb7 + languageName: node + linkType: hard + +"@types/istanbul-lib-report@npm:*": + version: 3.0.3 + resolution: "@types/istanbul-lib-report@npm:3.0.3" + dependencies: + "@types/istanbul-lib-coverage": "npm:*" + checksum: 10c0/247e477bbc1a77248f3c6de5dadaae85ff86ac2d76c5fc6ab1776f54512a745ff2a5f791d22b942e3990ddbd40f3ef5289317c4fca5741bedfaa4f01df89051c + languageName: node + linkType: hard + +"@types/istanbul-reports@npm:^3.0.0": + version: 3.0.4 + resolution: "@types/istanbul-reports@npm:3.0.4" + dependencies: + "@types/istanbul-lib-report": "npm:*" + checksum: 10c0/1647fd402aced5b6edac87274af14ebd6b3a85447ef9ad11853a70fd92a98d35f81a5d3ea9fcb5dbb5834e800c6e35b64475e33fcae6bfa9acc70d61497c54ee + languageName: node + linkType: hard + +"@types/jest@npm:^29.5.12": + version: 29.5.12 + resolution: "@types/jest@npm:29.5.12" + dependencies: + expect: "npm:^29.0.0" + pretty-format: "npm:^29.0.0" + checksum: 10c0/25fc8e4c611fa6c4421e631432e9f0a6865a8cb07c9815ec9ac90d630271cad773b2ee5fe08066f7b95bebd18bb967f8ce05d018ee9ab0430f9dfd1d84665b6f + languageName: node + linkType: hard + +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.8": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 20.11.30 + resolution: "@types/node@npm:20.11.30" + dependencies: + undici-types: "npm:~5.26.4" + checksum: 10c0/867cfaf969c6d8850d8d7304e7ab739898a50ecb1395b61ff2335644f5f48d7a46fbc4a14cee967aed65ec134b61a746edae70d1f32f11321ccf29165e3bc4e6 + languageName: node + linkType: hard + +"@types/stack-utils@npm:^2.0.0": + version: 2.0.3 + resolution: "@types/stack-utils@npm:2.0.3" + checksum: 10c0/1f4658385ae936330581bcb8aa3a066df03867d90281cdf89cc356d404bd6579be0f11902304e1f775d92df22c6dd761d4451c804b0a4fba973e06211e9bd77c + languageName: node + linkType: hard + +"@types/yargs-parser@npm:*": + version: 21.0.3 + resolution: "@types/yargs-parser@npm:21.0.3" + checksum: 10c0/e71c3bd9d0b73ca82e10bee2064c384ab70f61034bbfb78e74f5206283fc16a6d85267b606b5c22cb2a3338373586786fed595b2009825d6a9115afba36560a0 + languageName: node + linkType: hard + +"@types/yargs@npm:^17.0.8": + version: 17.0.32 + resolution: "@types/yargs@npm:17.0.32" + dependencies: + "@types/yargs-parser": "npm:*" + checksum: 10c0/2095e8aad8a4e66b86147415364266b8d607a3b95b4239623423efd7e29df93ba81bb862784a6e08664f645cc1981b25fd598f532019174cd3e5e1e689e1cccf + languageName: node + linkType: hard + +"@webassemblyjs/ast@npm:1.12.1, @webassemblyjs/ast@npm:^1.12.1": + version: 1.12.1 + resolution: "@webassemblyjs/ast@npm:1.12.1" + dependencies: + "@webassemblyjs/helper-numbers": "npm:1.11.6" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" + checksum: 10c0/ba7f2b96c6e67e249df6156d02c69eb5f1bd18d5005303cdc42accb053bebbbde673826e54db0437c9748e97abd218366a1d13fa46859b23cde611b6b409998c + languageName: node + linkType: hard + +"@webassemblyjs/floating-point-hex-parser@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.6" + checksum: 10c0/37fe26f89e18e4ca0e7d89cfe3b9f17cfa327d7daf906ae01400416dbb2e33c8a125b4dc55ad7ff405e5fcfb6cf0d764074c9bc532b9a31a71e762be57d2ea0a + languageName: node + linkType: hard + +"@webassemblyjs/helper-api-error@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-api-error@npm:1.11.6" + checksum: 10c0/a681ed51863e4ff18cf38d223429f414894e5f7496856854d9a886eeddcee32d7c9f66290f2919c9bb6d2fc2b2fae3f989b6a1e02a81e829359738ea0c4d371a + languageName: node + linkType: hard + +"@webassemblyjs/helper-buffer@npm:1.12.1": + version: 1.12.1 + resolution: "@webassemblyjs/helper-buffer@npm:1.12.1" + checksum: 10c0/0270724afb4601237410f7fd845ab58ccda1d5456a8783aadfb16eaaf3f2c9610c28e4a5bcb6ad880cde5183c82f7f116d5ccfc2310502439d33f14b6888b48a + languageName: node + linkType: hard + +"@webassemblyjs/helper-numbers@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-numbers@npm:1.11.6" + dependencies: + "@webassemblyjs/floating-point-hex-parser": "npm:1.11.6" + "@webassemblyjs/helper-api-error": "npm:1.11.6" + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/c7d5afc0ff3bd748339b466d8d2f27b908208bf3ff26b2e8e72c39814479d486e0dca6f3d4d776fd9027c1efe05b5c0716c57a23041eb34473892b2731c33af3 + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-bytecode@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6" + checksum: 10c0/79d2bebdd11383d142745efa32781249745213af8e022651847382685ca76709f83e1d97adc5f0d3c2b8546bf02864f8b43a531fdf5ca0748cb9e4e0ef2acaa5 + languageName: node + linkType: hard + +"@webassemblyjs/helper-wasm-section@npm:1.12.1": + version: 1.12.1 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.12.1" + dependencies: + "@webassemblyjs/ast": "npm:1.12.1" + "@webassemblyjs/helper-buffer": "npm:1.12.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" + "@webassemblyjs/wasm-gen": "npm:1.12.1" + checksum: 10c0/0546350724d285ae3c26e6fc444be4c3b5fb824f3be0ec8ceb474179dc3f4430336dd2e36a44b3e3a1a6815960e5eec98cd9b3a8ec66dc53d86daedd3296a6a2 + languageName: node + linkType: hard + +"@webassemblyjs/ieee754@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/ieee754@npm:1.11.6" + dependencies: + "@xtuc/ieee754": "npm:^1.2.0" + checksum: 10c0/59de0365da450322c958deadade5ec2d300c70f75e17ae55de3c9ce564deff5b429e757d107c7ec69bd0ba169c6b6cc2ff66293ab7264a7053c829b50ffa732f + languageName: node + linkType: hard + +"@webassemblyjs/leb128@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/leb128@npm:1.11.6" + dependencies: + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/cb344fc04f1968209804de4da018679c5d4708a03b472a33e0fa75657bb024978f570d3ccf9263b7f341f77ecaa75d0e051b9cd4b7bb17a339032cfd1c37f96e + languageName: node + linkType: hard + +"@webassemblyjs/utf8@npm:1.11.6": + version: 1.11.6 + resolution: "@webassemblyjs/utf8@npm:1.11.6" + checksum: 10c0/14d6c24751a89ad9d801180b0d770f30a853c39f035a15fbc96266d6ac46355227abd27a3fd2eeaa97b4294ced2440a6b012750ae17bafe1a7633029a87b6bee + languageName: node + linkType: hard + +"@webassemblyjs/wasm-edit@npm:^1.12.1": + version: 1.12.1 + resolution: "@webassemblyjs/wasm-edit@npm:1.12.1" + dependencies: + "@webassemblyjs/ast": "npm:1.12.1" + "@webassemblyjs/helper-buffer": "npm:1.12.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" + "@webassemblyjs/helper-wasm-section": "npm:1.12.1" + "@webassemblyjs/wasm-gen": "npm:1.12.1" + "@webassemblyjs/wasm-opt": "npm:1.12.1" + "@webassemblyjs/wasm-parser": "npm:1.12.1" + "@webassemblyjs/wast-printer": "npm:1.12.1" + checksum: 10c0/972f5e6c522890743999e0ed45260aae728098801c6128856b310dd21f1ee63435fc7b518e30e0ba1cdafd0d1e38275829c1e4451c3536a1d9e726e07a5bba0b + languageName: node + linkType: hard + +"@webassemblyjs/wasm-gen@npm:1.12.1": + version: 1.12.1 + resolution: "@webassemblyjs/wasm-gen@npm:1.12.1" + dependencies: + "@webassemblyjs/ast": "npm:1.12.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" + "@webassemblyjs/ieee754": "npm:1.11.6" + "@webassemblyjs/leb128": "npm:1.11.6" + "@webassemblyjs/utf8": "npm:1.11.6" + checksum: 10c0/1e257288177af9fa34c69cab94f4d9036ebed611f77f3897c988874e75182eeeec759c79b89a7a49dd24624fc2d3d48d5580b62b67c4a1c9bfbdcd266b281c16 + languageName: node + linkType: hard + +"@webassemblyjs/wasm-opt@npm:1.12.1": + version: 1.12.1 + resolution: "@webassemblyjs/wasm-opt@npm:1.12.1" + dependencies: + "@webassemblyjs/ast": "npm:1.12.1" + "@webassemblyjs/helper-buffer": "npm:1.12.1" + "@webassemblyjs/wasm-gen": "npm:1.12.1" + "@webassemblyjs/wasm-parser": "npm:1.12.1" + checksum: 10c0/992a45e1f1871033c36987459436ab4e6430642ca49328e6e32a13de9106fe69ae6c0ac27d7050efd76851e502d11cd1ac0e06b55655dfa889ad82f11a2712fb + languageName: node + linkType: hard + +"@webassemblyjs/wasm-parser@npm:1.12.1, @webassemblyjs/wasm-parser@npm:^1.12.1": + version: 1.12.1 + resolution: "@webassemblyjs/wasm-parser@npm:1.12.1" + dependencies: + "@webassemblyjs/ast": "npm:1.12.1" + "@webassemblyjs/helper-api-error": "npm:1.11.6" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" + "@webassemblyjs/ieee754": "npm:1.11.6" + "@webassemblyjs/leb128": "npm:1.11.6" + "@webassemblyjs/utf8": "npm:1.11.6" + checksum: 10c0/e85cec1acad07e5eb65b92d37c8e6ca09c6ca50d7ca58803a1532b452c7321050a0328c49810c337cc2dfd100c5326a54d5ebd1aa5c339ebe6ef10c250323a0e + languageName: node + linkType: hard + +"@webassemblyjs/wast-printer@npm:1.12.1": + version: 1.12.1 + resolution: "@webassemblyjs/wast-printer@npm:1.12.1" + dependencies: + "@webassemblyjs/ast": "npm:1.12.1" + "@xtuc/long": "npm:4.2.2" + checksum: 10c0/39bf746eb7a79aa69953f194943bbc43bebae98bd7cadd4d8bc8c0df470ca6bf9d2b789effaa180e900fab4e2691983c1f7d41571458bd2a26267f2f0c73705a + languageName: node + linkType: hard + +"@webpack-cli/configtest@npm:^2.1.1": + version: 2.1.1 + resolution: "@webpack-cli/configtest@npm:2.1.1" + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + checksum: 10c0/a8da1f15702cb289807da99235ed95326ed7dabeb1a36ca59bd3a5dbe6adcc946a9a2767936050fc4d5ed14efab0e5b5a641dfe8e3d862c36caa5791ac12759d + languageName: node + linkType: hard + +"@webpack-cli/info@npm:^2.0.2": + version: 2.0.2 + resolution: "@webpack-cli/info@npm:2.0.2" + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + checksum: 10c0/ca88a35604dc9aedac7c26e8f6793c5039dc1eea2b12a85fbfd669a5f21ecf9cf169d7fd157ea366a62666e3fa05b776306a96742ac61a9868f44fdce6b40f7d + languageName: node + linkType: hard + +"@webpack-cli/serve@npm:^2.0.5": + version: 2.0.5 + resolution: "@webpack-cli/serve@npm:2.0.5" + peerDependencies: + webpack: 5.x.x + webpack-cli: 5.x.x + peerDependenciesMeta: + webpack-dev-server: + optional: true + checksum: 10c0/36079d34971ff99a58b66b13f4184dcdd8617853c48cccdbc3f9ab7ea9e5d4fcf504e873c298ea7aa15e0b51ad2c4aee4d7a70bd7d9364e60f57b0eb93ca15fc + languageName: node + linkType: hard + +"@xtuc/ieee754@npm:^1.2.0": + version: 1.2.0 + resolution: "@xtuc/ieee754@npm:1.2.0" + checksum: 10c0/a8565d29d135039bd99ae4b2220d3e167d22cf53f867e491ed479b3f84f895742d0097f935b19aab90265a23d5d46711e4204f14c479ae3637fbf06c4666882f + languageName: node + linkType: hard + +"@xtuc/long@npm:4.2.2": + version: 4.2.2 + resolution: "@xtuc/long@npm:4.2.2" + checksum: 10c0/8582cbc69c79ad2d31568c412129bf23d2b1210a1dfb60c82d5a1df93334da4ee51f3057051658569e2c196d8dc33bc05ae6b974a711d0d16e801e1d0647ccd1 + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 10c0/f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 + languageName: node + linkType: hard + +"acorn-import-assertions@npm:^1.9.0": + version: 1.9.0 + resolution: "acorn-import-assertions@npm:1.9.0" + peerDependencies: + acorn: ^8 + checksum: 10c0/3b4a194e128efdc9b86c2b1544f623aba4c1aa70d638f8ab7dc3971a5b4aa4c57bd62f99af6e5325bb5973c55863b4112e708a6f408bad7a138647ca72283afe + languageName: node + linkType: hard + +"acorn@npm:^8.7.1, acorn@npm:^8.8.2": + version: 8.11.3 + resolution: "acorn@npm:8.11.3" + bin: + acorn: bin/acorn + checksum: 10c0/3ff155f8812e4a746fee8ecff1f227d527c4c45655bb1fad6347c3cb58e46190598217551b1500f18542d2bbe5c87120cb6927f5a074a59166fbdd9468f0a299 + languageName: node + linkType: hard + +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": + version: 7.1.0 + resolution: "agent-base@npm:7.1.0" + dependencies: + debug: "npm:^4.3.4" + checksum: 10c0/fc974ab57ffdd8421a2bc339644d312a9cca320c20c3393c9d8b1fd91731b9bbabdb985df5fc860f5b79d81c3e350daa3fcb31c5c07c0bb385aafc817df004ce + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: "npm:^2.0.0" + indent-string: "npm:^4.0.0" + checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 + languageName: node + linkType: hard + +"ajv-keywords@npm:^3.5.2": + version: 3.5.2 + resolution: "ajv-keywords@npm:3.5.2" + peerDependencies: + ajv: ^6.9.1 + checksum: 10c0/0c57a47cbd656e8cdfd99d7c2264de5868918ffa207c8d7a72a7f63379d4333254b2ba03d69e3c035e996a3fd3eb6d5725d7a1597cca10694296e32510546360 + languageName: node + linkType: hard + +"ajv@npm:^6.12.5": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: "npm:^3.1.1" + fast-json-stable-stringify: "npm:^2.0.0" + json-schema-traverse: "npm:^0.4.1" + uri-js: "npm:^4.2.2" + checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.2.1": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: "npm:^0.21.3" + checksum: 10c0/da917be01871525a3dfcf925ae2977bc59e8c513d4423368645634bf5d4ceba5401574eb705c1e92b79f7292af5a656f78c5725a4b0e1cec97c4b413705c1d50 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 10c0/cbe16dbd2c6b2735d1df7976a7070dd277326434f0212f43abf6d87674095d247968209babdaad31bb00882fa68807256ba9be340eec2f1004de14ca75f52a08 + languageName: node + linkType: hard + +"ansi-sequence-parser@npm:^1.1.0": + version: 1.1.1 + resolution: "ansi-sequence-parser@npm:1.1.1" + checksum: 10c0/ab2259ccf69f145ecf1418d4e71524158828f44afdf37c7536677871f4cebaa8b176fcb95de8f94a68129357dddc59586597da25f9d4ebf9968f6ef022bf0b31 + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.0" + checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"ansi-styles@npm:^5.0.0": + version: 5.2.0 + resolution: "ansi-styles@npm:5.2.0" + checksum: 10c0/9c4ca80eb3c2fb7b33841c210d2f20807f40865d27008d7c3f707b7f95cab7d67462a565e2388ac3285b71cb3d9bb2173de8da37c57692a362885ec34d6e27df + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c + languageName: node + linkType: hard + +"anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: "npm:^3.0.0" + picomatch: "npm:^2.0.4" + checksum: 10c0/57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: "npm:~1.0.2" + checksum: 10c0/b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de + languageName: node + linkType: hard + +"array-union@npm:^1.0.1": + version: 1.0.2 + resolution: "array-union@npm:1.0.2" + dependencies: + array-uniq: "npm:^1.0.1" + checksum: 10c0/18686767c0cfdae8dc4acf5ac119b0f0eacad82b7fcc0aa62cc41f93c5ad406d494b6a6e53d85e52e8f0349b67a4fec815feeb537e95c02510d747bc9a4157c7 + languageName: node + linkType: hard + +"array-uniq@npm:^1.0.1": + version: 1.0.3 + resolution: "array-uniq@npm:1.0.3" + checksum: 10c0/3acbaf9e6d5faeb1010e2db04ab171b8d265889e46c61762e502979bdc5e55656013726e9a61507de3c82d329a0dc1e8072630a3454b4f2b881cb19ba7fd8aa6 + languageName: node + linkType: hard + +"async@npm:^3.2.4": + version: 3.2.5 + resolution: "async@npm:3.2.5" + checksum: 10c0/1408287b26c6db67d45cb346e34892cee555b8b59e6c68e6f8c3e495cad5ca13b4f218180e871f3c2ca30df4ab52693b66f2f6ff43644760cab0b2198bda79c1 + languageName: node + linkType: hard + +"babel-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "babel-jest@npm:29.7.0" + dependencies: + "@jest/transform": "npm:^29.7.0" + "@types/babel__core": "npm:^7.1.14" + babel-plugin-istanbul: "npm:^6.1.1" + babel-preset-jest: "npm:^29.6.3" + chalk: "npm:^4.0.0" + graceful-fs: "npm:^4.2.9" + slash: "npm:^3.0.0" + peerDependencies: + "@babel/core": ^7.8.0 + checksum: 10c0/2eda9c1391e51936ca573dd1aedfee07b14c59b33dbe16ef347873ddd777bcf6e2fc739681e9e9661ab54ef84a3109a03725be2ac32cd2124c07ea4401cbe8c1 + languageName: node + linkType: hard + +"babel-plugin-istanbul@npm:^6.1.1": + version: 6.1.1 + resolution: "babel-plugin-istanbul@npm:6.1.1" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.0.0" + "@istanbuljs/load-nyc-config": "npm:^1.0.0" + "@istanbuljs/schema": "npm:^0.1.2" + istanbul-lib-instrument: "npm:^5.0.4" + test-exclude: "npm:^6.0.0" + checksum: 10c0/1075657feb705e00fd9463b329921856d3775d9867c5054b449317d39153f8fbcebd3e02ebf00432824e647faff3683a9ca0a941325ef1afe9b3c4dd51b24beb + languageName: node + linkType: hard + +"babel-plugin-jest-hoist@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-plugin-jest-hoist@npm:29.6.3" + dependencies: + "@babel/template": "npm:^7.3.3" + "@babel/types": "npm:^7.3.3" + "@types/babel__core": "npm:^7.1.14" + "@types/babel__traverse": "npm:^7.0.6" + checksum: 10c0/7e6451caaf7dce33d010b8aafb970e62f1b0c0b57f4978c37b0d457bbcf0874d75a395a102daf0bae0bd14eafb9f6e9a165ee5e899c0a4f1f3bb2e07b304ed2e + languageName: node + linkType: hard + +"babel-preset-current-node-syntax@npm:^1.0.0": + version: 1.0.1 + resolution: "babel-preset-current-node-syntax@npm:1.0.1" + dependencies: + "@babel/plugin-syntax-async-generators": "npm:^7.8.4" + "@babel/plugin-syntax-bigint": "npm:^7.8.3" + "@babel/plugin-syntax-class-properties": "npm:^7.8.3" + "@babel/plugin-syntax-import-meta": "npm:^7.8.3" + "@babel/plugin-syntax-json-strings": "npm:^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.8.3" + "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" + "@babel/plugin-syntax-numeric-separator": "npm:^7.8.3" + "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" + "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" + "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" + "@babel/plugin-syntax-top-level-await": "npm:^7.8.3" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/5ba39a3a0e6c37d25e56a4fb843be632dac98d54706d8a0933f9bcb1a07987a96d55c2b5a6c11788a74063fb2534fe68c1f1dbb6c93626850c785e0938495627 + languageName: node + linkType: hard + +"babel-preset-jest@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-preset-jest@npm:29.6.3" + dependencies: + babel-plugin-jest-hoist: "npm:^29.6.3" + babel-preset-current-node-syntax: "npm:^1.0.0" + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 10c0/ec5fd0276b5630b05f0c14bb97cc3815c6b31600c683ebb51372e54dcb776cff790bdeeabd5b8d01ede375a040337ccbf6a3ccd68d3a34219125945e167ad943 + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"binary-extensions@npm:^2.0.0": + version: 2.3.0 + resolution: "binary-extensions@npm:2.3.0" + checksum: 10c0/75a59cafc10fb12a11d510e77110c6c7ae3f4ca22463d52487709ca7f18f69d886aa387557cc9864fbdb10153d0bdb4caacabf11541f55e89ed6e18d12ece2b5 + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f + languageName: node + linkType: hard + +"braces@npm:^3.0.2, braces@npm:~3.0.2": + version: 3.0.2 + resolution: "braces@npm:3.0.2" + dependencies: + fill-range: "npm:^7.0.1" + checksum: 10c0/321b4d675791479293264019156ca322163f02dc06e3c4cab33bb15cd43d80b51efef69b0930cfde3acd63d126ebca24cd0544fa6f261e093a0fb41ab9dda381 + languageName: node + linkType: hard + +"browserslist@npm:^4.21.10, browserslist@npm:^4.22.2": + version: 4.23.0 + resolution: "browserslist@npm:4.23.0" + dependencies: + caniuse-lite: "npm:^1.0.30001587" + electron-to-chromium: "npm:^1.4.668" + node-releases: "npm:^2.0.14" + update-browserslist-db: "npm:^1.0.13" + bin: + browserslist: cli.js + checksum: 10c0/8e9cc154529062128d02a7af4d8adeead83ca1df8cd9ee65a88e2161039f3d68a4d40fea7353cab6bae4c16182dec2fdd9a1cf7dc2a2935498cee1af0e998943 + languageName: node + linkType: hard + +"bs-logger@npm:0.x": + version: 0.2.6 + resolution: "bs-logger@npm:0.2.6" + dependencies: + fast-json-stable-stringify: "npm:2.x" + checksum: 10c0/80e89aaaed4b68e3374ce936f2eb097456a0dddbf11f75238dbd53140b1e39259f0d248a5089ed456f1158984f22191c3658d54a713982f676709fbe1a6fa5a0 + languageName: node + linkType: hard + +"bser@npm:2.1.1": + version: 2.1.1 + resolution: "bser@npm:2.1.1" + dependencies: + node-int64: "npm:^0.4.0" + checksum: 10c0/24d8dfb7b6d457d73f32744e678a60cc553e4ec0e9e1a01cf614b44d85c3c87e188d3cc78ef0442ce5032ee6818de20a0162ba1074725c0d08908f62ea979227 + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 10c0/124fff9d66d691a86d3b062eff4663fe437a9d9ee4b47b1b9e97f5a5d14f6d5399345db80f796827be7c95e70a8e765dd404b7c3ff3b3324f98e9b0c8826cc34 + languageName: node + linkType: hard + +"builtin-modules@npm:^1.1.1": + version: 1.1.1 + resolution: "builtin-modules@npm:1.1.1" + checksum: 10c0/58d72ea7f59db3c2ae854e1058d85b226f75ff7386d0f71d628e25a600383fc6652af218e20ba2361925c605a4144590ceb890dfdca298fdf8f3d040c0591a23 + languageName: node + linkType: hard + +"bytes-iec@npm:^3.1.1": + version: 3.1.1 + resolution: "bytes-iec@npm:3.1.1" + checksum: 10c0/cb553a214d49afe2efb4f9f6f03c0a76dbf2b0db8fe176c1d9943f74b79fb36767938e5f0a60991d870309c96f21e440904dd4f92b54c9c316c88486e6eef025 + languageName: node + linkType: hard + +"cacache@npm:^18.0.0": + version: 18.0.2 + resolution: "cacache@npm:18.0.2" + dependencies: + "@npmcli/fs": "npm:^3.1.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^4.0.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + unique-filename: "npm:^3.0.0" + checksum: 10c0/7992665305cc251a984f4fdbab1449d50e88c635bc43bf2785530c61d239c61b349e5734461baa461caaee65f040ab14e2d58e694f479c0810cffd181ba5eabc + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 + languageName: node + linkType: hard + +"camelcase@npm:^5.3.1": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: 10c0/92ff9b443bfe8abb15f2b1513ca182d16126359ad4f955ebc83dc4ddcc4ef3fdd2c078bc223f2673dc223488e75c99b16cc4d056624374b799e6a1555cf61b23 + languageName: node + linkType: hard + +"camelcase@npm:^6.2.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 10c0/0d701658219bd3116d12da3eab31acddb3f9440790c0792e0d398f0a520a6a4058018e546862b6fba89d7ae990efaeb97da71e1913e9ebf5a8b5621a3d55c710 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001587": + version: 1.0.30001600 + resolution: "caniuse-lite@npm:1.0.30001600" + checksum: 10c0/b4f764db5d4f8cb3eb2827a170a20e6b2f4b8c3d80169efcf56bf3d6b8b3e6dd1c740141f0d0b10b2233f49ee8b496e2d1e044a36c54750a106bad2f6477f2db + languageName: node + linkType: hard + +"chalk@npm:^2.3.0, chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: "npm:^3.2.1" + escape-string-regexp: "npm:^1.0.5" + supports-color: "npm:^5.3.0" + checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0, chalk@npm:^4.1.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + +"char-regex@npm:^1.0.2": + version: 1.0.2 + resolution: "char-regex@npm:1.0.2" + checksum: 10c0/57a09a86371331e0be35d9083ba429e86c4f4648ecbe27455dbfb343037c16ee6fdc7f6b61f433a57cc5ded5561d71c56a150e018f40c2ffb7bc93a26dae341e + languageName: node + linkType: hard + +"chokidar@npm:^3.6.0": + version: 3.6.0 + resolution: "chokidar@npm:3.6.0" + dependencies: + anymatch: "npm:~3.1.2" + braces: "npm:~3.0.2" + fsevents: "npm:~2.3.2" + glob-parent: "npm:~5.1.2" + is-binary-path: "npm:~2.1.0" + is-glob: "npm:~4.0.1" + normalize-path: "npm:~3.0.0" + readdirp: "npm:~3.6.0" + dependenciesMeta: + fsevents: + optional: true + checksum: 10c0/8361dcd013f2ddbe260eacb1f3cb2f2c6f2b0ad118708a343a5ed8158941a39cb8fb1d272e0f389712e74ee90ce8ba864eece9e0e62b9705cb468a2f6d917462 + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 + languageName: node + linkType: hard + +"chrome-trace-event@npm:^1.0.2": + version: 1.0.3 + resolution: "chrome-trace-event@npm:1.0.3" + checksum: 10c0/080ce2d20c2b9e0f8461a380e9585686caa768b1c834a464470c9dc74cda07f27611c7b727a2cd768a9cecd033297fdec4ce01f1e58b62227882c1059dec321c + languageName: node + linkType: hard + +"ci-info@npm:^3.2.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 10c0/6f0109e36e111684291d46123d491bc4e7b7a1934c3a20dea28cba89f1d4a03acd892f5f6a81ed3855c38647e285a150e3c9ba062e38943bef57fee6c1554c3a + languageName: node + linkType: hard + +"cjs-module-lexer@npm:^1.0.0": + version: 1.2.3 + resolution: "cjs-module-lexer@npm:1.2.3" + checksum: 10c0/0de9a9c3fad03a46804c0d38e7b712fb282584a9c7ef1ed44cae22fb71d9bb600309d66a9711ac36a596fd03422f5bb03e021e8f369c12a39fa1786ae531baab + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^7.0.0" + checksum: 10c0/4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5 + languageName: node + linkType: hard + +"clone-deep@npm:^4.0.1": + version: 4.0.1 + resolution: "clone-deep@npm:4.0.1" + dependencies: + is-plain-object: "npm:^2.0.4" + kind-of: "npm:^6.0.2" + shallow-clone: "npm:^3.0.0" + checksum: 10c0/637753615aa24adf0f2d505947a1bb75e63964309034a1cf56ba4b1f30af155201edd38d26ffe26911adaae267a3c138b344a4947d39f5fc1b6d6108125aa758 + languageName: node + linkType: hard + +"co@npm:^4.6.0": + version: 4.6.0 + resolution: "co@npm:4.6.0" + checksum: 10c0/c0e85ea0ca8bf0a50cbdca82efc5af0301240ca88ebe3644a6ffb8ffe911f34d40f8fbcf8f1d52c5ddd66706abd4d3bfcd64259f1e8e2371d4f47573b0dc8c28 + languageName: node + linkType: hard + +"collect-v8-coverage@npm:^1.0.0": + version: 1.0.2 + resolution: "collect-v8-coverage@npm:1.0.2" + checksum: 10c0/ed7008e2e8b6852c5483b444a3ae6e976e088d4335a85aa0a9db2861c5f1d31bd2d7ff97a60469b3388deeba661a619753afbe201279fb159b4b9548ab8269a1 + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: "npm:1.1.3" + checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"colorette@npm:^2.0.14": + version: 2.0.20 + resolution: "colorette@npm:2.0.20" + checksum: 10c0/e94116ff33b0ff56f3b83b9ace895e5bf87c2a7a47b3401b8c3f3226e050d5ef76cf4072fb3325f9dc24d1698f9b730baf4e05eeaf861d74a1883073f4c98a40 + languageName: node + linkType: hard + +"commander@npm:^10.0.1": + version: 10.0.1 + resolution: "commander@npm:10.0.1" + checksum: 10c0/53f33d8927758a911094adadda4b2cbac111a5b377d8706700587650fd8f45b0bbe336de4b5c3fe47fd61f420a3d9bd452b6e0e6e5600a7e74d7bf0174f6efe3 + languageName: node + linkType: hard + +"commander@npm:^11.0.0": + version: 11.1.0 + resolution: "commander@npm:11.1.0" + checksum: 10c0/13cc6ac875e48780250f723fb81c1c1178d35c5decb1abb1b628b3177af08a8554e76b2c0f29de72d69eef7c864d12613272a71fabef8047922bc622ab75a179 + languageName: node + linkType: hard + +"commander@npm:^2.12.1, commander@npm:^2.20.0": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: 10c0/74c781a5248c2402a0a3e966a0a2bba3c054aad144f5c023364be83265e796b20565aa9feff624132ff629aa64e16999fa40a743c10c12f7c61e96a794b99288 + languageName: node + linkType: hard + +"commondir@npm:^1.0.1": + version: 1.0.1 + resolution: "commondir@npm:1.0.1" + checksum: 10c0/33a124960e471c25ee19280c9ce31ccc19574b566dc514fe4f4ca4c34fa8b0b57cf437671f5de380e11353ea9426213fca17687dd2ef03134fea2dbc53809fd6 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f + languageName: node + linkType: hard + +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 10c0/8f2f7a27a1a011cc6cc88cc4da2d7d0cfa5ee0369508baae3d98c260bb3ac520691464e5bbe4ae7cdf09860c1d69ecc6f70c63c6e7c7f7e3f18ec08484dc7d9b + languageName: node + linkType: hard + +"create-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "create-jest@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + chalk: "npm:^4.0.0" + exit: "npm:^0.1.2" + graceful-fs: "npm:^4.2.9" + jest-config: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + prompts: "npm:^2.0.1" + bin: + create-jest: bin/create-jest.js + checksum: 10c0/e7e54c280692470d3398f62a6238fd396327e01c6a0757002833f06d00afc62dd7bfe04ff2b9cd145264460e6b4d1eb8386f2925b7e567f97939843b7b0e812f + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/5738c312387081c98d69c98e105b6327b069197f864a60593245d64c8089c8a0a744e16349281210d56835bb9274130d825a78b2ad6853ca13cfbeffc0c31750 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.4": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: "npm:2.1.2" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/cedbec45298dd5c501d01b92b119cd3faebe5438c3917ff11ae1bff86a6c722930ac9c8659792824013168ba6db7c4668225d845c633fbdafbbf902a6389f736 + languageName: node + linkType: hard + +"dedent@npm:^1.0.0": + version: 1.5.1 + resolution: "dedent@npm:1.5.1" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: 10c0/f8612cd5b00aab58b18bb95572dca08dc2d49720bfa7201a444c3dae430291e8a06d4928614a6ec8764d713927f44bce9c990d3b8238fca2f430990ddc17c070 + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 + languageName: node + linkType: hard + +"detect-newline@npm:^3.0.0": + version: 3.1.0 + resolution: "detect-newline@npm:3.1.0" + checksum: 10c0/c38cfc8eeb9fda09febb44bcd85e467c970d4e3bf526095394e5a4f18bc26dd0cf6b22c69c1fa9969261521c593836db335c2795218f6d781a512aea2fb8209d + languageName: node + linkType: hard + +"diff-sequences@npm:^29.6.3": + version: 29.6.3 + resolution: "diff-sequences@npm:29.6.3" + checksum: 10c0/32e27ac7dbffdf2fb0eb5a84efd98a9ad084fbabd5ac9abb8757c6770d5320d2acd172830b28c4add29bb873d59420601dfc805ac4064330ce59b1adfd0593b2 + languageName: node + linkType: hard + +"diff@npm:^4.0.1": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: 10c0/81b91f9d39c4eaca068eb0c1eb0e4afbdc5bb2941d197f513dd596b820b956fef43485876226d65d497bebc15666aa2aa82c679e84f65d5f2bfbf14ee46e32c1 + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.4.668": + version: 1.4.717 + resolution: "electron-to-chromium@npm:1.4.717" + checksum: 10c0/1de0a9f078211471442010d574634d147491c06f415cc3c178dd378004c4ee5e743cda288973ac01f5204abc6b5bc7bec1d770807b60eb012b49aae4c9570985 + languageName: node + linkType: hard + +"email-addresses@npm:^5.0.0": + version: 5.0.0 + resolution: "email-addresses@npm:5.0.0" + checksum: 10c0/fc8a6f84e378bbe601ce39a3d8d86bc7e4584030ae9eb1938e12943f7fb5207e5fd7ae449cced3bea70968a519ade560d55ca170208c3f1413d7d25d8613a577 + languageName: node + linkType: hard + +"emittery@npm:^0.13.1": + version: 0.13.1 + resolution: "emittery@npm:0.13.1" + checksum: 10c0/1573d0ae29ab34661b6c63251ff8f5facd24ccf6a823f19417ae8ba8c88ea450325788c67f16c99edec8de4b52ce93a10fe441ece389fd156e88ee7dab9bfa35 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + +"enhanced-resolve@npm:^5.0.0, enhanced-resolve@npm:^5.16.0": + version: 5.16.0 + resolution: "enhanced-resolve@npm:5.16.0" + dependencies: + graceful-fs: "npm:^4.2.4" + tapable: "npm:^2.2.0" + checksum: 10c0/dd69669cbb638ccacefd03e04d5e195ee6a99b7f5f8012f86d2df7781834de357923e06064ea621137c4ce0b37cc12b872b4e6d1ac6ab15fe98e7f1dfbbb08c4 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"envinfo@npm:^7.7.3": + version: 7.11.1 + resolution: "envinfo@npm:7.11.1" + bin: + envinfo: dist/cli.js + checksum: 10c0/4550cce03d4d8a7b137d548faaf9c920356474231636cb4a6e74ae75db3b9cb04aa0a052ee391e2363af5db697166c207ba76e106338d758c6126830b3e16d75 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: "npm:^0.2.1" + checksum: 10c0/ba827f89369b4c93382cfca5a264d059dfefdaa56ecc5e338ffa58a6471f5ed93b71a20add1d52290a4873d92381174382658c885ac1a2305f7baca363ce9cce + languageName: node + linkType: hard + +"es-module-lexer@npm:^1.2.1": + version: 1.5.0 + resolution: "es-module-lexer@npm:1.5.0" + checksum: 10c0/d199853404f3381801eb102befb84a8fc48f93ed86b852c2461c2c4ad4bbbc91128f3d974ff9b8718628260ae3f36e661295ab3e419222868aa31269284e34c9 + languageName: node + linkType: hard + +"esbuild@npm:^0.20.2": + version: 0.20.2 + resolution: "esbuild@npm:0.20.2" + dependencies: + "@esbuild/aix-ppc64": "npm:0.20.2" + "@esbuild/android-arm": "npm:0.20.2" + "@esbuild/android-arm64": "npm:0.20.2" + "@esbuild/android-x64": "npm:0.20.2" + "@esbuild/darwin-arm64": "npm:0.20.2" + "@esbuild/darwin-x64": "npm:0.20.2" + "@esbuild/freebsd-arm64": "npm:0.20.2" + "@esbuild/freebsd-x64": "npm:0.20.2" + "@esbuild/linux-arm": "npm:0.20.2" + "@esbuild/linux-arm64": "npm:0.20.2" + "@esbuild/linux-ia32": "npm:0.20.2" + "@esbuild/linux-loong64": "npm:0.20.2" + "@esbuild/linux-mips64el": "npm:0.20.2" + "@esbuild/linux-ppc64": "npm:0.20.2" + "@esbuild/linux-riscv64": "npm:0.20.2" + "@esbuild/linux-s390x": "npm:0.20.2" + "@esbuild/linux-x64": "npm:0.20.2" + "@esbuild/netbsd-x64": "npm:0.20.2" + "@esbuild/openbsd-x64": "npm:0.20.2" + "@esbuild/sunos-x64": "npm:0.20.2" + "@esbuild/win32-arm64": "npm:0.20.2" + "@esbuild/win32-ia32": "npm:0.20.2" + "@esbuild/win32-x64": "npm:0.20.2" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/66398f9fb2c65e456a3e649747b39af8a001e47963b25e86d9c09d2a48d61aa641b27da0ce5cad63df95ad246105e1d83e7fee0e1e22a0663def73b1c5101112 + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.1.2 + resolution: "escalade@npm:3.1.2" + checksum: 10c0/6b4adafecd0682f3aa1cd1106b8fff30e492c7015b178bc81b2d2f75106dabea6c6d6e8508fc491bd58e597c74abb0e8e2368f943ecb9393d4162e3c2f3cf287 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 10c0/2530479fe8db57eace5e8646c9c2a9c80fa279614986d16dcc6bcaceb63ae77f05a851ba6c43756d816c61d7f4534baf56e3c705e3e0d884818a46808811c507 + languageName: node + linkType: hard + +"eslint-scope@npm:5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^4.1.1" + checksum: 10c0/d30ef9dc1c1cbdece34db1539a4933fe3f9b14e1ffb27ecc85987902ee663ad7c9473bbd49a9a03195a373741e62e2f807c4938992e019b511993d163450e70a + languageName: node + linkType: hard + +"esprima@npm:^4.0.0": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: 10c0/ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: 10c0/9cb46463ef8a8a4905d3708a652d60122a0c20bb58dec7e0e12ab0e7235123d74214fc0141d743c381813e1b992767e2708194f6f6e0f9fd00c1b4e0887b8b6d + languageName: node + linkType: hard + +"estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + +"events@npm:^3.2.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: 10c0/d6b6f2adbccbcda74ddbab52ed07db727ef52e31a61ed26db9feb7dc62af7fc8e060defa65e5f8af9449b86b52cc1a1f6a79f2eafcf4e62add2b7a1fa4a432f6 + languageName: node + linkType: hard + +"execa@npm:^5.0.0": + version: 5.1.1 + resolution: "execa@npm:5.1.1" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^6.0.0" + human-signals: "npm:^2.1.0" + is-stream: "npm:^2.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^4.0.1" + onetime: "npm:^5.1.2" + signal-exit: "npm:^3.0.3" + strip-final-newline: "npm:^2.0.0" + checksum: 10c0/c8e615235e8de4c5addf2fa4c3da3e3aa59ce975a3e83533b4f6a71750fb816a2e79610dc5f1799b6e28976c9ae86747a36a606655bf8cb414a74d8d507b304f + languageName: node + linkType: hard + +"exit@npm:^0.1.2": + version: 0.1.2 + resolution: "exit@npm:0.1.2" + checksum: 10c0/71d2ad9b36bc25bb8b104b17e830b40a08989be7f7d100b13269aaae7c3784c3e6e1e88a797e9e87523993a25ba27c8958959a554535370672cfb4d824af8989 + languageName: node + linkType: hard + +"expect@npm:^29.0.0, expect@npm:^29.7.0": + version: 29.7.0 + resolution: "expect@npm:29.7.0" + dependencies: + "@jest/expect-utils": "npm:^29.7.0" + jest-get-type: "npm:^29.6.3" + jest-matcher-utils: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + checksum: 10c0/2eddeace66e68b8d8ee5f7be57f3014b19770caaf6815c7a08d131821da527fb8c8cb7b3dcd7c883d2d3d8d184206a4268984618032d1e4b16dc8d6596475d41 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + +"fast-glob@npm:^3.3.2": + version: 3.3.2 + resolution: "fast-glob@npm:3.3.2" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.4" + checksum: 10c0/42baad7b9cd40b63e42039132bde27ca2cb3a4950d0a0f9abe4639ea1aa9d3e3b40f98b1fe31cbc0cc17b664c9ea7447d911a152fa34ec5b72977b125a6fc845 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b + languageName: node + linkType: hard + +"fastest-levenshtein@npm:^1.0.12": + version: 1.0.16 + resolution: "fastest-levenshtein@npm:1.0.16" + checksum: 10c0/7e3d8ae812a7f4fdf8cad18e9cde436a39addf266a5986f653ea0d81e0de0900f50c0f27c6d5aff3f686bcb48acbd45be115ae2216f36a6a13a7dbbf5cad878b + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.17.1 + resolution: "fastq@npm:1.17.1" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/1095f16cea45fb3beff558bb3afa74ca7a9250f5a670b65db7ed585f92b4b48381445cd328b3d87323da81e43232b5d5978a8201bde84e0cd514310f1ea6da34 + languageName: node + linkType: hard + +"fb-watchman@npm:^2.0.0": + version: 2.0.2 + resolution: "fb-watchman@npm:2.0.2" + dependencies: + bser: "npm:2.1.1" + checksum: 10c0/feae89ac148adb8f6ae8ccd87632e62b13563e6fb114cacb5265c51f585b17e2e268084519fb2edd133872f1d47a18e6bfd7e5e08625c0d41b93149694187581 + languageName: node + linkType: hard + +"filename-reserved-regex@npm:^2.0.0": + version: 2.0.0 + resolution: "filename-reserved-regex@npm:2.0.0" + checksum: 10c0/453740b7f9fd126e508da555b37e38c1f7ff19f5e9f3d297b2de1beb09854957baddd74c83235e87b16e9ce27a2368798896669edad5a81b5b7bd8cb57c942fc + languageName: node + linkType: hard + +"filenamify@npm:^4.3.0": + version: 4.3.0 + resolution: "filenamify@npm:4.3.0" + dependencies: + filename-reserved-regex: "npm:^2.0.0" + strip-outer: "npm:^1.0.1" + trim-repeated: "npm:^1.0.0" + checksum: 10c0/dcfd2f116d66f78c9dd58bb0f0d9b6529d89c801a9f37a4f86e7adc0acecb6881c7fb7c3231dc9e6754b767edcfdca89cba3a492a58afd2b48479b30d14ccf8f + languageName: node + linkType: hard + +"fill-range@npm:^7.0.1": + version: 7.0.1 + resolution: "fill-range@npm:7.0.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/7cdad7d426ffbaadf45aeb5d15ec675bbd77f7597ad5399e3d2766987ed20bda24d5fac64b3ee79d93276f5865608bb22344a26b9b1ae6c4d00bd94bf611623f + languageName: node + linkType: hard + +"find-cache-dir@npm:^3.3.1": + version: 3.3.2 + resolution: "find-cache-dir@npm:3.3.2" + dependencies: + commondir: "npm:^1.0.1" + make-dir: "npm:^3.0.2" + pkg-dir: "npm:^4.1.0" + checksum: 10c0/92747cda42bff47a0266b06014610981cfbb71f55d60f2c8216bc3108c83d9745507fb0b14ecf6ab71112bed29cd6fb1a137ee7436179ea36e11287e3159e587 + languageName: node + linkType: hard + +"find-up@npm:^4.0.0, find-up@npm:^4.1.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: "npm:^5.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 + languageName: node + linkType: hard + +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: 10c0/f178b13482f0cd80c7fede05f4d10585b1f2fdebf26e12edc138e32d3150c6ea6482b7f12813a1091143bad52bb6d3596bca51a162257a21163c0ff438baa5fe + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: "npm:^7.0.0" + signal-exit: "npm:^4.0.1" + checksum: 10c0/9700a0285628abaeb37007c9a4d92bd49f67210f09067638774338e146c8e9c825c5c877f072b2f75f41dc6a2d0be8664f79ffc03f6576649f54a84fb9b47de0 + languageName: node + linkType: hard + +"fs-extra@npm:^11.1.1": + version: 11.2.0 + resolution: "fs-extra@npm:11.2.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^6.0.1" + universalify: "npm:^2.0.0" + checksum: 10c0/d77a9a9efe60532d2e790e938c81a02c1b24904ef7a3efb3990b835514465ba720e99a6ea56fd5e2db53b4695319b644d76d5a0e9988a2beef80aa7b1da63398 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 + languageName: node + linkType: hard + +"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 + languageName: node + linkType: hard + +"gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: 10c0/782aba6cba65b1bb5af3b095d96249d20edbe8df32dbf4696fd49be2583faf676173bf4809386588828e4dd76a3354fcbeb577bab1c833ccd9fc4577f26103f8 + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde + languageName: node + linkType: hard + +"get-package-type@npm:^0.1.0": + version: 0.1.0 + resolution: "get-package-type@npm:0.1.0" + checksum: 10c0/e34cdf447fdf1902a1f6d5af737eaadf606d2ee3518287abde8910e04159368c268568174b2e71102b87b26c2020486f126bfca9c4fb1ceb986ff99b52ecd1be + languageName: node + linkType: hard + +"get-stream@npm:^6.0.0": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: 10c0/49825d57d3fd6964228e6200a58169464b8e8970489b3acdc24906c782fb7f01f9f56f8e6653c4a50713771d6658f7cfe051e5eb8c12e334138c9c918b296341 + languageName: node + linkType: hard + +"gh-pages@npm:^6.1.1": + version: 6.1.1 + resolution: "gh-pages@npm:6.1.1" + dependencies: + async: "npm:^3.2.4" + commander: "npm:^11.0.0" + email-addresses: "npm:^5.0.0" + filenamify: "npm:^4.3.0" + find-cache-dir: "npm:^3.3.1" + fs-extra: "npm:^11.1.1" + globby: "npm:^6.1.0" + bin: + gh-pages: bin/gh-pages.js + gh-pages-clean: bin/gh-pages-clean.js + checksum: 10c0/1a0c1843862e3d85cdf7a165e92ab504e14b20d1c59398355cb73602041d8a3d509f9c5d80788628048610b751cb32731ed38079691c2b5f9d720664be3f1fa6 + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + +"glob-to-regexp@npm:^0.4.1": + version: 0.4.1 + resolution: "glob-to-regexp@npm:0.4.1" + checksum: 10c0/0486925072d7a916f052842772b61c3e86247f0a80cc0deb9b5a3e8a1a9faad5b04fb6f58986a09f34d3e96cd2a22a24b7e9882fb1cf904c31e9a310de96c429 + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.3.7": + version: 10.3.10 + resolution: "glob@npm:10.3.10" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^2.3.5" + minimatch: "npm:^9.0.1" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry: "npm:^1.10.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/13d8a1feb7eac7945f8c8480e11cd4a44b24d26503d99a8d8ac8d5aefbf3e9802a2b6087318a829fad04cb4e829f25c5f4f1110c68966c498720dd261c7e344d + languageName: node + linkType: hard + +"glob@npm:^7.0.3, glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^3.1.1" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 10c0/758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1 + languageName: node + linkType: hard + +"globby@npm:^14.0.1": + version: 14.0.1 + resolution: "globby@npm:14.0.1" + dependencies: + "@sindresorhus/merge-streams": "npm:^2.1.0" + fast-glob: "npm:^3.3.2" + ignore: "npm:^5.2.4" + path-type: "npm:^5.0.0" + slash: "npm:^5.1.0" + unicorn-magic: "npm:^0.1.0" + checksum: 10c0/749a6be91cf455c161ebb5c9130df3991cb9fd7568425db850a8279a6cf45acd031c5069395beb7aeb4dd606b64f0d6ff8116c93726178d8e6182fee58c2736d + languageName: node + linkType: hard + +"globby@npm:^6.1.0": + version: 6.1.0 + resolution: "globby@npm:6.1.0" + dependencies: + array-union: "npm:^1.0.1" + glob: "npm:^7.0.3" + object-assign: "npm:^4.0.1" + pify: "npm:^2.0.0" + pinkie-promise: "npm:^2.0.0" + checksum: 10c0/656ad1f0d02c6ef378c07589519ed3ec27fe988ea177195c05b8aff280320f3d67b91fa0baa6f7e49288f9bf1f92fc84f783a79ac3ed66278f3fa082e627ed84 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + +"hasown@npm:^2.0.0": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 + languageName: node + linkType: hard + +"html-escaper@npm:^2.0.0": + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: 10c0/208e8a12de1a6569edbb14544f4567e6ce8ecc30b9394fcaa4e7bb1e60c12a7c9a1ed27e31290817157e8626f3a4f29e76c8747030822eb84a6abb15c255f0a0 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.4 + resolution: "https-proxy-agent@npm:7.0.4" + dependencies: + agent-base: "npm:^7.0.2" + debug: "npm:4" + checksum: 10c0/bc4f7c38da32a5fc622450b6cb49a24ff596f9bd48dcedb52d2da3fa1c1a80e100fb506bd59b326c012f21c863c69b275c23de1a01d0b84db396822fdf25e52b + languageName: node + linkType: hard + +"human-signals@npm:^2.1.0": + version: 2.1.0 + resolution: "human-signals@npm:2.1.0" + checksum: 10c0/695edb3edfcfe9c8b52a76926cd31b36978782062c0ed9b1192b36bebc75c4c87c82e178dfcb0ed0fc27ca59d434198aac0bd0be18f5781ded775604db22304a + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"ignore@npm:^5.2.4": + version: 5.3.1 + resolution: "ignore@npm:5.3.1" + checksum: 10c0/703f7f45ffb2a27fb2c5a8db0c32e7dee66b33a225d28e8db4e1be6474795f606686a6e3bcc50e1aa12f2042db4c9d4a7d60af3250511de74620fbed052ea4cd + languageName: node + linkType: hard + +"import-local@npm:^3.0.2": + version: 3.1.0 + resolution: "import-local@npm:3.1.0" + dependencies: + pkg-dir: "npm:^4.2.0" + resolve-cwd: "npm:^3.0.0" + bin: + import-local-fixture: fixtures/cli.js + checksum: 10c0/c67ecea72f775fe8684ca3d057e54bdb2ae28c14bf261d2607c269c18ea0da7b730924c06262eca9aed4b8ab31e31d65bc60b50e7296c85908a56e2f7d41ecd2 + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: "npm:^1.3.0" + wrappy: "npm:1" + checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 + languageName: node + linkType: hard + +"inherits@npm:2": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"interpret@npm:^3.1.1": + version: 3.1.1 + resolution: "interpret@npm:3.1.1" + checksum: 10c0/6f3c4d0aa6ec1b43a8862375588a249e3c917739895cbe67fe12f0a76260ea632af51e8e2431b50fbcd0145356dc28ca147be08dbe6a523739fd55c0f91dc2a5 + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: 10c0/e7fb686a739068bb70f860b39b67afc62acc62e36bb61c5f965768abce1873b379c563e61dd2adad96ebb7edf6651111b385e490cf508378959b0ed4cac4e729 + languageName: node + linkType: hard + +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: "npm:^2.0.0" + checksum: 10c0/a16eaee59ae2b315ba36fad5c5dcaf8e49c3e27318f8ab8fa3cdb8772bf559c8d1ba750a589c2ccb096113bb64497084361a25960899cb6172a6925ab6123d38 + languageName: node + linkType: hard + +"is-core-module@npm:^2.13.0": + version: 2.13.1 + resolution: "is-core-module@npm:2.13.1" + dependencies: + hasown: "npm:^2.0.0" + checksum: 10c0/2cba9903aaa52718f11c4896dabc189bab980870aae86a62dc0d5cedb546896770ee946fb14c84b7adf0735f5eaea4277243f1b95f5cefa90054f92fbcac2518 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + +"is-generator-fn@npm:^2.0.0": + version: 2.1.0 + resolution: "is-generator-fn@npm:2.1.0" + checksum: 10c0/2957cab387997a466cd0bf5c1b6047bd21ecb32bdcfd8996b15747aa01002c1c88731802f1b3d34ac99f4f6874b626418bd118658cf39380fe5fff32a3af9c4d + languageName: node + linkType: hard + +"is-glob@npm:^4.0.1, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"is-plain-object@npm:^2.0.4": + version: 2.0.4 + resolution: "is-plain-object@npm:2.0.4" + dependencies: + isobject: "npm:^3.0.1" + checksum: 10c0/f050fdd5203d9c81e8c4df1b3ff461c4bc64e8b5ca383bcdde46131361d0a678e80bcf00b5257646f6c636197629644d53bd8e2375aea633de09a82d57e942f4 + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5 + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + +"isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: 10c0/03344f5064a82f099a0cd1a8a407f4c0d20b7b8485e8e816c39f249e9416b06c322e8dec5b842b6bb8a06de0af9cb48e7bc1b5352f0fadc2f0abac033db3d4db + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.2 + resolution: "istanbul-lib-coverage@npm:3.2.2" + checksum: 10c0/6c7ff2106769e5f592ded1fb418f9f73b4411fd5a084387a5410538332b6567cd1763ff6b6cadca9b9eb2c443cce2f7ea7d7f1b8d315f9ce58539793b1e0922b + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^5.0.4": + version: 5.2.1 + resolution: "istanbul-lib-instrument@npm:5.2.1" + dependencies: + "@babel/core": "npm:^7.12.3" + "@babel/parser": "npm:^7.14.7" + "@istanbuljs/schema": "npm:^0.1.2" + istanbul-lib-coverage: "npm:^3.2.0" + semver: "npm:^6.3.0" + checksum: 10c0/8a1bdf3e377dcc0d33ec32fe2b6ecacdb1e4358fd0eb923d4326bb11c67622c0ceb99600a680f3dad5d29c66fc1991306081e339b4d43d0b8a2ab2e1d910a6ee + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^6.0.0": + version: 6.0.2 + resolution: "istanbul-lib-instrument@npm:6.0.2" + dependencies: + "@babel/core": "npm:^7.23.9" + "@babel/parser": "npm:^7.23.9" + "@istanbuljs/schema": "npm:^0.1.3" + istanbul-lib-coverage: "npm:^3.2.0" + semver: "npm:^7.5.4" + checksum: 10c0/405c6ac037bf8c7ee7495980b0cd5544b2c53078c10534d0c9ceeb92a9ea7dcf8510f58ccfce31336458a8fa6ccef27b570bbb602abaa8c1650f5496a807477c + languageName: node + linkType: hard + +"istanbul-lib-report@npm:^3.0.0": + version: 3.0.1 + resolution: "istanbul-lib-report@npm:3.0.1" + dependencies: + istanbul-lib-coverage: "npm:^3.0.0" + make-dir: "npm:^4.0.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/84323afb14392de8b6a5714bd7e9af845cfbd56cfe71ed276cda2f5f1201aea673c7111901227ee33e68e4364e288d73861eb2ed48f6679d1e69a43b6d9b3ba7 + languageName: node + linkType: hard + +"istanbul-lib-source-maps@npm:^4.0.0": + version: 4.0.1 + resolution: "istanbul-lib-source-maps@npm:4.0.1" + dependencies: + debug: "npm:^4.1.1" + istanbul-lib-coverage: "npm:^3.0.0" + source-map: "npm:^0.6.1" + checksum: 10c0/19e4cc405016f2c906dff271a76715b3e881fa9faeb3f09a86cb99b8512b3a5ed19cadfe0b54c17ca0e54c1142c9c6de9330d65506e35873994e06634eebeb66 + languageName: node + linkType: hard + +"istanbul-reports@npm:^3.1.3": + version: 3.1.7 + resolution: "istanbul-reports@npm:3.1.7" + dependencies: + html-escaper: "npm:^2.0.0" + istanbul-lib-report: "npm:^3.0.0" + checksum: 10c0/a379fadf9cf8dc5dfe25568115721d4a7eb82fbd50b005a6672aff9c6989b20cc9312d7865814e0859cd8df58cbf664482e1d3604be0afde1f7fc3ccc1394a51 + languageName: node + linkType: hard + +"jackspeak@npm:^2.3.5": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/f01d8f972d894cd7638bc338e9ef5ddb86f7b208ce177a36d718eac96ec86638a6efa17d0221b10073e64b45edc2ce15340db9380b1f5d5c5d000cbc517dc111 + languageName: node + linkType: hard + +"jest-changed-files@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-changed-files@npm:29.7.0" + dependencies: + execa: "npm:^5.0.0" + jest-util: "npm:^29.7.0" + p-limit: "npm:^3.1.0" + checksum: 10c0/e071384d9e2f6bb462231ac53f29bff86f0e12394c1b49ccafbad225ce2ab7da226279a8a94f421949920bef9be7ef574fd86aee22e8adfa149be73554ab828b + languageName: node + linkType: hard + +"jest-circus@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-circus@npm:29.7.0" + dependencies: + "@jest/environment": "npm:^29.7.0" + "@jest/expect": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + co: "npm:^4.6.0" + dedent: "npm:^1.0.0" + is-generator-fn: "npm:^2.0.0" + jest-each: "npm:^29.7.0" + jest-matcher-utils: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-runtime: "npm:^29.7.0" + jest-snapshot: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + p-limit: "npm:^3.1.0" + pretty-format: "npm:^29.7.0" + pure-rand: "npm:^6.0.0" + slash: "npm:^3.0.0" + stack-utils: "npm:^2.0.3" + checksum: 10c0/8d15344cf7a9f14e926f0deed64ed190c7a4fa1ed1acfcd81e4cc094d3cc5bf7902ebb7b874edc98ada4185688f90c91e1747e0dfd7ac12463b097968ae74b5e + languageName: node + linkType: hard + +"jest-cli@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-cli@npm:29.7.0" + dependencies: + "@jest/core": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + chalk: "npm:^4.0.0" + create-jest: "npm:^29.7.0" + exit: "npm:^0.1.2" + import-local: "npm:^3.0.2" + jest-config: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-validate: "npm:^29.7.0" + yargs: "npm:^17.3.1" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: 10c0/a658fd55050d4075d65c1066364595962ead7661711495cfa1dfeecf3d6d0a8ffec532f3dbd8afbb3e172dd5fd2fb2e813c5e10256e7cf2fea766314942fb43a + languageName: node + linkType: hard + +"jest-config@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-config@npm:29.7.0" + dependencies: + "@babel/core": "npm:^7.11.6" + "@jest/test-sequencer": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + babel-jest: "npm:^29.7.0" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.2.0" + deepmerge: "npm:^4.2.2" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.2.9" + jest-circus: "npm:^29.7.0" + jest-environment-node: "npm:^29.7.0" + jest-get-type: "npm:^29.6.3" + jest-regex-util: "npm:^29.6.3" + jest-resolve: "npm:^29.7.0" + jest-runner: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-validate: "npm:^29.7.0" + micromatch: "npm:^4.0.4" + parse-json: "npm:^5.2.0" + pretty-format: "npm:^29.7.0" + slash: "npm:^3.0.0" + strip-json-comments: "npm:^3.1.1" + peerDependencies: + "@types/node": "*" + ts-node: ">=9.0.0" + peerDependenciesMeta: + "@types/node": + optional: true + ts-node: + optional: true + checksum: 10c0/bab23c2eda1fff06e0d104b00d6adfb1d1aabb7128441899c9bff2247bd26710b050a5364281ce8d52b46b499153bf7e3ee88b19831a8f3451f1477a0246a0f1 + languageName: node + linkType: hard + +"jest-diff@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-diff@npm:29.7.0" + dependencies: + chalk: "npm:^4.0.0" + diff-sequences: "npm:^29.6.3" + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.7.0" + checksum: 10c0/89a4a7f182590f56f526443dde69acefb1f2f0c9e59253c61d319569856c4931eae66b8a3790c443f529267a0ddba5ba80431c585deed81827032b2b2a1fc999 + languageName: node + linkType: hard + +"jest-docblock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-docblock@npm:29.7.0" + dependencies: + detect-newline: "npm:^3.0.0" + checksum: 10c0/d932a8272345cf6b6142bb70a2bb63e0856cc0093f082821577ea5bdf4643916a98744dfc992189d2b1417c38a11fa42466f6111526bc1fb81366f56410f3be9 + languageName: node + linkType: hard + +"jest-each@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-each@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + chalk: "npm:^4.0.0" + jest-get-type: "npm:^29.6.3" + jest-util: "npm:^29.7.0" + pretty-format: "npm:^29.7.0" + checksum: 10c0/f7f9a90ebee80cc688e825feceb2613627826ac41ea76a366fa58e669c3b2403d364c7c0a74d862d469b103c843154f8456d3b1c02b487509a12afa8b59edbb4 + languageName: node + linkType: hard + +"jest-environment-node@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-environment-node@npm:29.7.0" + dependencies: + "@jest/environment": "npm:^29.7.0" + "@jest/fake-timers": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + jest-mock: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + checksum: 10c0/61f04fec077f8b1b5c1a633e3612fc0c9aa79a0ab7b05600683428f1e01a4d35346c474bde6f439f9fcc1a4aa9a2861ff852d079a43ab64b02105d1004b2592b + languageName: node + linkType: hard + +"jest-get-type@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-get-type@npm:29.6.3" + checksum: 10c0/552e7a97a983d3c2d4e412a44eb7de0430ff773dd99f7500962c268d6dfbfa431d7d08f919c9d960530e5f7f78eb47f267ad9b318265e5092b3ff9ede0db7c2b + languageName: node + linkType: hard + +"jest-haste-map@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-haste-map@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/graceful-fs": "npm:^4.1.3" + "@types/node": "npm:*" + anymatch: "npm:^3.0.3" + fb-watchman: "npm:^2.0.0" + fsevents: "npm:^2.3.2" + graceful-fs: "npm:^4.2.9" + jest-regex-util: "npm:^29.6.3" + jest-util: "npm:^29.7.0" + jest-worker: "npm:^29.7.0" + micromatch: "npm:^4.0.4" + walker: "npm:^1.0.8" + dependenciesMeta: + fsevents: + optional: true + checksum: 10c0/2683a8f29793c75a4728787662972fedd9267704c8f7ef9d84f2beed9a977f1cf5e998c07b6f36ba5603f53cb010c911fe8cd0ac9886e073fe28ca66beefd30c + languageName: node + linkType: hard + +"jest-leak-detector@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-leak-detector@npm:29.7.0" + dependencies: + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.7.0" + checksum: 10c0/71bb9f77fc489acb842a5c7be030f2b9acb18574dc9fb98b3100fc57d422b1abc55f08040884bd6e6dbf455047a62f7eaff12aa4058f7cbdc11558718ca6a395 + languageName: node + linkType: hard + +"jest-matcher-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-matcher-utils@npm:29.7.0" + dependencies: + chalk: "npm:^4.0.0" + jest-diff: "npm:^29.7.0" + jest-get-type: "npm:^29.6.3" + pretty-format: "npm:^29.7.0" + checksum: 10c0/0d0e70b28fa5c7d4dce701dc1f46ae0922102aadc24ed45d594dd9b7ae0a8a6ef8b216718d1ab79e451291217e05d4d49a82666e1a3cc2b428b75cd9c933244e + languageName: node + linkType: hard + +"jest-message-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-message-util@npm:29.7.0" + dependencies: + "@babel/code-frame": "npm:^7.12.13" + "@jest/types": "npm:^29.6.3" + "@types/stack-utils": "npm:^2.0.0" + chalk: "npm:^4.0.0" + graceful-fs: "npm:^4.2.9" + micromatch: "npm:^4.0.4" + pretty-format: "npm:^29.7.0" + slash: "npm:^3.0.0" + stack-utils: "npm:^2.0.3" + checksum: 10c0/850ae35477f59f3e6f27efac5215f706296e2104af39232bb14e5403e067992afb5c015e87a9243ec4d9df38525ef1ca663af9f2f4766aa116f127247008bd22 + languageName: node + linkType: hard + +"jest-mock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-mock@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + jest-util: "npm:^29.7.0" + checksum: 10c0/7b9f8349ee87695a309fe15c46a74ab04c853369e5c40952d68061d9dc3159a0f0ed73e215f81b07ee97a9faaf10aebe5877a9d6255068a0977eae6a9ff1d5ac + languageName: node + linkType: hard + +"jest-pnp-resolver@npm:^1.2.2": + version: 1.2.3 + resolution: "jest-pnp-resolver@npm:1.2.3" + peerDependencies: + jest-resolve: "*" + peerDependenciesMeta: + jest-resolve: + optional: true + checksum: 10c0/86eec0c78449a2de733a6d3e316d49461af6a858070e113c97f75fb742a48c2396ea94150cbca44159ffd4a959f743a47a8b37a792ef6fdad2cf0a5cba973fac + languageName: node + linkType: hard + +"jest-regex-util@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-regex-util@npm:29.6.3" + checksum: 10c0/4e33fb16c4f42111159cafe26397118dcfc4cf08bc178a67149fb05f45546a91928b820894572679d62559839d0992e21080a1527faad65daaae8743a5705a3b + languageName: node + linkType: hard + +"jest-resolve-dependencies@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve-dependencies@npm:29.7.0" + dependencies: + jest-regex-util: "npm:^29.6.3" + jest-snapshot: "npm:^29.7.0" + checksum: 10c0/b6e9ad8ae5b6049474118ea6441dfddd385b6d1fc471db0136f7c8fbcfe97137a9665e4f837a9f49f15a29a1deb95a14439b7aec812f3f99d08f228464930f0d + languageName: node + linkType: hard + +"jest-resolve@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve@npm:29.7.0" + dependencies: + chalk: "npm:^4.0.0" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.7.0" + jest-pnp-resolver: "npm:^1.2.2" + jest-util: "npm:^29.7.0" + jest-validate: "npm:^29.7.0" + resolve: "npm:^1.20.0" + resolve.exports: "npm:^2.0.0" + slash: "npm:^3.0.0" + checksum: 10c0/59da5c9c5b50563e959a45e09e2eace783d7f9ac0b5dcc6375dea4c0db938d2ebda97124c8161310082760e8ebbeff9f6b177c15ca2f57fb424f637a5d2adb47 + languageName: node + linkType: hard + +"jest-runner@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runner@npm:29.7.0" + dependencies: + "@jest/console": "npm:^29.7.0" + "@jest/environment": "npm:^29.7.0" + "@jest/test-result": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + emittery: "npm:^0.13.1" + graceful-fs: "npm:^4.2.9" + jest-docblock: "npm:^29.7.0" + jest-environment-node: "npm:^29.7.0" + jest-haste-map: "npm:^29.7.0" + jest-leak-detector: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-resolve: "npm:^29.7.0" + jest-runtime: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + jest-watcher: "npm:^29.7.0" + jest-worker: "npm:^29.7.0" + p-limit: "npm:^3.1.0" + source-map-support: "npm:0.5.13" + checksum: 10c0/2194b4531068d939f14c8d3274fe5938b77fa73126aedf9c09ec9dec57d13f22c72a3b5af01ac04f5c1cf2e28d0ac0b4a54212a61b05f10b5d6b47f2a1097bb4 + languageName: node + linkType: hard + +"jest-runtime@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runtime@npm:29.7.0" + dependencies: + "@jest/environment": "npm:^29.7.0" + "@jest/fake-timers": "npm:^29.7.0" + "@jest/globals": "npm:^29.7.0" + "@jest/source-map": "npm:^29.6.3" + "@jest/test-result": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + cjs-module-lexer: "npm:^1.0.0" + collect-v8-coverage: "npm:^1.0.0" + glob: "npm:^7.1.3" + graceful-fs: "npm:^4.2.9" + jest-haste-map: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-mock: "npm:^29.7.0" + jest-regex-util: "npm:^29.6.3" + jest-resolve: "npm:^29.7.0" + jest-snapshot: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + slash: "npm:^3.0.0" + strip-bom: "npm:^4.0.0" + checksum: 10c0/7cd89a1deda0bda7d0941835434e44f9d6b7bd50b5c5d9b0fc9a6c990b2d4d2cab59685ab3cb2850ed4cc37059f6de903af5a50565d7f7f1192a77d3fd6dd2a6 + languageName: node + linkType: hard + +"jest-snapshot@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-snapshot@npm:29.7.0" + dependencies: + "@babel/core": "npm:^7.11.6" + "@babel/generator": "npm:^7.7.2" + "@babel/plugin-syntax-jsx": "npm:^7.7.2" + "@babel/plugin-syntax-typescript": "npm:^7.7.2" + "@babel/types": "npm:^7.3.3" + "@jest/expect-utils": "npm:^29.7.0" + "@jest/transform": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + babel-preset-current-node-syntax: "npm:^1.0.0" + chalk: "npm:^4.0.0" + expect: "npm:^29.7.0" + graceful-fs: "npm:^4.2.9" + jest-diff: "npm:^29.7.0" + jest-get-type: "npm:^29.6.3" + jest-matcher-utils: "npm:^29.7.0" + jest-message-util: "npm:^29.7.0" + jest-util: "npm:^29.7.0" + natural-compare: "npm:^1.4.0" + pretty-format: "npm:^29.7.0" + semver: "npm:^7.5.3" + checksum: 10c0/6e9003c94ec58172b4a62864a91c0146513207bedf4e0a06e1e2ac70a4484088a2683e3a0538d8ea913bcfd53dc54a9b98a98cdfa562e7fe1d1339aeae1da570 + languageName: node + linkType: hard + +"jest-util@npm:^29.0.0, jest-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-util@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + chalk: "npm:^4.0.0" + ci-info: "npm:^3.2.0" + graceful-fs: "npm:^4.2.9" + picomatch: "npm:^2.2.3" + checksum: 10c0/bc55a8f49fdbb8f51baf31d2a4f312fb66c9db1483b82f602c9c990e659cdd7ec529c8e916d5a89452ecbcfae4949b21b40a7a59d4ffc0cd813a973ab08c8150 + languageName: node + linkType: hard + +"jest-validate@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-validate@npm:29.7.0" + dependencies: + "@jest/types": "npm:^29.6.3" + camelcase: "npm:^6.2.0" + chalk: "npm:^4.0.0" + jest-get-type: "npm:^29.6.3" + leven: "npm:^3.1.0" + pretty-format: "npm:^29.7.0" + checksum: 10c0/a20b930480c1ed68778c739f4739dce39423131bc070cd2505ddede762a5570a256212e9c2401b7ae9ba4d7b7c0803f03c5b8f1561c62348213aba18d9dbece2 + languageName: node + linkType: hard + +"jest-watcher@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-watcher@npm:29.7.0" + dependencies: + "@jest/test-result": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + "@types/node": "npm:*" + ansi-escapes: "npm:^4.2.1" + chalk: "npm:^4.0.0" + emittery: "npm:^0.13.1" + jest-util: "npm:^29.7.0" + string-length: "npm:^4.0.1" + checksum: 10c0/ec6c75030562fc8f8c727cb8f3b94e75d831fc718785abfc196e1f2a2ebc9a2e38744a15147170039628a853d77a3b695561ce850375ede3a4ee6037a2574567 + languageName: node + linkType: hard + +"jest-worker@npm:^27.4.5": + version: 27.5.1 + resolution: "jest-worker@npm:27.5.1" + dependencies: + "@types/node": "npm:*" + merge-stream: "npm:^2.0.0" + supports-color: "npm:^8.0.0" + checksum: 10c0/8c4737ffd03887b3c6768e4cc3ca0269c0336c1e4b1b120943958ddb035ed2a0fc6acab6dc99631720a3720af4e708ff84fb45382ad1e83c27946adf3623969b + languageName: node + linkType: hard + +"jest-worker@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-worker@npm:29.7.0" + dependencies: + "@types/node": "npm:*" + jest-util: "npm:^29.7.0" + merge-stream: "npm:^2.0.0" + supports-color: "npm:^8.0.0" + checksum: 10c0/5570a3a005b16f46c131968b8a5b56d291f9bbb85ff4217e31c80bd8a02e7de799e59a54b95ca28d5c302f248b54cbffde2d177c2f0f52ffcee7504c6eabf660 + languageName: node + linkType: hard + +"jest@npm:^29.7.0": + version: 29.7.0 + resolution: "jest@npm:29.7.0" + dependencies: + "@jest/core": "npm:^29.7.0" + "@jest/types": "npm:^29.6.3" + import-local: "npm:^3.0.2" + jest-cli: "npm:^29.7.0" + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: 10c0/f40eb8171cf147c617cc6ada49d062fbb03b4da666cb8d39cdbfb739a7d75eea4c3ca150fb072d0d273dce0c753db4d0467d54906ad0293f59c54f9db4a09d8b + languageName: node + linkType: hard + +"jiti@npm:^1.21.0": + version: 1.21.0 + resolution: "jiti@npm:1.21.0" + bin: + jiti: bin/jiti.js + checksum: 10c0/7f361219fe6c7a5e440d5f1dba4ab763a5538d2df8708cdc22561cf25ea3e44b837687931fca7cdd8cdd9f567300e90be989dd1321650045012d8f9ed6aab07f + languageName: node + linkType: hard + +"js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed + languageName: node + linkType: hard + +"js-yaml@npm:^3.13.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: "npm:^1.0.7" + esprima: "npm:^4.0.0" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/6746baaaeac312c4db8e75fa22331d9a04cccb7792d126ed8ce6a0bbcfef0cedaddd0c5098fade53db067c09fe00aa1c957674b4765610a8b06a5a189e46433b + languageName: node + linkType: hard + +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 + languageName: node + linkType: hard + +"jsesc@npm:^2.5.1": + version: 2.5.2 + resolution: "jsesc@npm:2.5.2" + bin: + jsesc: bin/jsesc + checksum: 10c0/dbf59312e0ebf2b4405ef413ec2b25abb5f8f4d9bc5fb8d9f90381622ebca5f2af6a6aa9a8578f65903f9e33990a6dc798edd0ce5586894bf0e9e31803a1de88 + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 10c0/140932564c8f0b88455432e0f33c4cb4086b8868e37524e07e723f4eaedb9425bdc2bafd71bd1d9765bd15fd1e2d126972bc83990f55c467168c228c24d665f3 + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce + languageName: node + linkType: hard + +"json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 10c0/5a04eed94810fa55c5ea138b2f7a5c12b97c3750bc63d11e511dcecbfef758003861522a070c2272764ee0f4e3e323862f386945aeb5b85b87ee43f084ba586c + languageName: node + linkType: hard + +"jsonc-parser@npm:^3.2.0": + version: 3.2.1 + resolution: "jsonc-parser@npm:3.2.1" + checksum: 10c0/ada66dec143d7f9cb0e2d0d29c69e9ce40d20f3a4cb96b0c6efb745025ac7f9ba647d7ac0990d0adfc37a2d2ae084a12009a9c833dbdbeadf648879a99b9df89 + languageName: node + linkType: hard + +"jsonfile@npm:^6.0.1": + version: 6.1.0 + resolution: "jsonfile@npm:6.1.0" + dependencies: + graceful-fs: "npm:^4.1.6" + universalify: "npm:^2.0.0" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/4f95b5e8a5622b1e9e8f33c96b7ef3158122f595998114d1e7f03985649ea99cb3cd99ce1ed1831ae94c8c8543ab45ebd044207612f31a56fd08462140e46865 + languageName: node + linkType: hard + +"kind-of@npm:^6.0.2": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 10c0/61cdff9623dabf3568b6445e93e31376bee1cdb93f8ba7033d86022c2a9b1791a1d9510e026e6465ebd701a6dd2f7b0808483ad8838341ac52f003f512e0b4c4 + languageName: node + linkType: hard + +"kleur@npm:^3.0.3": + version: 3.0.3 + resolution: "kleur@npm:3.0.3" + checksum: 10c0/cd3a0b8878e7d6d3799e54340efe3591ca787d9f95f109f28129bdd2915e37807bf8918bb295ab86afb8c82196beec5a1adcaf29042ce3f2bd932b038fe3aa4b + languageName: node + linkType: hard + +"leven@npm:^3.1.0": + version: 3.1.0 + resolution: "leven@npm:3.1.0" + checksum: 10c0/cd778ba3fbab0f4d0500b7e87d1f6e1f041507c56fdcd47e8256a3012c98aaee371d4c15e0a76e0386107af2d42e2b7466160a2d80688aaa03e66e49949f42df + languageName: node + linkType: hard + +"lilconfig@npm:^3.1.1": + version: 3.1.1 + resolution: "lilconfig@npm:3.1.1" + checksum: 10c0/311b559794546894e3fe176663427326026c1c644145be9e8041c58e268aa9328799b8dfe7e4dd8c6a4ae305feae95a1c9e007db3569f35b42b6e1bc8274754c + languageName: node + linkType: hard + +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 10c0/3da6ee62d4cd9f03f5dc90b4df2540fb85b352081bee77fe4bbcd12c9000ead7f35e0a38b8d09a9bb99b13223446dd8689ff3c4959807620726d788701a83d2d + languageName: node + linkType: hard + +"loader-runner@npm:^4.2.0": + version: 4.3.0 + resolution: "loader-runner@npm:4.3.0" + checksum: 10c0/a44d78aae0907a72f73966fe8b82d1439c8c485238bd5a864b1b9a2a3257832effa858790241e6b37876b5446a78889adf2fcc8dd897ce54c089ecc0a0ce0bf0 + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: "npm:^4.1.0" + checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 + languageName: node + linkType: hard + +"lodash.memoize@npm:4.x": + version: 4.1.2 + resolution: "lodash.memoize@npm:4.1.2" + checksum: 10c0/c8713e51eccc650422716a14cece1809cfe34bc5ab5e242b7f8b4e2241c2483697b971a604252807689b9dd69bfe3a98852e19a5b89d506b000b4187a1285df8 + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^9.1.1 || ^10.0.0": + version: 10.2.0 + resolution: "lru-cache@npm:10.2.0" + checksum: 10c0/c9847612aa2daaef102d30542a8d6d9b2c2bb36581c1bf0dc3ebf5e5f3352c772a749e604afae2e46873b930a9e9523743faac4e5b937c576ab29196774712ee + languageName: node + linkType: hard + +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: "npm:^3.0.2" + checksum: 10c0/89b2ef2ef45f543011e38737b8a8622a2f8998cddf0e5437174ef8f1f70a8b9d14a918ab3e232cb3ba343b7abddffa667f0b59075b2b80e6b4d63c3de6127482 + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/cb53e582785c48187d7a188d3379c181b5ca2a9c78d2bce3e7dee36f32761d1c42983da3fe12b55cb74e1779fa94cdc2e5367c028a9b35317184ede0c07a30a9 + languageName: node + linkType: hard + +"lunr@npm:^2.3.9": + version: 2.3.9 + resolution: "lunr@npm:2.3.9" + checksum: 10c0/77d7dbb4fbd602aac161e2b50887d8eda28c0fa3b799159cee380fbb311f1e614219126ecbbd2c3a9c685f1720a8109b3c1ca85cc893c39b6c9cc6a62a1d8a8b + languageName: node + linkType: hard + +"make-dir@npm:^3.0.2": + version: 3.1.0 + resolution: "make-dir@npm:3.1.0" + dependencies: + semver: "npm:^6.0.0" + checksum: 10c0/56aaafefc49c2dfef02c5c95f9b196c4eb6988040cf2c712185c7fe5c99b4091591a7fc4d4eafaaefa70ff763a26f6ab8c3ff60b9e75ea19876f49b18667ecaa + languageName: node + linkType: hard + +"make-dir@npm:^4.0.0": + version: 4.0.0 + resolution: "make-dir@npm:4.0.0" + dependencies: + semver: "npm:^7.5.3" + checksum: 10c0/69b98a6c0b8e5c4fe9acb61608a9fbcfca1756d910f51e5dbe7a9e5cfb74fca9b8a0c8a0ffdf1294a740826c1ab4871d5bf3f62f72a3049e5eac6541ddffed68 + languageName: node + linkType: hard + +"make-error@npm:1.x": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: 10c0/171e458d86854c6b3fc46610cfacf0b45149ba043782558c6875d9f42f222124384ad0b468c92e996d815a8a2003817a710c0a160e49c1c394626f76fa45396f + languageName: node + linkType: hard + +"make-fetch-happen@npm:^13.0.0": + version: 13.0.0 + resolution: "make-fetch-happen@npm:13.0.0" + dependencies: + "@npmcli/agent": "npm:^2.0.0" + cacache: "npm:^18.0.0" + http-cache-semantics: "npm:^4.1.1" + is-lambda: "npm:^1.0.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^3.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^0.6.3" + promise-retry: "npm:^2.0.1" + ssri: "npm:^10.0.0" + checksum: 10c0/43b9f6dcbc6fe8b8604cb6396957c3698857a15ba4dbc38284f7f0e61f248300585ef1eb8cc62df54e9c724af977e45b5cdfd88320ef7f53e45070ed3488da55 + languageName: node + linkType: hard + +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" + dependencies: + tmpl: "npm:1.0.5" + checksum: 10c0/b0e6e599780ce6bab49cc413eba822f7d1f0dfebd1c103eaa3785c59e43e22c59018323cf9e1708f0ef5329e94a745d163fcbb6bff8e4c6742f9be9e86f3500c + languageName: node + linkType: hard + +"marked@npm:^4.3.0": + version: 4.3.0 + resolution: "marked@npm:4.3.0" + bin: + marked: bin/marked.js + checksum: 10c0/0013463855e31b9c88d8bb2891a611d10ef1dc79f2e3cbff1bf71ba389e04c5971298c886af0be799d7fa9aa4593b086a136062d59f1210b0480b026a8c5dc47 + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 10c0/867fdbb30a6d58b011449b8885601ec1690c3e41c759ecd5a9d609094f7aed0096c37823ff4a7190ef0b8f22cc86beb7049196ff68c016e3b3c671d0dac91ce5 + languageName: node + linkType: hard + +"merge2@npm:^1.3.0": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + +"micromatch@npm:^4.0.0, micromatch@npm:^4.0.4": + version: 4.0.5 + resolution: "micromatch@npm:4.0.5" + dependencies: + braces: "npm:^3.0.2" + picomatch: "npm:^2.3.1" + checksum: 10c0/3d6505b20f9fa804af5d8c596cb1c5e475b9b0cd05f652c5b56141cf941bd72adaeb7a436fda344235cef93a7f29b7472efc779fcdb83b478eab0867b95cdeff + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-types@npm:^2.1.27": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: 10c0/b26f5479d7ec6cc2bce275a08f146cf78f5e7b661b18114e2506dd91ec7ec47e7a25bf4360e5438094db0560bcc868079fb3b1fb3892b833c1ecbf63f80c95a4 + languageName: node + linkType: hard + +"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.1, minimatch@npm:^9.0.3": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/85f407dcd38ac3e180f425e86553911d101455ca3ad5544d6a7cec16286657e4f8a9aa6695803025c55e31e35a91a2252b5dc8e7d527211278b8b65b4dbd5eac + languageName: node + linkType: hard + +"minimist@npm:^1.2.6": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.4 + resolution: "minipass-fetch@npm:3.0.4" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^2.1.2" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/1b63c1f3313e88eeac4689f1b71c9f086598db9a189400e3ee960c32ed89e06737fa23976c9305c2d57464fb3fcdc12749d3378805c9d6176f5569b0d0ee8a75 + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3": + version: 7.0.4 + resolution: "minipass@npm:7.0.4" + checksum: 10c0/6c7370a6dfd257bf18222da581ba89a5eaedca10e158781232a8b5542a90547540b4b9b7e7f490e4cda43acfbd12e086f0453728ecf8c19e0ef6921bc5958ac5 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: "npm:^3.0.0" + yallist: "npm:^4.0.0" + checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 + languageName: node + linkType: hard + +"mkdirp@npm:^0.5.3": + version: 0.5.6 + resolution: "mkdirp@npm:0.5.6" + dependencies: + minimist: "npm:^1.2.6" + bin: + mkdirp: bin/cmd.js + checksum: 10c0/e2e2be789218807b58abced04e7b49851d9e46e88a2f9539242cc8a92c9b5c3a0b9bab360bd3014e02a140fc4fbc58e31176c408b493f8a2a6f4986bd7527b01 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 10c0/a437714e2f90dbf881b5191d35a6db792efbca5badf112f87b9e1c712aace4b4b9b742dd6537f3edf90fd6f684de897cec230abde57e87883766712ddda297cc + languageName: node + linkType: hard + +"nanoid@npm:^5.0.6": + version: 5.0.6 + resolution: "nanoid@npm:5.0.6" + bin: + nanoid: bin/nanoid.js + checksum: 10c0/6660f99b7bb3816f04fd9a14126859482e07d1705c02e1a6c1a722545c65186659f6f734eb21329f54e838b6409579bef687e2fb13661b716529dcefc5d86ec6 + languageName: node + linkType: hard + +"nanospinner@npm:^1.1.0": + version: 1.1.0 + resolution: "nanospinner@npm:1.1.0" + dependencies: + picocolors: "npm:^1.0.0" + checksum: 10c0/2f89e48bfb1452b5f3afd8034753bbc45040a6830fec913ec228d7a8a8eab1e2c8193bd41e2203806a1f454907641ffa035b14f3a8462cf374e874eb29fd57f1 + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: 10c0/3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 + languageName: node + linkType: hard + +"neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: 10c0/c2f5a604a54a8ec5438a342e1f356dff4bc33ccccdb6dc668d94fe8e5eccfc9d2c2eea6064b0967a767ba63b33763f51ccf2cd2441b461a7322656c1f06b3f5d + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 10.1.0 + resolution: "node-gyp@npm:10.1.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^13.0.0" + nopt: "npm:^7.0.0" + proc-log: "npm:^3.0.0" + semver: "npm:^7.3.5" + tar: "npm:^6.1.2" + which: "npm:^4.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/9cc821111ca244a01fb7f054db7523ab0a0cd837f665267eb962eb87695d71fb1e681f9e21464cc2fd7c05530dc4c81b810bca1a88f7d7186909b74477491a3c + languageName: node + linkType: hard + +"node-int64@npm:^0.4.0": + version: 0.4.0 + resolution: "node-int64@npm:0.4.0" + checksum: 10c0/a6a4d8369e2f2720e9c645255ffde909c0fbd41c92ea92a5607fc17055955daac99c1ff589d421eee12a0d24e99f7bfc2aabfeb1a4c14742f6c099a51863f31a + languageName: node + linkType: hard + +"node-releases@npm:^2.0.14": + version: 2.0.14 + resolution: "node-releases@npm:2.0.14" + checksum: 10c0/199fc93773ae70ec9969bc6d5ac5b2bbd6eb986ed1907d751f411fef3ede0e4bfdb45ceb43711f8078bea237b6036db8b1bf208f6ff2b70c7d615afd157f3ab9 + languageName: node + linkType: hard + +"nopt@npm:^7.0.0": + version: 7.2.0 + resolution: "nopt@npm:7.2.0" + dependencies: + abbrev: "npm:^2.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/9bd7198df6f16eb29ff16892c77bcf7f0cc41f9fb5c26280ac0def2cf8cf319f3b821b3af83eba0e74c85807cc430a16efe0db58fe6ae1f41e69519f585b6aff + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 + languageName: node + linkType: hard + +"npm-run-path@npm:^4.0.1": + version: 4.0.1 + resolution: "npm-run-path@npm:4.0.1" + dependencies: + path-key: "npm:^3.0.0" + checksum: 10c0/6f9353a95288f8455cf64cbeb707b28826a7f29690244c1e4bb61ec573256e021b6ad6651b394eb1ccfd00d6ec50147253aba2c5fe58a57ceb111fad62c519ac + languageName: node + linkType: hard + +"object-assign@npm:^4.0.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 + languageName: node + linkType: hard + +"once@npm:^1.3.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: "npm:1" + checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 + languageName: node + linkType: hard + +"onetime@npm:^5.1.2": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: "npm:^2.1.0" + checksum: 10c0/ffcef6fbb2692c3c40749f31ea2e22677a876daea92959b8a80b521d95cca7a668c884d8b2045d1d8ee7d56796aa405c405462af112a1477594cc63531baeb8f + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: "npm:^2.0.0" + checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 + languageName: node + linkType: hard + +"p-limit@npm:^3.1.0": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: "npm:^0.1.0" + checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: "npm:^2.2.0" + checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: "npm:^3.0.0" + checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f + languageName: node + linkType: hard + +"parse-json@npm:^5.2.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" + dependencies: + "@babel/code-frame": "npm:^7.0.0" + error-ex: "npm:^1.3.1" + json-parse-even-better-errors: "npm:^2.3.0" + lines-and-columns: "npm:^1.1.6" + checksum: 10c0/77947f2253005be7a12d858aedbafa09c9ae39eb4863adf330f7b416ca4f4a08132e453e08de2db46459256fb66afaac5ee758b44fe6541b7cdaf9d252e59585 + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 + languageName: node + linkType: hard + +"path-key@npm:^3.0.0, path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 + languageName: node + linkType: hard + +"path-scurry@npm:^1.10.1": + version: 1.10.1 + resolution: "path-scurry@npm:1.10.1" + dependencies: + lru-cache: "npm:^9.1.1 || ^10.0.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/e5dc78a7348d25eec61ab166317e9e9c7b46818aa2c2b9006c507a6ff48c672d011292d9662527213e558f5652ce0afcc788663a061d8b59ab495681840c0c1e + languageName: node + linkType: hard + +"path-type@npm:^5.0.0": + version: 5.0.0 + resolution: "path-type@npm:5.0.0" + checksum: 10c0/e8f4b15111bf483900c75609e5e74e3fcb79f2ddb73e41470028fcd3e4b5162ec65da9907be077ee5012c18801ff7fffb35f9f37a077f3f81d85a0b7d6578efd + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0": + version: 1.0.0 + resolution: "picocolors@npm:1.0.0" + checksum: 10c0/20a5b249e331c14479d94ec6817a182fd7a5680debae82705747b2db7ec50009a5f6648d0621c561b0572703f84dbef0858abcbd5856d3c5511426afcb1961f7 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be + languageName: node + linkType: hard + +"pify@npm:^2.0.0": + version: 2.3.0 + resolution: "pify@npm:2.3.0" + checksum: 10c0/551ff8ab830b1052633f59cb8adc9ae8407a436e06b4a9718bcb27dc5844b83d535c3a8512b388b6062af65a98c49bdc0dd523d8b2617b188f7c8fee457158dc + languageName: node + linkType: hard + +"pinkie-promise@npm:^2.0.0": + version: 2.0.1 + resolution: "pinkie-promise@npm:2.0.1" + dependencies: + pinkie: "npm:^2.0.0" + checksum: 10c0/11b5e5ce2b090c573f8fad7b517cbca1bb9a247587306f05ae71aef6f9b2cd2b923c304aa9663c2409cfde27b367286179f1379bc4ec18a3fbf2bb0d473b160a + languageName: node + linkType: hard + +"pinkie@npm:^2.0.0": + version: 2.0.4 + resolution: "pinkie@npm:2.0.4" + checksum: 10c0/25228b08b5597da42dc384221aa0ce56ee0fbf32965db12ba838e2a9ca0193c2f0609c45551ee077ccd2060bf109137fdb185b00c6d7e0ed7e35006d20fdcbc6 + languageName: node + linkType: hard + +"pirates@npm:^4.0.4": + version: 4.0.6 + resolution: "pirates@npm:4.0.6" + checksum: 10c0/00d5fa51f8dded94d7429700fb91a0c1ead00ae2c7fd27089f0c5b63e6eca36197fe46384631872690a66f390c5e27198e99006ab77ae472692ab9c2ca903f36 + languageName: node + linkType: hard + +"pkg-dir@npm:^4.1.0, pkg-dir@npm:^4.2.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: "npm:^4.0.0" + checksum: 10c0/c56bda7769e04907a88423feb320babaed0711af8c436ce3e56763ab1021ba107c7b0cafb11cde7529f669cfc22bffcaebffb573645cbd63842ea9fb17cd7728 + languageName: node + linkType: hard + +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" + dependencies: + "@jest/schemas": "npm:^29.6.3" + ansi-styles: "npm:^5.0.0" + react-is: "npm:^18.0.0" + checksum: 10c0/edc5ff89f51916f036c62ed433506b55446ff739358de77207e63e88a28ca2894caac6e73dcb68166a606e51c8087d32d400473e6a9fdd2dbe743f46c9c0276f + languageName: node + linkType: hard + +"proc-log@npm:^3.0.0": + version: 3.0.0 + resolution: "proc-log@npm:3.0.0" + checksum: 10c0/f66430e4ff947dbb996058f6fd22de2c66612ae1a89b097744e17fb18a4e8e7a86db99eda52ccf15e53f00b63f4ec0b0911581ff2aac0355b625c8eac509b0dc + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + +"prompts@npm:^2.0.1": + version: 2.4.2 + resolution: "prompts@npm:2.4.2" + dependencies: + kleur: "npm:^3.0.3" + sisteransi: "npm:^1.0.5" + checksum: 10c0/16f1ac2977b19fe2cf53f8411cc98db7a3c8b115c479b2ca5c82b5527cd937aa405fa04f9a5960abeb9daef53191b53b4d13e35c1f5d50e8718c76917c5f1ea4 + languageName: node + linkType: hard + +"punycode@npm:^2.1.0": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 + languageName: node + linkType: hard + +"pure-rand@npm:^6.0.0": + version: 6.1.0 + resolution: "pure-rand@npm:6.1.0" + checksum: 10c0/1abe217897bf74dcb3a0c9aba3555fe975023147b48db540aa2faf507aee91c03bf54f6aef0eb2bf59cc259a16d06b28eca37f0dc426d94f4692aeff02fb0e65 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: "npm:^5.1.0" + checksum: 10c0/50395efda7a8c94f5dffab564f9ff89736064d32addf0cc7e8bf5e4166f09f8ded7a0849ca6c2d2a59478f7d90f78f20d8048bca3cdf8be09d8e8a10790388f3 + languageName: node + linkType: hard + +"react-is@npm:^18.0.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: 10c0/6eb5e4b28028c23e2bfcf73371e72cd4162e4ac7ab445ddae2afe24e347a37d6dc22fae6e1748632cd43c6d4f9b8f86dcf26bf9275e1874f436d129952528ae0 + languageName: node + linkType: hard + +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: "npm:^2.2.1" + checksum: 10c0/6fa848cf63d1b82ab4e985f4cf72bd55b7dcfd8e0a376905804e48c3634b7e749170940ba77b32804d5fe93b3cc521aa95a8d7e7d725f830da6d93f3669ce66b + languageName: node + linkType: hard + +"rechoir@npm:^0.8.0": + version: 0.8.0 + resolution: "rechoir@npm:0.8.0" + dependencies: + resolve: "npm:^1.20.0" + checksum: 10c0/1a30074124a22abbd5d44d802dac26407fa72a0a95f162aa5504ba8246bc5452f8b1a027b154d9bdbabcd8764920ff9333d934c46a8f17479c8912e92332f3ff + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: "npm:^5.0.0" + checksum: 10c0/e608a3ebd15356264653c32d7ecbc8fd702f94c6703ea4ac2fb81d9c359180cba0ae2e6b71faa446631ed6145454d5a56b227efc33a2d40638ac13f8beb20ee4 + languageName: node + linkType: hard + +"resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 + languageName: node + linkType: hard + +"resolve.exports@npm:^2.0.0": + version: 2.0.2 + resolution: "resolve.exports@npm:2.0.2" + checksum: 10c0/cc4cffdc25447cf34730f388dca5021156ba9302a3bad3d7f168e790dc74b2827dff603f1bc6ad3d299bac269828dca96dd77e036dc9fba6a2a1807c47ab5c98 + languageName: node + linkType: hard + +"resolve@npm:^1.20.0, resolve@npm:^1.3.2": + version: 1.22.8 + resolution: "resolve@npm:1.22.8" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/07e179f4375e1fd072cfb72ad66d78547f86e6196c4014b31cb0b8bb1db5f7ca871f922d08da0fbc05b94e9fd42206f819648fa3b5b873ebbc8e1dc68fec433a + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.20.0#optional!builtin, resolve@patch:resolve@npm%3A^1.3.2#optional!builtin": + version: 1.22.8 + resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/0446f024439cd2e50c6c8fa8ba77eaa8370b4180f401a96abf3d1ebc770ac51c1955e12764cde449fde3fff480a61f84388e3505ecdbab778f4bef5f8212c729 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 + languageName: node + linkType: hard + +"rimraf@npm:^5.0.5": + version: 5.0.5 + resolution: "rimraf@npm:5.0.5" + dependencies: + glob: "npm:^10.3.7" + bin: + rimraf: dist/esm/bin.mjs + checksum: 10c0/d50dbe724f33835decd88395b25ed35995077c60a50ae78ded06e0185418914e555817aad1b4243edbff2254548c2f6ad6f70cc850040bebb4da9e8cc016f586 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"safe-buffer@npm:^5.1.0": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: 10c0/780ba6b5d99cc9a40f7b951d47152297d0e260f0df01472a1b99d4889679a4b94a13d644f7dbc4f022572f09ae9005fa2fbb93bbbd83643316f365a3e9a45b21 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0": + version: 3.3.0 + resolution: "schema-utils@npm:3.3.0" + dependencies: + "@types/json-schema": "npm:^7.0.8" + ajv: "npm:^6.12.5" + ajv-keywords: "npm:^3.5.2" + checksum: 10c0/fafdbde91ad8aa1316bc543d4b61e65ea86970aebbfb750bfb6d8a6c287a23e415e0e926c2498696b242f63af1aab8e585252637fabe811fd37b604351da6500 + languageName: node + linkType: hard + +"semver@npm:^5.3.0": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: 10c0/e4cf10f86f168db772ae95d86ba65b3fd6c5967c94d97c708ccb463b778c2ee53b914cd7167620950fc07faf5a564e6efe903836639e512a1aa15fbc9667fa25 + languageName: node + linkType: hard + +"semver@npm:^6.0.0, semver@npm:^6.3.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d + languageName: node + linkType: hard + +"semver@npm:^7.3.4": + version: 7.3.5 + resolution: "semver@npm:7.3.5" + dependencies: + lru-cache: "npm:^6.0.0" + bin: + semver: bin/semver.js + checksum: 10c0/d450455b2601396dbc7d9f058a6709b1c0b99d74a911f9436c77887600ffcdb5f63d5adffa0c3b8f0092937d8a41cc61c6437bcba375ef4151cb1335ebe4f1f9 + languageName: node + linkType: hard + +"semver@npm:^7.3.5, semver@npm:^7.5.3, semver@npm:^7.5.4": + version: 7.6.0 + resolution: "semver@npm:7.6.0" + dependencies: + lru-cache: "npm:^6.0.0" + bin: + semver: bin/semver.js + checksum: 10c0/fbfe717094ace0aa8d6332d7ef5ce727259815bd8d8815700853f4faf23aacbd7192522f0dc5af6df52ef4fa85a355ebd2f5d39f554bd028200d6cf481ab9b53 + languageName: node + linkType: hard + +"sequency@workspace:.": + version: 0.0.0-use.local + resolution: "sequency@workspace:." + dependencies: + "@size-limit/preset-small-lib": "npm:^11.1.2" + "@types/jest": "npm:^29.5.12" + gh-pages: "npm:^6.1.1" + jest: "npm:^29.7.0" + rimraf: "npm:^5.0.5" + size-limit: "npm:^11.1.2" + terser-webpack-plugin: "npm:^5.3.10" + ts-jest: "npm:^29.1.2" + ts-loader: "npm:^9.5.1" + tslint: "npm:^6.1.3" + typedoc: "npm:^0.25.12" + typescript: "npm:^5.4.3" + webpack: "npm:^5.91.0" + webpack-cli: "npm:^5.1.4" + languageName: unknown + linkType: soft + +"serialize-javascript@npm:^6.0.1": + version: 6.0.2 + resolution: "serialize-javascript@npm:6.0.2" + dependencies: + randombytes: "npm:^2.1.0" + checksum: 10c0/2dd09ef4b65a1289ba24a788b1423a035581bef60817bea1f01eda8e3bda623f86357665fe7ac1b50f6d4f583f97db9615b3f07b2a2e8cbcb75033965f771dd2 + languageName: node + linkType: hard + +"shallow-clone@npm:^3.0.0": + version: 3.0.1 + resolution: "shallow-clone@npm:3.0.1" + dependencies: + kind-of: "npm:^6.0.2" + checksum: 10c0/7bab09613a1b9f480c85a9823aebec533015579fa055ba6634aa56ba1f984380670eaf33b8217502931872aa1401c9fcadaa15f9f604d631536df475b05bcf1e + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"shiki@npm:^0.14.7": + version: 0.14.7 + resolution: "shiki@npm:0.14.7" + dependencies: + ansi-sequence-parser: "npm:^1.1.0" + jsonc-parser: "npm:^3.2.0" + vscode-oniguruma: "npm:^1.7.0" + vscode-textmate: "npm:^8.0.0" + checksum: 10c0/5c7fcbb870d0facccc7ae2f3410a28121f8e0b3f298e4e956de817ad6ab60a4c7e20a9184edfe50a93447addbb88b95b69e6ef88ac16ac6ca3e94c50771a6459 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: 10c0/25d272fa73e146048565e08f3309d5b942c1979a6f4a58a8c59d5fa299728e9c2fcd1a759ec870863b1fd38653670240cd420dad2ad9330c71f36608a6a1c912 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"sisteransi@npm:^1.0.5": + version: 1.0.5 + resolution: "sisteransi@npm:1.0.5" + checksum: 10c0/230ac975cca485b7f6fe2b96a711aa62a6a26ead3e6fb8ba17c5a00d61b8bed0d7adc21f5626b70d7c33c62ff4e63933017a6462942c719d1980bb0b1207ad46 + languageName: node + linkType: hard + +"size-limit@npm:11.1.2, size-limit@npm:^11.1.2": + version: 11.1.2 + resolution: "size-limit@npm:11.1.2" + dependencies: + bytes-iec: "npm:^3.1.1" + chokidar: "npm:^3.6.0" + globby: "npm:^14.0.1" + jiti: "npm:^1.21.0" + lilconfig: "npm:^3.1.1" + nanospinner: "npm:^1.1.0" + picocolors: "npm:^1.0.0" + bin: + size-limit: bin.js + checksum: 10c0/5fa72499674c6f693055c30cbc22433f940a5d5b05152c32d0094b19a7a40930ba75da8345c7357e8c72a895e8aee1d8974fb28ce3368329ba83214aa9b5466e + languageName: node + linkType: hard + +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b + languageName: node + linkType: hard + +"slash@npm:^5.1.0": + version: 5.1.0 + resolution: "slash@npm:5.1.0" + checksum: 10c0/eb48b815caf0bdc390d0519d41b9e0556a14380f6799c72ba35caf03544d501d18befdeeef074bc9c052acf69654bc9e0d79d7f1de0866284137a40805299eb3 + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.1": + version: 8.0.2 + resolution: "socks-proxy-agent@npm:8.0.2" + dependencies: + agent-base: "npm:^7.0.2" + debug: "npm:^4.3.4" + socks: "npm:^2.7.1" + checksum: 10c0/a842402fc9b8848a31367f2811ca3cd14c4106588b39a0901cd7a69029998adfc6456b0203617c18ed090542ad0c24ee4e9d4c75a0c4b75071e214227c177eb7 + languageName: node + linkType: hard + +"socks@npm:^2.7.1": + version: 2.8.1 + resolution: "socks@npm:2.8.1" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/ac77b515c260473cc7c4452f09b20939e22510ce3ae48385c516d1d5784374d5cc75be3cb18ff66cc985a7f4f2ef8fef84e984c5ec70aad58355ed59241f40a8 + languageName: node + linkType: hard + +"source-map-support@npm:0.5.13": + version: 0.5.13 + resolution: "source-map-support@npm:0.5.13" + dependencies: + buffer-from: "npm:^1.0.0" + source-map: "npm:^0.6.0" + checksum: 10c0/137539f8c453fa0f496ea42049ab5da4569f96781f6ac8e5bfda26937be9494f4e8891f523c5f98f0e85f71b35d74127a00c46f83f6a4f54672b58d53202565e + languageName: node + linkType: hard + +"source-map-support@npm:~0.5.20": + version: 0.5.21 + resolution: "source-map-support@npm:0.5.21" + dependencies: + buffer-from: "npm:^1.0.0" + source-map: "npm:^0.6.0" + checksum: 10c0/9ee09942f415e0f721d6daad3917ec1516af746a8120bba7bb56278707a37f1eb8642bde456e98454b8a885023af81a16e646869975f06afc1a711fb90484e7d + languageName: node + linkType: hard + +"source-map@npm:^0.6.0, source-map@npm:^0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 10c0/ab55398007c5e5532957cb0beee2368529618ac0ab372d789806f5718123cc4367d57de3904b4e6a4170eb5a0b0f41373066d02ca0735a0c4d75c7d328d3e011 + languageName: node + linkType: hard + +"source-map@npm:^0.7.4": + version: 0.7.4 + resolution: "source-map@npm:0.7.4" + checksum: 10c0/dc0cf3768fe23c345ea8760487f8c97ef6fca8a73c83cd7c9bf2fde8bc2c34adb9c0824d6feb14bc4f9e37fb522e18af621543f1289038a66ac7586da29aa7dc + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 10c0/ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.5 + resolution: "ssri@npm:10.0.5" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/b091f2ae92474183c7ac5ed3f9811457e1df23df7a7e70c9476eaa9a0c4a0c8fc190fb45acefbf023ca9ee864dd6754237a697dc52a0fb182afe65d8e77443d8 + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.3": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: "npm:^2.0.0" + checksum: 10c0/651c9f87667e077584bbe848acaecc6049bc71979f1e9a46c7b920cad4431c388df0f51b8ad7cfd6eed3db97a2878d0fc8b3122979439ea8bac29c61c95eec8a + languageName: node + linkType: hard + +"string-length@npm:^4.0.1": + version: 4.0.2 + resolution: "string-length@npm:4.0.2" + dependencies: + char-regex: "npm:^1.0.2" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/1cd77409c3d7db7bc59406f6bcc9ef0783671dcbabb23597a1177c166906ef2ee7c8290f78cae73a8aec858768f189d2cb417797df5e15ec4eb5e16b3346340c + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + languageName: node + linkType: hard + +"strip-bom@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-bom@npm:4.0.0" + checksum: 10c0/26abad1172d6bc48985ab9a5f96c21e440f6e7e476686de49be813b5a59b3566dccb5c525b831ec54fe348283b47f3ffb8e080bc3f965fde12e84df23f6bb7ef + languageName: node + linkType: hard + +"strip-final-newline@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-final-newline@npm:2.0.0" + checksum: 10c0/bddf8ccd47acd85c0e09ad7375409d81653f645fda13227a9d459642277c253d877b68f2e5e4d819fe75733b0e626bac7e954c04f3236f6d196f79c94fa4a96f + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd + languageName: node + linkType: hard + +"strip-outer@npm:^1.0.1": + version: 1.0.1 + resolution: "strip-outer@npm:1.0.1" + dependencies: + escape-string-regexp: "npm:^1.0.2" + checksum: 10c0/c0f38e6f37563d878a221b1c76f0822f180ec5fc39be5ada30ee637a7d5b59d19418093bad2b4db1e69c40d7a7a7ac50828afce07276cf3d51ac8965cb140dfb + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 + languageName: node + linkType: hard + +"supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 + languageName: node + linkType: hard + +"tapable@npm:^2.1.1, tapable@npm:^2.2.0": + version: 2.2.1 + resolution: "tapable@npm:2.2.1" + checksum: 10c0/bc40e6efe1e554d075469cedaba69a30eeb373552aaf41caeaaa45bf56ffacc2674261b106245bd566b35d8f3329b52d838e851ee0a852120acae26e622925c9 + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.2.1 + resolution: "tar@npm:6.2.1" + dependencies: + chownr: "npm:^2.0.0" + fs-minipass: "npm:^2.0.0" + minipass: "npm:^5.0.0" + minizlib: "npm:^2.1.1" + mkdirp: "npm:^1.0.3" + yallist: "npm:^4.0.0" + checksum: 10c0/a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 + languageName: node + linkType: hard + +"terser-webpack-plugin@npm:^5.3.10": + version: 5.3.10 + resolution: "terser-webpack-plugin@npm:5.3.10" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.20" + jest-worker: "npm:^27.4.5" + schema-utils: "npm:^3.1.1" + serialize-javascript: "npm:^6.0.1" + terser: "npm:^5.26.0" + peerDependencies: + webpack: ^5.1.0 + peerDependenciesMeta: + "@swc/core": + optional: true + esbuild: + optional: true + uglify-js: + optional: true + checksum: 10c0/66d1ed3174542560911cf96f4716aeea8d60e7caab212291705d50072b6ba844c7391442541b13c848684044042bea9ec87512b8506528c12854943da05faf91 + languageName: node + linkType: hard + +"terser@npm:^5.26.0": + version: 5.29.2 + resolution: "terser@npm:5.29.2" + dependencies: + "@jridgewell/source-map": "npm:^0.3.3" + acorn: "npm:^8.8.2" + commander: "npm:^2.20.0" + source-map-support: "npm:~0.5.20" + bin: + terser: bin/terser + checksum: 10c0/a6f1e26725e3dc99943d7173a3fca8bee21418a3ff39f37053fecd6a988b5341432d535721642807e9c24604aff64410577e9aed3200d9345c89b176b0ba3d65 + languageName: node + linkType: hard + +"test-exclude@npm:^6.0.0": + version: 6.0.0 + resolution: "test-exclude@npm:6.0.0" + dependencies: + "@istanbuljs/schema": "npm:^0.1.2" + glob: "npm:^7.1.4" + minimatch: "npm:^3.0.4" + checksum: 10c0/019d33d81adff3f9f1bfcff18125fb2d3c65564f437d9be539270ee74b994986abb8260c7c2ce90e8f30162178b09dbbce33c6389273afac4f36069c48521f57 + languageName: node + linkType: hard + +"tmpl@npm:1.0.5": + version: 1.0.5 + resolution: "tmpl@npm:1.0.5" + checksum: 10c0/f935537799c2d1922cb5d6d3805f594388f75338fe7a4a9dac41504dd539704ca4db45b883b52e7b0aa5b2fd5ddadb1452bf95cd23a69da2f793a843f9451cc9 + languageName: node + linkType: hard + +"to-fast-properties@npm:^2.0.0": + version: 2.0.0 + resolution: "to-fast-properties@npm:2.0.0" + checksum: 10c0/b214d21dbfb4bce3452b6244b336806ffea9c05297148d32ebb428d5c43ce7545bdfc65a1ceb58c9ef4376a65c0cb2854d645f33961658b3e3b4f84910ddcdd7 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"trim-repeated@npm:^1.0.0": + version: 1.0.0 + resolution: "trim-repeated@npm:1.0.0" + dependencies: + escape-string-regexp: "npm:^1.0.2" + checksum: 10c0/89acada0142ed0cdb113615a3e82fdb09e7fdb0e3504ded62762dd935bc27debfcc38edefa497dc7145d8dc8602d40dd9eec891e0ea6c28fa0cc384200b692db + languageName: node + linkType: hard + +"ts-jest@npm:^29.1.2": + version: 29.1.2 + resolution: "ts-jest@npm:29.1.2" + dependencies: + bs-logger: "npm:0.x" + fast-json-stable-stringify: "npm:2.x" + jest-util: "npm:^29.0.0" + json5: "npm:^2.2.3" + lodash.memoize: "npm:4.x" + make-error: "npm:1.x" + semver: "npm:^7.5.3" + yargs-parser: "npm:^21.0.1" + 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 + bin: + ts-jest: cli.js + checksum: 10c0/c2f51f0241f89d127d41392decbcb83b5dfd5e57ab9d50220aa7b7e2f9b3f3b07ccdbba33311284df1c41941879e4ddfad44b15a9d0da4b74bd1b98702b729df + languageName: node + linkType: hard + +"ts-loader@npm:^9.5.1": + version: 9.5.1 + resolution: "ts-loader@npm:9.5.1" + dependencies: + chalk: "npm:^4.1.0" + enhanced-resolve: "npm:^5.0.0" + micromatch: "npm:^4.0.0" + semver: "npm:^7.3.4" + source-map: "npm:^0.7.4" + peerDependencies: + typescript: "*" + webpack: ^5.0.0 + checksum: 10c0/7dc1e3e5d3d032b6ef27836032f02c57077dfbcdf5817cbbc16b7b8609e7ed1d0ec157a03eaac07960161d8ad4a9e030c4d6722fe33540cf6ee75156c7f9c33d + languageName: node + linkType: hard + +"tslib@npm:^1.13.0, tslib@npm:^1.8.1": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: 10c0/69ae09c49eea644bc5ebe1bca4fa4cc2c82b7b3e02f43b84bd891504edf66dbc6b2ec0eef31a957042de2269139e4acff911e6d186a258fb14069cd7f6febce2 + languageName: node + linkType: hard + +"tslint@npm:^6.1.3": + version: 6.1.3 + resolution: "tslint@npm:6.1.3" + dependencies: + "@babel/code-frame": "npm:^7.0.0" + builtin-modules: "npm:^1.1.1" + chalk: "npm:^2.3.0" + commander: "npm:^2.12.1" + diff: "npm:^4.0.1" + glob: "npm:^7.1.1" + js-yaml: "npm:^3.13.1" + minimatch: "npm:^3.0.4" + mkdirp: "npm:^0.5.3" + resolve: "npm:^1.3.2" + semver: "npm:^5.3.0" + tslib: "npm:^1.13.0" + tsutils: "npm:^2.29.0" + peerDependencies: + typescript: ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev" + bin: + tslint: bin/tslint + checksum: 10c0/04717de06d187ee46ffa99e28af80f1b5a2edbec051e32b43ca681da625a61e94e5eb9ebb638fafe07975fb3536760ffd772f76c57134db723a9ecff6aeac380 + languageName: node + linkType: hard + +"tsutils@npm:^2.29.0": + version: 2.29.0 + resolution: "tsutils@npm:2.29.0" + dependencies: + tslib: "npm:^1.8.1" + peerDependencies: + typescript: ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" + checksum: 10c0/e37794513526dbf1cf960414d0a65b956ad319dbc93171bccfe08e3fece1eea35b4e130153f41d917a0f28ecac04f3ca78e9a99c4bddc64a5f225925abc0cf14 + languageName: node + linkType: hard + +"type-detect@npm:4.0.8": + version: 4.0.8 + resolution: "type-detect@npm:4.0.8" + checksum: 10c0/8fb9a51d3f365a7de84ab7f73b653534b61b622aa6800aecdb0f1095a4a646d3f5eb295322127b6573db7982afcd40ab492d038cf825a42093a58b1e1353e0bd + languageName: node + linkType: hard + +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: 10c0/902bd57bfa30d51d4779b641c2bc403cdf1371fb9c91d3c058b0133694fcfdb817aef07a47f40faf79039eecbaa39ee9d3c532deff244f3a19ce68cea71a61e8 + languageName: node + linkType: hard + +"typedoc@npm:^0.25.12": + version: 0.25.12 + resolution: "typedoc@npm:0.25.12" + dependencies: + lunr: "npm:^2.3.9" + marked: "npm:^4.3.0" + minimatch: "npm:^9.0.3" + shiki: "npm:^0.14.7" + peerDependencies: + typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x + bin: + typedoc: bin/typedoc + checksum: 10c0/35157a90954ed67243bc1ad430781de381431959c62e24f8a8688c4ebae62c2ee11d404002dfd43a0df3bf96721d94fce928423fe1f91f1ed40c99f29c5276aa + languageName: node + linkType: hard + +"typescript@npm:^5.4.3": + version: 5.4.3 + resolution: "typescript@npm:5.4.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/22443a8760c3668e256c0b34b6b45c359ef6cecc10c42558806177a7d500ab1a7d7aac1f976d712e26989ddf6731d2fbdd3212b7c73290a45127c1c43ba2005a + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A^5.4.3#optional!builtin": + version: 5.4.3 + resolution: "typescript@patch:typescript@npm%3A5.4.3#optional!builtin::version=5.4.3&hash=5adc0c" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/6e51f8b7e6ec55b897b9e56b67e864fe8f44e30f4a14357aad5dc0f7432db2f01efc0522df0b6c36d361c51f2dc3dcac5c832efd96a404cfabf884e915d38828 + languageName: node + linkType: hard + +"undici-types@npm:~5.26.4": + version: 5.26.5 + resolution: "undici-types@npm:5.26.5" + checksum: 10c0/bb673d7876c2d411b6eb6c560e0c571eef4a01c1c19925175d16e3a30c4c428181fb8d7ae802a261f283e4166a0ac435e2f505743aa9e45d893f9a3df017b501 + languageName: node + linkType: hard + +"unicorn-magic@npm:^0.1.0": + version: 0.1.0 + resolution: "unicorn-magic@npm:0.1.0" + checksum: 10c0/e4ed0de05b0a05e735c7d8a2930881e5efcfc3ec897204d5d33e7e6247f4c31eac92e383a15d9a6bccb7319b4271ee4bea946e211bf14951fec6ff2cbbb66a92 + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: "npm:^4.0.0" + checksum: 10c0/6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 + languageName: node + linkType: hard + +"universalify@npm:^2.0.0": + version: 2.0.1 + resolution: "universalify@npm:2.0.1" + checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.0.13": + version: 1.0.13 + resolution: "update-browserslist-db@npm:1.0.13" + dependencies: + escalade: "npm:^3.1.1" + picocolors: "npm:^1.0.0" + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 10c0/e52b8b521c78ce1e0c775f356cd16a9c22c70d25f3e01180839c407a5dc787fb05a13f67560cbaf316770d26fa99f78f1acd711b1b54a4f35d4820d4ea7136e6 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c + languageName: node + linkType: hard + +"v8-to-istanbul@npm:^9.0.1": + version: 9.2.0 + resolution: "v8-to-istanbul@npm:9.2.0" + dependencies: + "@jridgewell/trace-mapping": "npm:^0.3.12" + "@types/istanbul-lib-coverage": "npm:^2.0.1" + convert-source-map: "npm:^2.0.0" + checksum: 10c0/e691ba4dd0dea4a884e52c37dbda30cce6f9eeafe9b26721e449429c6bb0f4b6d1e33fabe7711d0f67f7a34c3bfd56c873f7375bba0b1534e6a2843ce99550e5 + languageName: node + linkType: hard + +"vscode-oniguruma@npm:^1.7.0": + version: 1.7.0 + resolution: "vscode-oniguruma@npm:1.7.0" + checksum: 10c0/bef0073c665ddf8c86e51da94529c905856559e9aba97a9882f951acd572da560384775941ab6e7e8db94d9c578b25fefb951e4b73c37e8712e16b0231de2689 + languageName: node + linkType: hard + +"vscode-textmate@npm:^8.0.0": + version: 8.0.0 + resolution: "vscode-textmate@npm:8.0.0" + checksum: 10c0/836f7fe73fc94998a38ca193df48173a2b6eab08b4943d83c8cac9a2a0c3546cfdab4cf1b10b890ec4a4374c5bee03a885ef0e83e7fd2bd618cf00781c017c04 + languageName: node + linkType: hard + +"walker@npm:^1.0.8": + version: 1.0.8 + resolution: "walker@npm:1.0.8" + dependencies: + makeerror: "npm:1.0.12" + checksum: 10c0/a17e037bccd3ca8a25a80cb850903facdfed0de4864bd8728f1782370715d679fa72e0a0f5da7c1c1379365159901e5935f35be531229da53bbfc0efdabdb48e + languageName: node + linkType: hard + +"watchpack@npm:^2.4.1": + version: 2.4.1 + resolution: "watchpack@npm:2.4.1" + dependencies: + glob-to-regexp: "npm:^0.4.1" + graceful-fs: "npm:^4.1.2" + checksum: 10c0/c694de0a61004e587a8a0fdc9cfec20ee692c52032d9ab2c2e99969a37fdab9e6e1bd3164ed506f9a13f7c83e65563d563e0d6b87358470cdb7309b83db78683 + languageName: node + linkType: hard + +"webpack-cli@npm:^5.1.4": + version: 5.1.4 + resolution: "webpack-cli@npm:5.1.4" + dependencies: + "@discoveryjs/json-ext": "npm:^0.5.0" + "@webpack-cli/configtest": "npm:^2.1.1" + "@webpack-cli/info": "npm:^2.0.2" + "@webpack-cli/serve": "npm:^2.0.5" + colorette: "npm:^2.0.14" + commander: "npm:^10.0.1" + cross-spawn: "npm:^7.0.3" + envinfo: "npm:^7.7.3" + fastest-levenshtein: "npm:^1.0.12" + import-local: "npm:^3.0.2" + interpret: "npm:^3.1.1" + rechoir: "npm:^0.8.0" + webpack-merge: "npm:^5.7.3" + peerDependencies: + webpack: 5.x.x + peerDependenciesMeta: + "@webpack-cli/generators": + optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + bin: + webpack-cli: bin/cli.js + checksum: 10c0/4266909ae5e2e662c8790ac286e965b2c7fd5a4a2f07f48e28576234c9a5f631847ccddc18e1b3281c7b4be04a7ff4717d2636033a322dde13ac995fd0d9de10 + languageName: node + linkType: hard + +"webpack-merge@npm:^5.7.3": + version: 5.10.0 + resolution: "webpack-merge@npm:5.10.0" + dependencies: + clone-deep: "npm:^4.0.1" + flat: "npm:^5.0.2" + wildcard: "npm:^2.0.0" + checksum: 10c0/b607c84cabaf74689f965420051a55a08722d897bdd6c29cb0b2263b451c090f962d41ecf8c9bf56b0ab3de56e65476ace0a8ecda4f4a4663684243d90e0512b + languageName: node + linkType: hard + +"webpack-sources@npm:^3.2.3": + version: 3.2.3 + resolution: "webpack-sources@npm:3.2.3" + checksum: 10c0/2ef63d77c4fad39de4a6db17323d75eb92897b32674e97d76f0a1e87c003882fc038571266ad0ef581ac734cbe20952912aaa26155f1905e96ce251adbb1eb4e + languageName: node + linkType: hard + +"webpack@npm:^5.91.0": + version: 5.91.0 + resolution: "webpack@npm:5.91.0" + dependencies: + "@types/eslint-scope": "npm:^3.7.3" + "@types/estree": "npm:^1.0.5" + "@webassemblyjs/ast": "npm:^1.12.1" + "@webassemblyjs/wasm-edit": "npm:^1.12.1" + "@webassemblyjs/wasm-parser": "npm:^1.12.1" + acorn: "npm:^8.7.1" + acorn-import-assertions: "npm:^1.9.0" + browserslist: "npm:^4.21.10" + chrome-trace-event: "npm:^1.0.2" + enhanced-resolve: "npm:^5.16.0" + es-module-lexer: "npm:^1.2.1" + eslint-scope: "npm:5.1.1" + events: "npm:^3.2.0" + glob-to-regexp: "npm:^0.4.1" + graceful-fs: "npm:^4.2.11" + json-parse-even-better-errors: "npm:^2.3.1" + loader-runner: "npm:^4.2.0" + mime-types: "npm:^2.1.27" + neo-async: "npm:^2.6.2" + schema-utils: "npm:^3.2.0" + tapable: "npm:^2.1.1" + terser-webpack-plugin: "npm:^5.3.10" + watchpack: "npm:^2.4.1" + webpack-sources: "npm:^3.2.3" + peerDependenciesMeta: + webpack-cli: + optional: true + bin: + webpack: bin/webpack.js + checksum: 10c0/74a3e0ea1c9a492accf035317f31769ffeaaab415811524b9f17bc7bf7012c5b6e1a9860df5ca6903f3ae2618727b801eb47d9351a2595dfffb25941d368b88c + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a + languageName: node + linkType: hard + +"wildcard@npm:^2.0.0": + version: 2.0.1 + resolution: "wildcard@npm:2.0.1" + checksum: 10c0/08f70cd97dd9a20aea280847a1fe8148e17cae7d231640e41eb26d2388697cbe65b67fd9e68715251c39b080c5ae4f76d71a9a69fa101d897273efdfb1b58bf7 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 + languageName: node + linkType: hard + +"write-file-atomic@npm:^4.0.2": + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" + dependencies: + imurmurhash: "npm:^0.1.4" + signal-exit: "npm:^3.0.7" + checksum: 10c0/a2c282c95ef5d8e1c27b335ae897b5eca00e85590d92a3fd69a437919b7b93ff36a69ea04145da55829d2164e724bc62202cdb5f4b208b425aba0807889375c7 + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 + languageName: node + linkType: hard + +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 10c0/c66a5c46bc89af1625476f7f0f2ec3653c1a1791d2f9407cfb4c2ba812a1e1c9941416d71ba9719876530e3340a99925f697142989371b72d93b9ee628afd8c1 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + +"yargs-parser@npm:^21.0.1, yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2 + languageName: node + linkType: hard + +"yargs@npm:^17.3.1": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: "npm:^8.0.1" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.3" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^21.1.1" + checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f + languageName: node + linkType: hard