From e09dd29e8e4facb0c29e5e91b82115c56ace9be8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Tue, 26 Nov 2024 09:09:08 +0100 Subject: [PATCH 01/26] :construction: Add async chain idea --- src/collections.test.ts | 36 +- src/collections.ts | 1058 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 1085 insertions(+), 9 deletions(-) diff --git a/src/collections.test.ts b/src/collections.test.ts index 58afefe..b73653b 100644 --- a/src/collections.test.ts +++ b/src/collections.test.ts @@ -1,5 +1,5 @@ import test from "ava" -import { chain } from "./collections" +import { AsyncChain, chain } from "./collections" test("should associateBy correctly", (t) => { const result = chain([1, 2, 3]) @@ -162,3 +162,37 @@ test("should allow flatMap over sets", (t) => { t.deepEqual(result, [1, 2, 3, 1]) }) + +test("AsyncChain should map", async (t) => { + const chain = new AsyncChain([1, 2, 3]) + + const b = chain.map((it) => it * 2) + console.log(b) + + const result = await b.value() + console.log(result) + + t.deepEqual(result, [2, 4, 6]) +}) + +test("chain::mapAsync should be downwards compatible", async (t) => { + const c = chain([1, 2, 3, 4, 5]) + + const b = await c.mapAsync(async (it) => it * 3) + + const result = b.value() + + t.deepEqual(result, [3, 6, 9, 12, 15]) +}) + +test("chain::mapAsync should be chainable into an async chain", async (t) => { + const c = chain([1, 2, 3, 4, 5]) + + const b = await c + .mapAsync(async (it) => it * 3) + .filter(async (it) => it % 2 === 1) + + const result = b.value() + + t.deepEqual(result, [3, 9, 15]) +}) diff --git a/src/collections.ts b/src/collections.ts index d15c7b8..fa75367 100644 --- a/src/collections.ts +++ b/src/collections.ts @@ -42,6 +42,8 @@ type FlattenChain = Distribute extends { type: ArrayOrChain } ? Chain : Chain +type ArrayOrAsyncChain = Chain | ReadonlyArray | AsyncChainBase + export function objChain( value: Record | ObjectChain | Chain, ): ObjectChain> @@ -208,6 +210,10 @@ export class Chain implements Iterable { return this.val } + async() { + return asyncChain(this) + } + associateBy( selector: (el: T) => S, ): ObjectChain { @@ -313,15 +319,14 @@ export class Chain implements Iterable { return new Chain(filtered) } - async filterAsync( + filterAsync( predicate: ( el: T, index: number, array: ReadonlyArray, ) => Promise, - ): Promise> { - const includes = await this.mapAsync(predicate) - return this.filter((_, index) => includes.val[index]) + ): AsyncChainBase { + return this.async().filter(predicate) } filterNotNullish(): Chain> { @@ -460,11 +465,10 @@ export class Chain implements Iterable { return new Chain(mapped) } - async mapAsync( + mapAsync( transformer: (el: T, index: number, array: ReadonlyArray) => Promise, - ): Promise> { - const ret = await Promise.all(this.val.map(transformer)) - return new Chain(ret) + ): AsyncChainBase { + return this.async().map(transformer) } mapNotNullish(transformer: (el: T) => O): Chain> { @@ -654,6 +658,7 @@ export class Chain implements Iterable { sortBy(selector: (el: T) => bigint): Chain sortBy(selector: (el: T) => string): Chain sortBy(selector: (el: T) => number): Chain + sortBy(selector: (el: T) => Date | bigint | string | number): Chain sortBy(selector: (el: T) => Date | bigint | string | number): Chain { // this is safe, because sortBy is overloaded as well const ret = sortBy(this.val, selector as (el: T) => number) @@ -690,3 +695,1040 @@ export class Chain implements Iterable { return new Chain(zip(this.val, withArray)) } } + +abstract class AsyncChainBase implements Promise> { + constructor() {} + + [Symbol.toStringTag] = "AsyncChain" + + async then, TResult2 = never>( + onfulfilled?: + | ((value: Chain) => TResult1 | PromiseLike) + | null + | undefined, + onrejected?: + | ((reason: any) => TResult2 | PromiseLike) + | null + | undefined, + ): Promise { + return await this.await().then(onfulfilled, onrejected) + } + + async catch( + onrejected?: + | ((reason: any) => TResult | PromiseLike) + | null + | undefined, + ): Promise | TResult> { + return this.then((it) => it, onrejected) + } + + finally(onfinally?: (() => void) | null | undefined): Promise> { + return this.then( + (it) => it, + (it) => it, + ).finally(onfinally) + } + + abstract await(): Promise> + + async value(): Promise> { + return (await this.await()).value() + } + + associateBy( + selector: (el: T) => S, + ): ObjectChain { + const entries = this.map((m) => { + return [selector(m), m] as const + }) + return objChain(entries) + } + + associateWith( + selector: (key: string) => U, + ): IfString> { + const entries = this.map((el) => { + return [ + el as unknown as string, + selector(el as unknown as string), + ] as const + }) + return objChain(entries) as IfString> + } + + // TODO(mr) + chunk(size: number): AsyncChainBase { + return new ChunkingAsyncChain(this, size) + } + + concat(other: Iterable | AsyncChainBase): AsyncChainBase { + return new ConcatenatingAsyncChain(this, other) + } + + distinct(): AsyncChainBase { + return this.distinctBy((it) => it) + } + + distinctBy(selector: (el: T) => D): AsyncChainBase { + return new DistinctAsyncChain(this, selector) + } + + drop(num: number): AsyncChainBase { + return new SliceAsyncChain(this, num) + } + + dropLast(num: number): AsyncChainBase { + return new SliceAsyncChain(this, 0, -num) + } + + take(num: number): AsyncChainBase { + return new SliceAsyncChain(this, 0, num) + } + + takeLast(num: number): AsyncChainBase { + return new SliceAsyncChain(this, -num) + } + + dropLastWhile(predicate: (el: T) => boolean): AsyncChainBase { + // TODO(mr) efficiency lol + return new DropWhileAsyncChain(this.reverse(), predicate).reverse() + } + + dropWhile(predicate: (el: T) => boolean): AsyncChainBase { + return new DropWhileAsyncChain(this, predicate) + } + + async every( + predicate: (el: T, index: number, array: ReadonlyArray) => boolean, + ): Promise + async every( + predicate: (el: T, index: number, array: ReadonlyArray) => boolean, + ): Promise { + return (await this.await()).every(predicate) + } + + async some( + predicate: (value: T, index: number, array: ReadonlyArray) => boolean, + ): Promise { + return (await this.await()).some(predicate) + } + + async first(): Promise { + return (await this.firstOrNull()) ?? error("No first element found") + } + + async firstOrNull(): Promise { + return (await this.await()).firstOrNull() + } + + filter( + filter: (el: T, index: number, array: ReadonlyArray) => el is S, + ): AsyncChainBase + filter( + filter: (el: T, index: number, array: ReadonlyArray) => Promise, + ): AsyncChainBase + filter( + filter: (el: T, index: number, array: ReadonlyArray) => Promise, + ): AsyncChainBase + filter( + filter: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, + ): AsyncChainBase + filter( + filter: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, + ): AsyncChainBase { + return new FilterAsyncChain(this, filter) + } + + filterNotNullish(): AsyncChainBase> { + return this.filter((it) => it != null) as AsyncChainBase> + } + + async find( + predicate: (el: T, index: number, array: ReadonlyArray) => el is S, + ): Promise + async find( + predicate: (el: T, index: number, array: ReadonlyArray) => boolean, + ): Promise + async find( + predicate: (el: T, index: number, array: ReadonlyArray) => boolean, + ): Promise { + return (await this.await()).find(predicate) + } + + async findIndex( + predicate: (el: T, index: number, array: ReadonlyArray) => boolean, + ): Promise { + return (await this.await()).findIndex(predicate) + } + + async findLast(predicate: (el: T) => boolean): Promise { + return (await this.await()).findLast(predicate) + } + + async findLastIndex( + predicate: (el: T) => boolean, + ): Promise { + return (await this.await()).findLastIndex(predicate) + } + + async findSingle(predicate: (el: T) => boolean): Promise { + return (await this.await()).findSingle(predicate) + } + + async firstNotNullishOf( + selector: (item: T) => O | undefined | null, + ): Promise | undefined> { + return (await this.await()).firstNotNullishOf(selector) + } + + flatten(): FlattenAsyncChain { + return new FlattenAsyncChain(this) + } + + flatMap( + transformer: (el: T, index: number, array: ReadonlyArray) => Chain, + ): FlattenAsyncChain + flatMap( + transformer: ( + el: T, + index: number, + array: ReadonlyArray, + ) => ReadonlyArray, + ): FlattenAsyncChain + flatMap( + transformer: (el: T, index: number, array: ReadonlyArray) => Set, + ): FlattenAsyncChain + flatMap( + transformer: ( + el: T, + index: number, + array: ReadonlyArray, + ) => AsyncChainBase, + ): FlattenAsyncChain + flatMap( + transformer: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Chain | ReadonlyArray | Set | AsyncChainBase, + ): FlattenAsyncChain + flatMap( + transformer: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Chain | ReadonlyArray | Set | AsyncChainBase, + ): FlattenAsyncChain { + const mapped = this.map(transformer) + // @ts-expect-error trust me bro + return mapped.flatten() + } + + async forEach( + callback: ( + el: T, + index: number, + array: ReadonlyArray, + ) => void | Promise, + ): Promise { + await this.map(callback).value() + } + + groupBy( + selector: (el: T) => K, + ): ObjectChain> { + const record = {} as Record> + for (const el of this.val) { + const key = selector(el) + if (record[key] != null) { + record[key]?.push(el) + } else { + record[key] = [el] + } + } + return new ObjectChain(record) + } + + async indexOf( + searchElement: T, + fromIndex?: number, + ): Promise { + return (await this.await()).indexOf(searchElement, fromIndex) + } + + async lastIndexOf( + searchElement: T, + fromIndex?: number, + ): Promise { + return (await this.await()).lastIndexOf(searchElement, fromIndex) + } + + async includes(el: T, fromIndex?: number): Promise { + return (await this.await()).includes(el, fromIndex) + } + + intersect( + ...arrays: Array | AsyncChainBase> + ): AsyncChainBase { + return new IntersectionAsyncChain(this, arrays) + } + + async join(separator?: string): Promise { + return (await this.await()).join(separator) + } + + async mapJoin( + separator: string, + transformer: (el: T) => string | Promise, + ): Promise { + return this.reduce(async (acc, it, idx) => { + const mapped = transformer(it) + return acc + (idx > 0 ? separator : "") + mapped + }, "") + } + + async last(): Promise { + return (await this.lastOrNull()) ?? error("No last element found") + } + + async lastOrNull(): Promise { + return (await this.await()).lastOrNull() + } + + map( + transformer: ( + el: T, + index: number, + array: ReadonlyArray, + ) => U | Promise, + ): AsyncChainBase { + return new MappingAsyncChain(this, transformer) + } + + mapNotNullish(transformer: (el: T) => O): AsyncChainBase> { + return this.map(transformer).filterNotNullish() + } + + async maxBy(selector: (el: T) => string): Promise + async maxBy(selector: (el: T) => bigint): Promise + async maxBy(selector: (el: T) => number): Promise + async maxBy(selector: (el: T) => Date): Promise + async maxBy( + selector: (el: T) => Date | number | bigint | string, + ): Promise { + // this is save because maxBy is overloaded too + return (await this.await()).maxBy(selector as (el: T) => string) + } + + async maxOf(selector: (el: T) => bigint): Promise + async maxOf(selector: (el: T) => number): Promise + async maxOf(selector: (el: T) => string): Promise + async maxOf(selector: (el: T) => Date): Promise + async maxOf( + selector: (el: T) => bigint | number | string | Date, + ): Promise { + return (await this.await()).maxOf( + selector as (el: T) => bigint | number | string | Date, + ) + } + + async maxWith(comparator: (a: T, b: T) => number): Promise { + return (await this.await()).maxWith(comparator) + } + + async minBy(selector: (el: T) => number): Promise + async minBy(selector: (el: T) => string): Promise + async minBy(selector: (el: T) => bigint): Promise + async minBy(selector: (el: T) => Date): Promise + async minBy( + selector: (el: T) => Date | number | bigint | string, + ): Promise { + return (await this.await()).minBy(selector as (el: T) => string) + } + + async minOf(selector: (el: T) => bigint): Promise + async minOf(selector: (el: T) => number): Promise + async minOf(selector: (el: T) => string): Promise + async minOf(selector: (el: T) => Date): Promise + async minOf( + selector: (el: T) => bigint | number | string | Date, + ): Promise { + return (await this.await()).minOf( + selector as (el: T) => bigint | number | string | Date, + ) + } + + async minWith(comparator: (a: T, b: T) => number): Promise { + return (await this.await()).minWith(comparator) + } + + partition( + predicate: (el: T) => Promise | boolean, + ): [AsyncChainBase, AsyncChainBase] { + return [this.filter(predicate), this.filter((el) => !predicate(el))] + } + + permutations(): AsyncChainBase> { + return new PermutationsAsyncChain(this) + } + + async reduce( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => T, + ): Promise + async reduce( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise, + ): Promise + async reduce( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise | T, + ): Promise + async reduce( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => T, + initial: T, + ): Promise + async reduce( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise, + initial: T, + ): Promise + async reduce( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise | T, + initial: T, + ): Promise + async reduce( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O, + initial: O, + ): Promise + async reduce( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise, + initial: O, + ): Promise + async reduce( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O | Promise, + initial: O, + ): Promise + async reduce( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O | Promise, + initial?: O, + ): Promise + async reduce( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O | Promise, + initial?: O, + ): Promise { + let ret: O = initial != null ? initial : ((await this.firstOrNull()) as O) + + const values = await this.value() + for (let i = initial != null ? 0 : 1; i < values.length; i++) { + ret = await reducer(ret as O, values[i], i, values) + } + return ret + } + + async reduceRight( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => T, + ): Promise + async reduceRight( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise, + ): Promise + async reduceRight( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise | T, + ): Promise + async reduceRight( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => T, + initial: T, + ): Promise + async reduceRight( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise, + initial: T, + ): Promise + async reduceRight( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise | T, + initial: T, + ): Promise + async reduceRight( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O, + initial: O, + ): Promise + async reduceRight( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise, + initial: O, + ): Promise + async reduceRight( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O | Promise, + initial: O, + ): Promise + async reduceRight( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O | Promise, + initial?: O, + ): Promise + async reduceRight( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O | Promise, + initial?: O, + ): Promise { + return await this.reverse().reduce(reducer, initial) + } + + reverse(): AsyncChainBase { + return new ReversingAsyncChain(this) + } + + runningReduce( + reducer: (accumulator: O, current: T) => O, + initialValue: O, + ): AsyncChainBase { + return new RunningReduceAsyncChain(this, reducer, initialValue) + } + + async sample(): Promise { + return (await this.await()).sample() + } + + slice(start?: number, end?: number): AsyncChainBase { + return new SliceAsyncChain(this, start, end) + } + + slidingWindows( + size: number, + { step, partial }: { step: number; partial: boolean }, + ): AsyncChainBase> { + return new SlidingWindowAsyncChain(this, size, { step, partial }) + } + + sort(compareFn?: (a: T, b: T) => number): AsyncChainBase { + return new SortingAsyncChain(this, compareFn) + } + + sortBy(selector: (el: T) => Date): AsyncChainBase + sortBy(selector: (el: T) => Promise): AsyncChainBase + sortBy(selector: (el: T) => Promise | Date): AsyncChainBase + sortBy(selector: (el: T) => bigint): AsyncChainBase + sortBy(selector: (el: T) => Promise): AsyncChainBase + sortBy(selector: (el: T) => Promise | bigint): AsyncChainBase + sortBy(selector: (el: T) => string): AsyncChainBase + sortBy(selector: (el: T) => Promise): AsyncChainBase + sortBy(selector: (el: T) => Promise | string): AsyncChainBase + sortBy(selector: (el: T) => number): AsyncChainBase + sortBy(selector: (el: T) => Promise): AsyncChainBase + sortBy(selector: (el: T) => Promise | number): AsyncChainBase + sortBy( + selector: (el: T) => Date | bigint | string | number, + ): AsyncChainBase + sortBy( + selector: (el: T) => Promise, + ): AsyncChainBase + sortBy( + selector: ( + el: T, + ) => + | Promise + | Date + | bigint + | string + | number, + ): AsyncChainBase + sortBy( + selector: ( + el: T, + ) => + | Promise + | Date + | bigint + | string + | number, + ): AsyncChainBase { + return new SortByAsyncChain(this, selector) + } + + async sumOf(selector: (el: T) => Promise | number): Promise { + return (await this.map(selector).await()).sumOf((it) => it) + } + + takeLastWhile(predicate: (el: T) => boolean): AsyncChainBase { + // TODO(mr) efficiency lol + return new TakeWhileAsyncChain(this.reverse(), predicate).reverse() + } + + takeWhile(predicate: (el: T) => boolean): AsyncChainBase { + return new TakeWhileAsyncChain(this, predicate) + } + + union(...arrays: (readonly T[] | AsyncChainBase)[]): AsyncChainBase { + return new UnionAsyncChain(this, arrays) + } + + unzip(): PairSplit { + const [left, right] = unzip(this.val as unknown as ReadonlyArray<[T, T]>) + return [new Chain(left), new Chain(right)] as PairSplit + } + + withoutAll(values: readonly T[]): Chain { + const ret = withoutAll(this.val, values) + return new Chain(ret) + } + + zip(withArray: readonly U[] | AsyncChainBase): AsyncChainBase<[T, U]> { + return new ZippingAsyncChain(this, withArray) + } +} + +export class DistinctAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private selector: (el: T) => D, + ) { + super() + } + + async await(): Promise> { + return (await this.val.await()).distinctBy(this.selector) + } +} + +export class SliceAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private start?: number, + private end?: number, + ) { + super() + } + + async await(): Promise> { + return (await this.val.await()).slice(this.start, this.end) + } +} + +export class FilterAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private predicate: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, + ) { + super() + } + + async await(): Promise> { + const current = await this.val.await() + const mask = await asyncChain(current).map(this.predicate).value() + + return current.filter((_, index) => mask[index]) + } +} + +type FlattenAsyncType = Distribute extends { + type: ArrayOrAsyncChain +} + ? U + : T + +export class FlattenAsyncChain extends AsyncChainBase> { + constructor(private val: AsyncChainBase) { + super() + } + + async await(): Promise>> { + return (await this.val.await()).flatten() as Chain> + } +} + +export class MappingAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private transformer: ( + el: T, + index: number, + array: ReadonlyArray, + ) => U | Promise, + ) { + super() + } + + async await(): Promise> { + return asyncChain( + (await this.val.await()).map( + async (el, index, array) => + await this.transformer(await el, index, array), + ), + ).await() + } +} + +export class SortByAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private selector: ( + a: T, + ) => + | Promise + | Date + | bigint + | string + | number, + ) { + super() + } + + async await(): Promise> { + const values = await this.val + .map(async (el) => [el, await this.selector(el)] as const) + .await() + return values.sortBy((it) => it[1]).map((it) => it[0]) + } +} + +export class SortingAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private compareFn?: (a: T, b: T) => number, + ) { + super() + } + + async await(): Promise> { + return (await this.val.await()).sort(this.compareFn) + } +} + +export class ReversingAsyncChain extends AsyncChainBase { + constructor(private val: AsyncChainBase) { + super() + } + + async await(): Promise> { + return (await this.val.await()).reverse() + } +} + +export class PermutationsAsyncChain extends AsyncChainBase< + ReadonlyArray +> { + constructor(private val: AsyncChainBase) { + super() + } + + async await(): Promise>> { + return (await this.val.await()).permutations() + } +} + +export class TakeWhileAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private predicate: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, + ) { + super() + } + + async await(): Promise> { + const values = await this.val.value() + const ret: Array = [] + for (let i = 0; i < values.length; i++) { + if (await this.predicate(values[i], i, values)) { + ret.push(values[i]) + } else { + break + } + } + + return new Chain(ret) + } +} + +export class DropWhileAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private predicate: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, + ) { + super() + } + + async await(): Promise> { + const values = await this.val.value() + const ret: Array = [] + for (let i = 0; i < values.length; i++) { + if (!(await this.predicate(values[i], i, values))) { + break + } else { + ret.push(values[i]) + } + } + + return new Chain(ret) + } +} + +export class ZippingAsyncChain extends AsyncChainBase<[T, U]> { + constructor( + private val: AsyncChainBase, + private withArray: readonly U[] | AsyncChainBase, + ) { + super() + } + + async await(): Promise> { + const other = + this.withArray instanceof AsyncChainBase + ? await this.withArray.value() + : this.withArray + return (await this.val.await()).zip(other) + } +} + +export class UnionAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private withArrays: ReadonlyArray>, + ) { + super() + } + + async await(): Promise> { + const other = await Promise.all( + this.withArrays.map(async (it) => + it instanceof AsyncChainBase ? await it.value() : it, + ), + ) + + return (await this.val.await()).union(...other) + } +} + +export class RunningReduceAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private reducer: (accumulator: O, current: T) => Promise | O, + private initialValue: O, + ) { + super() + } + + async await(): Promise> { + const ret = await this.val.reduce( + async (acc, it) => { + const elem = acc[acc.length - 1] + const next = await this.reducer(elem, it) + return [...acc, next] + }, + [this.initialValue], + ) + + return chain(ret) + } +} + +export class ConcatenatingAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private other: AsyncChainBase | Iterable, + ) { + super() + } + + async await(): Promise> { + const adding = + this.other instanceof AsyncChainBase + ? await this.other.await() + : this.other + return (await this.val.await()).concat(adding) + } +} + +export class ChunkingAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private size: number, + ) { + super() + } + + async await(): Promise> { + const chunks = chunk(await this.val.value(), this.size) + return new AsyncChain(chunks) + } +} + +export class IntersectionAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private withArrays: ReadonlyArray>, + ) { + super() + } + + async await(): Promise> { + const others = await Promise.all( + this.withArrays.map(async (it) => + it instanceof AsyncChainBase ? await it.value() : it, + ), + ) + const ret = intersect(await this.val.value(), ...others) + return chain(ret) + } +} + +export class SlidingWindowAsyncChain extends AsyncChainBase< + ReadonlyArray +> { + constructor( + private val: AsyncChainBase, + private size: number, + private options: { + step?: number + partial?: boolean + }, + ) { + super() + } + + async await(): Promise>> { + const ret = slidingWindows(await this.val.value(), this.size, this.options) + return new Chain(ret) + } +} + +export function asyncChain(val: Chain | T>): AsyncChain +export function asyncChain(val: ReadonlyArray | T>): AsyncChain +export function asyncChain( + val: ReadonlyArray | T> | Chain | T>, +): AsyncChain { + if (val instanceof Chain) return new AsyncChain(val.value()) + return new AsyncChain(val) +} + +export class AsyncChain extends AsyncChainBase { + constructor(private val: ReadonlyArray | T>) { + super() + } + + async await(): Promise> { + return new Chain(await Promise.all(this.val)) + } +} From 969e58ad365b1dd7a4c6ef3fa359b624a4b6cbd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Tue, 26 Nov 2024 09:15:27 +0100 Subject: [PATCH 02/26] Add more test --- src/collections.test.ts | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/collections.test.ts b/src/collections.test.ts index b73653b..84cad83 100644 --- a/src/collections.test.ts +++ b/src/collections.test.ts @@ -1,5 +1,6 @@ import test from "ava" -import { AsyncChain, chain } from "./collections" +import { asyncChain, AsyncChain, chain } from "./collections" +import { sleep } from "./sleep" test("should associateBy correctly", (t) => { const result = chain([1, 2, 3]) @@ -167,10 +168,8 @@ test("AsyncChain should map", async (t) => { const chain = new AsyncChain([1, 2, 3]) const b = chain.map((it) => it * 2) - console.log(b) const result = await b.value() - console.log(result) t.deepEqual(result, [2, 4, 6]) }) @@ -191,8 +190,29 @@ test("chain::mapAsync should be chainable into an async chain", async (t) => { const b = await c .mapAsync(async (it) => it * 3) .filter(async (it) => it % 2 === 1) + .sortBy(async it => -it) const result = b.value() - t.deepEqual(result, [3, 9, 15]) + t.deepEqual(result, [15, 9, 3]) }) + +test("AsyncChain should be chainable", async (t) => { + const c = asyncChain([1, 2, 3, 4, 5]) + + const b = await c + .map(withDelay((it) => it * 3)) + .filter(withDelay( (it) => it % 2 === 1)) + .sortBy(withDelay(it => -it)) + + const result = b.value() + + t.deepEqual(result, [15, 9, 3]) +}) + +function withDelay(transform: (el: T) => U): (el:T) => Promise { + return async (el:T) => { + await sleep(0) + return transform(el) + } +} From 61b2c6a911205a470455726a9f4bd81e0fef33ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Tue, 26 Nov 2024 09:46:05 +0100 Subject: [PATCH 03/26] Make AsyncChain eager, and not evaluate multiple times --- src/collections.test.ts | 36 +++++++++++++++++--- src/collections.ts | 74 +++++++++++++++++++++++++++++------------ 2 files changed, 83 insertions(+), 27 deletions(-) diff --git a/src/collections.test.ts b/src/collections.test.ts index 84cad83..65c2811 100644 --- a/src/collections.test.ts +++ b/src/collections.test.ts @@ -164,6 +164,13 @@ test("should allow flatMap over sets", (t) => { t.deepEqual(result, [1, 2, 3, 1]) }) +test("AsyncChain should contain data", async (t) => { + const chain = new AsyncChain([1, 2, 3]) + + const result = await chain.value() + t.deepEqual(result, [1, 2, 3]) +}) + test("AsyncChain should map", async (t) => { const chain = new AsyncChain([1, 2, 3]) @@ -190,7 +197,7 @@ test("chain::mapAsync should be chainable into an async chain", async (t) => { const b = await c .mapAsync(async (it) => it * 3) .filter(async (it) => it % 2 === 1) - .sortBy(async it => -it) + .sortBy(async (it) => -it) const result = b.value() @@ -202,16 +209,35 @@ test("AsyncChain should be chainable", async (t) => { const b = await c .map(withDelay((it) => it * 3)) - .filter(withDelay( (it) => it % 2 === 1)) - .sortBy(withDelay(it => -it)) + .filter(withDelay((it) => it % 2 === 1)) + .sortBy(withDelay((it) => -it)) const result = b.value() t.deepEqual(result, [15, 9, 3]) }) -function withDelay(transform: (el: T) => U): (el:T) => Promise { - return async (el:T) => { +test("async chain should not evaluate multiple times", async (t) => { + const c = chain([1, 2, 3, 4, 5]) + + let evaluations = 0 + const b = c.mapAsync(async (it) => { + evaluations++ + return it * 3 + }) + + const result = await b.value() + + t.deepEqual(result, [3, 6, 9, 12, 15]) + + const result2 = await b.filter(async (it) => it % 2 === 1).value() + + t.deepEqual(result2, [3, 9, 15]) + t.is(evaluations, 5, "should not evaluate multiple times") +}) + +function withDelay(transform: (el: T) => U): (el: T) => Promise { + return async (el: T) => { await sleep(0) return transform(el) } diff --git a/src/collections.ts b/src/collections.ts index fa75367..ab49880 100644 --- a/src/collections.ts +++ b/src/collections.ts @@ -697,7 +697,15 @@ export class Chain implements Iterable { } abstract class AsyncChainBase implements Promise> { - constructor() {} + private _value: Promise> | null + + protected constructor() { + this._value = null + } + + protected startCalclulation() { + this._value = this.calculate() + } [Symbol.toStringTag] = "AsyncChain" @@ -711,7 +719,7 @@ abstract class AsyncChainBase implements Promise> { | null | undefined, ): Promise { - return await this.await().then(onfulfilled, onrejected) + return await this.calculate().then(onfulfilled, onrejected) } async catch( @@ -730,7 +738,11 @@ abstract class AsyncChainBase implements Promise> { ).finally(onfinally) } - abstract await(): Promise> + abstract calculate(): Promise> + + async await(): Promise> { + return (await this._value) ?? (await this.calculate()) + } async value(): Promise> { return (await this.await()).value() @@ -1394,9 +1406,10 @@ export class DistinctAsyncChain extends AsyncChainBase { private selector: (el: T) => D, ) { super() + this.startCalclulation() } - async await(): Promise> { + async calculate(): Promise> { return (await this.val.await()).distinctBy(this.selector) } } @@ -1408,9 +1421,10 @@ export class SliceAsyncChain extends AsyncChainBase { private end?: number, ) { super() + this.startCalclulation() } - async await(): Promise> { + async calculate(): Promise> { return (await this.val.await()).slice(this.start, this.end) } } @@ -1425,9 +1439,10 @@ export class FilterAsyncChain extends AsyncChainBase { ) => Promise | boolean, ) { super() + this.startCalclulation() } - async await(): Promise> { + async calculate(): Promise> { const current = await this.val.await() const mask = await asyncChain(current).map(this.predicate).value() @@ -1444,9 +1459,10 @@ type FlattenAsyncType = Distribute extends { export class FlattenAsyncChain extends AsyncChainBase> { constructor(private val: AsyncChainBase) { super() + this.startCalclulation() } - async await(): Promise>> { + async calculate(): Promise>> { return (await this.val.await()).flatten() as Chain> } } @@ -1461,9 +1477,10 @@ export class MappingAsyncChain extends AsyncChainBase { ) => U | Promise, ) { super() + this.startCalclulation() } - async await(): Promise> { + async calculate(): Promise> { return asyncChain( (await this.val.await()).map( async (el, index, array) => @@ -1486,9 +1503,10 @@ export class SortByAsyncChain extends AsyncChainBase { | number, ) { super() + this.startCalclulation() } - async await(): Promise> { + async calculate(): Promise> { const values = await this.val .map(async (el) => [el, await this.selector(el)] as const) .await() @@ -1502,9 +1520,10 @@ export class SortingAsyncChain extends AsyncChainBase { private compareFn?: (a: T, b: T) => number, ) { super() + this.startCalclulation() } - async await(): Promise> { + async calculate(): Promise> { return (await this.val.await()).sort(this.compareFn) } } @@ -1512,9 +1531,10 @@ export class SortingAsyncChain extends AsyncChainBase { export class ReversingAsyncChain extends AsyncChainBase { constructor(private val: AsyncChainBase) { super() + this.startCalclulation() } - async await(): Promise> { + async calculate(): Promise> { return (await this.val.await()).reverse() } } @@ -1524,9 +1544,10 @@ export class PermutationsAsyncChain extends AsyncChainBase< > { constructor(private val: AsyncChainBase) { super() + this.startCalclulation() } - async await(): Promise>> { + async calculate(): Promise>> { return (await this.val.await()).permutations() } } @@ -1541,9 +1562,10 @@ export class TakeWhileAsyncChain extends AsyncChainBase { ) => Promise | boolean, ) { super() + this.startCalclulation() } - async await(): Promise> { + async calculate(): Promise> { const values = await this.val.value() const ret: Array = [] for (let i = 0; i < values.length; i++) { @@ -1568,9 +1590,10 @@ export class DropWhileAsyncChain extends AsyncChainBase { ) => Promise | boolean, ) { super() + this.startCalclulation() } - async await(): Promise> { + async calculate(): Promise> { const values = await this.val.value() const ret: Array = [] for (let i = 0; i < values.length; i++) { @@ -1591,9 +1614,10 @@ export class ZippingAsyncChain extends AsyncChainBase<[T, U]> { private withArray: readonly U[] | AsyncChainBase, ) { super() + this.startCalclulation() } - async await(): Promise> { + async calculate(): Promise> { const other = this.withArray instanceof AsyncChainBase ? await this.withArray.value() @@ -1608,9 +1632,10 @@ export class UnionAsyncChain extends AsyncChainBase { private withArrays: ReadonlyArray>, ) { super() + this.startCalclulation() } - async await(): Promise> { + async calculate(): Promise> { const other = await Promise.all( this.withArrays.map(async (it) => it instanceof AsyncChainBase ? await it.value() : it, @@ -1628,9 +1653,10 @@ export class RunningReduceAsyncChain extends AsyncChainBase { private initialValue: O, ) { super() + this.startCalclulation() } - async await(): Promise> { + async calculate(): Promise> { const ret = await this.val.reduce( async (acc, it) => { const elem = acc[acc.length - 1] @@ -1650,9 +1676,10 @@ export class ConcatenatingAsyncChain extends AsyncChainBase { private other: AsyncChainBase | Iterable, ) { super() + this.startCalclulation() } - async await(): Promise> { + async calculate(): Promise> { const adding = this.other instanceof AsyncChainBase ? await this.other.await() @@ -1667,9 +1694,10 @@ export class ChunkingAsyncChain extends AsyncChainBase { private size: number, ) { super() + this.startCalclulation() } - async await(): Promise> { + async calculate(): Promise> { const chunks = chunk(await this.val.value(), this.size) return new AsyncChain(chunks) } @@ -1681,9 +1709,10 @@ export class IntersectionAsyncChain extends AsyncChainBase { private withArrays: ReadonlyArray>, ) { super() + this.startCalclulation() } - async await(): Promise> { + async calculate(): Promise> { const others = await Promise.all( this.withArrays.map(async (it) => it instanceof AsyncChainBase ? await it.value() : it, @@ -1708,7 +1737,7 @@ export class SlidingWindowAsyncChain extends AsyncChainBase< super() } - async await(): Promise>> { + async calculate(): Promise>> { const ret = slidingWindows(await this.val.value(), this.size, this.options) return new Chain(ret) } @@ -1726,9 +1755,10 @@ export function asyncChain( export class AsyncChain extends AsyncChainBase { constructor(private val: ReadonlyArray | T>) { super() + this.startCalclulation() } - async await(): Promise> { + async calculate(): Promise> { return new Chain(await Promise.all(this.val)) } } From 0731e1960da85e89013ff522921eca729089ad36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Tue, 29 Jul 2025 10:32:22 +0200 Subject: [PATCH 04/26] Move async code to their own folder --- src/collections.test.ts | 15 +- src/collections.ts | 1079 +---------------- src/collections/async/AsyncChain.ts | 27 + src/collections/async/AsyncChainBase.ts | 746 ++++++++++++ src/collections/async/AsyncObjectChain.ts | 114 ++ src/collections/async/ChunkingAsyncChain.ts | 19 + .../async/ConcatenatingAsyncChain.ts | 20 + src/collections/async/DistinctAsyncChain.ts | 16 + src/collections/async/DropWhileAsyncChain.ts | 30 + src/collections/async/EntriesAsyncChain.ts | 17 + src/collections/async/FilterAsyncChain.ts | 24 + .../async/FilteringAsyncObjectChain.ts | 23 + src/collections/async/FlattenAsyncChain.ts | 22 + .../async/IntersectionAsyncChain.ts | 23 + src/collections/async/KeysAsyncChain.ts | 15 + src/collections/async/MappingAsyncChain.ts | 26 + .../async/MappingEntriesAsyncObjectChain.ts | 28 + .../async/MappingKeysAsyncObjectChain.ts | 25 + .../async/MappingValuesAsyncObjectChain.ts | 25 + .../async/PermutationsAsyncChain.ts | 15 + src/collections/async/ReversingAsyncChain.ts | 13 + .../async/RunningReduceAsyncChain.ts | 26 + src/collections/async/SliceAsyncChain.ts | 17 + .../async/SlidingWindowAsyncChain.ts | 23 + src/collections/async/SortByAsyncChain.ts | 26 + src/collections/async/SortingAsyncChain.ts | 16 + src/collections/async/TakeWhileAsyncChain.ts | 30 + src/collections/async/UnionAsyncChain.ts | 22 + src/collections/async/ValuesAsyncChain.ts | 17 + src/collections/async/ZippingAsyncChain.ts | 20 + src/index.ts | 27 + src/objects.ts | 5 - 32 files changed, 1473 insertions(+), 1078 deletions(-) create mode 100644 src/collections/async/AsyncChain.ts create mode 100644 src/collections/async/AsyncChainBase.ts create mode 100644 src/collections/async/AsyncObjectChain.ts create mode 100644 src/collections/async/ChunkingAsyncChain.ts create mode 100644 src/collections/async/ConcatenatingAsyncChain.ts create mode 100644 src/collections/async/DistinctAsyncChain.ts create mode 100644 src/collections/async/DropWhileAsyncChain.ts create mode 100644 src/collections/async/EntriesAsyncChain.ts create mode 100644 src/collections/async/FilterAsyncChain.ts create mode 100644 src/collections/async/FilteringAsyncObjectChain.ts create mode 100644 src/collections/async/FlattenAsyncChain.ts create mode 100644 src/collections/async/IntersectionAsyncChain.ts create mode 100644 src/collections/async/KeysAsyncChain.ts create mode 100644 src/collections/async/MappingAsyncChain.ts create mode 100644 src/collections/async/MappingEntriesAsyncObjectChain.ts create mode 100644 src/collections/async/MappingKeysAsyncObjectChain.ts create mode 100644 src/collections/async/MappingValuesAsyncObjectChain.ts create mode 100644 src/collections/async/PermutationsAsyncChain.ts create mode 100644 src/collections/async/ReversingAsyncChain.ts create mode 100644 src/collections/async/RunningReduceAsyncChain.ts create mode 100644 src/collections/async/SliceAsyncChain.ts create mode 100644 src/collections/async/SlidingWindowAsyncChain.ts create mode 100644 src/collections/async/SortByAsyncChain.ts create mode 100644 src/collections/async/SortingAsyncChain.ts create mode 100644 src/collections/async/TakeWhileAsyncChain.ts create mode 100644 src/collections/async/UnionAsyncChain.ts create mode 100644 src/collections/async/ValuesAsyncChain.ts create mode 100644 src/collections/async/ZippingAsyncChain.ts diff --git a/src/collections.test.ts b/src/collections.test.ts index 65c2811..71027da 100644 --- a/src/collections.test.ts +++ b/src/collections.test.ts @@ -1,6 +1,7 @@ import test from "ava" -import { asyncChain, AsyncChain, chain } from "./collections" +import { chain } from "./collections" import { sleep } from "./sleep" +import { asyncChain, AsyncChain } from "./collections/async/AsyncChain" test("should associateBy correctly", (t) => { const result = chain([1, 2, 3]) @@ -217,6 +218,18 @@ test("AsyncChain should be chainable", async (t) => { t.deepEqual(result, [15, 9, 3]) }) +test("AsyncChain should be chainable including value", async (t) => { + const c = asyncChain([1, 2, 3, 4, 5]) + + const result = await c + .map(withDelay((it) => it * 3)) + .filter(withDelay((it) => it % 2 === 1)) + .sortBy(withDelay((it) => -it)) + .value() + + t.deepEqual(result, [15, 9, 3]) +}) + test("async chain should not evaluate multiple times", async (t) => { const c = chain([1, 2, 3, 4, 5]) diff --git a/src/collections.ts b/src/collections.ts index ab49880..ff15587 100644 --- a/src/collections.ts +++ b/src/collections.ts @@ -29,12 +29,16 @@ import { zip, } from "@opencreek/deno-std-collections" import { error } from "." +import { AsyncChainBase } from "./collections/async/AsyncChainBase" +import { asyncChain } from "./collections/async/AsyncChain" -type PairSplit = T extends [infer F, infer L] ? [Chain, Chain] : never +export type PairSplit = T extends [infer F, infer L] + ? [Chain, Chain] + : never -type IfString = T extends string ? U : never +export type IfString = T extends string ? U : never -type ArrayOrChain = Chain | ReadonlyArray +export type ArrayOrChain = Chain | ReadonlyArray // used to mappe type union below // otherwise mixed types in chains, would not be carried over correctly type Distribute = U extends any ? { type: U } : never @@ -42,8 +46,6 @@ type FlattenChain = Distribute extends { type: ArrayOrChain } ? Chain : Chain -type ArrayOrAsyncChain = Chain | ReadonlyArray | AsyncChainBase - export function objChain( value: Record | ObjectChain | Chain, ): ObjectChain> @@ -695,1070 +697,3 @@ export class Chain implements Iterable { return new Chain(zip(this.val, withArray)) } } - -abstract class AsyncChainBase implements Promise> { - private _value: Promise> | null - - protected constructor() { - this._value = null - } - - protected startCalclulation() { - this._value = this.calculate() - } - - [Symbol.toStringTag] = "AsyncChain" - - async then, TResult2 = never>( - onfulfilled?: - | ((value: Chain) => TResult1 | PromiseLike) - | null - | undefined, - onrejected?: - | ((reason: any) => TResult2 | PromiseLike) - | null - | undefined, - ): Promise { - return await this.calculate().then(onfulfilled, onrejected) - } - - async catch( - onrejected?: - | ((reason: any) => TResult | PromiseLike) - | null - | undefined, - ): Promise | TResult> { - return this.then((it) => it, onrejected) - } - - finally(onfinally?: (() => void) | null | undefined): Promise> { - return this.then( - (it) => it, - (it) => it, - ).finally(onfinally) - } - - abstract calculate(): Promise> - - async await(): Promise> { - return (await this._value) ?? (await this.calculate()) - } - - async value(): Promise> { - return (await this.await()).value() - } - - associateBy( - selector: (el: T) => S, - ): ObjectChain { - const entries = this.map((m) => { - return [selector(m), m] as const - }) - return objChain(entries) - } - - associateWith( - selector: (key: string) => U, - ): IfString> { - const entries = this.map((el) => { - return [ - el as unknown as string, - selector(el as unknown as string), - ] as const - }) - return objChain(entries) as IfString> - } - - // TODO(mr) - chunk(size: number): AsyncChainBase { - return new ChunkingAsyncChain(this, size) - } - - concat(other: Iterable | AsyncChainBase): AsyncChainBase { - return new ConcatenatingAsyncChain(this, other) - } - - distinct(): AsyncChainBase { - return this.distinctBy((it) => it) - } - - distinctBy(selector: (el: T) => D): AsyncChainBase { - return new DistinctAsyncChain(this, selector) - } - - drop(num: number): AsyncChainBase { - return new SliceAsyncChain(this, num) - } - - dropLast(num: number): AsyncChainBase { - return new SliceAsyncChain(this, 0, -num) - } - - take(num: number): AsyncChainBase { - return new SliceAsyncChain(this, 0, num) - } - - takeLast(num: number): AsyncChainBase { - return new SliceAsyncChain(this, -num) - } - - dropLastWhile(predicate: (el: T) => boolean): AsyncChainBase { - // TODO(mr) efficiency lol - return new DropWhileAsyncChain(this.reverse(), predicate).reverse() - } - - dropWhile(predicate: (el: T) => boolean): AsyncChainBase { - return new DropWhileAsyncChain(this, predicate) - } - - async every( - predicate: (el: T, index: number, array: ReadonlyArray) => boolean, - ): Promise - async every( - predicate: (el: T, index: number, array: ReadonlyArray) => boolean, - ): Promise { - return (await this.await()).every(predicate) - } - - async some( - predicate: (value: T, index: number, array: ReadonlyArray) => boolean, - ): Promise { - return (await this.await()).some(predicate) - } - - async first(): Promise { - return (await this.firstOrNull()) ?? error("No first element found") - } - - async firstOrNull(): Promise { - return (await this.await()).firstOrNull() - } - - filter( - filter: (el: T, index: number, array: ReadonlyArray) => el is S, - ): AsyncChainBase - filter( - filter: (el: T, index: number, array: ReadonlyArray) => Promise, - ): AsyncChainBase - filter( - filter: (el: T, index: number, array: ReadonlyArray) => Promise, - ): AsyncChainBase - filter( - filter: ( - el: T, - index: number, - array: ReadonlyArray, - ) => Promise | boolean, - ): AsyncChainBase - filter( - filter: ( - el: T, - index: number, - array: ReadonlyArray, - ) => Promise | boolean, - ): AsyncChainBase { - return new FilterAsyncChain(this, filter) - } - - filterNotNullish(): AsyncChainBase> { - return this.filter((it) => it != null) as AsyncChainBase> - } - - async find( - predicate: (el: T, index: number, array: ReadonlyArray) => el is S, - ): Promise - async find( - predicate: (el: T, index: number, array: ReadonlyArray) => boolean, - ): Promise - async find( - predicate: (el: T, index: number, array: ReadonlyArray) => boolean, - ): Promise { - return (await this.await()).find(predicate) - } - - async findIndex( - predicate: (el: T, index: number, array: ReadonlyArray) => boolean, - ): Promise { - return (await this.await()).findIndex(predicate) - } - - async findLast(predicate: (el: T) => boolean): Promise { - return (await this.await()).findLast(predicate) - } - - async findLastIndex( - predicate: (el: T) => boolean, - ): Promise { - return (await this.await()).findLastIndex(predicate) - } - - async findSingle(predicate: (el: T) => boolean): Promise { - return (await this.await()).findSingle(predicate) - } - - async firstNotNullishOf( - selector: (item: T) => O | undefined | null, - ): Promise | undefined> { - return (await this.await()).firstNotNullishOf(selector) - } - - flatten(): FlattenAsyncChain { - return new FlattenAsyncChain(this) - } - - flatMap( - transformer: (el: T, index: number, array: ReadonlyArray) => Chain, - ): FlattenAsyncChain - flatMap( - transformer: ( - el: T, - index: number, - array: ReadonlyArray, - ) => ReadonlyArray, - ): FlattenAsyncChain - flatMap( - transformer: (el: T, index: number, array: ReadonlyArray) => Set, - ): FlattenAsyncChain - flatMap( - transformer: ( - el: T, - index: number, - array: ReadonlyArray, - ) => AsyncChainBase, - ): FlattenAsyncChain - flatMap( - transformer: ( - el: T, - index: number, - array: ReadonlyArray, - ) => Chain | ReadonlyArray | Set | AsyncChainBase, - ): FlattenAsyncChain - flatMap( - transformer: ( - el: T, - index: number, - array: ReadonlyArray, - ) => Chain | ReadonlyArray | Set | AsyncChainBase, - ): FlattenAsyncChain { - const mapped = this.map(transformer) - // @ts-expect-error trust me bro - return mapped.flatten() - } - - async forEach( - callback: ( - el: T, - index: number, - array: ReadonlyArray, - ) => void | Promise, - ): Promise { - await this.map(callback).value() - } - - groupBy( - selector: (el: T) => K, - ): ObjectChain> { - const record = {} as Record> - for (const el of this.val) { - const key = selector(el) - if (record[key] != null) { - record[key]?.push(el) - } else { - record[key] = [el] - } - } - return new ObjectChain(record) - } - - async indexOf( - searchElement: T, - fromIndex?: number, - ): Promise { - return (await this.await()).indexOf(searchElement, fromIndex) - } - - async lastIndexOf( - searchElement: T, - fromIndex?: number, - ): Promise { - return (await this.await()).lastIndexOf(searchElement, fromIndex) - } - - async includes(el: T, fromIndex?: number): Promise { - return (await this.await()).includes(el, fromIndex) - } - - intersect( - ...arrays: Array | AsyncChainBase> - ): AsyncChainBase { - return new IntersectionAsyncChain(this, arrays) - } - - async join(separator?: string): Promise { - return (await this.await()).join(separator) - } - - async mapJoin( - separator: string, - transformer: (el: T) => string | Promise, - ): Promise { - return this.reduce(async (acc, it, idx) => { - const mapped = transformer(it) - return acc + (idx > 0 ? separator : "") + mapped - }, "") - } - - async last(): Promise { - return (await this.lastOrNull()) ?? error("No last element found") - } - - async lastOrNull(): Promise { - return (await this.await()).lastOrNull() - } - - map( - transformer: ( - el: T, - index: number, - array: ReadonlyArray, - ) => U | Promise, - ): AsyncChainBase { - return new MappingAsyncChain(this, transformer) - } - - mapNotNullish(transformer: (el: T) => O): AsyncChainBase> { - return this.map(transformer).filterNotNullish() - } - - async maxBy(selector: (el: T) => string): Promise - async maxBy(selector: (el: T) => bigint): Promise - async maxBy(selector: (el: T) => number): Promise - async maxBy(selector: (el: T) => Date): Promise - async maxBy( - selector: (el: T) => Date | number | bigint | string, - ): Promise { - // this is save because maxBy is overloaded too - return (await this.await()).maxBy(selector as (el: T) => string) - } - - async maxOf(selector: (el: T) => bigint): Promise - async maxOf(selector: (el: T) => number): Promise - async maxOf(selector: (el: T) => string): Promise - async maxOf(selector: (el: T) => Date): Promise - async maxOf( - selector: (el: T) => bigint | number | string | Date, - ): Promise { - return (await this.await()).maxOf( - selector as (el: T) => bigint | number | string | Date, - ) - } - - async maxWith(comparator: (a: T, b: T) => number): Promise { - return (await this.await()).maxWith(comparator) - } - - async minBy(selector: (el: T) => number): Promise - async minBy(selector: (el: T) => string): Promise - async minBy(selector: (el: T) => bigint): Promise - async minBy(selector: (el: T) => Date): Promise - async minBy( - selector: (el: T) => Date | number | bigint | string, - ): Promise { - return (await this.await()).minBy(selector as (el: T) => string) - } - - async minOf(selector: (el: T) => bigint): Promise - async minOf(selector: (el: T) => number): Promise - async minOf(selector: (el: T) => string): Promise - async minOf(selector: (el: T) => Date): Promise - async minOf( - selector: (el: T) => bigint | number | string | Date, - ): Promise { - return (await this.await()).minOf( - selector as (el: T) => bigint | number | string | Date, - ) - } - - async minWith(comparator: (a: T, b: T) => number): Promise { - return (await this.await()).minWith(comparator) - } - - partition( - predicate: (el: T) => Promise | boolean, - ): [AsyncChainBase, AsyncChainBase] { - return [this.filter(predicate), this.filter((el) => !predicate(el))] - } - - permutations(): AsyncChainBase> { - return new PermutationsAsyncChain(this) - } - - async reduce( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => T, - ): Promise - async reduce( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => Promise, - ): Promise - async reduce( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => Promise | T, - ): Promise - async reduce( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => T, - initial: T, - ): Promise - async reduce( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => Promise, - initial: T, - ): Promise - async reduce( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => Promise | T, - initial: T, - ): Promise - async reduce( - reducer: ( - accumulator: O, - current: T, - index: number, - array: ReadonlyArray, - ) => O, - initial: O, - ): Promise - async reduce( - reducer: ( - accumulator: O, - current: T, - index: number, - array: ReadonlyArray, - ) => Promise, - initial: O, - ): Promise - async reduce( - reducer: ( - accumulator: O, - current: T, - index: number, - array: ReadonlyArray, - ) => O | Promise, - initial: O, - ): Promise - async reduce( - reducer: ( - accumulator: O, - current: T, - index: number, - array: ReadonlyArray, - ) => O | Promise, - initial?: O, - ): Promise - async reduce( - reducer: ( - accumulator: O, - current: T, - index: number, - array: ReadonlyArray, - ) => O | Promise, - initial?: O, - ): Promise { - let ret: O = initial != null ? initial : ((await this.firstOrNull()) as O) - - const values = await this.value() - for (let i = initial != null ? 0 : 1; i < values.length; i++) { - ret = await reducer(ret as O, values[i], i, values) - } - return ret - } - - async reduceRight( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => T, - ): Promise - async reduceRight( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => Promise, - ): Promise - async reduceRight( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => Promise | T, - ): Promise - async reduceRight( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => T, - initial: T, - ): Promise - async reduceRight( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => Promise, - initial: T, - ): Promise - async reduceRight( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => Promise | T, - initial: T, - ): Promise - async reduceRight( - reducer: ( - accumulator: O, - current: T, - index: number, - array: ReadonlyArray, - ) => O, - initial: O, - ): Promise - async reduceRight( - reducer: ( - accumulator: O, - current: T, - index: number, - array: ReadonlyArray, - ) => Promise, - initial: O, - ): Promise - async reduceRight( - reducer: ( - accumulator: O, - current: T, - index: number, - array: ReadonlyArray, - ) => O | Promise, - initial: O, - ): Promise - async reduceRight( - reducer: ( - accumulator: O, - current: T, - index: number, - array: ReadonlyArray, - ) => O | Promise, - initial?: O, - ): Promise - async reduceRight( - reducer: ( - accumulator: O, - current: T, - index: number, - array: ReadonlyArray, - ) => O | Promise, - initial?: O, - ): Promise { - return await this.reverse().reduce(reducer, initial) - } - - reverse(): AsyncChainBase { - return new ReversingAsyncChain(this) - } - - runningReduce( - reducer: (accumulator: O, current: T) => O, - initialValue: O, - ): AsyncChainBase { - return new RunningReduceAsyncChain(this, reducer, initialValue) - } - - async sample(): Promise { - return (await this.await()).sample() - } - - slice(start?: number, end?: number): AsyncChainBase { - return new SliceAsyncChain(this, start, end) - } - - slidingWindows( - size: number, - { step, partial }: { step: number; partial: boolean }, - ): AsyncChainBase> { - return new SlidingWindowAsyncChain(this, size, { step, partial }) - } - - sort(compareFn?: (a: T, b: T) => number): AsyncChainBase { - return new SortingAsyncChain(this, compareFn) - } - - sortBy(selector: (el: T) => Date): AsyncChainBase - sortBy(selector: (el: T) => Promise): AsyncChainBase - sortBy(selector: (el: T) => Promise | Date): AsyncChainBase - sortBy(selector: (el: T) => bigint): AsyncChainBase - sortBy(selector: (el: T) => Promise): AsyncChainBase - sortBy(selector: (el: T) => Promise | bigint): AsyncChainBase - sortBy(selector: (el: T) => string): AsyncChainBase - sortBy(selector: (el: T) => Promise): AsyncChainBase - sortBy(selector: (el: T) => Promise | string): AsyncChainBase - sortBy(selector: (el: T) => number): AsyncChainBase - sortBy(selector: (el: T) => Promise): AsyncChainBase - sortBy(selector: (el: T) => Promise | number): AsyncChainBase - sortBy( - selector: (el: T) => Date | bigint | string | number, - ): AsyncChainBase - sortBy( - selector: (el: T) => Promise, - ): AsyncChainBase - sortBy( - selector: ( - el: T, - ) => - | Promise - | Date - | bigint - | string - | number, - ): AsyncChainBase - sortBy( - selector: ( - el: T, - ) => - | Promise - | Date - | bigint - | string - | number, - ): AsyncChainBase { - return new SortByAsyncChain(this, selector) - } - - async sumOf(selector: (el: T) => Promise | number): Promise { - return (await this.map(selector).await()).sumOf((it) => it) - } - - takeLastWhile(predicate: (el: T) => boolean): AsyncChainBase { - // TODO(mr) efficiency lol - return new TakeWhileAsyncChain(this.reverse(), predicate).reverse() - } - - takeWhile(predicate: (el: T) => boolean): AsyncChainBase { - return new TakeWhileAsyncChain(this, predicate) - } - - union(...arrays: (readonly T[] | AsyncChainBase)[]): AsyncChainBase { - return new UnionAsyncChain(this, arrays) - } - - unzip(): PairSplit { - const [left, right] = unzip(this.val as unknown as ReadonlyArray<[T, T]>) - return [new Chain(left), new Chain(right)] as PairSplit - } - - withoutAll(values: readonly T[]): Chain { - const ret = withoutAll(this.val, values) - return new Chain(ret) - } - - zip(withArray: readonly U[] | AsyncChainBase): AsyncChainBase<[T, U]> { - return new ZippingAsyncChain(this, withArray) - } -} - -export class DistinctAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private selector: (el: T) => D, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - return (await this.val.await()).distinctBy(this.selector) - } -} - -export class SliceAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private start?: number, - private end?: number, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - return (await this.val.await()).slice(this.start, this.end) - } -} - -export class FilterAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private predicate: ( - el: T, - index: number, - array: ReadonlyArray, - ) => Promise | boolean, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - const current = await this.val.await() - const mask = await asyncChain(current).map(this.predicate).value() - - return current.filter((_, index) => mask[index]) - } -} - -type FlattenAsyncType = Distribute extends { - type: ArrayOrAsyncChain -} - ? U - : T - -export class FlattenAsyncChain extends AsyncChainBase> { - constructor(private val: AsyncChainBase) { - super() - this.startCalclulation() - } - - async calculate(): Promise>> { - return (await this.val.await()).flatten() as Chain> - } -} - -export class MappingAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private transformer: ( - el: T, - index: number, - array: ReadonlyArray, - ) => U | Promise, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - return asyncChain( - (await this.val.await()).map( - async (el, index, array) => - await this.transformer(await el, index, array), - ), - ).await() - } -} - -export class SortByAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private selector: ( - a: T, - ) => - | Promise - | Date - | bigint - | string - | number, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - const values = await this.val - .map(async (el) => [el, await this.selector(el)] as const) - .await() - return values.sortBy((it) => it[1]).map((it) => it[0]) - } -} - -export class SortingAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private compareFn?: (a: T, b: T) => number, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - return (await this.val.await()).sort(this.compareFn) - } -} - -export class ReversingAsyncChain extends AsyncChainBase { - constructor(private val: AsyncChainBase) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - return (await this.val.await()).reverse() - } -} - -export class PermutationsAsyncChain extends AsyncChainBase< - ReadonlyArray -> { - constructor(private val: AsyncChainBase) { - super() - this.startCalclulation() - } - - async calculate(): Promise>> { - return (await this.val.await()).permutations() - } -} - -export class TakeWhileAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private predicate: ( - el: T, - index: number, - array: ReadonlyArray, - ) => Promise | boolean, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - const values = await this.val.value() - const ret: Array = [] - for (let i = 0; i < values.length; i++) { - if (await this.predicate(values[i], i, values)) { - ret.push(values[i]) - } else { - break - } - } - - return new Chain(ret) - } -} - -export class DropWhileAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private predicate: ( - el: T, - index: number, - array: ReadonlyArray, - ) => Promise | boolean, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - const values = await this.val.value() - const ret: Array = [] - for (let i = 0; i < values.length; i++) { - if (!(await this.predicate(values[i], i, values))) { - break - } else { - ret.push(values[i]) - } - } - - return new Chain(ret) - } -} - -export class ZippingAsyncChain extends AsyncChainBase<[T, U]> { - constructor( - private val: AsyncChainBase, - private withArray: readonly U[] | AsyncChainBase, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - const other = - this.withArray instanceof AsyncChainBase - ? await this.withArray.value() - : this.withArray - return (await this.val.await()).zip(other) - } -} - -export class UnionAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private withArrays: ReadonlyArray>, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - const other = await Promise.all( - this.withArrays.map(async (it) => - it instanceof AsyncChainBase ? await it.value() : it, - ), - ) - - return (await this.val.await()).union(...other) - } -} - -export class RunningReduceAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private reducer: (accumulator: O, current: T) => Promise | O, - private initialValue: O, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - const ret = await this.val.reduce( - async (acc, it) => { - const elem = acc[acc.length - 1] - const next = await this.reducer(elem, it) - return [...acc, next] - }, - [this.initialValue], - ) - - return chain(ret) - } -} - -export class ConcatenatingAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private other: AsyncChainBase | Iterable, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - const adding = - this.other instanceof AsyncChainBase - ? await this.other.await() - : this.other - return (await this.val.await()).concat(adding) - } -} - -export class ChunkingAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private size: number, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - const chunks = chunk(await this.val.value(), this.size) - return new AsyncChain(chunks) - } -} - -export class IntersectionAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private withArrays: ReadonlyArray>, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - const others = await Promise.all( - this.withArrays.map(async (it) => - it instanceof AsyncChainBase ? await it.value() : it, - ), - ) - const ret = intersect(await this.val.value(), ...others) - return chain(ret) - } -} - -export class SlidingWindowAsyncChain extends AsyncChainBase< - ReadonlyArray -> { - constructor( - private val: AsyncChainBase, - private size: number, - private options: { - step?: number - partial?: boolean - }, - ) { - super() - } - - async calculate(): Promise>> { - const ret = slidingWindows(await this.val.value(), this.size, this.options) - return new Chain(ret) - } -} - -export function asyncChain(val: Chain | T>): AsyncChain -export function asyncChain(val: ReadonlyArray | T>): AsyncChain -export function asyncChain( - val: ReadonlyArray | T> | Chain | T>, -): AsyncChain { - if (val instanceof Chain) return new AsyncChain(val.value()) - return new AsyncChain(val) -} - -export class AsyncChain extends AsyncChainBase { - constructor(private val: ReadonlyArray | T>) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - return new Chain(await Promise.all(this.val)) - } -} diff --git a/src/collections/async/AsyncChain.ts b/src/collections/async/AsyncChain.ts new file mode 100644 index 0000000..eaddb6f --- /dev/null +++ b/src/collections/async/AsyncChain.ts @@ -0,0 +1,27 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { Chain } from "../../collections" + +export type ArrayOrAsyncChain = + | Chain + | ReadonlyArray + | AsyncChainBase + +export class AsyncChain extends AsyncChainBase { + constructor(private val: ReadonlyArray | T>) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + return new Chain(await Promise.all(this.val)) + } +} + +export function asyncChain(val: Chain | T>): AsyncChain +export function asyncChain(val: ReadonlyArray | T>): AsyncChain +export function asyncChain( + val: ReadonlyArray | T> | Chain | T>, +): AsyncChain { + if (val instanceof Chain) return new AsyncChain(val.value()) + return new AsyncChain(val) +} diff --git a/src/collections/async/AsyncChainBase.ts b/src/collections/async/AsyncChainBase.ts new file mode 100644 index 0000000..a82ada8 --- /dev/null +++ b/src/collections/async/AsyncChainBase.ts @@ -0,0 +1,746 @@ +import { error } from "../../error" +import { + Chain, + IfString, + objChain, + ObjectChain, + PairSplit, +} from "../../collections" +import { TakeWhileAsyncChain } from "./TakeWhileAsyncChain" +import { DropWhileAsyncChain } from "./DropWhileAsyncChain" +import { DistinctAsyncChain } from "./DistinctAsyncChain" +import { SliceAsyncChain } from "./SliceAsyncChain" +import { FilterAsyncChain } from "./FilterAsyncChain" +import { FlattenAsyncChain } from "./FlattenAsyncChain" +import { MappingAsyncChain } from "./MappingAsyncChain" +import { SortByAsyncChain } from "./SortByAsyncChain" +import { ZippingAsyncChain } from "./ZippingAsyncChain" +import { UnionAsyncChain } from "./UnionAsyncChain" +import { RunningReduceAsyncChain } from "./RunningReduceAsyncChain" +import { ConcatenatingAsyncChain } from "./ConcatenatingAsyncChain" +import { ChunkingAsyncChain } from "./ChunkingAsyncChain" +import { IntersectionAsyncChain } from "./IntersectionAsyncChain" +import { SlidingWindowAsyncChain } from "./SlidingWindowAsyncChain" +import { PermutationsAsyncChain } from "./PermutationsAsyncChain" +import { ReversingAsyncChain } from "./ReversingAsyncChain" +import { SortingAsyncChain } from "./SortingAsyncChain" + +export abstract class AsyncChainBase implements Promise> { + private _value: Promise> | null + + protected constructor() { + this._value = null + } + + protected startCalclulation() { + this._value = this.calculate() + } + + [Symbol.toStringTag] = "AsyncChain" + + async then, TResult2 = never>( + onfulfilled?: + | ((value: Chain) => TResult1 | PromiseLike) + | null + | undefined, + onrejected?: + | ((reason: any) => TResult2 | PromiseLike) + | null + | undefined, + ): Promise { + return await this.calculate().then(onfulfilled, onrejected) + } + + async catch( + onrejected?: + | ((reason: any) => TResult | PromiseLike) + | null + | undefined, + ): Promise | TResult> { + return this.then((it) => it, onrejected) + } + + finally(onfinally?: (() => void) | null | undefined): Promise> { + return this.then( + (it) => it, + (it) => it, + ).finally(onfinally) + } + + abstract calculate(): Promise> + + async await(): Promise> { + return (await this._value) ?? (await this.calculate()) + } + + async value(): Promise> { + return (await this.await()).value() + } + + async writableValue(): Promise> { + return (await this.await()).writableValue() + } + + associateBy( + selector: (el: T) => S, + ): ObjectChain { + const entries = this.map((m) => { + return [selector(m), m] as const + }) + // TODO(mr) + // @ts-expect-error + return objChain(entries) + } + + associateWith( + selector: (key: string) => U, + ): IfString> { + const entries = this.map((el) => { + return [ + el as unknown as string, + selector(el as unknown as string), + ] as const + }) + return objChain(entries) as IfString> + } + + // TODO(mr) + chunk(size: number): AsyncChainBase { + return new ChunkingAsyncChain(this, size) + } + + concat(other: Iterable | AsyncChainBase): AsyncChainBase { + return new ConcatenatingAsyncChain(this, other) + } + + distinct(): AsyncChainBase { + return this.distinctBy((it) => it) + } + + distinctBy(selector: (el: T) => D): AsyncChainBase { + return new DistinctAsyncChain(this, selector) + } + + drop(num: number): AsyncChainBase { + return new SliceAsyncChain(this, num) + } + + dropLast(num: number): AsyncChainBase { + return new SliceAsyncChain(this, 0, -num) + } + + take(num: number): AsyncChainBase { + return new SliceAsyncChain(this, 0, num) + } + + takeLast(num: number): AsyncChainBase { + return new SliceAsyncChain(this, -num) + } + + dropLastWhile(predicate: (el: T) => boolean): AsyncChainBase { + // TODO(mr) efficiency lol + return new DropWhileAsyncChain(this.reverse(), predicate).reverse() + } + + dropWhile(predicate: (el: T) => boolean): AsyncChainBase { + return new DropWhileAsyncChain(this, predicate) + } + + async every( + predicate: (el: T, index: number, array: ReadonlyArray) => boolean, + ): Promise + async every( + predicate: (el: T, index: number, array: ReadonlyArray) => boolean, + ): Promise { + return (await this.await()).every(predicate) + } + + async some( + predicate: (value: T, index: number, array: ReadonlyArray) => boolean, + ): Promise { + return (await this.await()).some(predicate) + } + + async first(): Promise { + return (await this.firstOrNull()) ?? error("No first element found") + } + + async firstOrNull(): Promise { + return (await this.await()).firstOrNull() + } + + filter( + filter: (el: T, index: number, array: ReadonlyArray) => el is S, + ): AsyncChainBase + filter( + filter: (el: T, index: number, array: ReadonlyArray) => Promise, + ): AsyncChainBase + filter( + filter: (el: T, index: number, array: ReadonlyArray) => Promise, + ): AsyncChainBase + filter( + filter: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, + ): AsyncChainBase + filter( + filter: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, + ): AsyncChainBase { + return new FilterAsyncChain(this, filter) + } + + filterNotNullish(): AsyncChainBase> { + return this.filter((it) => it != null) as AsyncChainBase> + } + + async find( + predicate: (el: T, index: number, array: ReadonlyArray) => el is S, + ): Promise + async find( + predicate: (el: T, index: number, array: ReadonlyArray) => boolean, + ): Promise + async find( + predicate: (el: T, index: number, array: ReadonlyArray) => boolean, + ): Promise { + return (await this.await()).find(predicate) + } + + async findIndex( + predicate: (el: T, index: number, array: ReadonlyArray) => boolean, + ): Promise { + return (await this.await()).findIndex(predicate) + } + + async findLast(predicate: (el: T) => boolean): Promise { + return (await this.await()).findLast(predicate) + } + + async findLastIndex( + predicate: (el: T) => boolean, + ): Promise { + return (await this.await()).findLastIndex(predicate) + } + + async findSingle(predicate: (el: T) => boolean): Promise { + return (await this.await()).findSingle(predicate) + } + + async firstNotNullishOf( + selector: (item: T) => O | undefined | null, + ): Promise | undefined> { + return (await this.await()).firstNotNullishOf(selector) + } + + flatten(): FlattenAsyncChain { + return new FlattenAsyncChain(this) + } + + flatMap( + transformer: (el: T, index: number, array: ReadonlyArray) => Chain, + ): FlattenAsyncChain + flatMap( + transformer: ( + el: T, + index: number, + array: ReadonlyArray, + ) => ReadonlyArray, + ): FlattenAsyncChain + flatMap( + transformer: (el: T, index: number, array: ReadonlyArray) => Set, + ): FlattenAsyncChain + flatMap( + transformer: ( + el: T, + index: number, + array: ReadonlyArray, + ) => AsyncChainBase, + ): FlattenAsyncChain + flatMap( + transformer: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Chain | ReadonlyArray | Set | AsyncChainBase, + ): FlattenAsyncChain + flatMap( + transformer: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Chain | ReadonlyArray | Set | AsyncChainBase, + ): FlattenAsyncChain { + const mapped = this.map(transformer) + // @ts-expect-error trust me bro + return mapped.flatten() + } + + async forEach( + callback: ( + el: T, + index: number, + array: ReadonlyArray, + ) => void | Promise, + ): Promise { + await this.map(callback).value() + } + + groupBy( + selector: (el: T) => K, + ): ObjectChain> { + const record = {} as Record> + // TODO(mr) + // @ts-expect-error + for (const el of this.val) { + const key = selector(el) + if (record[key] != null) { + record[key]?.push(el) + } else { + record[key] = [el] + } + } + return new ObjectChain(record) + } + + async indexOf( + searchElement: T, + fromIndex?: number, + ): Promise { + return (await this.await()).indexOf(searchElement, fromIndex) + } + + async lastIndexOf( + searchElement: T, + fromIndex?: number, + ): Promise { + return (await this.await()).lastIndexOf(searchElement, fromIndex) + } + + async includes(el: T, fromIndex?: number): Promise { + return (await this.await()).includes(el, fromIndex) + } + + intersect( + ...arrays: Array | AsyncChainBase> + ): AsyncChainBase { + return new IntersectionAsyncChain(this, arrays) + } + + async join(separator?: string): Promise { + return (await this.await()).join(separator) + } + + async mapJoin( + separator: string, + transformer: (el: T) => string | Promise, + ): Promise { + return this.reduce(async (acc, it, idx) => { + const mapped = transformer(it) + return acc + (idx > 0 ? separator : "") + mapped + }, "") + } + + async last(): Promise { + return (await this.lastOrNull()) ?? error("No last element found") + } + + async lastOrNull(): Promise { + return (await this.await()).lastOrNull() + } + + map( + transformer: ( + el: T, + index: number, + array: ReadonlyArray, + ) => U | Promise, + ): AsyncChainBase { + return new MappingAsyncChain(this, transformer) + } + + mapNotNullish(transformer: (el: T) => O): AsyncChainBase> { + return this.map(transformer).filterNotNullish() + } + + async maxBy(selector: (el: T) => string): Promise + async maxBy(selector: (el: T) => bigint): Promise + async maxBy(selector: (el: T) => number): Promise + async maxBy(selector: (el: T) => Date): Promise + async maxBy( + selector: (el: T) => Date | number | bigint | string, + ): Promise { + // this is save because maxBy is overloaded too + return (await this.await()).maxBy(selector as (el: T) => string) + } + + async maxOf(selector: (el: T) => bigint): Promise + async maxOf(selector: (el: T) => number): Promise + async maxOf(selector: (el: T) => string): Promise + async maxOf(selector: (el: T) => Date): Promise + async maxOf( + selector: (el: T) => bigint | number | string | Date, + ): Promise { + return (await this.await()).maxOf( + // TODO(mr) + // @ts-expect-error + selector as (el: T) => bigint | number | string | Date, + ) + } + + async maxWith(comparator: (a: T, b: T) => number): Promise { + return (await this.await()).maxWith(comparator) + } + + async minBy(selector: (el: T) => number): Promise + async minBy(selector: (el: T) => string): Promise + async minBy(selector: (el: T) => bigint): Promise + async minBy(selector: (el: T) => Date): Promise + async minBy( + selector: (el: T) => Date | number | bigint | string, + ): Promise { + return (await this.await()).minBy(selector as (el: T) => string) + } + + async minOf(selector: (el: T) => bigint): Promise + async minOf(selector: (el: T) => number): Promise + async minOf(selector: (el: T) => string): Promise + async minOf(selector: (el: T) => Date): Promise + async minOf( + selector: (el: T) => bigint | number | string | Date, + ): Promise { + return (await this.await()).minOf( + // TODO(mr) + // @ts-expect-error + selector as (el: T) => bigint | number | string | Date, + ) + } + + async minWith(comparator: (a: T, b: T) => number): Promise { + return (await this.await()).minWith(comparator) + } + + partition( + predicate: (el: T) => Promise | boolean, + ): [AsyncChainBase, AsyncChainBase] { + return [this.filter(predicate), this.filter((el) => !predicate(el))] + } + + permutations(): AsyncChainBase> { + return new PermutationsAsyncChain(this) + } + + async reduce( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => T, + ): Promise + async reduce( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise, + ): Promise + async reduce( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise | T, + ): Promise + async reduce( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => T, + initial: T, + ): Promise + async reduce( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise, + initial: T, + ): Promise + async reduce( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise | T, + initial: T, + ): Promise + async reduce( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O, + initial: O, + ): Promise + async reduce( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise, + initial: O, + ): Promise + async reduce( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O | Promise, + initial: O, + ): Promise + async reduce( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O | Promise, + initial?: O, + ): Promise + async reduce( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O | Promise, + initial?: O, + ): Promise { + let ret: O = initial != null ? initial : ((await this.firstOrNull()) as O) + + const values = await this.value() + for (let i = initial != null ? 0 : 1; i < values.length; i++) { + ret = await reducer(ret as O, values[i], i, values) + } + return ret + } + + async reduceRight( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => T, + ): Promise + async reduceRight( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise, + ): Promise + async reduceRight( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise | T, + ): Promise + async reduceRight( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => T, + initial: T, + ): Promise + async reduceRight( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise, + initial: T, + ): Promise + async reduceRight( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise | T, + initial: T, + ): Promise + async reduceRight( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O, + initial: O, + ): Promise + async reduceRight( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise, + initial: O, + ): Promise + async reduceRight( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O | Promise, + initial: O, + ): Promise + async reduceRight( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O | Promise, + initial?: O, + ): Promise + async reduceRight( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O | Promise, + initial?: O, + ): Promise { + return await this.reverse().reduce(reducer, initial) + } + + reverse(): AsyncChainBase { + return new ReversingAsyncChain(this) + } + + runningReduce( + reducer: (accumulator: O, current: T) => O, + initialValue: O, + ): AsyncChainBase { + return new RunningReduceAsyncChain(this, reducer, initialValue) + } + + async sample(): Promise { + return (await this.await()).sample() + } + + slice(start?: number, end?: number): AsyncChainBase { + return new SliceAsyncChain(this, start, end) + } + + slidingWindows( + size: number, + { step, partial }: { step: number; partial: boolean }, + ): AsyncChainBase> { + return new SlidingWindowAsyncChain(this, size, { step, partial }) + } + + sort(compareFn?: (a: T, b: T) => number): AsyncChainBase { + return new SortingAsyncChain(this, compareFn) + } + + sortBy(selector: (el: T) => Date): AsyncChainBase + sortBy(selector: (el: T) => Promise): AsyncChainBase + sortBy(selector: (el: T) => Promise | Date): AsyncChainBase + sortBy(selector: (el: T) => bigint): AsyncChainBase + sortBy(selector: (el: T) => Promise): AsyncChainBase + sortBy(selector: (el: T) => Promise | bigint): AsyncChainBase + sortBy(selector: (el: T) => string): AsyncChainBase + sortBy(selector: (el: T) => Promise): AsyncChainBase + sortBy(selector: (el: T) => Promise | string): AsyncChainBase + sortBy(selector: (el: T) => number): AsyncChainBase + sortBy(selector: (el: T) => Promise): AsyncChainBase + sortBy(selector: (el: T) => Promise | number): AsyncChainBase + sortBy( + selector: (el: T) => Date | bigint | string | number, + ): AsyncChainBase + sortBy( + selector: (el: T) => Promise, + ): AsyncChainBase + sortBy( + selector: ( + el: T, + ) => + | Promise + | Date + | bigint + | string + | number, + ): AsyncChainBase + sortBy( + selector: ( + el: T, + ) => + | Promise + | Date + | bigint + | string + | number, + ): AsyncChainBase { + return new SortByAsyncChain(this, selector) + } + + async sumOf(selector: (el: T) => Promise | number): Promise { + return (await this.map(selector).await()).sumOf((it) => it) + } + + takeLastWhile(predicate: (el: T) => boolean): AsyncChainBase { + // TODO(mr) efficiency lol + return new TakeWhileAsyncChain(this.reverse(), predicate).reverse() + } + + takeWhile(predicate: (el: T) => boolean): AsyncChainBase { + return new TakeWhileAsyncChain(this, predicate) + } + + union(...arrays: (readonly T[] | AsyncChainBase)[]): AsyncChainBase { + return new UnionAsyncChain(this, arrays) + } + + unzip(): PairSplit { + // TODO(mr) + // @ts-expect-error + const [left, right] = unzip(this.val as unknown as ReadonlyArray<[T, T]>) + return [new Chain(left), new Chain(right)] as PairSplit + } + + withoutAll(values: readonly T[]): Chain { + // TODO(mr) + // @ts-expect-error + const ret = withoutAll(this.val, values) + return new Chain(ret) + } + + zip(withArray: readonly U[] | AsyncChainBase): AsyncChainBase<[T, U]> { + return new ZippingAsyncChain(this, withArray) + } +} diff --git a/src/collections/async/AsyncObjectChain.ts b/src/collections/async/AsyncObjectChain.ts new file mode 100644 index 0000000..4003711 --- /dev/null +++ b/src/collections/async/AsyncObjectChain.ts @@ -0,0 +1,114 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { ObjectChain } from "../../collections" +import { ValuesAsyncChain } from "./ValuesAsyncChain" +import { KeysAsyncChain } from "./KeysAsyncChain" +import { EntriesAsyncChain } from "./EntriesAsyncChain" +import { MappingKeysAsyncObjectChain } from "./MappingKeysAsyncObjectChain" +import { MappingValuesAsyncObjectChain } from "./MappingValuesAsyncObjectChain" +import { MappingEntriesAsyncObjectChain } from "./MappingEntriesAsyncObjectChain" +import { FilteringAsyncObjectChain } from "./FilteringAsyncObjectChain" + +export abstract class AsyncObjectChain< + K extends string | number | symbol, + T, + Rec extends Partial> = Record, +> implements Promise> +{ + private _value: Promise> | null + + protected startCalculation() { + this._value = this.calculate() + } + + [Symbol.toStringTag] = "AsyncObjectChain" + + constructor() { + this._value = null + } + + abstract calculate(): Promise> + + async await(): Promise> { + return (await this._value) ?? (await this.calculate()) + } + + async value(): Promise { + return (await this.await()).value() + } + + async then, TResult2 = never>( + onfulfilled?: + | ((value: ObjectChain) => TResult1 | PromiseLike) + | null + | undefined, + onrejected?: + | ((reason: any) => TResult2 | PromiseLike) + | null + | undefined, + ): Promise { + return await this.calculate().then(onfulfilled, onrejected) + } + + async catch( + onrejected?: + | ((reason: any) => TResult | PromiseLike) + | null + | undefined, + ): Promise | TResult> { + return this.then((it) => it, onrejected) + } + + finally( + onfinally?: (() => void) | null | undefined, + ): Promise> { + return this.then( + (it) => it, + (it) => it, + ).finally(onfinally) + } + + keys(): AsyncChainBase { + return new KeysAsyncChain(this) + } + + values(): AsyncChainBase { + return new ValuesAsyncChain(this) + } + + entries(): AsyncChainBase<[K, T]> { + return new EntriesAsyncChain(this) + } + + mapKeys( + transformer: (key: K) => Promise | U, + ): AsyncObjectChain { + return new MappingKeysAsyncObjectChain(this, transformer) + } + + mapValues( + transformer: (value: T) => Promise | V, + ): AsyncObjectChain { + return new MappingValuesAsyncObjectChain(this, transformer) + } + + mapEntries( + transformer: (key: K, value: T) => Promise<[U, V]> | [U, V], + ): AsyncObjectChain { + return new MappingEntriesAsyncObjectChain( + this, + transformer, + ) + } + + filterKeys(filter: (key: K) => boolean): AsyncObjectChain { + return new FilteringAsyncObjectChain(this, (k, _) => filter(k)) + } + + filterValues(filter: (value: T) => boolean): AsyncObjectChain { + return new FilteringAsyncObjectChain(this, (_, v) => filter(v)) + } + + filterEntries(filter: (key: K, value: T) => boolean): AsyncObjectChain { + return new FilteringAsyncObjectChain(this, filter) + } +} diff --git a/src/collections/async/ChunkingAsyncChain.ts b/src/collections/async/ChunkingAsyncChain.ts new file mode 100644 index 0000000..f3c74ff --- /dev/null +++ b/src/collections/async/ChunkingAsyncChain.ts @@ -0,0 +1,19 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { chunk } from "@opencreek/deno-std-collections" +import { AsyncChain } from "./AsyncChain" +import { Chain } from "../../collections" + +export class ChunkingAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private size: number, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + const chunks = chunk(await this.val.value(), this.size) + return new AsyncChain(chunks) + } +} diff --git a/src/collections/async/ConcatenatingAsyncChain.ts b/src/collections/async/ConcatenatingAsyncChain.ts new file mode 100644 index 0000000..dad486f --- /dev/null +++ b/src/collections/async/ConcatenatingAsyncChain.ts @@ -0,0 +1,20 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { Chain } from "../../collections" + +export class ConcatenatingAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private other: AsyncChainBase | Iterable, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + const adding = + this.other instanceof AsyncChainBase + ? await this.other.await() + : this.other + return (await this.val.await()).concat(adding) + } +} diff --git a/src/collections/async/DistinctAsyncChain.ts b/src/collections/async/DistinctAsyncChain.ts new file mode 100644 index 0000000..9d716f6 --- /dev/null +++ b/src/collections/async/DistinctAsyncChain.ts @@ -0,0 +1,16 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { Chain } from "../../collections" + +export class DistinctAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private selector: (el: T) => D, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + return (await this.val.await()).distinctBy(this.selector) + } +} diff --git a/src/collections/async/DropWhileAsyncChain.ts b/src/collections/async/DropWhileAsyncChain.ts new file mode 100644 index 0000000..a921bf5 --- /dev/null +++ b/src/collections/async/DropWhileAsyncChain.ts @@ -0,0 +1,30 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { Chain } from "../../collections" + +export class DropWhileAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private predicate: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + const values = await this.val.value() + const ret: Array = [] + for (let i = 0; i < values.length; i++) { + if (!(await this.predicate(values[i], i, values))) { + break + } else { + ret.push(values[i]) + } + } + + return new Chain(ret) + } +} diff --git a/src/collections/async/EntriesAsyncChain.ts b/src/collections/async/EntriesAsyncChain.ts new file mode 100644 index 0000000..5d2d60d --- /dev/null +++ b/src/collections/async/EntriesAsyncChain.ts @@ -0,0 +1,17 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { AsyncObjectChain } from "./AsyncObjectChain" +import { Chain } from "../../collections" + +export class EntriesAsyncChain< + K extends string | number | symbol, + T, + Rec extends Partial> = Record, +> extends AsyncChainBase<[K, T]> { + constructor(private val: AsyncObjectChain) { + super() + } + + async calculate(): Promise> { + return (await this.val.await()).entries() + } +} diff --git a/src/collections/async/FilterAsyncChain.ts b/src/collections/async/FilterAsyncChain.ts new file mode 100644 index 0000000..d9351eb --- /dev/null +++ b/src/collections/async/FilterAsyncChain.ts @@ -0,0 +1,24 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { Chain } from "../../collections" +import { asyncChain } from "./AsyncChain" + +export class FilterAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private predicate: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + const current = await this.val.await() + const mask = await asyncChain(current).map(this.predicate).value() + + return current.filter((_, index) => mask[index]) + } +} diff --git a/src/collections/async/FilteringAsyncObjectChain.ts b/src/collections/async/FilteringAsyncObjectChain.ts new file mode 100644 index 0000000..0ec8740 --- /dev/null +++ b/src/collections/async/FilteringAsyncObjectChain.ts @@ -0,0 +1,23 @@ +import { AsyncObjectChain } from "./AsyncObjectChain" +import { objChain, ObjectChain } from "../../collections" + +export class FilteringAsyncObjectChain< + K extends string | number | symbol, + T, + Rec extends Partial> = Record, +> extends AsyncObjectChain { + constructor( + private val: AsyncObjectChain, + private condition: (key: K, value: T) => boolean | Promise, + ) { + super() + } + + async calculate(): Promise> { + const entries = await this.val + .entries() + .filter(async ([k, v]) => await this.condition(k, v)) + + return objChain(entries) + } +} diff --git a/src/collections/async/FlattenAsyncChain.ts b/src/collections/async/FlattenAsyncChain.ts new file mode 100644 index 0000000..b3ce291 --- /dev/null +++ b/src/collections/async/FlattenAsyncChain.ts @@ -0,0 +1,22 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { Chain } from "../../collections" +import { ArrayOrAsyncChain } from "./AsyncChain" + +type Distribute = U extends any ? { type: U } : never + +type FlattenAsyncType = Distribute extends { + type: ArrayOrAsyncChain +} + ? U + : T + +export class FlattenAsyncChain extends AsyncChainBase> { + constructor(private val: AsyncChainBase) { + super() + this.startCalclulation() + } + + async calculate(): Promise>> { + return (await this.val.await()).flatten() as Chain> + } +} diff --git a/src/collections/async/IntersectionAsyncChain.ts b/src/collections/async/IntersectionAsyncChain.ts new file mode 100644 index 0000000..29cc14b --- /dev/null +++ b/src/collections/async/IntersectionAsyncChain.ts @@ -0,0 +1,23 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { intersect } from "@opencreek/deno-std-collections" +import { chain, Chain } from "../../collections" + +export class IntersectionAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private withArrays: ReadonlyArray>, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + const others = await Promise.all( + this.withArrays.map(async (it) => + it instanceof AsyncChainBase ? await it.value() : it, + ), + ) + const ret = intersect(await this.val.value(), ...others) + return chain(ret) + } +} diff --git a/src/collections/async/KeysAsyncChain.ts b/src/collections/async/KeysAsyncChain.ts new file mode 100644 index 0000000..9825d13 --- /dev/null +++ b/src/collections/async/KeysAsyncChain.ts @@ -0,0 +1,15 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { AsyncObjectChain } from "./AsyncObjectChain" +import { Chain } from "../../collections" + +export class KeysAsyncChain< + K extends string | number | symbol, +> extends AsyncChainBase { + constructor(private val: AsyncObjectChain) { + super() + } + + async calculate(): Promise> { + return (await this.val.await()).keys() + } +} diff --git a/src/collections/async/MappingAsyncChain.ts b/src/collections/async/MappingAsyncChain.ts new file mode 100644 index 0000000..362ee89 --- /dev/null +++ b/src/collections/async/MappingAsyncChain.ts @@ -0,0 +1,26 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { Chain } from "../../collections" +import { asyncChain } from "./AsyncChain" + +export class MappingAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private transformer: ( + el: T, + index: number, + array: ReadonlyArray, + ) => U | Promise, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + const entries = (await this.val.await()).map( + async (el, index, array) => + await this.transformer(await el, index, array), + ) + + return await asyncChain(entries).await() + } +} diff --git a/src/collections/async/MappingEntriesAsyncObjectChain.ts b/src/collections/async/MappingEntriesAsyncObjectChain.ts new file mode 100644 index 0000000..b1d1d4c --- /dev/null +++ b/src/collections/async/MappingEntriesAsyncObjectChain.ts @@ -0,0 +1,28 @@ +import { AsyncObjectChain } from "./AsyncObjectChain" +import { ObjectChain } from "../../collections" + +export class MappingEntriesAsyncObjectChain< + K extends string | number | symbol, + T, + U extends string | number | symbol, + V, + Rec extends Partial> = Record, +> extends AsyncObjectChain { + constructor( + private val: AsyncObjectChain, + private transformer: (key: K, value: T) => [U, V] | Promise<[U, V]>, + ) { + super() + } + + async calculate(): Promise> { + const values = await this.val + .entries() + .map(async ([k, v]) => await this.transformer(k, v)) + .value() + + return new ObjectChain>( + Object.fromEntries(values) as Record, + ) + } +} diff --git a/src/collections/async/MappingKeysAsyncObjectChain.ts b/src/collections/async/MappingKeysAsyncObjectChain.ts new file mode 100644 index 0000000..0073250 --- /dev/null +++ b/src/collections/async/MappingKeysAsyncObjectChain.ts @@ -0,0 +1,25 @@ +import { AsyncObjectChain } from "./AsyncObjectChain" +import { ObjectChain } from "../../collections" + +export class MappingKeysAsyncObjectChain< + K extends string | number | symbol, + U extends string | number | symbol, + T, + Rec extends Partial> = Record, +> extends AsyncObjectChain { + constructor( + private val: AsyncObjectChain, + private transformer: (key: K) => U | Promise, + ) { + super() + } + + async calculate(): Promise> { + const values = await this.val + .entries() + .map(async ([k, v]) => [await this.transformer(k), v]) + .value() + + return new ObjectChain(Object.fromEntries(values)) + } +} diff --git a/src/collections/async/MappingValuesAsyncObjectChain.ts b/src/collections/async/MappingValuesAsyncObjectChain.ts new file mode 100644 index 0000000..18eadfd --- /dev/null +++ b/src/collections/async/MappingValuesAsyncObjectChain.ts @@ -0,0 +1,25 @@ +import { AsyncObjectChain } from "./AsyncObjectChain" +import { ObjectChain } from "../../collections" + +export class MappingValuesAsyncObjectChain< + K extends string | number | symbol, + T, + U, + Rec extends Partial> = Record, +> extends AsyncObjectChain { + constructor( + private val: AsyncObjectChain, + private transformer: (key: T) => U | Promise, + ) { + super() + } + + async calculate(): Promise> { + const values = await this.val + .entries() + .map(async ([k, v]) => [k, await this.transformer(v)]) + .value() + + return new ObjectChain(Object.fromEntries(values)) + } +} diff --git a/src/collections/async/PermutationsAsyncChain.ts b/src/collections/async/PermutationsAsyncChain.ts new file mode 100644 index 0000000..35cd4cf --- /dev/null +++ b/src/collections/async/PermutationsAsyncChain.ts @@ -0,0 +1,15 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { Chain } from "../../collections" + +export class PermutationsAsyncChain extends AsyncChainBase< + ReadonlyArray +> { + constructor(private val: AsyncChainBase) { + super() + this.startCalclulation() + } + + async calculate(): Promise>> { + return (await this.val.await()).permutations() + } +} diff --git a/src/collections/async/ReversingAsyncChain.ts b/src/collections/async/ReversingAsyncChain.ts new file mode 100644 index 0000000..207c91a --- /dev/null +++ b/src/collections/async/ReversingAsyncChain.ts @@ -0,0 +1,13 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { Chain } from "../../collections" + +export class ReversingAsyncChain extends AsyncChainBase { + constructor(private val: AsyncChainBase) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + return (await this.val.await()).reverse() + } +} diff --git a/src/collections/async/RunningReduceAsyncChain.ts b/src/collections/async/RunningReduceAsyncChain.ts new file mode 100644 index 0000000..31401ed --- /dev/null +++ b/src/collections/async/RunningReduceAsyncChain.ts @@ -0,0 +1,26 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { chain, Chain } from "../../collections" + +export class RunningReduceAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private reducer: (accumulator: O, current: T) => Promise | O, + private initialValue: O, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + const ret = await this.val.reduce( + async (acc, it) => { + const elem = acc[acc.length - 1] + const next = await this.reducer(elem, it) + return [...acc, next] + }, + [this.initialValue], + ) + + return chain(ret) + } +} diff --git a/src/collections/async/SliceAsyncChain.ts b/src/collections/async/SliceAsyncChain.ts new file mode 100644 index 0000000..f58c259 --- /dev/null +++ b/src/collections/async/SliceAsyncChain.ts @@ -0,0 +1,17 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { Chain } from "../../collections" + +export class SliceAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private start?: number, + private end?: number, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + return (await this.val.await()).slice(this.start, this.end) + } +} diff --git a/src/collections/async/SlidingWindowAsyncChain.ts b/src/collections/async/SlidingWindowAsyncChain.ts new file mode 100644 index 0000000..b72e62d --- /dev/null +++ b/src/collections/async/SlidingWindowAsyncChain.ts @@ -0,0 +1,23 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { slidingWindows } from "@opencreek/deno-std-collections" +import { Chain } from "../../collections" + +export class SlidingWindowAsyncChain extends AsyncChainBase< + ReadonlyArray +> { + constructor( + private val: AsyncChainBase, + private size: number, + private options: { + step?: number + partial?: boolean + }, + ) { + super() + } + + async calculate(): Promise>> { + const ret = slidingWindows(await this.val.value(), this.size, this.options) + return new Chain(ret) + } +} diff --git a/src/collections/async/SortByAsyncChain.ts b/src/collections/async/SortByAsyncChain.ts new file mode 100644 index 0000000..c079584 --- /dev/null +++ b/src/collections/async/SortByAsyncChain.ts @@ -0,0 +1,26 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { Chain } from "../../collections" + +export class SortByAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private selector: ( + a: T, + ) => + | Promise + | Date + | bigint + | string + | number, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + const values = await this.val + .map(async (el) => [el, await this.selector(el)] as const) + .await() + return values.sortBy((it) => it[1]).map((it) => it[0]) + } +} diff --git a/src/collections/async/SortingAsyncChain.ts b/src/collections/async/SortingAsyncChain.ts new file mode 100644 index 0000000..ab5d24a --- /dev/null +++ b/src/collections/async/SortingAsyncChain.ts @@ -0,0 +1,16 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { Chain } from "../../collections" + +export class SortingAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private compareFn?: (a: T, b: T) => number, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + return (await this.val.await()).sort(this.compareFn) + } +} diff --git a/src/collections/async/TakeWhileAsyncChain.ts b/src/collections/async/TakeWhileAsyncChain.ts new file mode 100644 index 0000000..da27a12 --- /dev/null +++ b/src/collections/async/TakeWhileAsyncChain.ts @@ -0,0 +1,30 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { Chain } from "../../collections" + +export class TakeWhileAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private predicate: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + const values = await this.val.value() + const ret: Array = [] + for (let i = 0; i < values.length; i++) { + if (await this.predicate(values[i], i, values)) { + ret.push(values[i]) + } else { + break + } + } + + return new Chain(ret) + } +} diff --git a/src/collections/async/UnionAsyncChain.ts b/src/collections/async/UnionAsyncChain.ts new file mode 100644 index 0000000..1991ba9 --- /dev/null +++ b/src/collections/async/UnionAsyncChain.ts @@ -0,0 +1,22 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { Chain } from "../../collections" + +export class UnionAsyncChain extends AsyncChainBase { + constructor( + private val: AsyncChainBase, + private withArrays: ReadonlyArray>, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + const other = await Promise.all( + this.withArrays.map(async (it) => + it instanceof AsyncChainBase ? await it.value() : it, + ), + ) + + return (await this.val.await()).union(...other) + } +} diff --git a/src/collections/async/ValuesAsyncChain.ts b/src/collections/async/ValuesAsyncChain.ts new file mode 100644 index 0000000..f27909b --- /dev/null +++ b/src/collections/async/ValuesAsyncChain.ts @@ -0,0 +1,17 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { AsyncObjectChain } from "./AsyncObjectChain" +import { Chain } from "../../collections" + +export class ValuesAsyncChain< + K extends string | number | symbol, + T, + Rec extends Partial> = Record, +> extends AsyncChainBase { + constructor(private val: AsyncObjectChain) { + super() + } + + async calculate(): Promise> { + return (await this.val.await()).values() + } +} diff --git a/src/collections/async/ZippingAsyncChain.ts b/src/collections/async/ZippingAsyncChain.ts new file mode 100644 index 0000000..4c38920 --- /dev/null +++ b/src/collections/async/ZippingAsyncChain.ts @@ -0,0 +1,20 @@ +import { AsyncChainBase } from "./AsyncChainBase" +import { Chain } from "../../collections" + +export class ZippingAsyncChain extends AsyncChainBase<[T, U]> { + constructor( + private val: AsyncChainBase, + private withArray: readonly U[] | AsyncChainBase, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + const other = + this.withArray instanceof AsyncChainBase + ? await this.withArray.value() + : this.withArray + return (await this.val.await()).zip(other) + } +} diff --git a/src/index.ts b/src/index.ts index 2a24659..5374a52 100644 --- a/src/index.ts +++ b/src/index.ts @@ -11,3 +11,30 @@ export * from "./table" export * from "./StopWatch" export * from "./strings" export * from "./BigDecimal" +export { AsyncChainBase } from "./collections/async/AsyncChainBase" +export { AsyncChain } from "./collections/async/AsyncChain" +export { AsyncObjectChain } from "./collections/async/AsyncObjectChain" +export { ValuesAsyncChain } from "./collections/async/ValuesAsyncChain" +export { KeysAsyncChain } from "./collections/async/KeysAsyncChain" +export { EntriesAsyncChain } from "./collections/async/EntriesAsyncChain" +export { MappingKeysAsyncObjectChain } from "./collections/async/MappingKeysAsyncObjectChain" +export { MappingValuesAsyncObjectChain } from "./collections/async/MappingValuesAsyncObjectChain" +export { MappingEntriesAsyncObjectChain } from "./collections/async/MappingEntriesAsyncObjectChain" +export { TakeWhileAsyncChain } from "./collections/async/TakeWhileAsyncChain" +export { DropWhileAsyncChain } from "./collections/async/DropWhileAsyncChain" +export { DistinctAsyncChain } from "./collections/async/DistinctAsyncChain" +export { SliceAsyncChain } from "./collections/async/SliceAsyncChain" +export { FilterAsyncChain } from "./collections/async/FilterAsyncChain" +export { FlattenAsyncChain } from "./collections/async/FlattenAsyncChain" +export { MappingAsyncChain } from "./collections/async/MappingAsyncChain" +export { SortByAsyncChain } from "./collections/async/SortByAsyncChain" +export { ZippingAsyncChain } from "./collections/async/ZippingAsyncChain" +export { UnionAsyncChain } from "./collections/async/UnionAsyncChain" +export { RunningReduceAsyncChain } from "./collections/async/RunningReduceAsyncChain" +export { ConcatenatingAsyncChain } from "./collections/async/ConcatenatingAsyncChain" +export { ChunkingAsyncChain } from "./collections/async/ChunkingAsyncChain" +export { IntersectionAsyncChain } from "./collections/async/IntersectionAsyncChain" +export { SlidingWindowAsyncChain } from "./collections/async/SlidingWindowAsyncChain" +export { PermutationsAsyncChain } from "./collections/async/PermutationsAsyncChain" +export { ReversingAsyncChain } from "./collections/async/ReversingAsyncChain" +export { SortingAsyncChain } from "./collections/async/SortingAsyncChain" diff --git a/src/objects.ts b/src/objects.ts index e89ab94..01cee81 100644 --- a/src/objects.ts +++ b/src/objects.ts @@ -42,10 +42,5 @@ declare global { this: NonNullable, predicate: (thiz: NonNullable) => boolean, ): T | undefined - - mapValues( - this: Readonly>, - transformer: (value: T) => O, - ): Record } } From 7b13fa6ec63559a7d6e11aac523c008413614c06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Tue, 29 Jul 2025 22:40:48 +0200 Subject: [PATCH 05/26] Add more async chain test, move asynh chain back into one file JS / TS didnt like the Abstract Class loop we had with the chaining setup."TypeError: Class extends value undefined is not a constructor or null " --- src/collections.test.ts | 70 - src/collections.ts | 7 +- src/collections/AsyncChain.test.ts | 88 ++ src/collections/AsyncChain.ts | 1321 +++++++++++++++++ src/collections/async/AsyncChain.ts | 27 - src/collections/async/AsyncChainBase.ts | 746 ---------- src/collections/async/AsyncObjectChain.ts | 114 -- src/collections/async/ChunkingAsyncChain.ts | 19 - .../async/ConcatenatingAsyncChain.ts | 20 - src/collections/async/DistinctAsyncChain.ts | 16 - src/collections/async/DropWhileAsyncChain.ts | 30 - src/collections/async/EntriesAsyncChain.ts | 17 - src/collections/async/FilterAsyncChain.ts | 24 - .../async/FilteringAsyncObjectChain.ts | 23 - src/collections/async/FlattenAsyncChain.ts | 22 - .../async/IntersectionAsyncChain.ts | 23 - src/collections/async/KeysAsyncChain.ts | 15 - src/collections/async/MappingAsyncChain.ts | 26 - .../async/MappingEntriesAsyncObjectChain.ts | 28 - .../async/MappingKeysAsyncObjectChain.ts | 25 - .../async/MappingValuesAsyncObjectChain.ts | 25 - .../async/PermutationsAsyncChain.ts | 15 - src/collections/async/ReversingAsyncChain.ts | 13 - .../async/RunningReduceAsyncChain.ts | 26 - src/collections/async/SliceAsyncChain.ts | 17 - .../async/SlidingWindowAsyncChain.ts | 23 - src/collections/async/SortByAsyncChain.ts | 26 - src/collections/async/SortingAsyncChain.ts | 16 - src/collections/async/TakeWhileAsyncChain.ts | 30 - src/collections/async/UnionAsyncChain.ts | 22 - src/collections/async/ValuesAsyncChain.ts | 17 - src/collections/async/ZippingAsyncChain.ts | 20 - src/index.ts | 28 +- 33 files changed, 1413 insertions(+), 1526 deletions(-) create mode 100644 src/collections/AsyncChain.test.ts create mode 100644 src/collections/AsyncChain.ts delete mode 100644 src/collections/async/AsyncChain.ts delete mode 100644 src/collections/async/AsyncChainBase.ts delete mode 100644 src/collections/async/AsyncObjectChain.ts delete mode 100644 src/collections/async/ChunkingAsyncChain.ts delete mode 100644 src/collections/async/ConcatenatingAsyncChain.ts delete mode 100644 src/collections/async/DistinctAsyncChain.ts delete mode 100644 src/collections/async/DropWhileAsyncChain.ts delete mode 100644 src/collections/async/EntriesAsyncChain.ts delete mode 100644 src/collections/async/FilterAsyncChain.ts delete mode 100644 src/collections/async/FilteringAsyncObjectChain.ts delete mode 100644 src/collections/async/FlattenAsyncChain.ts delete mode 100644 src/collections/async/IntersectionAsyncChain.ts delete mode 100644 src/collections/async/KeysAsyncChain.ts delete mode 100644 src/collections/async/MappingAsyncChain.ts delete mode 100644 src/collections/async/MappingEntriesAsyncObjectChain.ts delete mode 100644 src/collections/async/MappingKeysAsyncObjectChain.ts delete mode 100644 src/collections/async/MappingValuesAsyncObjectChain.ts delete mode 100644 src/collections/async/PermutationsAsyncChain.ts delete mode 100644 src/collections/async/ReversingAsyncChain.ts delete mode 100644 src/collections/async/RunningReduceAsyncChain.ts delete mode 100644 src/collections/async/SliceAsyncChain.ts delete mode 100644 src/collections/async/SlidingWindowAsyncChain.ts delete mode 100644 src/collections/async/SortByAsyncChain.ts delete mode 100644 src/collections/async/SortingAsyncChain.ts delete mode 100644 src/collections/async/TakeWhileAsyncChain.ts delete mode 100644 src/collections/async/UnionAsyncChain.ts delete mode 100644 src/collections/async/ValuesAsyncChain.ts delete mode 100644 src/collections/async/ZippingAsyncChain.ts diff --git a/src/collections.test.ts b/src/collections.test.ts index 71027da..19899fa 100644 --- a/src/collections.test.ts +++ b/src/collections.test.ts @@ -1,7 +1,5 @@ import test from "ava" import { chain } from "./collections" -import { sleep } from "./sleep" -import { asyncChain, AsyncChain } from "./collections/async/AsyncChain" test("should associateBy correctly", (t) => { const result = chain([1, 2, 3]) @@ -165,23 +163,6 @@ test("should allow flatMap over sets", (t) => { t.deepEqual(result, [1, 2, 3, 1]) }) -test("AsyncChain should contain data", async (t) => { - const chain = new AsyncChain([1, 2, 3]) - - const result = await chain.value() - t.deepEqual(result, [1, 2, 3]) -}) - -test("AsyncChain should map", async (t) => { - const chain = new AsyncChain([1, 2, 3]) - - const b = chain.map((it) => it * 2) - - const result = await b.value() - - t.deepEqual(result, [2, 4, 6]) -}) - test("chain::mapAsync should be downwards compatible", async (t) => { const c = chain([1, 2, 3, 4, 5]) @@ -204,54 +185,3 @@ test("chain::mapAsync should be chainable into an async chain", async (t) => { t.deepEqual(result, [15, 9, 3]) }) - -test("AsyncChain should be chainable", async (t) => { - const c = asyncChain([1, 2, 3, 4, 5]) - - const b = await c - .map(withDelay((it) => it * 3)) - .filter(withDelay((it) => it % 2 === 1)) - .sortBy(withDelay((it) => -it)) - - const result = b.value() - - t.deepEqual(result, [15, 9, 3]) -}) - -test("AsyncChain should be chainable including value", async (t) => { - const c = asyncChain([1, 2, 3, 4, 5]) - - const result = await c - .map(withDelay((it) => it * 3)) - .filter(withDelay((it) => it % 2 === 1)) - .sortBy(withDelay((it) => -it)) - .value() - - t.deepEqual(result, [15, 9, 3]) -}) - -test("async chain should not evaluate multiple times", async (t) => { - const c = chain([1, 2, 3, 4, 5]) - - let evaluations = 0 - const b = c.mapAsync(async (it) => { - evaluations++ - return it * 3 - }) - - const result = await b.value() - - t.deepEqual(result, [3, 6, 9, 12, 15]) - - const result2 = await b.filter(async (it) => it % 2 === 1).value() - - t.deepEqual(result2, [3, 9, 15]) - t.is(evaluations, 5, "should not evaluate multiple times") -}) - -function withDelay(transform: (el: T) => U): (el: T) => Promise { - return async (el: T) => { - await sleep(0) - return transform(el) - } -} diff --git a/src/collections.ts b/src/collections.ts index ff15587..485e379 100644 --- a/src/collections.ts +++ b/src/collections.ts @@ -29,8 +29,7 @@ import { zip, } from "@opencreek/deno-std-collections" import { error } from "." -import { AsyncChainBase } from "./collections/async/AsyncChainBase" -import { asyncChain } from "./collections/async/AsyncChain" +import { AsyncChain, asyncChain } from "./collections/AsyncChain" export type PairSplit = T extends [infer F, infer L] ? [Chain, Chain] @@ -327,7 +326,7 @@ export class Chain implements Iterable { index: number, array: ReadonlyArray, ) => Promise, - ): AsyncChainBase { + ): AsyncChain { return this.async().filter(predicate) } @@ -469,7 +468,7 @@ export class Chain implements Iterable { mapAsync( transformer: (el: T, index: number, array: ReadonlyArray) => Promise, - ): AsyncChainBase { + ): AsyncChain { return this.async().map(transformer) } diff --git a/src/collections/AsyncChain.test.ts b/src/collections/AsyncChain.test.ts new file mode 100644 index 0000000..2624165 --- /dev/null +++ b/src/collections/AsyncChain.test.ts @@ -0,0 +1,88 @@ +import test from "ava" +import { chain } from "../collections" +import { sleep } from "../sleep" +import { asyncChain } from "./AsyncChain" + +test("AsyncChain should contain data", async (t) => { + const chain = asyncChain([1, 2, 3]) + + const result = await chain.value() + t.deepEqual(result, [1, 2, 3]) +}) + +test("AsyncChain should map", async (t) => { + const c = chain([1, 2, 3]).async() + + const b = c.map((it) => it * 2) + + const result = await b.value() + + t.deepEqual(result, [2, 4, 6]) +}) +test("AsyncChain should be chainable", async (t) => { + const c = asyncChain([1, 2, 3, 4, 5]) + + const b = await c + .map(withDelay((it) => it * 3)) + .filter(withDelay((it) => it % 2 === 1)) + .sortBy(withDelay((it) => -it)) + + const result = b.value() + + t.deepEqual(result, [15, 9, 3]) +}) + +test("AsyncChain should be chainable including value", async (t) => { + const c = asyncChain([1, 2, 3, 4, 5]) + + const result = await c + .map(withDelay((it) => it * 3)) + .filter(withDelay((it) => it % 2 === 1)) + .sortBy(withDelay((it) => -it)) + .value() + + t.deepEqual(result, [15, 9, 3]) +}) + +test("async chain should not evaluate multiple times", async (t) => { + const c = chain([1, 2, 3, 4, 5]) + + let evaluations = 0 + const b = c.mapAsync(async (it) => { + evaluations++ + return it * 3 + }) + + const result = await b.value() + + t.deepEqual(result, [3, 6, 9, 12, 15]) + + const result2 = await b.filter(async (it) => it % 2 === 1).value() + + t.deepEqual(result2, [3, 9, 15]) + t.is(evaluations, 5, "should not evaluate multiple times") +}) + +test("Async chain should associate to async object chain", async (t) => { + const c = asyncChain([1, 2, 3, 4, 5, 6, 7, 8, 9]) + + const result = await c + .map(withDelay((it) => it * 77)) + .groupBy(withDelay((it) => it % 4)) + .mapKeys(withDelay((it) => it * 10)) + .value() + + t.deepEqual(result, { + "0": [308, 616], + "10": [77, 385, 693], + "20": [154, 462], + "30": [231, 539], + }) +}) + +function withDelay(transform: (el: T) => U): (el: T) => Promise { + return async (el: T) => { + await sleep(0) + return transform(el) + } +} diff --git a/src/collections/AsyncChain.ts b/src/collections/AsyncChain.ts new file mode 100644 index 0000000..f6e39df --- /dev/null +++ b/src/collections/AsyncChain.ts @@ -0,0 +1,1321 @@ +import { + chain, + Chain, + IfString, + objChain, + ObjectChain, + PairSplit, +} from "../collections" +import { + chunk, + intersect, + slidingWindows, +} from "@opencreek/deno-std-collections" +import { error } from "../error" + +export type ArrayOrAsyncChain = Chain | ReadonlyArray | AsyncChain + +export function asyncChain(val: Chain | T>): AsyncChain +export function asyncChain(val: ReadonlyArray | T>): AsyncChain +export function asyncChain( + val: ReadonlyArray | T> | Chain | T>, +): AsyncChain { + if (val instanceof Chain) return new SimpleAsyncChain(val.value()) + return new SimpleAsyncChain(val) +} + +export abstract class AsyncChain implements Promise> { + private _value: Promise> | null + + protected constructor() { + this._value = null + } + + protected startCalclulation() { + this._value = this.calculate() + } + + [Symbol.toStringTag] = "AsyncChain" + + async then, TResult2 = never>( + onfulfilled?: + | ((value: Chain) => TResult1 | PromiseLike) + | null + | undefined, + onrejected?: + | ((reason: any) => TResult2 | PromiseLike) + | null + | undefined, + ): Promise { + return await this.calculate().then(onfulfilled, onrejected) + } + + async catch( + onrejected?: + | ((reason: any) => TResult | PromiseLike) + | null + | undefined, + ): Promise | TResult> { + return this.then((it) => it, onrejected) + } + + finally(onfinally?: (() => void) | null | undefined): Promise> { + return this.then( + (it) => it, + (it) => it, + ).finally(onfinally) + } + + abstract calculate(): Promise> + + async await(): Promise> { + return (await this._value) ?? (await this.calculate()) + } + + async value(): Promise> { + return (await this.await()).value() + } + + async writableValue(): Promise> { + return (await this.await()).writableValue() + } + + associateBy( + selector: (el: T) => S | Promise, + ): AsyncObjectChain { + return new AssociatingAsyncObjectChain(this, selector) + } + + associateWith( + selector: (key: string) => U, + ): IfString> { + const entries = this.map((el) => { + return [ + el as unknown as string, + selector(el as unknown as string), + ] as const + }) + return objChain(entries) as IfString> + } + + // TODO(mr) + chunk(size: number): AsyncChain { + return new ChunkingAsyncChain(this, size) + } + + concat(other: Iterable | AsyncChain): AsyncChain { + return new ConcatenatingAsyncChain(this, other) + } + + distinct(): AsyncChain { + return this.distinctBy((it) => it) + } + + distinctBy(selector: (el: T) => D): AsyncChain { + return new DistinctAsyncChain(this, selector) + } + + drop(num: number): AsyncChain { + return new SliceAsyncChain(this, num) + } + + dropLast(num: number): AsyncChain { + return new SliceAsyncChain(this, 0, -num) + } + + take(num: number): AsyncChain { + return new SliceAsyncChain(this, 0, num) + } + + takeLast(num: number): AsyncChain { + return new SliceAsyncChain(this, -num) + } + + dropLastWhile(predicate: (el: T) => boolean): AsyncChain { + // TODO(mr) efficiency lol + return new DropWhileAsyncChain(this.reverse(), predicate).reverse() + } + + dropWhile(predicate: (el: T) => boolean): AsyncChain { + return new DropWhileAsyncChain(this, predicate) + } + + async every( + predicate: (el: T, index: number, array: ReadonlyArray) => boolean, + ): Promise + async every( + predicate: (el: T, index: number, array: ReadonlyArray) => boolean, + ): Promise { + return (await this.await()).every(predicate) + } + + async some( + predicate: (value: T, index: number, array: ReadonlyArray) => boolean, + ): Promise { + return (await this.await()).some(predicate) + } + + async first(): Promise { + return (await this.firstOrNull()) ?? error("No first element found") + } + + async firstOrNull(): Promise { + return (await this.await()).firstOrNull() + } + + filter( + filter: (el: T, index: number, array: ReadonlyArray) => el is S, + ): AsyncChain + filter( + filter: (el: T, index: number, array: ReadonlyArray) => Promise, + ): AsyncChain + filter( + filter: (el: T, index: number, array: ReadonlyArray) => Promise, + ): AsyncChain + filter( + filter: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, + ): AsyncChain + filter( + filter: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, + ): AsyncChain { + return new FilterAsyncChain(this, filter) + } + + filterNotNullish(): AsyncChain> { + return this.filter((it) => it != null) as AsyncChain> + } + + async find( + predicate: (el: T, index: number, array: ReadonlyArray) => el is S, + ): Promise + async find( + predicate: (el: T, index: number, array: ReadonlyArray) => boolean, + ): Promise + async find( + predicate: (el: T, index: number, array: ReadonlyArray) => boolean, + ): Promise { + return (await this.await()).find(predicate) + } + + async findIndex( + predicate: (el: T, index: number, array: ReadonlyArray) => boolean, + ): Promise { + return (await this.await()).findIndex(predicate) + } + + async findLast(predicate: (el: T) => boolean): Promise { + return (await this.await()).findLast(predicate) + } + + async findLastIndex( + predicate: (el: T) => boolean, + ): Promise { + return (await this.await()).findLastIndex(predicate) + } + + async findSingle(predicate: (el: T) => boolean): Promise { + return (await this.await()).findSingle(predicate) + } + + async firstNotNullishOf( + selector: (item: T) => O | undefined | null, + ): Promise | undefined> { + return (await this.await()).firstNotNullishOf(selector) + } + + flatten(): FlattenAsyncChain { + return new FlattenAsyncChain(this) + } + + flatMap( + transformer: (el: T, index: number, array: ReadonlyArray) => Chain, + ): FlattenAsyncChain + flatMap( + transformer: ( + el: T, + index: number, + array: ReadonlyArray, + ) => ReadonlyArray, + ): FlattenAsyncChain + flatMap( + transformer: (el: T, index: number, array: ReadonlyArray) => Set, + ): FlattenAsyncChain + flatMap( + transformer: ( + el: T, + index: number, + array: ReadonlyArray, + ) => AsyncChain, + ): FlattenAsyncChain + flatMap( + transformer: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Chain | ReadonlyArray | Set | AsyncChain, + ): FlattenAsyncChain + flatMap( + transformer: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Chain | ReadonlyArray | Set | AsyncChain, + ): FlattenAsyncChain { + const mapped = this.map(transformer) + // @ts-expect-error trust me bro + return mapped.flatten() + } + + async forEach( + callback: ( + el: T, + index: number, + array: ReadonlyArray, + ) => void | Promise, + ): Promise { + await this.map(callback).value() + } + + groupBy( + selector: (el: T) => K | Promise, + ): AsyncObjectChain> { + return new GroupingAsyncObjectChain(this, selector) + } + + async indexOf( + searchElement: T, + fromIndex?: number, + ): Promise { + return (await this.await()).indexOf(searchElement, fromIndex) + } + + async lastIndexOf( + searchElement: T, + fromIndex?: number, + ): Promise { + return (await this.await()).lastIndexOf(searchElement, fromIndex) + } + + async includes(el: T, fromIndex?: number): Promise { + return (await this.await()).includes(el, fromIndex) + } + + intersect(...arrays: Array | AsyncChain>): AsyncChain { + return new IntersectionAsyncChain(this, arrays) + } + + async join(separator?: string): Promise { + return (await this.await()).join(separator) + } + + async mapJoin( + separator: string, + transformer: (el: T) => string | Promise, + ): Promise { + return this.reduce(async (acc, it, idx) => { + const mapped = transformer(it) + return acc + (idx > 0 ? separator : "") + mapped + }, "") + } + + async last(): Promise { + return (await this.lastOrNull()) ?? error("No last element found") + } + + async lastOrNull(): Promise { + return (await this.await()).lastOrNull() + } + + map( + transformer: ( + el: T, + index: number, + array: ReadonlyArray, + ) => U | Promise, + ): AsyncChain { + return new MappingAsyncChain(this, transformer) + } + + mapNotNullish(transformer: (el: T) => O): AsyncChain> { + return this.map(transformer).filterNotNullish() + } + + async maxBy(selector: (el: T) => string): Promise + async maxBy(selector: (el: T) => bigint): Promise + async maxBy(selector: (el: T) => number): Promise + async maxBy(selector: (el: T) => Date): Promise + async maxBy( + selector: (el: T) => Date | number | bigint | string, + ): Promise { + // this is save because maxBy is overloaded too + return (await this.await()).maxBy(selector as (el: T) => string) + } + + async maxOf(selector: (el: T) => bigint): Promise + async maxOf(selector: (el: T) => number): Promise + async maxOf(selector: (el: T) => string): Promise + async maxOf(selector: (el: T) => Date): Promise + async maxOf( + selector: (el: T) => bigint | number | string | Date, + ): Promise { + return (await this.await()).maxOf( + // TODO(mr) + // @ts-expect-error + selector as (el: T) => bigint | number | string | Date, + ) + } + + async maxWith(comparator: (a: T, b: T) => number): Promise { + return (await this.await()).maxWith(comparator) + } + + async minBy(selector: (el: T) => number): Promise + async minBy(selector: (el: T) => string): Promise + async minBy(selector: (el: T) => bigint): Promise + async minBy(selector: (el: T) => Date): Promise + async minBy( + selector: (el: T) => Date | number | bigint | string, + ): Promise { + return (await this.await()).minBy(selector as (el: T) => string) + } + + async minOf(selector: (el: T) => bigint): Promise + async minOf(selector: (el: T) => number): Promise + async minOf(selector: (el: T) => string): Promise + async minOf(selector: (el: T) => Date): Promise + async minOf( + selector: (el: T) => bigint | number | string | Date, + ): Promise { + return (await this.await()).minOf( + // TODO(mr) + // @ts-expect-error + selector as (el: T) => bigint | number | string | Date, + ) + } + + async minWith(comparator: (a: T, b: T) => number): Promise { + return (await this.await()).minWith(comparator) + } + + partition( + predicate: (el: T) => Promise | boolean, + ): [AsyncChain, AsyncChain] { + return [this.filter(predicate), this.filter((el) => !predicate(el))] + } + + permutations(): AsyncChain> { + return new PermutationsAsyncChain(this) + } + + async reduce( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => T, + ): Promise + async reduce( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise, + ): Promise + async reduce( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise | T, + ): Promise + async reduce( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => T, + initial: T, + ): Promise + async reduce( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise, + initial: T, + ): Promise + async reduce( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise | T, + initial: T, + ): Promise + async reduce( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O, + initial: O, + ): Promise + async reduce( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise, + initial: O, + ): Promise + async reduce( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O | Promise, + initial: O, + ): Promise + async reduce( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O | Promise, + initial?: O, + ): Promise + async reduce( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O | Promise, + initial?: O, + ): Promise { + let ret: O = initial != null ? initial : ((await this.firstOrNull()) as O) + + const values = await this.value() + for (let i = initial != null ? 0 : 1; i < values.length; i++) { + ret = await reducer(ret as O, values[i], i, values) + } + return ret + } + + async reduceRight( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => T, + ): Promise + async reduceRight( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise, + ): Promise + async reduceRight( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise | T, + ): Promise + async reduceRight( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => T, + initial: T, + ): Promise + async reduceRight( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise, + initial: T, + ): Promise + async reduceRight( + reducer: ( + accumulator: T, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise | T, + initial: T, + ): Promise + async reduceRight( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O, + initial: O, + ): Promise + async reduceRight( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => Promise, + initial: O, + ): Promise + async reduceRight( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O | Promise, + initial: O, + ): Promise + async reduceRight( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O | Promise, + initial?: O, + ): Promise + async reduceRight( + reducer: ( + accumulator: O, + current: T, + index: number, + array: ReadonlyArray, + ) => O | Promise, + initial?: O, + ): Promise { + return await this.reverse().reduce(reducer, initial) + } + + reverse(): AsyncChain { + return new ReversingAsyncChain(this) + } + + runningReduce( + reducer: (accumulator: O, current: T) => O, + initialValue: O, + ): AsyncChain { + return new RunningReduceAsyncChain(this, reducer, initialValue) + } + + async sample(): Promise { + return (await this.await()).sample() + } + + slice(start?: number, end?: number): AsyncChain { + return new SliceAsyncChain(this, start, end) + } + + slidingWindows( + size: number, + { step, partial }: { step: number; partial: boolean }, + ): AsyncChain> { + return new SlidingWindowAsyncChain(this, size, { step, partial }) + } + + sort(compareFn?: (a: T, b: T) => number): AsyncChain { + return new SortingAsyncChain(this, compareFn) + } + + sortBy(selector: (el: T) => Date): AsyncChain + sortBy(selector: (el: T) => Promise): AsyncChain + sortBy(selector: (el: T) => Promise | Date): AsyncChain + sortBy(selector: (el: T) => bigint): AsyncChain + sortBy(selector: (el: T) => Promise): AsyncChain + sortBy(selector: (el: T) => Promise | bigint): AsyncChain + sortBy(selector: (el: T) => string): AsyncChain + sortBy(selector: (el: T) => Promise): AsyncChain + sortBy(selector: (el: T) => Promise | string): AsyncChain + sortBy(selector: (el: T) => number): AsyncChain + sortBy(selector: (el: T) => Promise): AsyncChain + sortBy(selector: (el: T) => Promise | number): AsyncChain + sortBy(selector: (el: T) => Date | bigint | string | number): AsyncChain + sortBy( + selector: (el: T) => Promise, + ): AsyncChain + sortBy( + selector: ( + el: T, + ) => + | Promise + | Date + | bigint + | string + | number, + ): AsyncChain + sortBy( + selector: ( + el: T, + ) => + | Promise + | Date + | bigint + | string + | number, + ): AsyncChain { + return new SortByAsyncChain(this, selector) + } + + async sumOf(selector: (el: T) => Promise | number): Promise { + return (await this.map(selector).await()).sumOf((it) => it) + } + + takeLastWhile(predicate: (el: T) => boolean): AsyncChain { + // TODO(mr) efficiency lol + return new TakeWhileAsyncChain(this.reverse(), predicate).reverse() + } + + takeWhile(predicate: (el: T) => boolean): AsyncChain { + return new TakeWhileAsyncChain(this, predicate) + } + + union(...arrays: (readonly T[] | AsyncChain)[]): AsyncChain { + return new UnionAsyncChain(this, arrays) + } + + unzip(): PairSplit { + // TODO(mr) + // @ts-expect-error + const [left, right] = unzip(this.val as unknown as ReadonlyArray<[T, T]>) + return [new Chain(left), new Chain(right)] as PairSplit + } + + withoutAll(values: readonly T[]): Chain { + // TODO(mr) + // @ts-expect-error + const ret = withoutAll(this.val, values) + return new Chain(ret) + } + + zip(withArray: readonly U[] | AsyncChain): AsyncChain<[T, U]> { + return new ZippingAsyncChain(this, withArray) + } +} + +export class SimpleAsyncChain extends AsyncChain { + constructor(private val: ReadonlyArray | T>) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + return new Chain(await Promise.all(this.val)) + } +} + +export class ChunkingAsyncChain extends AsyncChain { + constructor( + private val: AsyncChain, + private size: number, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + const chunks = chunk(await this.val.value(), this.size) + return new SimpleAsyncChain(chunks) + } +} + +export class ConcatenatingAsyncChain extends AsyncChain { + constructor( + private val: AsyncChain, + private other: AsyncChain | Iterable, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + const adding = + this.other instanceof AsyncChain ? await this.other.await() : this.other + return (await this.val.await()).concat(adding) + } +} + +export class DistinctAsyncChain extends AsyncChain { + constructor( + private val: AsyncChain, + private selector: (el: T) => D, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + return (await this.val.await()).distinctBy(this.selector) + } +} + +export class DropWhileAsyncChain extends AsyncChain { + constructor( + private val: AsyncChain, + private predicate: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + const values = await this.val.value() + const ret: Array = [] + for (let i = 0; i < values.length; i++) { + if (!(await this.predicate(values[i], i, values))) { + break + } else { + ret.push(values[i]) + } + } + + return new Chain(ret) + } +} + +export class EntriesAsyncChain< + K extends string | number | symbol, + T, + Rec extends Partial> = Record, +> extends AsyncChain<[K, T]> { + constructor(private val: AsyncObjectChain) { + super() + } + + async calculate(): Promise> { + return (await this.val.await()).entries() + } +} + +export class FilterAsyncChain extends AsyncChain { + constructor( + private val: AsyncChain, + private predicate: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + const current = await this.val.await() + const mask = await asyncChain(current).map(this.predicate).value() + + return current.filter((_, index) => mask[index]) + } +} +type Distribute = U extends any ? { type: U } : never + +type FlattenAsyncType = Distribute extends { + type: ArrayOrAsyncChain +} + ? U + : T + +export class FlattenAsyncChain extends AsyncChain> { + constructor(private val: AsyncChain) { + super() + this.startCalclulation() + } + + async calculate(): Promise>> { + return (await this.val.await()).flatten() as Chain> + } +} + +export class IntersectionAsyncChain extends AsyncChain { + constructor( + private val: AsyncChain, + private withArrays: ReadonlyArray>, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + const others = await Promise.all( + this.withArrays.map(async (it) => + it instanceof AsyncChain ? await it.value() : it, + ), + ) + const ret = intersect(await this.val.value(), ...others) + return chain(ret) + } +} + +export class KeysAsyncChain< + K extends string | number | symbol, +> extends AsyncChain { + constructor(private val: AsyncObjectChain) { + super() + } + + async calculate(): Promise> { + return (await this.val.await()).keys() + } +} + +export class MappingAsyncChain extends AsyncChain { + constructor( + private val: AsyncChain, + private transformer: ( + el: T, + index: number, + array: ReadonlyArray, + ) => U | Promise, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + const entries = (await this.val.await()).map( + async (el, index, array) => + await this.transformer(await el, index, array), + ) + + return await asyncChain(entries).await() + } +} + +export class PermutationsAsyncChain extends AsyncChain> { + constructor(private val: AsyncChain) { + super() + this.startCalclulation() + } + + async calculate(): Promise>> { + return (await this.val.await()).permutations() + } +} + +export class ReversingAsyncChain extends AsyncChain { + constructor(private val: AsyncChain) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + return (await this.val.await()).reverse() + } +} + +export class RunningReduceAsyncChain extends AsyncChain { + constructor( + private val: AsyncChain, + private reducer: (accumulator: O, current: T) => Promise | O, + private initialValue: O, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + const ret = await this.val.reduce( + async (acc, it) => { + const elem = acc[acc.length - 1] + const next = await this.reducer(elem, it) + return [...acc, next] + }, + [this.initialValue], + ) + + return chain(ret) + } +} + +export class SliceAsyncChain extends AsyncChain { + constructor( + private val: AsyncChain, + private start?: number, + private end?: number, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + return (await this.val.await()).slice(this.start, this.end) + } +} + +export class SlidingWindowAsyncChain extends AsyncChain> { + constructor( + private val: AsyncChain, + private size: number, + private options: { + step?: number + partial?: boolean + }, + ) { + super() + } + + async calculate(): Promise>> { + const ret = slidingWindows(await this.val.value(), this.size, this.options) + return new Chain(ret) + } +} + +export class SortByAsyncChain extends AsyncChain { + constructor( + private val: AsyncChain, + private selector: ( + a: T, + ) => + | Promise + | Date + | bigint + | string + | number, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + const values = await this.val + .map(async (el) => [el, await this.selector(el)] as const) + .await() + return values.sortBy((it) => it[1]).map((it) => it[0]) + } +} + +export class SortingAsyncChain extends AsyncChain { + constructor( + private val: AsyncChain, + private compareFn?: (a: T, b: T) => number, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + return (await this.val.await()).sort(this.compareFn) + } +} + +export class TakeWhileAsyncChain extends AsyncChain { + constructor( + private val: AsyncChain, + private predicate: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + const values = await this.val.value() + const ret: Array = [] + for (let i = 0; i < values.length; i++) { + if (await this.predicate(values[i], i, values)) { + ret.push(values[i]) + } else { + break + } + } + + return new Chain(ret) + } +} + +export class UnionAsyncChain extends AsyncChain { + constructor( + private val: AsyncChain, + private withArrays: ReadonlyArray>, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + const other = await Promise.all( + this.withArrays.map(async (it) => + it instanceof AsyncChain ? await it.value() : it, + ), + ) + + return (await this.val.await()).union(...other) + } +} + +export class ValuesAsyncChain< + K extends string | number | symbol, + T, + Rec extends Partial> = Record, +> extends AsyncChain { + constructor(private val: AsyncObjectChain) { + super() + } + + async calculate(): Promise> { + return (await this.val.await()).values() + } +} + +export class ZippingAsyncChain extends AsyncChain<[T, U]> { + constructor( + private val: AsyncChain, + private withArray: readonly U[] | AsyncChain, + ) { + super() + this.startCalclulation() + } + + async calculate(): Promise> { + const other = + this.withArray instanceof AsyncChain + ? await this.withArray.value() + : this.withArray + return (await this.val.await()).zip(other) + } +} + +// ********************* +// Async Object +// ********************* +export abstract class AsyncObjectChain< + K extends string | number | symbol, + T, + Rec extends Partial> = Record, +> implements Promise> +{ + private _value: Promise> | null + + protected startCalculation() { + this._value = this.calculate() + } + + [Symbol.toStringTag] = "AsyncObjectChain" + + constructor() { + this._value = null + } + + abstract calculate(): Promise> + + async await(): Promise> { + return (await this._value) ?? (await this.calculate()) + } + + async value(): Promise { + return (await this.await()).value() + } + + async then, TResult2 = never>( + onfulfilled?: + | ((value: ObjectChain) => TResult1 | PromiseLike) + | null + | undefined, + onrejected?: + | ((reason: any) => TResult2 | PromiseLike) + | null + | undefined, + ): Promise { + return await this.calculate().then(onfulfilled, onrejected) + } + + async catch( + onrejected?: + | ((reason: any) => TResult | PromiseLike) + | null + | undefined, + ): Promise | TResult> { + return this.then((it) => it, onrejected) + } + + finally( + onfinally?: (() => void) | null | undefined, + ): Promise> { + return this.then( + (it) => it, + (it) => it, + ).finally(onfinally) + } + + keys(): AsyncChain { + return new KeysAsyncChain(this) + } + + values(): AsyncChain { + return new ValuesAsyncChain(this) + } + + entries(): AsyncChain<[K, T]> { + return new EntriesAsyncChain(this) + } + + mapKeys( + transformer: (key: K) => Promise | U, + ): AsyncObjectChain { + return new MappingEntriesAsyncObjectChain( + this, + async (k, v) => [await transformer(k), v], + ) + } + + mapValues( + transformer: (value: T) => Promise | V, + ): AsyncObjectChain { + return new MappingEntriesAsyncObjectChain( + this, + async (k, v) => [k, await transformer(v)], + ) + } + + mapEntries( + transformer: (key: K, value: T) => Promise<[U, V]> | [U, V], + ): AsyncObjectChain { + return new MappingEntriesAsyncObjectChain( + this, + transformer, + ) + } + + filterKeys(filter: (key: K) => boolean): AsyncObjectChain { + return new FilteringAsyncObjectChain(this, (k, _) => filter(k)) + } + + filterValues(filter: (value: T) => boolean): AsyncObjectChain { + return new FilteringAsyncObjectChain(this, (_, v) => filter(v)) + } + + filterEntries(filter: (key: K, value: T) => boolean): AsyncObjectChain { + return new FilteringAsyncObjectChain(this, filter) + } +} + +export class MappingEntriesAsyncObjectChain< + K extends string | number | symbol, + T, + U extends string | number | symbol, + V, + Rec extends Partial> = Record, +> extends AsyncObjectChain { + constructor( + private val: AsyncObjectChain, + private transformer: (key: K, value: T) => [U, V] | Promise<[U, V]>, + ) { + super() + } + + async calculate(): Promise> { + const values = await this.val + .entries() + .map(async ([k, v]) => await this.transformer(k, v)) + + return objChain(values) + } +} + +export class AssociatingAsyncObjectChain< + K extends string | number | symbol, + T, +> extends AsyncObjectChain { + constructor( + private val: AsyncChain, + private selector: (elem: T) => K | Promise, + ) { + super() + this.startCalculation() + } + + async calculate(): Promise> { + const entries = await this.val.map( + async (it) => [await this.selector(it), it] as const, + ) + + return objChain(entries) + } +} +export class GroupingAsyncObjectChain< + K extends string | number | symbol, + T, +> extends AsyncObjectChain> { + constructor( + private val: AsyncChain, + private selector: (elem: T) => K | Promise, + ) { + super() + this.startCalculation() + } + + async calculate(): Promise>> { + const entries = await this.val + .map(async (it) => [await this.selector(it), it] as const) + .value() + const record = {} as Record> + for (const [key, el] of entries) { + if (record[key] != null) { + record[key]?.push(el) + } else { + record[key] = [el] + } + } + + return objChain(record) + } +} + +export class FilteringAsyncObjectChain< + K extends string | number | symbol, + T, + Rec extends Partial> = Record, +> extends AsyncObjectChain { + constructor( + private val: AsyncObjectChain, + private condition: (key: K, value: T) => boolean | Promise, + ) { + super() + } + + async calculate(): Promise> { + const entries = await this.val + .entries() + .filter(async ([k, v]) => await this.condition(k, v)) + + return objChain(entries) + } +} diff --git a/src/collections/async/AsyncChain.ts b/src/collections/async/AsyncChain.ts deleted file mode 100644 index eaddb6f..0000000 --- a/src/collections/async/AsyncChain.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { Chain } from "../../collections" - -export type ArrayOrAsyncChain = - | Chain - | ReadonlyArray - | AsyncChainBase - -export class AsyncChain extends AsyncChainBase { - constructor(private val: ReadonlyArray | T>) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - return new Chain(await Promise.all(this.val)) - } -} - -export function asyncChain(val: Chain | T>): AsyncChain -export function asyncChain(val: ReadonlyArray | T>): AsyncChain -export function asyncChain( - val: ReadonlyArray | T> | Chain | T>, -): AsyncChain { - if (val instanceof Chain) return new AsyncChain(val.value()) - return new AsyncChain(val) -} diff --git a/src/collections/async/AsyncChainBase.ts b/src/collections/async/AsyncChainBase.ts deleted file mode 100644 index a82ada8..0000000 --- a/src/collections/async/AsyncChainBase.ts +++ /dev/null @@ -1,746 +0,0 @@ -import { error } from "../../error" -import { - Chain, - IfString, - objChain, - ObjectChain, - PairSplit, -} from "../../collections" -import { TakeWhileAsyncChain } from "./TakeWhileAsyncChain" -import { DropWhileAsyncChain } from "./DropWhileAsyncChain" -import { DistinctAsyncChain } from "./DistinctAsyncChain" -import { SliceAsyncChain } from "./SliceAsyncChain" -import { FilterAsyncChain } from "./FilterAsyncChain" -import { FlattenAsyncChain } from "./FlattenAsyncChain" -import { MappingAsyncChain } from "./MappingAsyncChain" -import { SortByAsyncChain } from "./SortByAsyncChain" -import { ZippingAsyncChain } from "./ZippingAsyncChain" -import { UnionAsyncChain } from "./UnionAsyncChain" -import { RunningReduceAsyncChain } from "./RunningReduceAsyncChain" -import { ConcatenatingAsyncChain } from "./ConcatenatingAsyncChain" -import { ChunkingAsyncChain } from "./ChunkingAsyncChain" -import { IntersectionAsyncChain } from "./IntersectionAsyncChain" -import { SlidingWindowAsyncChain } from "./SlidingWindowAsyncChain" -import { PermutationsAsyncChain } from "./PermutationsAsyncChain" -import { ReversingAsyncChain } from "./ReversingAsyncChain" -import { SortingAsyncChain } from "./SortingAsyncChain" - -export abstract class AsyncChainBase implements Promise> { - private _value: Promise> | null - - protected constructor() { - this._value = null - } - - protected startCalclulation() { - this._value = this.calculate() - } - - [Symbol.toStringTag] = "AsyncChain" - - async then, TResult2 = never>( - onfulfilled?: - | ((value: Chain) => TResult1 | PromiseLike) - | null - | undefined, - onrejected?: - | ((reason: any) => TResult2 | PromiseLike) - | null - | undefined, - ): Promise { - return await this.calculate().then(onfulfilled, onrejected) - } - - async catch( - onrejected?: - | ((reason: any) => TResult | PromiseLike) - | null - | undefined, - ): Promise | TResult> { - return this.then((it) => it, onrejected) - } - - finally(onfinally?: (() => void) | null | undefined): Promise> { - return this.then( - (it) => it, - (it) => it, - ).finally(onfinally) - } - - abstract calculate(): Promise> - - async await(): Promise> { - return (await this._value) ?? (await this.calculate()) - } - - async value(): Promise> { - return (await this.await()).value() - } - - async writableValue(): Promise> { - return (await this.await()).writableValue() - } - - associateBy( - selector: (el: T) => S, - ): ObjectChain { - const entries = this.map((m) => { - return [selector(m), m] as const - }) - // TODO(mr) - // @ts-expect-error - return objChain(entries) - } - - associateWith( - selector: (key: string) => U, - ): IfString> { - const entries = this.map((el) => { - return [ - el as unknown as string, - selector(el as unknown as string), - ] as const - }) - return objChain(entries) as IfString> - } - - // TODO(mr) - chunk(size: number): AsyncChainBase { - return new ChunkingAsyncChain(this, size) - } - - concat(other: Iterable | AsyncChainBase): AsyncChainBase { - return new ConcatenatingAsyncChain(this, other) - } - - distinct(): AsyncChainBase { - return this.distinctBy((it) => it) - } - - distinctBy(selector: (el: T) => D): AsyncChainBase { - return new DistinctAsyncChain(this, selector) - } - - drop(num: number): AsyncChainBase { - return new SliceAsyncChain(this, num) - } - - dropLast(num: number): AsyncChainBase { - return new SliceAsyncChain(this, 0, -num) - } - - take(num: number): AsyncChainBase { - return new SliceAsyncChain(this, 0, num) - } - - takeLast(num: number): AsyncChainBase { - return new SliceAsyncChain(this, -num) - } - - dropLastWhile(predicate: (el: T) => boolean): AsyncChainBase { - // TODO(mr) efficiency lol - return new DropWhileAsyncChain(this.reverse(), predicate).reverse() - } - - dropWhile(predicate: (el: T) => boolean): AsyncChainBase { - return new DropWhileAsyncChain(this, predicate) - } - - async every( - predicate: (el: T, index: number, array: ReadonlyArray) => boolean, - ): Promise - async every( - predicate: (el: T, index: number, array: ReadonlyArray) => boolean, - ): Promise { - return (await this.await()).every(predicate) - } - - async some( - predicate: (value: T, index: number, array: ReadonlyArray) => boolean, - ): Promise { - return (await this.await()).some(predicate) - } - - async first(): Promise { - return (await this.firstOrNull()) ?? error("No first element found") - } - - async firstOrNull(): Promise { - return (await this.await()).firstOrNull() - } - - filter( - filter: (el: T, index: number, array: ReadonlyArray) => el is S, - ): AsyncChainBase - filter( - filter: (el: T, index: number, array: ReadonlyArray) => Promise, - ): AsyncChainBase - filter( - filter: (el: T, index: number, array: ReadonlyArray) => Promise, - ): AsyncChainBase - filter( - filter: ( - el: T, - index: number, - array: ReadonlyArray, - ) => Promise | boolean, - ): AsyncChainBase - filter( - filter: ( - el: T, - index: number, - array: ReadonlyArray, - ) => Promise | boolean, - ): AsyncChainBase { - return new FilterAsyncChain(this, filter) - } - - filterNotNullish(): AsyncChainBase> { - return this.filter((it) => it != null) as AsyncChainBase> - } - - async find( - predicate: (el: T, index: number, array: ReadonlyArray) => el is S, - ): Promise - async find( - predicate: (el: T, index: number, array: ReadonlyArray) => boolean, - ): Promise - async find( - predicate: (el: T, index: number, array: ReadonlyArray) => boolean, - ): Promise { - return (await this.await()).find(predicate) - } - - async findIndex( - predicate: (el: T, index: number, array: ReadonlyArray) => boolean, - ): Promise { - return (await this.await()).findIndex(predicate) - } - - async findLast(predicate: (el: T) => boolean): Promise { - return (await this.await()).findLast(predicate) - } - - async findLastIndex( - predicate: (el: T) => boolean, - ): Promise { - return (await this.await()).findLastIndex(predicate) - } - - async findSingle(predicate: (el: T) => boolean): Promise { - return (await this.await()).findSingle(predicate) - } - - async firstNotNullishOf( - selector: (item: T) => O | undefined | null, - ): Promise | undefined> { - return (await this.await()).firstNotNullishOf(selector) - } - - flatten(): FlattenAsyncChain { - return new FlattenAsyncChain(this) - } - - flatMap( - transformer: (el: T, index: number, array: ReadonlyArray) => Chain, - ): FlattenAsyncChain - flatMap( - transformer: ( - el: T, - index: number, - array: ReadonlyArray, - ) => ReadonlyArray, - ): FlattenAsyncChain - flatMap( - transformer: (el: T, index: number, array: ReadonlyArray) => Set, - ): FlattenAsyncChain - flatMap( - transformer: ( - el: T, - index: number, - array: ReadonlyArray, - ) => AsyncChainBase, - ): FlattenAsyncChain - flatMap( - transformer: ( - el: T, - index: number, - array: ReadonlyArray, - ) => Chain | ReadonlyArray | Set | AsyncChainBase, - ): FlattenAsyncChain - flatMap( - transformer: ( - el: T, - index: number, - array: ReadonlyArray, - ) => Chain | ReadonlyArray | Set | AsyncChainBase, - ): FlattenAsyncChain { - const mapped = this.map(transformer) - // @ts-expect-error trust me bro - return mapped.flatten() - } - - async forEach( - callback: ( - el: T, - index: number, - array: ReadonlyArray, - ) => void | Promise, - ): Promise { - await this.map(callback).value() - } - - groupBy( - selector: (el: T) => K, - ): ObjectChain> { - const record = {} as Record> - // TODO(mr) - // @ts-expect-error - for (const el of this.val) { - const key = selector(el) - if (record[key] != null) { - record[key]?.push(el) - } else { - record[key] = [el] - } - } - return new ObjectChain(record) - } - - async indexOf( - searchElement: T, - fromIndex?: number, - ): Promise { - return (await this.await()).indexOf(searchElement, fromIndex) - } - - async lastIndexOf( - searchElement: T, - fromIndex?: number, - ): Promise { - return (await this.await()).lastIndexOf(searchElement, fromIndex) - } - - async includes(el: T, fromIndex?: number): Promise { - return (await this.await()).includes(el, fromIndex) - } - - intersect( - ...arrays: Array | AsyncChainBase> - ): AsyncChainBase { - return new IntersectionAsyncChain(this, arrays) - } - - async join(separator?: string): Promise { - return (await this.await()).join(separator) - } - - async mapJoin( - separator: string, - transformer: (el: T) => string | Promise, - ): Promise { - return this.reduce(async (acc, it, idx) => { - const mapped = transformer(it) - return acc + (idx > 0 ? separator : "") + mapped - }, "") - } - - async last(): Promise { - return (await this.lastOrNull()) ?? error("No last element found") - } - - async lastOrNull(): Promise { - return (await this.await()).lastOrNull() - } - - map( - transformer: ( - el: T, - index: number, - array: ReadonlyArray, - ) => U | Promise, - ): AsyncChainBase { - return new MappingAsyncChain(this, transformer) - } - - mapNotNullish(transformer: (el: T) => O): AsyncChainBase> { - return this.map(transformer).filterNotNullish() - } - - async maxBy(selector: (el: T) => string): Promise - async maxBy(selector: (el: T) => bigint): Promise - async maxBy(selector: (el: T) => number): Promise - async maxBy(selector: (el: T) => Date): Promise - async maxBy( - selector: (el: T) => Date | number | bigint | string, - ): Promise { - // this is save because maxBy is overloaded too - return (await this.await()).maxBy(selector as (el: T) => string) - } - - async maxOf(selector: (el: T) => bigint): Promise - async maxOf(selector: (el: T) => number): Promise - async maxOf(selector: (el: T) => string): Promise - async maxOf(selector: (el: T) => Date): Promise - async maxOf( - selector: (el: T) => bigint | number | string | Date, - ): Promise { - return (await this.await()).maxOf( - // TODO(mr) - // @ts-expect-error - selector as (el: T) => bigint | number | string | Date, - ) - } - - async maxWith(comparator: (a: T, b: T) => number): Promise { - return (await this.await()).maxWith(comparator) - } - - async minBy(selector: (el: T) => number): Promise - async minBy(selector: (el: T) => string): Promise - async minBy(selector: (el: T) => bigint): Promise - async minBy(selector: (el: T) => Date): Promise - async minBy( - selector: (el: T) => Date | number | bigint | string, - ): Promise { - return (await this.await()).minBy(selector as (el: T) => string) - } - - async minOf(selector: (el: T) => bigint): Promise - async minOf(selector: (el: T) => number): Promise - async minOf(selector: (el: T) => string): Promise - async minOf(selector: (el: T) => Date): Promise - async minOf( - selector: (el: T) => bigint | number | string | Date, - ): Promise { - return (await this.await()).minOf( - // TODO(mr) - // @ts-expect-error - selector as (el: T) => bigint | number | string | Date, - ) - } - - async minWith(comparator: (a: T, b: T) => number): Promise { - return (await this.await()).minWith(comparator) - } - - partition( - predicate: (el: T) => Promise | boolean, - ): [AsyncChainBase, AsyncChainBase] { - return [this.filter(predicate), this.filter((el) => !predicate(el))] - } - - permutations(): AsyncChainBase> { - return new PermutationsAsyncChain(this) - } - - async reduce( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => T, - ): Promise - async reduce( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => Promise, - ): Promise - async reduce( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => Promise | T, - ): Promise - async reduce( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => T, - initial: T, - ): Promise - async reduce( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => Promise, - initial: T, - ): Promise - async reduce( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => Promise | T, - initial: T, - ): Promise - async reduce( - reducer: ( - accumulator: O, - current: T, - index: number, - array: ReadonlyArray, - ) => O, - initial: O, - ): Promise - async reduce( - reducer: ( - accumulator: O, - current: T, - index: number, - array: ReadonlyArray, - ) => Promise, - initial: O, - ): Promise - async reduce( - reducer: ( - accumulator: O, - current: T, - index: number, - array: ReadonlyArray, - ) => O | Promise, - initial: O, - ): Promise - async reduce( - reducer: ( - accumulator: O, - current: T, - index: number, - array: ReadonlyArray, - ) => O | Promise, - initial?: O, - ): Promise - async reduce( - reducer: ( - accumulator: O, - current: T, - index: number, - array: ReadonlyArray, - ) => O | Promise, - initial?: O, - ): Promise { - let ret: O = initial != null ? initial : ((await this.firstOrNull()) as O) - - const values = await this.value() - for (let i = initial != null ? 0 : 1; i < values.length; i++) { - ret = await reducer(ret as O, values[i], i, values) - } - return ret - } - - async reduceRight( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => T, - ): Promise - async reduceRight( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => Promise, - ): Promise - async reduceRight( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => Promise | T, - ): Promise - async reduceRight( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => T, - initial: T, - ): Promise - async reduceRight( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => Promise, - initial: T, - ): Promise - async reduceRight( - reducer: ( - accumulator: T, - current: T, - index: number, - array: ReadonlyArray, - ) => Promise | T, - initial: T, - ): Promise - async reduceRight( - reducer: ( - accumulator: O, - current: T, - index: number, - array: ReadonlyArray, - ) => O, - initial: O, - ): Promise - async reduceRight( - reducer: ( - accumulator: O, - current: T, - index: number, - array: ReadonlyArray, - ) => Promise, - initial: O, - ): Promise - async reduceRight( - reducer: ( - accumulator: O, - current: T, - index: number, - array: ReadonlyArray, - ) => O | Promise, - initial: O, - ): Promise - async reduceRight( - reducer: ( - accumulator: O, - current: T, - index: number, - array: ReadonlyArray, - ) => O | Promise, - initial?: O, - ): Promise - async reduceRight( - reducer: ( - accumulator: O, - current: T, - index: number, - array: ReadonlyArray, - ) => O | Promise, - initial?: O, - ): Promise { - return await this.reverse().reduce(reducer, initial) - } - - reverse(): AsyncChainBase { - return new ReversingAsyncChain(this) - } - - runningReduce( - reducer: (accumulator: O, current: T) => O, - initialValue: O, - ): AsyncChainBase { - return new RunningReduceAsyncChain(this, reducer, initialValue) - } - - async sample(): Promise { - return (await this.await()).sample() - } - - slice(start?: number, end?: number): AsyncChainBase { - return new SliceAsyncChain(this, start, end) - } - - slidingWindows( - size: number, - { step, partial }: { step: number; partial: boolean }, - ): AsyncChainBase> { - return new SlidingWindowAsyncChain(this, size, { step, partial }) - } - - sort(compareFn?: (a: T, b: T) => number): AsyncChainBase { - return new SortingAsyncChain(this, compareFn) - } - - sortBy(selector: (el: T) => Date): AsyncChainBase - sortBy(selector: (el: T) => Promise): AsyncChainBase - sortBy(selector: (el: T) => Promise | Date): AsyncChainBase - sortBy(selector: (el: T) => bigint): AsyncChainBase - sortBy(selector: (el: T) => Promise): AsyncChainBase - sortBy(selector: (el: T) => Promise | bigint): AsyncChainBase - sortBy(selector: (el: T) => string): AsyncChainBase - sortBy(selector: (el: T) => Promise): AsyncChainBase - sortBy(selector: (el: T) => Promise | string): AsyncChainBase - sortBy(selector: (el: T) => number): AsyncChainBase - sortBy(selector: (el: T) => Promise): AsyncChainBase - sortBy(selector: (el: T) => Promise | number): AsyncChainBase - sortBy( - selector: (el: T) => Date | bigint | string | number, - ): AsyncChainBase - sortBy( - selector: (el: T) => Promise, - ): AsyncChainBase - sortBy( - selector: ( - el: T, - ) => - | Promise - | Date - | bigint - | string - | number, - ): AsyncChainBase - sortBy( - selector: ( - el: T, - ) => - | Promise - | Date - | bigint - | string - | number, - ): AsyncChainBase { - return new SortByAsyncChain(this, selector) - } - - async sumOf(selector: (el: T) => Promise | number): Promise { - return (await this.map(selector).await()).sumOf((it) => it) - } - - takeLastWhile(predicate: (el: T) => boolean): AsyncChainBase { - // TODO(mr) efficiency lol - return new TakeWhileAsyncChain(this.reverse(), predicate).reverse() - } - - takeWhile(predicate: (el: T) => boolean): AsyncChainBase { - return new TakeWhileAsyncChain(this, predicate) - } - - union(...arrays: (readonly T[] | AsyncChainBase)[]): AsyncChainBase { - return new UnionAsyncChain(this, arrays) - } - - unzip(): PairSplit { - // TODO(mr) - // @ts-expect-error - const [left, right] = unzip(this.val as unknown as ReadonlyArray<[T, T]>) - return [new Chain(left), new Chain(right)] as PairSplit - } - - withoutAll(values: readonly T[]): Chain { - // TODO(mr) - // @ts-expect-error - const ret = withoutAll(this.val, values) - return new Chain(ret) - } - - zip(withArray: readonly U[] | AsyncChainBase): AsyncChainBase<[T, U]> { - return new ZippingAsyncChain(this, withArray) - } -} diff --git a/src/collections/async/AsyncObjectChain.ts b/src/collections/async/AsyncObjectChain.ts deleted file mode 100644 index 4003711..0000000 --- a/src/collections/async/AsyncObjectChain.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { ObjectChain } from "../../collections" -import { ValuesAsyncChain } from "./ValuesAsyncChain" -import { KeysAsyncChain } from "./KeysAsyncChain" -import { EntriesAsyncChain } from "./EntriesAsyncChain" -import { MappingKeysAsyncObjectChain } from "./MappingKeysAsyncObjectChain" -import { MappingValuesAsyncObjectChain } from "./MappingValuesAsyncObjectChain" -import { MappingEntriesAsyncObjectChain } from "./MappingEntriesAsyncObjectChain" -import { FilteringAsyncObjectChain } from "./FilteringAsyncObjectChain" - -export abstract class AsyncObjectChain< - K extends string | number | symbol, - T, - Rec extends Partial> = Record, -> implements Promise> -{ - private _value: Promise> | null - - protected startCalculation() { - this._value = this.calculate() - } - - [Symbol.toStringTag] = "AsyncObjectChain" - - constructor() { - this._value = null - } - - abstract calculate(): Promise> - - async await(): Promise> { - return (await this._value) ?? (await this.calculate()) - } - - async value(): Promise { - return (await this.await()).value() - } - - async then, TResult2 = never>( - onfulfilled?: - | ((value: ObjectChain) => TResult1 | PromiseLike) - | null - | undefined, - onrejected?: - | ((reason: any) => TResult2 | PromiseLike) - | null - | undefined, - ): Promise { - return await this.calculate().then(onfulfilled, onrejected) - } - - async catch( - onrejected?: - | ((reason: any) => TResult | PromiseLike) - | null - | undefined, - ): Promise | TResult> { - return this.then((it) => it, onrejected) - } - - finally( - onfinally?: (() => void) | null | undefined, - ): Promise> { - return this.then( - (it) => it, - (it) => it, - ).finally(onfinally) - } - - keys(): AsyncChainBase { - return new KeysAsyncChain(this) - } - - values(): AsyncChainBase { - return new ValuesAsyncChain(this) - } - - entries(): AsyncChainBase<[K, T]> { - return new EntriesAsyncChain(this) - } - - mapKeys( - transformer: (key: K) => Promise | U, - ): AsyncObjectChain { - return new MappingKeysAsyncObjectChain(this, transformer) - } - - mapValues( - transformer: (value: T) => Promise | V, - ): AsyncObjectChain { - return new MappingValuesAsyncObjectChain(this, transformer) - } - - mapEntries( - transformer: (key: K, value: T) => Promise<[U, V]> | [U, V], - ): AsyncObjectChain { - return new MappingEntriesAsyncObjectChain( - this, - transformer, - ) - } - - filterKeys(filter: (key: K) => boolean): AsyncObjectChain { - return new FilteringAsyncObjectChain(this, (k, _) => filter(k)) - } - - filterValues(filter: (value: T) => boolean): AsyncObjectChain { - return new FilteringAsyncObjectChain(this, (_, v) => filter(v)) - } - - filterEntries(filter: (key: K, value: T) => boolean): AsyncObjectChain { - return new FilteringAsyncObjectChain(this, filter) - } -} diff --git a/src/collections/async/ChunkingAsyncChain.ts b/src/collections/async/ChunkingAsyncChain.ts deleted file mode 100644 index f3c74ff..0000000 --- a/src/collections/async/ChunkingAsyncChain.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { chunk } from "@opencreek/deno-std-collections" -import { AsyncChain } from "./AsyncChain" -import { Chain } from "../../collections" - -export class ChunkingAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private size: number, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - const chunks = chunk(await this.val.value(), this.size) - return new AsyncChain(chunks) - } -} diff --git a/src/collections/async/ConcatenatingAsyncChain.ts b/src/collections/async/ConcatenatingAsyncChain.ts deleted file mode 100644 index dad486f..0000000 --- a/src/collections/async/ConcatenatingAsyncChain.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { Chain } from "../../collections" - -export class ConcatenatingAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private other: AsyncChainBase | Iterable, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - const adding = - this.other instanceof AsyncChainBase - ? await this.other.await() - : this.other - return (await this.val.await()).concat(adding) - } -} diff --git a/src/collections/async/DistinctAsyncChain.ts b/src/collections/async/DistinctAsyncChain.ts deleted file mode 100644 index 9d716f6..0000000 --- a/src/collections/async/DistinctAsyncChain.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { Chain } from "../../collections" - -export class DistinctAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private selector: (el: T) => D, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - return (await this.val.await()).distinctBy(this.selector) - } -} diff --git a/src/collections/async/DropWhileAsyncChain.ts b/src/collections/async/DropWhileAsyncChain.ts deleted file mode 100644 index a921bf5..0000000 --- a/src/collections/async/DropWhileAsyncChain.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { Chain } from "../../collections" - -export class DropWhileAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private predicate: ( - el: T, - index: number, - array: ReadonlyArray, - ) => Promise | boolean, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - const values = await this.val.value() - const ret: Array = [] - for (let i = 0; i < values.length; i++) { - if (!(await this.predicate(values[i], i, values))) { - break - } else { - ret.push(values[i]) - } - } - - return new Chain(ret) - } -} diff --git a/src/collections/async/EntriesAsyncChain.ts b/src/collections/async/EntriesAsyncChain.ts deleted file mode 100644 index 5d2d60d..0000000 --- a/src/collections/async/EntriesAsyncChain.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { AsyncObjectChain } from "./AsyncObjectChain" -import { Chain } from "../../collections" - -export class EntriesAsyncChain< - K extends string | number | symbol, - T, - Rec extends Partial> = Record, -> extends AsyncChainBase<[K, T]> { - constructor(private val: AsyncObjectChain) { - super() - } - - async calculate(): Promise> { - return (await this.val.await()).entries() - } -} diff --git a/src/collections/async/FilterAsyncChain.ts b/src/collections/async/FilterAsyncChain.ts deleted file mode 100644 index d9351eb..0000000 --- a/src/collections/async/FilterAsyncChain.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { Chain } from "../../collections" -import { asyncChain } from "./AsyncChain" - -export class FilterAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private predicate: ( - el: T, - index: number, - array: ReadonlyArray, - ) => Promise | boolean, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - const current = await this.val.await() - const mask = await asyncChain(current).map(this.predicate).value() - - return current.filter((_, index) => mask[index]) - } -} diff --git a/src/collections/async/FilteringAsyncObjectChain.ts b/src/collections/async/FilteringAsyncObjectChain.ts deleted file mode 100644 index 0ec8740..0000000 --- a/src/collections/async/FilteringAsyncObjectChain.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { AsyncObjectChain } from "./AsyncObjectChain" -import { objChain, ObjectChain } from "../../collections" - -export class FilteringAsyncObjectChain< - K extends string | number | symbol, - T, - Rec extends Partial> = Record, -> extends AsyncObjectChain { - constructor( - private val: AsyncObjectChain, - private condition: (key: K, value: T) => boolean | Promise, - ) { - super() - } - - async calculate(): Promise> { - const entries = await this.val - .entries() - .filter(async ([k, v]) => await this.condition(k, v)) - - return objChain(entries) - } -} diff --git a/src/collections/async/FlattenAsyncChain.ts b/src/collections/async/FlattenAsyncChain.ts deleted file mode 100644 index b3ce291..0000000 --- a/src/collections/async/FlattenAsyncChain.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { Chain } from "../../collections" -import { ArrayOrAsyncChain } from "./AsyncChain" - -type Distribute = U extends any ? { type: U } : never - -type FlattenAsyncType = Distribute extends { - type: ArrayOrAsyncChain -} - ? U - : T - -export class FlattenAsyncChain extends AsyncChainBase> { - constructor(private val: AsyncChainBase) { - super() - this.startCalclulation() - } - - async calculate(): Promise>> { - return (await this.val.await()).flatten() as Chain> - } -} diff --git a/src/collections/async/IntersectionAsyncChain.ts b/src/collections/async/IntersectionAsyncChain.ts deleted file mode 100644 index 29cc14b..0000000 --- a/src/collections/async/IntersectionAsyncChain.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { intersect } from "@opencreek/deno-std-collections" -import { chain, Chain } from "../../collections" - -export class IntersectionAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private withArrays: ReadonlyArray>, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - const others = await Promise.all( - this.withArrays.map(async (it) => - it instanceof AsyncChainBase ? await it.value() : it, - ), - ) - const ret = intersect(await this.val.value(), ...others) - return chain(ret) - } -} diff --git a/src/collections/async/KeysAsyncChain.ts b/src/collections/async/KeysAsyncChain.ts deleted file mode 100644 index 9825d13..0000000 --- a/src/collections/async/KeysAsyncChain.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { AsyncObjectChain } from "./AsyncObjectChain" -import { Chain } from "../../collections" - -export class KeysAsyncChain< - K extends string | number | symbol, -> extends AsyncChainBase { - constructor(private val: AsyncObjectChain) { - super() - } - - async calculate(): Promise> { - return (await this.val.await()).keys() - } -} diff --git a/src/collections/async/MappingAsyncChain.ts b/src/collections/async/MappingAsyncChain.ts deleted file mode 100644 index 362ee89..0000000 --- a/src/collections/async/MappingAsyncChain.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { Chain } from "../../collections" -import { asyncChain } from "./AsyncChain" - -export class MappingAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private transformer: ( - el: T, - index: number, - array: ReadonlyArray, - ) => U | Promise, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - const entries = (await this.val.await()).map( - async (el, index, array) => - await this.transformer(await el, index, array), - ) - - return await asyncChain(entries).await() - } -} diff --git a/src/collections/async/MappingEntriesAsyncObjectChain.ts b/src/collections/async/MappingEntriesAsyncObjectChain.ts deleted file mode 100644 index b1d1d4c..0000000 --- a/src/collections/async/MappingEntriesAsyncObjectChain.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { AsyncObjectChain } from "./AsyncObjectChain" -import { ObjectChain } from "../../collections" - -export class MappingEntriesAsyncObjectChain< - K extends string | number | symbol, - T, - U extends string | number | symbol, - V, - Rec extends Partial> = Record, -> extends AsyncObjectChain { - constructor( - private val: AsyncObjectChain, - private transformer: (key: K, value: T) => [U, V] | Promise<[U, V]>, - ) { - super() - } - - async calculate(): Promise> { - const values = await this.val - .entries() - .map(async ([k, v]) => await this.transformer(k, v)) - .value() - - return new ObjectChain>( - Object.fromEntries(values) as Record, - ) - } -} diff --git a/src/collections/async/MappingKeysAsyncObjectChain.ts b/src/collections/async/MappingKeysAsyncObjectChain.ts deleted file mode 100644 index 0073250..0000000 --- a/src/collections/async/MappingKeysAsyncObjectChain.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { AsyncObjectChain } from "./AsyncObjectChain" -import { ObjectChain } from "../../collections" - -export class MappingKeysAsyncObjectChain< - K extends string | number | symbol, - U extends string | number | symbol, - T, - Rec extends Partial> = Record, -> extends AsyncObjectChain { - constructor( - private val: AsyncObjectChain, - private transformer: (key: K) => U | Promise, - ) { - super() - } - - async calculate(): Promise> { - const values = await this.val - .entries() - .map(async ([k, v]) => [await this.transformer(k), v]) - .value() - - return new ObjectChain(Object.fromEntries(values)) - } -} diff --git a/src/collections/async/MappingValuesAsyncObjectChain.ts b/src/collections/async/MappingValuesAsyncObjectChain.ts deleted file mode 100644 index 18eadfd..0000000 --- a/src/collections/async/MappingValuesAsyncObjectChain.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { AsyncObjectChain } from "./AsyncObjectChain" -import { ObjectChain } from "../../collections" - -export class MappingValuesAsyncObjectChain< - K extends string | number | symbol, - T, - U, - Rec extends Partial> = Record, -> extends AsyncObjectChain { - constructor( - private val: AsyncObjectChain, - private transformer: (key: T) => U | Promise, - ) { - super() - } - - async calculate(): Promise> { - const values = await this.val - .entries() - .map(async ([k, v]) => [k, await this.transformer(v)]) - .value() - - return new ObjectChain(Object.fromEntries(values)) - } -} diff --git a/src/collections/async/PermutationsAsyncChain.ts b/src/collections/async/PermutationsAsyncChain.ts deleted file mode 100644 index 35cd4cf..0000000 --- a/src/collections/async/PermutationsAsyncChain.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { Chain } from "../../collections" - -export class PermutationsAsyncChain extends AsyncChainBase< - ReadonlyArray -> { - constructor(private val: AsyncChainBase) { - super() - this.startCalclulation() - } - - async calculate(): Promise>> { - return (await this.val.await()).permutations() - } -} diff --git a/src/collections/async/ReversingAsyncChain.ts b/src/collections/async/ReversingAsyncChain.ts deleted file mode 100644 index 207c91a..0000000 --- a/src/collections/async/ReversingAsyncChain.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { Chain } from "../../collections" - -export class ReversingAsyncChain extends AsyncChainBase { - constructor(private val: AsyncChainBase) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - return (await this.val.await()).reverse() - } -} diff --git a/src/collections/async/RunningReduceAsyncChain.ts b/src/collections/async/RunningReduceAsyncChain.ts deleted file mode 100644 index 31401ed..0000000 --- a/src/collections/async/RunningReduceAsyncChain.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { chain, Chain } from "../../collections" - -export class RunningReduceAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private reducer: (accumulator: O, current: T) => Promise | O, - private initialValue: O, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - const ret = await this.val.reduce( - async (acc, it) => { - const elem = acc[acc.length - 1] - const next = await this.reducer(elem, it) - return [...acc, next] - }, - [this.initialValue], - ) - - return chain(ret) - } -} diff --git a/src/collections/async/SliceAsyncChain.ts b/src/collections/async/SliceAsyncChain.ts deleted file mode 100644 index f58c259..0000000 --- a/src/collections/async/SliceAsyncChain.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { Chain } from "../../collections" - -export class SliceAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private start?: number, - private end?: number, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - return (await this.val.await()).slice(this.start, this.end) - } -} diff --git a/src/collections/async/SlidingWindowAsyncChain.ts b/src/collections/async/SlidingWindowAsyncChain.ts deleted file mode 100644 index b72e62d..0000000 --- a/src/collections/async/SlidingWindowAsyncChain.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { slidingWindows } from "@opencreek/deno-std-collections" -import { Chain } from "../../collections" - -export class SlidingWindowAsyncChain extends AsyncChainBase< - ReadonlyArray -> { - constructor( - private val: AsyncChainBase, - private size: number, - private options: { - step?: number - partial?: boolean - }, - ) { - super() - } - - async calculate(): Promise>> { - const ret = slidingWindows(await this.val.value(), this.size, this.options) - return new Chain(ret) - } -} diff --git a/src/collections/async/SortByAsyncChain.ts b/src/collections/async/SortByAsyncChain.ts deleted file mode 100644 index c079584..0000000 --- a/src/collections/async/SortByAsyncChain.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { Chain } from "../../collections" - -export class SortByAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private selector: ( - a: T, - ) => - | Promise - | Date - | bigint - | string - | number, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - const values = await this.val - .map(async (el) => [el, await this.selector(el)] as const) - .await() - return values.sortBy((it) => it[1]).map((it) => it[0]) - } -} diff --git a/src/collections/async/SortingAsyncChain.ts b/src/collections/async/SortingAsyncChain.ts deleted file mode 100644 index ab5d24a..0000000 --- a/src/collections/async/SortingAsyncChain.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { Chain } from "../../collections" - -export class SortingAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private compareFn?: (a: T, b: T) => number, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - return (await this.val.await()).sort(this.compareFn) - } -} diff --git a/src/collections/async/TakeWhileAsyncChain.ts b/src/collections/async/TakeWhileAsyncChain.ts deleted file mode 100644 index da27a12..0000000 --- a/src/collections/async/TakeWhileAsyncChain.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { Chain } from "../../collections" - -export class TakeWhileAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private predicate: ( - el: T, - index: number, - array: ReadonlyArray, - ) => Promise | boolean, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - const values = await this.val.value() - const ret: Array = [] - for (let i = 0; i < values.length; i++) { - if (await this.predicate(values[i], i, values)) { - ret.push(values[i]) - } else { - break - } - } - - return new Chain(ret) - } -} diff --git a/src/collections/async/UnionAsyncChain.ts b/src/collections/async/UnionAsyncChain.ts deleted file mode 100644 index 1991ba9..0000000 --- a/src/collections/async/UnionAsyncChain.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { Chain } from "../../collections" - -export class UnionAsyncChain extends AsyncChainBase { - constructor( - private val: AsyncChainBase, - private withArrays: ReadonlyArray>, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - const other = await Promise.all( - this.withArrays.map(async (it) => - it instanceof AsyncChainBase ? await it.value() : it, - ), - ) - - return (await this.val.await()).union(...other) - } -} diff --git a/src/collections/async/ValuesAsyncChain.ts b/src/collections/async/ValuesAsyncChain.ts deleted file mode 100644 index f27909b..0000000 --- a/src/collections/async/ValuesAsyncChain.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { AsyncObjectChain } from "./AsyncObjectChain" -import { Chain } from "../../collections" - -export class ValuesAsyncChain< - K extends string | number | symbol, - T, - Rec extends Partial> = Record, -> extends AsyncChainBase { - constructor(private val: AsyncObjectChain) { - super() - } - - async calculate(): Promise> { - return (await this.val.await()).values() - } -} diff --git a/src/collections/async/ZippingAsyncChain.ts b/src/collections/async/ZippingAsyncChain.ts deleted file mode 100644 index 4c38920..0000000 --- a/src/collections/async/ZippingAsyncChain.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { AsyncChainBase } from "./AsyncChainBase" -import { Chain } from "../../collections" - -export class ZippingAsyncChain extends AsyncChainBase<[T, U]> { - constructor( - private val: AsyncChainBase, - private withArray: readonly U[] | AsyncChainBase, - ) { - super() - this.startCalclulation() - } - - async calculate(): Promise> { - const other = - this.withArray instanceof AsyncChainBase - ? await this.withArray.value() - : this.withArray - return (await this.val.await()).zip(other) - } -} diff --git a/src/index.ts b/src/index.ts index 5374a52..c1cb662 100644 --- a/src/index.ts +++ b/src/index.ts @@ -11,30 +11,4 @@ export * from "./table" export * from "./StopWatch" export * from "./strings" export * from "./BigDecimal" -export { AsyncChainBase } from "./collections/async/AsyncChainBase" -export { AsyncChain } from "./collections/async/AsyncChain" -export { AsyncObjectChain } from "./collections/async/AsyncObjectChain" -export { ValuesAsyncChain } from "./collections/async/ValuesAsyncChain" -export { KeysAsyncChain } from "./collections/async/KeysAsyncChain" -export { EntriesAsyncChain } from "./collections/async/EntriesAsyncChain" -export { MappingKeysAsyncObjectChain } from "./collections/async/MappingKeysAsyncObjectChain" -export { MappingValuesAsyncObjectChain } from "./collections/async/MappingValuesAsyncObjectChain" -export { MappingEntriesAsyncObjectChain } from "./collections/async/MappingEntriesAsyncObjectChain" -export { TakeWhileAsyncChain } from "./collections/async/TakeWhileAsyncChain" -export { DropWhileAsyncChain } from "./collections/async/DropWhileAsyncChain" -export { DistinctAsyncChain } from "./collections/async/DistinctAsyncChain" -export { SliceAsyncChain } from "./collections/async/SliceAsyncChain" -export { FilterAsyncChain } from "./collections/async/FilterAsyncChain" -export { FlattenAsyncChain } from "./collections/async/FlattenAsyncChain" -export { MappingAsyncChain } from "./collections/async/MappingAsyncChain" -export { SortByAsyncChain } from "./collections/async/SortByAsyncChain" -export { ZippingAsyncChain } from "./collections/async/ZippingAsyncChain" -export { UnionAsyncChain } from "./collections/async/UnionAsyncChain" -export { RunningReduceAsyncChain } from "./collections/async/RunningReduceAsyncChain" -export { ConcatenatingAsyncChain } from "./collections/async/ConcatenatingAsyncChain" -export { ChunkingAsyncChain } from "./collections/async/ChunkingAsyncChain" -export { IntersectionAsyncChain } from "./collections/async/IntersectionAsyncChain" -export { SlidingWindowAsyncChain } from "./collections/async/SlidingWindowAsyncChain" -export { PermutationsAsyncChain } from "./collections/async/PermutationsAsyncChain" -export { ReversingAsyncChain } from "./collections/async/ReversingAsyncChain" -export { SortingAsyncChain } from "./collections/async/SortingAsyncChain" +export * from "./collections/AsyncChain" From f2c67f794d6f8f7ef6e2f7cacef798e0e67c1e7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Wed, 30 Jul 2025 09:38:28 +0200 Subject: [PATCH 06/26] Add more types to objChain function --- src/collections.test.ts | 41 ++++++++++++++++++++++++++++++++++++++++- src/collections.ts | 6 ++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/collections.test.ts b/src/collections.test.ts index 19899fa..898738c 100644 --- a/src/collections.test.ts +++ b/src/collections.test.ts @@ -1,5 +1,5 @@ import test from "ava" -import { chain } from "./collections" +import { chain, objChain } from "./collections" test("should associateBy correctly", (t) => { const result = chain([1, 2, 3]) @@ -185,3 +185,42 @@ test("chain::mapAsync should be chainable into an async chain", async (t) => { t.deepEqual(result, [15, 9, 3]) }) + +test("The Touched Type shoud work correctly with object chain", (t) => { + type Touched = + | undefined + | true + | (Entity extends Record + ? { + [K in keyof Entity]?: Touched + } + : never) + type ExcludeNull = Value extends null + ? never + : Value extends ReadonlyArray + ? ReadonlyArray> + : Value extends Array + ? Array> + : Value extends Record + ? { + [Key in keyof Value]: ExcludeNull + } + : Exclude + + // we do the iife here, so TS doesn't narrow the type further + const touched: Touched>> = ( + (() => { + return { 0: { id: true } } as unknown as Touched< + ExcludeNull> + > + }) as () => Touched>> + )() + + if (touched !== true) { + const c = objChain(touched) + + const result = c?.mapKeys((it) => it.toString() + "-mapped").value() + + t.deepEqual(result, { "0-mapped": { id: true } }) + } +}) diff --git a/src/collections.ts b/src/collections.ts index 485e379..c557755 100644 --- a/src/collections.ts +++ b/src/collections.ts @@ -48,6 +48,12 @@ type FlattenChain = Distribute extends { type: ArrayOrChain } export function objChain( value: Record | ObjectChain | Chain, ): ObjectChain> +export function objChain( + value: Record | undefined, +): ObjectChain> | undefined +export function objChain( + value: Partial> | undefined, +): ObjectChain>> | undefined export function objChain( value: Partial>, ): ObjectChain>> From 80989d980c241e0e6a261621729e6be4e32c3a66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Fri, 1 Aug 2025 12:29:18 +0200 Subject: [PATCH 07/26] Simplify objChain types --- src/collections.ts | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/collections.ts b/src/collections.ts index c557755..f77dda1 100644 --- a/src/collections.ts +++ b/src/collections.ts @@ -46,17 +46,12 @@ type FlattenChain = Distribute extends { type: ArrayOrChain } : Chain export function objChain( - value: Record | ObjectChain | Chain, + value: + | Record + | Partial> + | ObjectChain + | Chain, ): ObjectChain> -export function objChain( - value: Record | undefined, -): ObjectChain> | undefined -export function objChain( - value: Partial> | undefined, -): ObjectChain>> | undefined -export function objChain( - value: Partial>, -): ObjectChain>> export function objChain<_K extends string | number | symbol, _T>( value: undefined | null, ): undefined From 072923aa9a9800e2f5be2653279a732ca4fba46b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Fri, 1 Aug 2025 12:31:28 +0200 Subject: [PATCH 08/26] Fix tests and add a new one --- src/collections.test.ts | 66 +++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 35 deletions(-) diff --git a/src/collections.test.ts b/src/collections.test.ts index 898738c..3bb6a60 100644 --- a/src/collections.test.ts +++ b/src/collections.test.ts @@ -186,41 +186,37 @@ test("chain::mapAsync should be chainable into an async chain", async (t) => { t.deepEqual(result, [15, 9, 3]) }) -test("The Touched Type shoud work correctly with object chain", (t) => { - type Touched = - | undefined - | true - | (Entity extends Record - ? { - [K in keyof Entity]?: Touched - } - : never) - type ExcludeNull = Value extends null - ? never - : Value extends ReadonlyArray - ? ReadonlyArray> - : Value extends Array - ? Array> - : Value extends Record - ? { - [Key in keyof Value]: ExcludeNull - } - : Exclude - +test("The Touched Type should work correctly with object chain", (t) => { // we do the iife here, so TS doesn't narrow the type further - const touched: Touched>> = ( - (() => { - return { 0: { id: true } } as unknown as Touched< - ExcludeNull> - > - }) as () => Touched>> - )() - + const result = testTouchedType([{ id: true }] as unknown as Touched) + + t.deepEqual(result, { "0-mapped": { id: true } }) +}) + +type Touched = + | undefined + | true + | (Entity extends ReadonlyArray + ? { + [X in number]?: Touched + } + : Entity extends Array + ? { + [X in number]?: Touched + } + : Entity extends Record + ? { + [K in keyof Entity]?: Touched + } + : never) + +function testTouchedType< + Entity extends Array | ReadonlyArray, +>(touched: Touched) { if (touched !== true) { - const c = objChain(touched) - - const result = c?.mapKeys((it) => it.toString() + "-mapped").value() - - t.deepEqual(result, { "0-mapped": { id: true } }) + return objChain(touched) + ?.mapKeys((it) => it.toString() + "-mapped") + .value() } -}) + return false +} From 1456dd9e7e94fc75a7704d978d877e2381b5acb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Fri, 1 Aug 2025 18:12:15 +0200 Subject: [PATCH 09/26] fix some functions --- src/collections/AsyncChain.test.ts | 109 +++++++- src/collections/AsyncChain.ts | 418 ++++++++++++++++++++++------- 2 files changed, 423 insertions(+), 104 deletions(-) diff --git a/src/collections/AsyncChain.test.ts b/src/collections/AsyncChain.test.ts index 2624165..2484a9e 100644 --- a/src/collections/AsyncChain.test.ts +++ b/src/collections/AsyncChain.test.ts @@ -1,7 +1,8 @@ import test from "ava" -import { chain } from "../collections" +import { Chain, chain } from "../collections" import { sleep } from "../sleep" import { asyncChain } from "./AsyncChain" +import { error } from "../error" test("AsyncChain should contain data", async (t) => { const chain = asyncChain([1, 2, 3]) @@ -80,9 +81,109 @@ test("Async chain should associate to async object chain", async (t) => { }) }) -function withDelay(transform: (el: T) => U): (el: T) => Promise { - return async (el: T) => { +test("should correctly handle exceptions", async (t) => { + const c = asyncChain([1, 2, 3, 4]) + + await t.throwsAsync( + async () => + await c + .map(withDelay((it) => (it == 3 ? error("3!") : it))) + .map((it) => it) + .value(), + ) +}) + +test("async obj chain should correctly handle exceptions", async (t) => { + const c = asyncChain([1, 2, 3, 4]).associateBy((it) => it) + + await t.throwsAsync(async () => { + await c.mapKeys(withDelay((it) => (it == 3 ? error("3!") : it), 100)) + }) +}) + +test("dropWhile should work correctly", async (t) => { + const c = asyncChain([1, 2, 3, 4, 5, 2, 1]) + const result = await c.dropWhile(withDelay((it) => it < 3)).value() + + t.deepEqual(result, [3, 4, 5, 2, 1]) +}) + +test("dropLastWhile should work correctly", async (t) => { + const c = asyncChain([3, 1, 2, 3, 4, 5]) + const result = await c.dropLastWhile(withDelay((it) => it >= 3)).value() + + t.deepEqual(result, [3, 1, 2]) +}) + +test("All the functions once, so they don't form infinite loops", async (t) => { + const c = chain([1, 2, 3, 4, 5, 6, 7, 8, 9]).async() + + const result = await c + .map(withDelay((it) => it * 3)) + .mapNotNullish(withDelay((it) => it + 1)) + .concat(c) + .distinct() + .distinctBy(withDelay((it) => it)) + .drop(2) + .dropLast(1) + .dropWhile(withDelay((it) => it < 15)) + .dropLastWhile(withDelay((it) => it > 5)) + .filter(withDelay((it) => it % 3 > 0)) + .filterNotNullish() + .chunk(2) + .flatten() + .flatMap(withDelay((it) => [it, it + 2])) + .slice(0, 5) + .sort() + .sortBy(withDelay((it) => -it)) + .permutations() + .reduce>>(async (array, it) => + chain([it, ...chain(array).value()]), + ) + + t.snapshot(result.value(), "long chain") + + t.snapshot(await c.zip([2, 1]).unzip(), "zip") + + t.snapshot(await c.maxBy(withDelay((it) => it * 3)), "maxBy") + t.snapshot(await c.maxOf(withDelay((it) => it * 3)), "maxOf") + t.snapshot(await c.minBy(withDelay((it) => it * 3)), "minBy") + t.snapshot(await c.minOf(withDelay((it) => it * 3)), "minOf") + + t.snapshot(await asyncChain(c.partition(withDelay((it) => it % 2 == 1))), "partition") + + // .maxWith + // .minWith + + await c.forEach(async (it) => { await sleep(0) - return transform(el) + t.true(it < 10) + }) + t.true(await c.every(withDelay((it) => it > 0))) + t.true(await c.some(withDelay((it) => it > 3))) + + t.snapshot(await c.first(), "first") + t.snapshot(await c.firstNotNullishOf(withDelay((it) => (it < 3 ? null : it))), "firstNotNullishOf") + t.snapshot(await c.last(), "last") + t.snapshot(await c.findIndex(withDelay((it) => it == 3)), "findIndex") + t.snapshot(await c.findSingle(withDelay((it) => it % 3 == 0)), "findSingle 1") + t.snapshot(await c.findSingle(withDelay((it) => it == 3)), "findSingle 2") + + t.snapshot(await c.indexOf(3), "indexOf") + t.snapshot(await c.concat(c).lastIndexOf(3), "concat") + + t.snapshot(await c.intersect(asyncChain([-1, 1, 2, 3])), "intersect") + + t.snapshot(await c.join(","), "join") + t.snapshot(await c.mapJoin(",", (it) => it + "^"), "mapJoin") +}) + +function withDelay( + transform: (el: T) => Promise | U, + time = 0, +): (el: T) => Promise { + return async (el: T) => { + await sleep(time) + return await transform(el) } } diff --git a/src/collections/AsyncChain.ts b/src/collections/AsyncChain.ts index f6e39df..2999c88 100644 --- a/src/collections/AsyncChain.ts +++ b/src/collections/AsyncChain.ts @@ -31,8 +31,8 @@ export abstract class AsyncChain implements Promise> { this._value = null } - protected startCalclulation() { - this._value = this.calculate() + protected startCalculation() { + this._value = this._value ?? this.calculate() } [Symbol.toStringTag] = "AsyncChain" @@ -47,7 +47,7 @@ export abstract class AsyncChain implements Promise> { | null | undefined, ): Promise { - return await this.calculate().then(onfulfilled, onrejected) + return await this.await().then(onfulfilled, onrejected) } async catch( @@ -69,7 +69,10 @@ export abstract class AsyncChain implements Promise> { abstract calculate(): Promise> async await(): Promise> { - return (await this._value) ?? (await this.calculate()) + void this.startCalculation() + return ( + (await this._value) ?? error("No promise after starting calculation") + ) } async value(): Promise> { @@ -131,28 +134,54 @@ export abstract class AsyncChain implements Promise> { return new SliceAsyncChain(this, -num) } - dropLastWhile(predicate: (el: T) => boolean): AsyncChain { + dropLastWhile( + predicate: (el: T) => Promise | boolean, + ): AsyncChain { // TODO(mr) efficiency lol - return new DropWhileAsyncChain(this.reverse(), predicate).reverse() + return new DropLastWhileAsyncChain(this, predicate) } - dropWhile(predicate: (el: T) => boolean): AsyncChain { + dropWhile(predicate: (el: T) => Promise | boolean): AsyncChain { return new DropWhileAsyncChain(this, predicate) } async every( - predicate: (el: T, index: number, array: ReadonlyArray) => boolean, + predicate: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, ): Promise async every( - predicate: (el: T, index: number, array: ReadonlyArray) => boolean, + predicate: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, ): Promise { - return (await this.await()).every(predicate) + const val = await this.value() + for (let i = 0; i < val.length; i++) { + if (!(await predicate(val[i], i, val))) { + return false + } + } + return true } async some( - predicate: (value: T, index: number, array: ReadonlyArray) => boolean, + predicate: ( + value: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, ): Promise { - return (await this.await()).some(predicate) + const val = await this.value() + for (let i = 0; i < val.length; i++) { + if (await predicate(val[i], i, val)) { + return true + } + } + return false } async first(): Promise { @@ -197,38 +226,82 @@ export abstract class AsyncChain implements Promise> { predicate: (el: T, index: number, array: ReadonlyArray) => el is S, ): Promise async find( - predicate: (el: T, index: number, array: ReadonlyArray) => boolean, + predicate: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, ): Promise async find( - predicate: (el: T, index: number, array: ReadonlyArray) => boolean, + predicate: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, ): Promise { - return (await this.await()).find(predicate) + const index = await this.findIndex(predicate) + if (index == undefined) return undefined + return (await this.value())[index] } async findIndex( - predicate: (el: T, index: number, array: ReadonlyArray) => boolean, + predicate: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, ): Promise { - return (await this.await()).findIndex(predicate) + const val = await this.value() + for (let i = 0; i < val.length; i++) { + if (await predicate(val[i], i, val)) { + return i + } + } + return undefined } - async findLast(predicate: (el: T) => boolean): Promise { - return (await this.await()).findLast(predicate) + async findLast( + predicate: (el: T) => Promise | boolean, + ): Promise { + const index = await this.findLastIndex(predicate) + if (index == undefined) return undefined + return (await this.value())[index] } async findLastIndex( - predicate: (el: T) => boolean, + predicate: (el: T) => Promise | boolean, ): Promise { - return (await this.await()).findLastIndex(predicate) + const val = await this.value() + for (let i = val.length - 1; i >= 0; i--) { + if (await predicate(val[i])) { + return i + } + } + return undefined } - async findSingle(predicate: (el: T) => boolean): Promise { - return (await this.await()).findSingle(predicate) + async findSingle( + predicate: (el: T) => Promise | boolean, + ): Promise { + const first = await this.findIndex(predicate) + if (first == undefined) return undefined + + const last = await this.findLastIndex(predicate) + + if (first != last) return undefined + + return (await this.value())[last] } async firstNotNullishOf( - selector: (item: T) => O | undefined | null, + selector: (item: T) => Promise | O | undefined | null, ): Promise | undefined> { - return (await this.await()).firstNotNullishOf(selector) + const val = await this.value() + for (let i = 0; i < val.length; i++) { + const res = await selector(val[i]) + if (res != null) return res + } + return undefined } flatten(): FlattenAsyncChain { @@ -243,7 +316,7 @@ export abstract class AsyncChain implements Promise> { el: T, index: number, array: ReadonlyArray, - ) => ReadonlyArray, + ) => Promise> | ReadonlyArray, ): FlattenAsyncChain flatMap( transformer: (el: T, index: number, array: ReadonlyArray) => Set, @@ -267,11 +340,15 @@ export abstract class AsyncChain implements Promise> { el: T, index: number, array: ReadonlyArray, - ) => Chain | ReadonlyArray | Set | AsyncChain, - ): FlattenAsyncChain { + ) => + | Chain + | ReadonlyArray + | Set + | AsyncChain + | Promise>, + ): AsyncChain { const mapped = this.map(transformer) - // @ts-expect-error trust me bro - return mapped.flatten() + return mapped.flatten() as unknown as AsyncChain } async forEach( @@ -344,32 +421,71 @@ export abstract class AsyncChain implements Promise> { return new MappingAsyncChain(this, transformer) } - mapNotNullish(transformer: (el: T) => O): AsyncChain> { + mapNotNullish( + transformer: (el: T) => Promise | O, + ): AsyncChain> { return this.map(transformer).filterNotNullish() } - async maxBy(selector: (el: T) => string): Promise - async maxBy(selector: (el: T) => bigint): Promise - async maxBy(selector: (el: T) => number): Promise - async maxBy(selector: (el: T) => Date): Promise async maxBy( - selector: (el: T) => Date | number | bigint | string, + selector: (el: T) => Promise | string, + ): Promise + async maxBy( + selector: (el: T) => Promise | bigint, + ): Promise + async maxBy( + selector: (el: T) => Promise | number, + ): Promise + async maxBy(selector: (el: T) => Promise | Date): Promise + async maxBy( + selector: ( + el: T, + ) => + | Date + | number + | bigint + | string + | Promise, ): Promise { - // this is save because maxBy is overloaded too - return (await this.await()).maxBy(selector as (el: T) => string) + let max: number | string | bigint | Date | undefined + let ret: T | undefined + + for (const elem of await this.value()) { + const elemValue = await selector(elem) + if (max == null || elemValue > max) { + max = elemValue + ret = elem + } + } + return ret } - async maxOf(selector: (el: T) => bigint): Promise - async maxOf(selector: (el: T) => number): Promise - async maxOf(selector: (el: T) => string): Promise - async maxOf(selector: (el: T) => Date): Promise async maxOf( - selector: (el: T) => bigint | number | string | Date, + selector: (el: T) => Promise | bigint, + ): Promise + async maxOf( + selector: (el: T) => Promise | number, + ): Promise + async maxOf( + selector: (el: T) => Promise | string, + ): Promise + async maxOf( + selector: (el: T) => Promise | Date, + ): Promise + async maxOf( + selector: ( + el: T, + ) => + | bigint + | number + | string + | Date + | Promise, ): Promise { - return (await this.await()).maxOf( - // TODO(mr) - // @ts-expect-error - selector as (el: T) => bigint | number | string | Date, + return ( + (await this.map(selector)) + // We need to cast, because of the overloads. We now it's safe because of our overloads though + .maxOf((it) => it as string) ) } @@ -377,27 +493,65 @@ export abstract class AsyncChain implements Promise> { return (await this.await()).maxWith(comparator) } - async minBy(selector: (el: T) => number): Promise - async minBy(selector: (el: T) => string): Promise - async minBy(selector: (el: T) => bigint): Promise - async minBy(selector: (el: T) => Date): Promise async minBy( - selector: (el: T) => Date | number | bigint | string, + selector: (el: T) => Promise | string, + ): Promise + async minBy( + selector: (el: T) => Promise | bigint, + ): Promise + async minBy( + selector: (el: T) => Promise | number, + ): Promise + async minBy(selector: (el: T) => Promise | Date): Promise + async minBy( + selector: ( + el: T, + ) => + | Date + | number + | bigint + | string + | Promise, ): Promise { - return (await this.await()).minBy(selector as (el: T) => string) + let max: number | string | bigint | Date | undefined + let ret: T | undefined + + for (const elem of await this.value()) { + const elemValue = await selector(elem) + if (max == null || elemValue < max) { + max = elemValue + ret = elem + } + } + return ret } - async minOf(selector: (el: T) => bigint): Promise - async minOf(selector: (el: T) => number): Promise - async minOf(selector: (el: T) => string): Promise - async minOf(selector: (el: T) => Date): Promise async minOf( - selector: (el: T) => bigint | number | string | Date, + selector: (el: T) => Promise | bigint, + ): Promise + async minOf( + selector: (el: T) => Promise | number, + ): Promise + async minOf( + selector: (el: T) => Promise | string, + ): Promise + async minOf( + selector: (el: T) => Promise | Date, + ): Promise + async minOf( + selector: ( + el: T, + ) => + | bigint + | number + | string + | Date + | Promise, ): Promise { - return (await this.await()).minOf( - // TODO(mr) - // @ts-expect-error - selector as (el: T) => bigint | number | string | Date, + return ( + (await this.map(selector)) + // We need to cast, because of the overloads. We now it's safe because of our overloads though + .minOf((it) => it as string) ) } @@ -408,13 +562,21 @@ export abstract class AsyncChain implements Promise> { partition( predicate: (el: T) => Promise | boolean, ): [AsyncChain, AsyncChain] { - return [this.filter(predicate), this.filter((el) => !predicate(el))] + return [this.filter(predicate), this.filter(async (el) => !await predicate(el))] } permutations(): AsyncChain> { return new PermutationsAsyncChain(this) } + async reduce( + reducer: ( + accumulator: AsyncChain, + current: T, + index: number, + array: ReadonlyArray, + ) => AsyncChain, + ): Promise> async reduce( reducer: ( accumulator: T, @@ -705,18 +867,12 @@ export abstract class AsyncChain implements Promise> { return new UnionAsyncChain(this, arrays) } - unzip(): PairSplit { - // TODO(mr) - // @ts-expect-error - const [left, right] = unzip(this.val as unknown as ReadonlyArray<[T, T]>) - return [new Chain(left), new Chain(right)] as PairSplit + async unzip(): Promise> { + return (await this.await()).unzip() } - withoutAll(values: readonly T[]): Chain { - // TODO(mr) - // @ts-expect-error - const ret = withoutAll(this.val, values) - return new Chain(ret) + withoutAll(values: readonly T[] | Chain | AsyncChain): AsyncChain { + return new WithoutAllAsyncChain(this, values) } zip(withArray: readonly U[] | AsyncChain): AsyncChain<[T, U]> { @@ -727,7 +883,7 @@ export abstract class AsyncChain implements Promise> { export class SimpleAsyncChain extends AsyncChain { constructor(private val: ReadonlyArray | T>) { super() - this.startCalclulation() + this.startCalculation() } async calculate(): Promise> { @@ -741,7 +897,7 @@ export class ChunkingAsyncChain extends AsyncChain { private size: number, ) { super() - this.startCalclulation() + this.startCalculation() } async calculate(): Promise> { @@ -756,7 +912,7 @@ export class ConcatenatingAsyncChain extends AsyncChain { private other: AsyncChain | Iterable, ) { super() - this.startCalclulation() + this.startCalculation() } async calculate(): Promise> { @@ -772,7 +928,7 @@ export class DistinctAsyncChain extends AsyncChain { private selector: (el: T) => D, ) { super() - this.startCalclulation() + this.startCalculation() } async calculate(): Promise> { @@ -790,21 +946,47 @@ export class DropWhileAsyncChain extends AsyncChain { ) => Promise | boolean, ) { super() - this.startCalclulation() + this.startCalculation() } async calculate(): Promise> { - const values = await this.val.value() - const ret: Array = [] - for (let i = 0; i < values.length; i++) { - if (!(await this.predicate(values[i], i, values))) { + const values = await this.val.await() + let count = 0 + for (let i = 0; i < values.value().length; i++) { + if (!(await this.predicate(values.value()[i], i, values.value()))) { break - } else { - ret.push(values[i]) } + count++ } - return new Chain(ret) + return values.drop(count) + } +} + +export class DropLastWhileAsyncChain extends AsyncChain { + constructor( + private val: AsyncChain, + private predicate: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, + ) { + super() + this.startCalculation() + } + + async calculate(): Promise> { + const values = await this.val.await() + let count = 0 + for (let i = values.value().length - 1; i >= 0; i--) { + if (!(await this.predicate(values.value()[i], i, values.value()))) { + break + } + count++ + } + + return values.dropLast(count) } } @@ -832,7 +1014,7 @@ export class FilterAsyncChain extends AsyncChain { ) => Promise | boolean, ) { super() - this.startCalclulation() + this.startCalculation() } async calculate(): Promise> { @@ -842,6 +1024,7 @@ export class FilterAsyncChain extends AsyncChain { return current.filter((_, index) => mask[index]) } } + type Distribute = U extends any ? { type: U } : never type FlattenAsyncType = Distribute extends { @@ -851,13 +1034,27 @@ type FlattenAsyncType = Distribute extends { : T export class FlattenAsyncChain extends AsyncChain> { - constructor(private val: AsyncChain) { + constructor( + private val: + | AsyncChain + | AsyncChain> + | AsyncChain> + | AsyncChain>, + ) { super() - this.startCalclulation() + this.startCalculation() } async calculate(): Promise>> { - return (await this.val.await()).flatten() as Chain> + const flattend = await this.val.map(async (el) => + el instanceof AsyncChain + ? await el.value() + : el instanceof Chain + ? el.value() + : el, + ) + + return flattend.flatten() as Chain> } } @@ -867,7 +1064,7 @@ export class IntersectionAsyncChain extends AsyncChain { private withArrays: ReadonlyArray>, ) { super() - this.startCalclulation() + this.startCalculation() } async calculate(): Promise> { @@ -903,7 +1100,7 @@ export class MappingAsyncChain extends AsyncChain { ) => U | Promise, ) { super() - this.startCalclulation() + this.startCalculation() } async calculate(): Promise> { @@ -919,7 +1116,7 @@ export class MappingAsyncChain extends AsyncChain { export class PermutationsAsyncChain extends AsyncChain> { constructor(private val: AsyncChain) { super() - this.startCalclulation() + this.startCalculation() } async calculate(): Promise>> { @@ -930,7 +1127,7 @@ export class PermutationsAsyncChain extends AsyncChain> { export class ReversingAsyncChain extends AsyncChain { constructor(private val: AsyncChain) { super() - this.startCalclulation() + this.startCalculation() } async calculate(): Promise> { @@ -945,7 +1142,7 @@ export class RunningReduceAsyncChain extends AsyncChain { private initialValue: O, ) { super() - this.startCalclulation() + this.startCalculation() } async calculate(): Promise> { @@ -969,7 +1166,7 @@ export class SliceAsyncChain extends AsyncChain { private end?: number, ) { super() - this.startCalclulation() + this.startCalculation() } async calculate(): Promise> { @@ -1008,7 +1205,7 @@ export class SortByAsyncChain extends AsyncChain { | number, ) { super() - this.startCalclulation() + this.startCalculation() } async calculate(): Promise> { @@ -1025,7 +1222,7 @@ export class SortingAsyncChain extends AsyncChain { private compareFn?: (a: T, b: T) => number, ) { super() - this.startCalclulation() + this.startCalculation() } async calculate(): Promise> { @@ -1043,7 +1240,7 @@ export class TakeWhileAsyncChain extends AsyncChain { ) => Promise | boolean, ) { super() - this.startCalclulation() + this.startCalculation() } async calculate(): Promise> { @@ -1067,7 +1264,7 @@ export class UnionAsyncChain extends AsyncChain { private withArrays: ReadonlyArray>, ) { super() - this.startCalclulation() + this.startCalculation() } async calculate(): Promise> { @@ -1101,7 +1298,7 @@ export class ZippingAsyncChain extends AsyncChain<[T, U]> { private withArray: readonly U[] | AsyncChain, ) { super() - this.startCalclulation() + this.startCalculation() } async calculate(): Promise> { @@ -1113,6 +1310,26 @@ export class ZippingAsyncChain extends AsyncChain<[T, U]> { } } +export class WithoutAllAsyncChain extends AsyncChain { + constructor( + private val: AsyncChain, + private without: readonly T[] | AsyncChain | Chain, + ) { + super() + this.startCalculation() + } + + async calculate(): Promise> { + const other = + this.without instanceof AsyncChain + ? await this.without.value() + : this.without instanceof Chain + ? this.without.value() + : this.without + return (await this.val.await()).withoutAll(other) + } +} + // ********************* // Async Object // ********************* @@ -1270,6 +1487,7 @@ export class AssociatingAsyncObjectChain< return objChain(entries) } } + export class GroupingAsyncObjectChain< K extends string | number | symbol, T, From bd8787456f1edbccf287a45412b3633291e86935 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Fri, 1 Aug 2025 18:14:02 +0200 Subject: [PATCH 10/26] Do todos --- src/collections/AsyncChain.test.ts | 14 +++++++---- src/collections/AsyncChain.ts | 38 ++++++++++++++++++++++++++---- 2 files changed, 43 insertions(+), 9 deletions(-) diff --git a/src/collections/AsyncChain.test.ts b/src/collections/AsyncChain.test.ts index 2484a9e..a711ef4 100644 --- a/src/collections/AsyncChain.test.ts +++ b/src/collections/AsyncChain.test.ts @@ -150,7 +150,10 @@ test("All the functions once, so they don't form infinite loops", async (t) => { t.snapshot(await c.minBy(withDelay((it) => it * 3)), "minBy") t.snapshot(await c.minOf(withDelay((it) => it * 3)), "minOf") - t.snapshot(await asyncChain(c.partition(withDelay((it) => it % 2 == 1))), "partition") + t.snapshot( + await asyncChain(c.partition(withDelay((it) => it % 2 == 1))), + "partition", + ) // .maxWith // .minWith @@ -163,8 +166,11 @@ test("All the functions once, so they don't form infinite loops", async (t) => { t.true(await c.some(withDelay((it) => it > 3))) t.snapshot(await c.first(), "first") - t.snapshot(await c.firstNotNullishOf(withDelay((it) => (it < 3 ? null : it))), "firstNotNullishOf") - t.snapshot(await c.last(), "last") + t.snapshot( + await c.firstNotNullishOf(withDelay((it) => (it < 3 ? null : it))), + "firstNotNullishOf", + ) + t.snapshot(await c.last(), "last") t.snapshot(await c.findIndex(withDelay((it) => it == 3)), "findIndex") t.snapshot(await c.findSingle(withDelay((it) => it % 3 == 0)), "findSingle 1") t.snapshot(await c.findSingle(withDelay((it) => it == 3)), "findSingle 2") @@ -174,7 +180,7 @@ test("All the functions once, so they don't form infinite loops", async (t) => { t.snapshot(await c.intersect(asyncChain([-1, 1, 2, 3])), "intersect") - t.snapshot(await c.join(","), "join") + t.snapshot(await c.join(","), "join") t.snapshot(await c.mapJoin(",", (it) => it + "^"), "mapJoin") }) diff --git a/src/collections/AsyncChain.ts b/src/collections/AsyncChain.ts index 2999c88..a460f1e 100644 --- a/src/collections/AsyncChain.ts +++ b/src/collections/AsyncChain.ts @@ -101,7 +101,6 @@ export abstract class AsyncChain implements Promise> { return objChain(entries) as IfString> } - // TODO(mr) chunk(size: number): AsyncChain { return new ChunkingAsyncChain(this, size) } @@ -137,7 +136,6 @@ export abstract class AsyncChain implements Promise> { dropLastWhile( predicate: (el: T) => Promise | boolean, ): AsyncChain { - // TODO(mr) efficiency lol return new DropLastWhileAsyncChain(this, predicate) } @@ -562,7 +560,10 @@ export abstract class AsyncChain implements Promise> { partition( predicate: (el: T) => Promise | boolean, ): [AsyncChain, AsyncChain] { - return [this.filter(predicate), this.filter(async (el) => !await predicate(el))] + return [ + this.filter(predicate), + this.filter(async (el) => !(await predicate(el))), + ] } permutations(): AsyncChain> { @@ -855,8 +856,7 @@ export abstract class AsyncChain implements Promise> { } takeLastWhile(predicate: (el: T) => boolean): AsyncChain { - // TODO(mr) efficiency lol - return new TakeWhileAsyncChain(this.reverse(), predicate).reverse() + return new TakeLastWhileAsyncChain(this, predicate) } takeWhile(predicate: (el: T) => boolean): AsyncChain { @@ -1258,6 +1258,34 @@ export class TakeWhileAsyncChain extends AsyncChain { } } +export class TakeLastWhileAsyncChain extends AsyncChain { + constructor( + private val: AsyncChain, + private predicate: ( + el: T, + index: number, + array: ReadonlyArray, + ) => Promise | boolean, + ) { + super() + this.startCalculation() + } + + async calculate(): Promise> { + const values = await this.val.value() + const ret: Array = [] + for (let i = values.length; i < 0; i++) { + if (await this.predicate(values[i], i, values)) { + ret.push(values[i]) + } else { + break + } + } + + return new Chain(ret.reverse()) + } +} + export class UnionAsyncChain extends AsyncChain { constructor( private val: AsyncChain, From 34a95c062f8ef8d1826c83daf4d47098682e6da1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Fri, 1 Aug 2025 18:15:18 +0200 Subject: [PATCH 11/26] :camera_flash: --- src/collections.test.ts.snap | Bin 642 -> 644 bytes src/collections/AsyncChain.test.ts.md | 1007 +++++++++++++++++++++++ src/collections/AsyncChain.test.ts.snap | Bin 0 -> 4783 bytes 3 files changed, 1007 insertions(+) create mode 100644 src/collections/AsyncChain.test.ts.md create mode 100644 src/collections/AsyncChain.test.ts.snap diff --git a/src/collections.test.ts.snap b/src/collections.test.ts.snap index d8a29a9ee20920d002deaf9155420d8c2bb8bec6..815ea5e8ef735edee4fdbe9aefcc78927cc68a19 100644 GIT binary patch literal 644 zcmV-~0(<>IRzV5g+Ym*Oe~8taAr?5$nP1KvQ_P$65H zrr-Z=kROW(00000000B6R6UQ=KoEVic0Ncrk`M|`LdXJyfQCXL`6*rc5KJl*bWD{uy%HycHet5J4gGv?HEt| z*B?w_3EO;j&L2Bdd!%vScMOXQ^VUo=9M3ZiVb3go!d-vt2><2LXv78IeWRd);G-(3 z*8$uFum|7}K%2@fDi8I?rXh%uWwY4?ZGaR|18rhwf>o(SrLN`+FN{8E05Cbe80zM5rC!WaPV}RMD%WD)vW4kw`?HBrM1LnmU%3V# zkZ?DqUfT9NJ`0%7SB*vkR71e;WIzK8gpN0f2|=JXh9v9v3Cz zohm}i?~&(B-NLuI$8Kl&J_Mluk?*I7rT~)uJ7QAv0jRhiW emTWFOTRXh}-!NhFFj3`UQvLQCXL`6->*s-0>#&$R$(s*ZQUe<5kj^}94V!r(( zdh^lYE@#g3bJ4y(WfPM|k#D<{JGW!g_QTMzIg8!MqX7bV^y+9bp`7l#RY{X1KWKq= z1J_$Sg;nVxOv-mCRr1xRX{od<22D+&x<^p7s)8UPlLL$m{`_zTyLU{&>pSQTwSGkekmDm z;SzFwk3)YN)P9@0%AGRZ$7t3c>3#}eiol{jX&QPjhO9L7MGV<#`~ASsPqbf>6v~1W zEl^Y-%w#K6;8s@T7SOdI7hdS5}(L|xPb zVc!t)U505(Fl0iSiUeyc!7d=AC&OAx7a=z=Q1L?k5n!zX*mB<;(qQDfUfp+L7Hy}K zE}ZW5uUs{IgXA%sdHI=_vNIW7m?z1$?)(pBZM}o`;`rl4OI}tnsoQg26$oRFD4Qjl cbIn!`@BcSU6nU6v@-S)q2H?jrKK2Iy04vBYIRF3v diff --git a/src/collections/AsyncChain.test.ts.md b/src/collections/AsyncChain.test.ts.md new file mode 100644 index 0000000..646950d --- /dev/null +++ b/src/collections/AsyncChain.test.ts.md @@ -0,0 +1,1007 @@ +# Snapshot report for `src/collections/AsyncChain.test.ts` + +The actual snapshot is saved in `AsyncChain.test.ts.snap`. + +Generated by [AVA](https://avajs.dev). + +## All the functions once, so they don't form infinite loops + +> long chain + + [ + [ + 16, + 21, + 19, + 18, + 22, + ], + [ + 21, + 16, + 19, + 18, + 22, + ], + [ + 19, + 16, + 21, + 18, + 22, + ], + [ + 16, + 19, + 21, + 18, + 22, + ], + [ + 21, + 19, + 16, + 18, + 22, + ], + [ + 19, + 21, + 16, + 18, + 22, + ], + [ + 19, + 21, + 18, + 16, + 22, + ], + [ + 21, + 19, + 18, + 16, + 22, + ], + [ + 18, + 19, + 21, + 16, + 22, + ], + [ + 19, + 18, + 21, + 16, + 22, + ], + [ + 21, + 18, + 19, + 16, + 22, + ], + [ + 18, + 21, + 19, + 16, + 22, + ], + [ + 18, + 16, + 19, + 21, + 22, + ], + [ + 16, + 18, + 19, + 21, + 22, + ], + [ + 19, + 18, + 16, + 21, + 22, + ], + [ + 18, + 19, + 16, + 21, + 22, + ], + [ + 16, + 19, + 18, + 21, + 22, + ], + [ + 19, + 16, + 18, + 21, + 22, + ], + [ + 21, + 16, + 18, + 19, + 22, + ], + [ + 16, + 21, + 18, + 19, + 22, + ], + [ + 18, + 21, + 16, + 19, + 22, + ], + [ + 21, + 18, + 16, + 19, + 22, + ], + [ + 16, + 18, + 21, + 19, + 22, + ], + [ + 18, + 16, + 21, + 19, + 22, + ], + [ + 22, + 16, + 21, + 19, + 18, + ], + [ + 16, + 22, + 21, + 19, + 18, + ], + [ + 21, + 22, + 16, + 19, + 18, + ], + [ + 22, + 21, + 16, + 19, + 18, + ], + [ + 16, + 21, + 22, + 19, + 18, + ], + [ + 21, + 16, + 22, + 19, + 18, + ], + [ + 21, + 16, + 19, + 22, + 18, + ], + [ + 16, + 21, + 19, + 22, + 18, + ], + [ + 19, + 21, + 16, + 22, + 18, + ], + [ + 21, + 19, + 16, + 22, + 18, + ], + [ + 16, + 19, + 21, + 22, + 18, + ], + [ + 19, + 16, + 21, + 22, + 18, + ], + [ + 19, + 22, + 21, + 16, + 18, + ], + [ + 22, + 19, + 21, + 16, + 18, + ], + [ + 21, + 19, + 22, + 16, + 18, + ], + [ + 19, + 21, + 22, + 16, + 18, + ], + [ + 22, + 21, + 19, + 16, + 18, + ], + [ + 21, + 22, + 19, + 16, + 18, + ], + [ + 16, + 22, + 19, + 21, + 18, + ], + [ + 22, + 16, + 19, + 21, + 18, + ], + [ + 19, + 16, + 22, + 21, + 18, + ], + [ + 16, + 19, + 22, + 21, + 18, + ], + [ + 22, + 19, + 16, + 21, + 18, + ], + [ + 19, + 22, + 16, + 21, + 18, + ], + [ + 18, + 22, + 16, + 21, + 19, + ], + [ + 22, + 18, + 16, + 21, + 19, + ], + [ + 16, + 18, + 22, + 21, + 19, + ], + [ + 18, + 16, + 22, + 21, + 19, + ], + [ + 22, + 16, + 18, + 21, + 19, + ], + [ + 16, + 22, + 18, + 21, + 19, + ], + [ + 16, + 22, + 21, + 18, + 19, + ], + [ + 22, + 16, + 21, + 18, + 19, + ], + [ + 21, + 16, + 22, + 18, + 19, + ], + [ + 16, + 21, + 22, + 18, + 19, + ], + [ + 22, + 21, + 16, + 18, + 19, + ], + [ + 21, + 22, + 16, + 18, + 19, + ], + [ + 21, + 18, + 16, + 22, + 19, + ], + [ + 18, + 21, + 16, + 22, + 19, + ], + [ + 16, + 21, + 18, + 22, + 19, + ], + [ + 21, + 16, + 18, + 22, + 19, + ], + [ + 18, + 16, + 21, + 22, + 19, + ], + [ + 16, + 18, + 21, + 22, + 19, + ], + [ + 22, + 18, + 21, + 16, + 19, + ], + [ + 18, + 22, + 21, + 16, + 19, + ], + [ + 21, + 22, + 18, + 16, + 19, + ], + [ + 22, + 21, + 18, + 16, + 19, + ], + [ + 18, + 21, + 22, + 16, + 19, + ], + [ + 21, + 18, + 22, + 16, + 19, + ], + [ + 19, + 18, + 22, + 16, + 21, + ], + [ + 18, + 19, + 22, + 16, + 21, + ], + [ + 22, + 19, + 18, + 16, + 21, + ], + [ + 19, + 22, + 18, + 16, + 21, + ], + [ + 18, + 22, + 19, + 16, + 21, + ], + [ + 22, + 18, + 19, + 16, + 21, + ], + [ + 22, + 18, + 16, + 19, + 21, + ], + [ + 18, + 22, + 16, + 19, + 21, + ], + [ + 16, + 22, + 18, + 19, + 21, + ], + [ + 22, + 16, + 18, + 19, + 21, + ], + [ + 18, + 16, + 22, + 19, + 21, + ], + [ + 16, + 18, + 22, + 19, + 21, + ], + [ + 16, + 19, + 22, + 18, + 21, + ], + [ + 19, + 16, + 22, + 18, + 21, + ], + [ + 22, + 16, + 19, + 18, + 21, + ], + [ + 16, + 22, + 19, + 18, + 21, + ], + [ + 19, + 22, + 16, + 18, + 21, + ], + [ + 22, + 19, + 16, + 18, + 21, + ], + [ + 18, + 19, + 16, + 22, + 21, + ], + [ + 19, + 18, + 16, + 22, + 21, + ], + [ + 16, + 18, + 19, + 22, + 21, + ], + [ + 18, + 16, + 19, + 22, + 21, + ], + [ + 19, + 16, + 18, + 22, + 21, + ], + [ + 16, + 19, + 18, + 22, + 21, + ], + [ + 21, + 19, + 18, + 22, + 16, + ], + [ + 19, + 21, + 18, + 22, + 16, + ], + [ + 18, + 21, + 19, + 22, + 16, + ], + [ + 21, + 18, + 19, + 22, + 16, + ], + [ + 19, + 18, + 21, + 22, + 16, + ], + [ + 18, + 19, + 21, + 22, + 16, + ], + [ + 18, + 19, + 22, + 21, + 16, + ], + [ + 19, + 18, + 22, + 21, + 16, + ], + [ + 22, + 18, + 19, + 21, + 16, + ], + [ + 18, + 22, + 19, + 21, + 16, + ], + [ + 19, + 22, + 18, + 21, + 16, + ], + [ + 22, + 19, + 18, + 21, + 16, + ], + [ + 22, + 21, + 18, + 19, + 16, + ], + [ + 21, + 22, + 18, + 19, + 16, + ], + [ + 18, + 22, + 21, + 19, + 16, + ], + [ + 22, + 18, + 21, + 19, + 16, + ], + [ + 21, + 18, + 22, + 19, + 16, + ], + [ + 18, + 21, + 22, + 19, + 16, + ], + [ + 19, + 21, + 22, + 18, + 16, + ], + [ + 21, + 19, + 22, + 18, + 16, + ], + [ + 22, + 19, + 21, + 18, + 16, + ], + [ + 19, + 22, + 21, + 18, + 16, + ], + [ + 21, + 22, + 19, + 18, + 16, + ], + 22, + 21, + 19, + 18, + 16, + ] + +> zip + + [ + Chain { + val: [ + 1, + 2, + ], + --- + 1, + 2, + }, + Chain { + val: [ + 2, + 1, + ], + --- + 2, + 1, + }, + ] + +> maxBy + + 9 + +> maxOf + + 27 + +> minBy + + 1 + +> minOf + + 3 + +> partition + + Chain { + val: [ + Chain { + val: [ + 1, + 3, + 5, + 7, + 9, + ], + --- + 1, + 3, + 5, + 7, + 9, + }, + Chain { + val: [ + 2, + 4, + 6, + 8, + ], + --- + 2, + 4, + 6, + 8, + }, + ], + --- + Chain { + val: [ + 1, + 3, + 5, + 7, + 9, + ], + --- + 1, + 3, + 5, + 7, + 9, + }, + Chain { + val: [ + 2, + 4, + 6, + 8, + ], + --- + 2, + 4, + 6, + 8, + }, + } + +> first + + 1 + +> firstNotNullishOf + + 3 + +> last + + 9 + +> findIndex + + 2 + +> findSingle 1 + + undefined + +> findSingle 2 + + 3 + +> indexOf + + 2 + +> concat + + 11 + +> intersect + + Chain { + val: [ + 1, + 2, + 3, + ], + --- + 1, + 2, + 3, + } + +> join + + '1,2,3,4,5,6,7,8,9' + +> mapJoin + + '1^,2^,3^,4^,5^,6^,7^,8^,9^' diff --git a/src/collections/AsyncChain.test.ts.snap b/src/collections/AsyncChain.test.ts.snap new file mode 100644 index 0000000000000000000000000000000000000000..3d25a892d901be75b7e99f5e35e98e4325c53d30 GIT binary patch literal 4783 zcmZvadpr|f{Qq4Vn#*z-+FTPFxn4L z*_0yP<`TJWA0)Y_BGl)%-}n3P_xy3ryJz`aHmt!%%K;PjM(nu)%C|)L{$~lclq99Nj!nMmO?;kd zmZ>PIv2SFjQ4rO<0aZ~^5eR?>k^F7-4~vX;N57=GdSBep+Vg6mdcCB%zw~PLYVG(G z9?{^n(=m26$xJhCHncMFir?_Xx%b0={;n^a**SA2_Pyp#b7P^|)ioQj5=KKTBbiYX z8))a~d^?p8U(*|LHD=#G@#02WZ&PcxAxHVEi(bt4#2-Ja#rHb*_CD=(CU~`cGZtETE>7<0I$uC4Eh|Z4i*y!LgJxT}w~x;ONMutP0$Q4z%MspqS|+aaQ-C zkQqWb)V&Q?2;G|@WJ8@|`_DwTy%6{4#MM9(+PT+Gn{p{jGn*Yyb3(=<>7&xUe@W*+ zLCGqsBxBIuJ`As*YU$plp%h!)MA^M)kRoClU zBRh9!cO~LZp}jBV}GE#xXT@O5@FEtNDSP ze#nh@`1px8drx{$GBaSoyR@x9vTn|qC;sh-=dZp=ULcmCng)cyd+-kHG;q}uEUtb) ziL3_qt0p`e&;;kQk>SU&RS0)&g{n*4tS6AB3rMH=Iq(3!1PQF)f_TdeM3}mB59NH) zE_u8KCKtfhEg>!IZ3DI=skH{T316&F> z_2cqGV$LI-=Ochi5hVz4Jpdx7ZF+wGwv6s5v6J-=WX`1x8@LB&NU({IS?ZAY?nK5w zGFW$P_dY8avR$3g;uBcJvV!|PCXfegWR&VYb}C~VAogIT>L<=zE~M%FMD>;)&?8*I zM6f;~Cmv`5k9M7?-SPl-!h6aIg#)ntj25qXAMy;u`Fxx8d=BvThusdAQqJG|{taWq zJeFUMx6Cj6G>uR?ume`AH3*c&{(*RdCBjT?xa9-;GL4^h+gak_sAB*2`YMgO!S_`f z*%fj|>(_AXGC8BQYd99~*tn*8?Y*eQ#2-}2p2@1{Z`IYT5Q~%B{Sb?TzLh#*s5*jlr)!nj%Y49E6EmtwdboC9j?}}w3ec3FiVbi!ZB#=eE(pn zADT>10jI`pvlj(Xr$GxigsyTNtKBpX32ywNUWj>Z(kZa*VG?*Vmi#E*M~A+8FFb3yDHKF&8ztr(JoK@Lu40%EZt;JzD_q% zRky9R5H$*6;ynr1WPJ(%z0#OUs?zIpo2MM|Nur*pDgQkghP@pIEq+#oZ;>CV!q>q6 zRT|Sw%?0(r_>rgidPVx)^6ysVVIKW(;41_5P4RahsGCFco7XUPRA6%j92yeZuR8gm zK>U>m%n=WW1gJ0-5k9nrX{35( ze2~m!s+1^X#%64assdpZoEJ?JrkbF}*BQ`Esva%*JBMUSGy=^IXXt(R_j#=gwjESXA3Y*NE{7emxB8&- z2nCChU~Z{SK+@l!2)-hJRURFKnJJ}*qBgxm%*B~sQzk6tbiwv8O=aNs3Ug(Np{&Lf zB-$1SE4>Q}UF=u?y}6Rorl$P&xF*B!)(9JdqgzS$ zb4L|?g+hV&9;z-ZLwm?S^ysv&kn>$;Z|1YJXyrntT(JIgg^)rkhC=wz8k>ai!b;e` z!Ns46)XLIXBvjl;HE+oD@t`xL>Owt#~wf!PMWM4GSHG1`qn{cfpK+7RK?Rx7Rc-tysDkW0l_1h)b-&A~rb>b6hUC?h< zIGe^;4`Izw=43pfJ+I@@v!@c#wHf;>oTm6qYsD1ZM{XF1H%NL#wOt9gQt?DdqOsMU zPJ7m&bY+D*ab@?CnU5E!R}#}oU9ZpD|HfUuLTphoug$t3o`BDxhQQAT2xdac8~J5V zpRLKu&0|x9kRAN*!qRR*{cQwSr7*XtO87KQC}&YgS=(-majoQYI17-o`Nq1fMN&xy^N{*?Ttv@^wV%U@N*{F08xJZPw}VX|Ds99`8s<&&#ECv2vNwU`?NSU%CEoXgi`F>WR zz0_fJ0mh&8fxI}`vTayf8#}y>=xQXX(~EOMme>w3mtk8!fMa4-zm{DkdAzS-eyj^lovNXU;d}-atF=2h(?xVWRkMdYVr9*-e^SaZGQ_27?i@3I`3xed7FN7!x@~jZS-+mLoh=jG99wfP+n+l4ZYHXDbs8pVn2$%4{KvAs zZa1UgTuU94H2iPjs+;&oP{x=C zbx=s#dL$g#bjN|tot~-Ybya+lf1_Dg+&#NmP5vY7f`-Y(c%E#SzkTy#oGgOp>vyR~ z_67HT|H6pRFiACeo}t7C8YYQ1x3xY!>vSwob3Y|CC|yaXFk5eM3rau5zf(h|G;epj zgHN`*l=M2D^US#}dGI&CbmP}O_kQ@K|4(pmGxO%hXAq&p$CdSz|LvCe0}H*cF+ zFD=+ncH|xZ&-vmRom)Jl#AF9Lt~iphck|Sw|I08h@eC7J9#=b$p|sN^KwUZ*1gV#I zwE2*f_2~!iMT~Z<@w_5MzmfZMNiXGt5n}G`)usQYyc+xe*y0HWHR z`xq_z$~>^fI9|pk%hhB0yGD|{JL?0yu;$hb8YuW?<~MC#HMk1Tlh6Od!_R(ifV8JJNBC{s`l3lP3A9dJ2;lwM)rH+yBrqbFo2}L!GCF-jyND zu6EN8*633m$%z)KLswRz&etysla7@`vNVOo&5njiB$p|~iCH;I+-&LU6^iCt7gpjg zn|t6^^NwB?$$ij!*)eqAe;WD6RBXefFRL$1^j{s@XRDM~(b*qEArYRxWvvk3b6cmO zpRfEdr1Z#)Jq`NlGiQsHbWFF`_&PUowHZ+3O{fTNDohc{O6~-F@+8zCKbSaNP_)?7 z&-&+DPX#l2Zn`@ zAb1@=*EZCpZuQ>=E5QHE2i3+SE8YX0x4Aa-q1}$-Ukz!03ff;59Q}Rr;xWL*cO(_ZU&=kM=q4%FQPMBN?H~p3` zqaV=eGxvuG*-+CZvH^OX94omO9la|s!~Wr#{m0g7ll#ekQ-KDfIx{Pu_k=sgM*j9x z&3AO{3k&sj&*zSAykCKqwD#20B>Vql%yf3{n_T%!$+^7t7wJ3Gt*FzjSPIR`z2CWW zPkum5kzFO>IXcr>S2OZ(XHEIrgDi5-pGAAZC|5 Date: Fri, 1 Aug 2025 18:20:03 +0200 Subject: [PATCH 12/26] Update src/collections/AsyncChain.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/collections/AsyncChain.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/collections/AsyncChain.ts b/src/collections/AsyncChain.ts index a460f1e..2d78381 100644 --- a/src/collections/AsyncChain.ts +++ b/src/collections/AsyncChain.ts @@ -71,7 +71,7 @@ export abstract class AsyncChain implements Promise> { async await(): Promise> { void this.startCalculation() return ( - (await this._value) ?? error("No promise after starting calculation") + (await this._value) ?? error("No promise after starting calculation") ) } From 593c010b6670fbc3a520a47d1d0b042f040eb5c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Fri, 1 Aug 2025 18:20:12 +0200 Subject: [PATCH 13/26] Update src/collections/AsyncChain.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/collections/AsyncChain.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/collections/AsyncChain.ts b/src/collections/AsyncChain.ts index 2d78381..a8045bd 100644 --- a/src/collections/AsyncChain.ts +++ b/src/collections/AsyncChain.ts @@ -482,7 +482,7 @@ export abstract class AsyncChain implements Promise> { ): Promise { return ( (await this.map(selector)) - // We need to cast, because of the overloads. We now it's safe because of our overloads though + // We need to cast, because of the overloads. We know it's safe because of our overloads though .maxOf((it) => it as string) ) } From e1d4e60835704de3171d3038c4c4e5af06bf8c3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Fri, 1 Aug 2025 18:20:59 +0200 Subject: [PATCH 14/26] Update src/collections/AsyncChain.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/collections/AsyncChain.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/collections/AsyncChain.ts b/src/collections/AsyncChain.ts index a8045bd..ff1d58b 100644 --- a/src/collections/AsyncChain.ts +++ b/src/collections/AsyncChain.ts @@ -902,7 +902,7 @@ export class ChunkingAsyncChain extends AsyncChain { async calculate(): Promise> { const chunks = chunk(await this.val.value(), this.size) - return new SimpleAsyncChain(chunks) + return new Chain(chunks) } } From 8ed2794422bea00ed67e1128334e9758ff6ed80f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Fri, 1 Aug 2025 18:21:08 +0200 Subject: [PATCH 15/26] Update src/collections/AsyncChain.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/collections/AsyncChain.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/collections/AsyncChain.ts b/src/collections/AsyncChain.ts index ff1d58b..51ec1b9 100644 --- a/src/collections/AsyncChain.ts +++ b/src/collections/AsyncChain.ts @@ -548,7 +548,7 @@ export abstract class AsyncChain implements Promise> { ): Promise { return ( (await this.map(selector)) - // We need to cast, because of the overloads. We now it's safe because of our overloads though + // We need to cast, because of the overloads. We know it's safe because of our overloads though .minOf((it) => it as string) ) } From 95cf66691da7333f0eee59c0d1574d3bb449e6dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Fri, 1 Aug 2025 18:22:19 +0200 Subject: [PATCH 16/26] Fix takeLastWhile Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/collections/AsyncChain.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/collections/AsyncChain.ts b/src/collections/AsyncChain.ts index 51ec1b9..53e7f03 100644 --- a/src/collections/AsyncChain.ts +++ b/src/collections/AsyncChain.ts @@ -1274,7 +1274,7 @@ export class TakeLastWhileAsyncChain extends AsyncChain { async calculate(): Promise> { const values = await this.val.value() const ret: Array = [] - for (let i = values.length; i < 0; i++) { + for (let i = values.length - 1; i >= 0; i--) { if (await this.predicate(values[i], i, values)) { ret.push(values[i]) } else { From afc442c33d227cdf3134917300afb2787a0639a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Fri, 1 Aug 2025 18:33:11 +0200 Subject: [PATCH 17/26] Fix double evaluation and type casting --- src/collections/AsyncChain.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/collections/AsyncChain.ts b/src/collections/AsyncChain.ts index 53e7f03..f2281ad 100644 --- a/src/collections/AsyncChain.ts +++ b/src/collections/AsyncChain.ts @@ -70,9 +70,7 @@ export abstract class AsyncChain implements Promise> { async await(): Promise> { void this.startCalculation() - return ( - (await this._value) ?? error("No promise after starting calculation") - ) + return (await this._value) ?? error("No promise after starting calculation") } async value(): Promise> { @@ -673,8 +671,9 @@ export abstract class AsyncChain implements Promise> { array: ReadonlyArray, ) => O | Promise, initial?: O, - ): Promise { - let ret: O = initial != null ? initial : ((await this.firstOrNull()) as O) + ): Promise { + let ret: O | undefined = + initial != null ? initial : ((await this.firstOrNull()) as O | undefined) const values = await this.value() for (let i = initial != null ? 0 : 1; i < values.length; i++) { @@ -1046,7 +1045,7 @@ export class FlattenAsyncChain extends AsyncChain> { } async calculate(): Promise>> { - const flattend = await this.val.map(async (el) => + const flattened = await this.val.map(async (el) => el instanceof AsyncChain ? await el.value() : el instanceof Chain @@ -1054,7 +1053,7 @@ export class FlattenAsyncChain extends AsyncChain> { : el, ) - return flattend.flatten() as Chain> + return flattened.flatten() as Chain> } } @@ -1382,7 +1381,8 @@ export abstract class AsyncObjectChain< abstract calculate(): Promise> async await(): Promise> { - return (await this._value) ?? (await this.calculate()) + void this.startCalculation() + return (await this._value) ?? error("No promise after starting calculation") } async value(): Promise { From 96f31b33673057b5296ee9442c067a237358ecd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Fri, 1 Aug 2025 18:33:57 +0200 Subject: [PATCH 18/26] Renaming variable to better suit the function --- src/collections/AsyncChain.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/collections/AsyncChain.ts b/src/collections/AsyncChain.ts index f2281ad..59002d8 100644 --- a/src/collections/AsyncChain.ts +++ b/src/collections/AsyncChain.ts @@ -509,13 +509,13 @@ export abstract class AsyncChain implements Promise> { | string | Promise, ): Promise { - let max: number | string | bigint | Date | undefined + let min: number | string | bigint | Date | undefined let ret: T | undefined for (const elem of await this.value()) { const elemValue = await selector(elem) - if (max == null || elemValue < max) { - max = elemValue + if (min == null || elemValue < min) { + min = elemValue ret = elem } } From e91f90b4a7c2fe5fdb5a1be1c2bb4d3f08c0d1ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Fri, 1 Aug 2025 18:39:13 +0200 Subject: [PATCH 19/26] add this.startCalculation() to SlidingWindowAyncChain Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/collections/AsyncChain.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/collections/AsyncChain.ts b/src/collections/AsyncChain.ts index 59002d8..631c505 100644 --- a/src/collections/AsyncChain.ts +++ b/src/collections/AsyncChain.ts @@ -1183,6 +1183,7 @@ export class SlidingWindowAsyncChain extends AsyncChain> { }, ) { super() + this.startCalculation() } async calculate(): Promise>> { From 75e14bf75f4eb0cf50e59175ccd8e52b40200016 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Fri, 1 Aug 2025 18:42:33 +0200 Subject: [PATCH 20/26] Add async condition to takeLastWhile and takeWhile --- src/collections/AsyncChain.test.ts | 9 ++++--- src/collections/AsyncChain.test.ts.md | 32 ++++++++++++++++++++++++ src/collections/AsyncChain.test.ts.snap | Bin 4783 -> 4907 bytes src/collections/AsyncChain.ts | 6 +++-- 4 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/collections/AsyncChain.test.ts b/src/collections/AsyncChain.test.ts index a711ef4..82c3817 100644 --- a/src/collections/AsyncChain.test.ts +++ b/src/collections/AsyncChain.test.ts @@ -143,6 +143,12 @@ test("All the functions once, so they don't form infinite loops", async (t) => { t.snapshot(result.value(), "long chain") + t.snapshot(await c.takeWhile(withDelay((it) => it < 3)), "take while") + t.snapshot( + await c.takeLastWhile(withDelay((it) => it > 3)), + "take last while", + ) + t.snapshot(await c.zip([2, 1]).unzip(), "zip") t.snapshot(await c.maxBy(withDelay((it) => it * 3)), "maxBy") @@ -155,9 +161,6 @@ test("All the functions once, so they don't form infinite loops", async (t) => { "partition", ) - // .maxWith - // .minWith - await c.forEach(async (it) => { await sleep(0) t.true(it < 10) diff --git a/src/collections/AsyncChain.test.ts.md b/src/collections/AsyncChain.test.ts.md index 646950d..3d55d30 100644 --- a/src/collections/AsyncChain.test.ts.md +++ b/src/collections/AsyncChain.test.ts.md @@ -849,6 +849,38 @@ Generated by [AVA](https://avajs.dev). 16, ] +> take while + + Chain { + val: [ + 1, + 2, + ], + --- + 1, + 2, + } + +> take last while + + Chain { + val: [ + 4, + 5, + 6, + 7, + 8, + 9, + ], + --- + 4, + 5, + 6, + 7, + 8, + 9, + } + > zip [ diff --git a/src/collections/AsyncChain.test.ts.snap b/src/collections/AsyncChain.test.ts.snap index 3d25a892d901be75b7e99f5e35e98e4325c53d30..5fe266b222687971363b0982d41730601ee35730 100644 GIT binary patch literal 4907 zcma))dpr~R|HtJvHWImC#u6GOm#r3)D3>O;VdU19OE$M1gb=xmA`**2t{X>g!`#I- z$8^OZNyL_N%Vnj@a_i^&{qOhJ@Ar8;KA*qdkN4~Od_6uE7z+)TFdQ*5C_G9d+88J# zkVoPRHd;r%>CO;MntI6!Ui-d2-0)!Q)SGFHXlbm~XZ0*Gf&U(%rzJNMTqmZ6`eWMD z%+l1PwYN`Q)XooW*-+6qrXhG0=AX>W#mZn}yu7kh+`fGAwYpL#-vIIq{y=E({DNsC zG_=3<44&|;dwa8X@o4!krB$_&tnj_9#PwIdPDhqSmKk4Le?9Xu4)fz@4ERj!$DH+w zXHMb27FxPzegBLWg(Z!o_YGIrCe4-i_cyhga@1Gdi#zx|TiZtIJ7&8=Uv}>ImD*nM z|9g6Fdaggw!06p%b0X3H&nV}NX?M3tx=F!EcFf_7t=5kXel9^ z13DPP^i&8TGR5@~6C#V<93zF*D5j$i@g4{q%{12MXMtvkOn^SG6PKbA*bR9tX>r=M zvtmjT(1oL_V0v&2$)Rqp?CFxVbh{a1n@V&SSN}9}DSfVsD{{JbAwA{;_6D{dP<=yV zN~jAg7GKU30wHNLLO$T7Ukr>?$!hW%xN}sal>TDqfn%qI%HptO z1?_lTjzY^*r&W^Y$yb{!^vS5$ib+s$FELNS;TP+MZ|4kX@&@;sZ|5ZFUL5!G$(;#M zcpO*rBtOC6UqEX@E;lt->Pf=rO6uU*pkEgM0M4I9%mStpctYylE2-++9C`H}7C`DZ z2e00{l$yln+*I$J$0n%0x}Ew4@$6peH^f5)fZjaTM^#k;kbivc!b`8y2BXb`Ez#p? z;)iM0erl<3cFXV^o7vn;coJVyHnE6}|= z`L2#gX1|opdCMoW43&rOiU!xSJxTMhFeilXJRGPKw3E*g&dwjY1$XujAad z0oTsX21dg6JaFgcLBL43!y_?FDZ2}}2?sYB{QXxUOE5dhU2zOyDqU}xoh2uaM_S>U z*`~4uK?!!aTK3(GSQ5O^)ua0BHt;2UwuWXoZv)hWi|VAhQJcMRZETS2+n@wjT!Zz9 zENul=0Ii>VS3|Ry{|r=tpRJ-@obRl~!h`GG-&OvV&%$Jz%C+NnT3KDnH4Z|-rR*EP z#bBfb_keOZrt{o<9Z-Q#Vysp#1lM>(Z3#J+dAM_AXo|ZdEKzea=*#OzFQT`oPHo>yUzpLIpf8x`k z^I#CGN>cj>;Q_)6qEg>UEINi`&TtY@?(BHo9W)%mn{ znaqBBypYklLmQAf{hRA+zT;pU27S7kF}cfYR%dH5SC2k(Y_S7FC$udhWscjYOkAX$ z5%1GE+CiihzE{u;;_AV3cKQwj$YE~*bLSgFRc^1ld9Wr*u*3gw?!R14!jIAh-l7l|W zGz;5&%J;`nh!bl1sEpuo?r>DBt8G5@yQN8Q$-#~4^WLJDMsC$h^uVl8pOu`74*&ws z*@#N`Gdj{>Zm30nhKLf;UUUa31b%UAkp#0xh5Iv1l{nASppSA(#i@^?@!e!kW1NLH z{hDQxc1f=IoWhs{bnRJMoe}r#CH{47WU+XYIKG;Ec39Y5{%D{DN?ta=!ll6Hy(7x5 z6&oP`J&@UanP@G)<7C@PiMlC2lPB^kfH{7dhmudwpzKm%CMq&5%rZ%lDW@{Ytk$)$ z5a{)Qf%hTriX>|S2dt)u4Y>=p%flg^r&UT{rS}I8^h_Np^efy!7nKUNMrxb{5F$7X z)ult|JhEs6Hu7Lep3veV1Ac}V3DL4!u279d0(@U3cSJG{-+~_KAs?ZB7Z4V7Qo1E1 zI10X%2%(~u(*zQ91Qta(HU~Q40{!ynB66uD19TwPxV*6c=z=Ax(FawCcGf2^vSz#y zFon2Ct_LK*cKNP1LPw$T8L2pu+vgqYY5NErr=>9ajN}-Jvjp=u%QZ&y11{E{mGa!g zUIt(Ih7AUn=u$$UK4gIDHx3)g4*(+{0g~jbsrNRqA!k?1q;C9n$`3CTM4K3> z7c882JR9;N!{r+{0rDBOT$IpxR(*XqV{Ty}>o>1G_Z#JtIBQAcm4v0kA>CBsxl#Sk zcC}_=J{F2V)^iKQX)$vdv=gdBlsl|}lu0ue;l3{4OZU$QQpg?x;~sO@SdNLTt?iQlqXMK)MQy$T7@;oN>X2hg$5c(BCpN%!IWdLE_Ao zLl@Fqk5d~U2#E0XdE#ZUFbU>KlIszw&Us#ln6D($2BPRCwyp4APLThZ(AR zNZ7~@I1duX7Fko4PYTB528s5DGZ=|}X!>F%SKac-{jr)s4mA0>RxU=`20t(+# zMWH{)mf=uU7hp{xON+`o41uGT*U_C#vZcDD{s*jWs)24uVG#vpEU{-GJm92|ZiQQt zMYodESv0uBG>eE+j85ksgtXZ%-#0)ir5Cbz8wUIrSkFg3ga_zArB4qmt}7iso~rqR za}3gUahYO-ph^turPjUVv>WlWa~Dv{T}H9Z60^EOF=sC6XV4>hV2&uQ&rX*QZocHw zB9`+-|oO58=PO&Elo55J`c26`aGoASO_y3j;B+a+J{3J%oBXxSpysW90~t+|M-eKz z>X; z)u(D*AN2vKeBtz1npmP1Czx8-i9TvGZh(6e%rep&2(@E{vukp@DMRT;u8)-5k7)b@ z^1|dmWt@kbRO%1jS{y$)*Mu4sV76MHG5v+hjpO^7?YP+bpeqj~NE);qFjCf-5eSux zuJuCcDRXX%ddvyvoMK#-BzEP-QRsCC!h&xBR5((Syf~qRBa{iW@|;+{3ZzXsQ>CIy z`XHWe7fhj7OK&N2JFO9|()yukDrvI!$IP;M=QNSyVoBj?QYyGh`97X{)XVm{Gr|?x zK|v{6_M;~#npAqTcn&^gyomEryR%VzT?XAm1_!6q6mdRl$2N(7EXG;4`grP4R|CaP zoewoueIrpN6>*1N6XT7M$0>=>-DV|ULV8RQb6U{FOQUK~zo8J_ zDe}Y%YXMT775w7Gxd2hqqPBW+dgVKxh$OxhlxkL*v@*;K(y1FnFEf{S#u=11xmeLFf?~m^kV2CLTdV{ z9=bEi?mgB@r9L#ZYMMho)#+hdOo{SQStX>#Pjg~Ic@ZkTI+WL^@bo@fU6VI&kd(#M zQ!41?bMq9;XTE*RSj++)i@#WUB>(VFw{J&>K0(u;J5M~MH|145k$zA@YkDFLPnq+M zsJ!Ix&V9nb-eG4;Q_(NN6)yA3ZU3#zt1=m+D-VANEn1!V;BwV2XT@TX@Xy0lWQy}+ z8NZfI=W9i)NKLEjnRs}m^(buW#=<>RslSKhq7sztzvysBnW>onxMvzR)#XwdcyyeA zNMf-cBCo3-)nQ|@YqxdJ5QMAp9@`K%_NfdID_85SUBA7#>6ZPs^v*(FRp4Ij_7mmm z=c08@iusb5yVVm!U(H9Dfvz6={jH`1t;2p&%Jqu&HU>{zu3m~hyK*W2@wKCia#hR6 z3Hw}|rcH`|_32FANxDm=wZT5n`YHS9b=gI?Mtn@MwoQY-M4rwdMlv=0aJ*x*@8p?# zoZ0-xlh>=C4?q666MBSAxRA{`UAUUiK1Bat6b6X%a(?iV|9bUQVT=ramNPT|jS{Xh z(PI0jhJUY~Fz_%e8m`=5WZb`*X~-rh)<@Wz4*tGd_n%MPpxQSN;-p3c6gW1>Nh@{D=g&1E$wufZu zzHtqr>@WCQ*tmbH-qrmg_tLTrr#PrM*9cZ$_m;X}3)5|RzvMu|Ie@HN>*+7_N4|k8672#P;jLutT3usO&)m?QY32Jfr^<2c@FlNTwx#+#A-` zRZ$Of%QwdSaM>O8RXG0ZI33URY_+Fbf#zj*KF~geb-oGiZW3rb5H_%PvR421{vGPQ ze^Ye@(K6kSx2JT(f717O%PEYGa8;olT2h{3HZW=#R*W{rW5f0DRn4n(o4$)ps-|VC zJ%}^WUwcl++MK$J-j-GfXU2j8y>i1X8bkn>X)hv#{z_wc>OBF+2Re@sCM`){@r~t);2Nk^46%OM4xEei|(F zbP8Y|0To=Pu~SaShqS7R3~X}>Y;Me~4{#De;C9Xp&@7E(jEn2Px^dWB+os2BSi^Tn z$^T8EFCAK-kZmGhmNSmo;obYon|K%G5Xl_W?;IA1=~_+I3eWs>^OcBW7bifWcQGZl z!-scfH|47OL=Y_g=jI>uZEo0|`VB?J%)jF=?G@&Hxg#NQ@aFX)HLCiRQFA)>e0aD& z@wIPH3}w6L4S?wj2LJw)^ZmkB_xr8x?$c7{*Y-*m|1k{XL!Yidvovqk#rN!rT-mMe z+o6xT_j6Wm$2C9gn>QR7Sz2D*__C^aW8~%DF7@|?U9#J5UQWO{(@}t``g}>thbX4M zx_d{QW~u4fB+Y)|QhowD{yARm^WN4;BO}E9zKZo^=KAo5!H2CiioV*Ohe3iB=Wyl6 zoK%mAlSNs{E%zZ;ru(loJi;3X%F_XsYssvi=bYoqJI$QNz{f(R(x!z1)-4L z*_0yP<`TJWA0)Y_BGl)%-}n3P_xy3ryJz`aHmt!%%K;PjM(nu)%C|)L{$~lclq99Nj!nMmO?;kd zmZ>PIv2SFjQ4rO<0aZ~^5eR?>k^F7-4~vX;N57=GdSBep+Vg6mdcCB%zw~PLYVG(G z9?{^n(=m26$xJhCHncMFir?_Xx%b0={;n^a**SA2_Pyp#b7P^|)ioQj5=KKTBbiYX z8))a~d^?p8U(*|LHD=#G@#02WZ&PcxAxHVEi(bt4#2-Ja#rHb*_CD=(CU~`cGZtETE>7<0I$uC4Eh|Z4i*y!LgJxT}w~x;ONMutP0$Q4z%MspqS|+aaQ-C zkQqWb)V&Q?2;G|@WJ8@|`_DwTy%6{4#MM9(+PT+Gn{p{jGn*Yyb3(=<>7&xUe@W*+ zLCGqsBxBIuJ`As*YU$plp%h!)MA^M)kRoClU zBRh9!cO~LZp}jBV}GE#xXT@O5@FEtNDSP ze#nh@`1px8drx{$GBaSoyR@x9vTn|qC;sh-=dZp=ULcmCng)cyd+-kHG;q}uEUtb) ziL3_qt0p`e&;;kQk>SU&RS0)&g{n*4tS6AB3rMH=Iq(3!1PQF)f_TdeM3}mB59NH) zE_u8KCKtfhEg>!IZ3DI=skH{T316&F> z_2cqGV$LI-=Ochi5hVz4Jpdx7ZF+wGwv6s5v6J-=WX`1x8@LB&NU({IS?ZAY?nK5w zGFW$P_dY8avR$3g;uBcJvV!|PCXfegWR&VYb}C~VAogIT>L<=zE~M%FMD>;)&?8*I zM6f;~Cmv`5k9M7?-SPl-!h6aIg#)ntj25qXAMy;u`Fxx8d=BvThusdAQqJG|{taWq zJeFUMx6Cj6G>uR?ume`AH3*c&{(*RdCBjT?xa9-;GL4^h+gak_sAB*2`YMgO!S_`f z*%fj|>(_AXGC8BQYd99~*tn*8?Y*eQ#2-}2p2@1{Z`IYT5Q~%B{Sb?TzLh#*s5*jlr)!nj%Y49E6EmtwdboC9j?}}w3ec3FiVbi!ZB#=eE(pn zADT>10jI`pvlj(Xr$GxigsyTNtKBpX32ywNUWj>Z(kZa*VG?*Vmi#E*M~A+8FFb3yDHKF&8ztr(JoK@Lu40%EZt;JzD_q% zRky9R5H$*6;ynr1WPJ(%z0#OUs?zIpo2MM|Nur*pDgQkghP@pIEq+#oZ;>CV!q>q6 zRT|Sw%?0(r_>rgidPVx)^6ysVVIKW(;41_5P4RahsGCFco7XUPRA6%j92yeZuR8gm zK>U>m%n=WW1gJ0-5k9nrX{35( ze2~m!s+1^X#%64assdpZoEJ?JrkbF}*BQ`Esva%*JBMUSGy=^IXXt(R_j#=gwjESXA3Y*NE{7emxB8&- z2nCChU~Z{SK+@l!2)-hJRURFKnJJ}*qBgxm%*B~sQzk6tbiwv8O=aNs3Ug(Np{&Lf zB-$1SE4>Q}UF=u?y}6Rorl$P&xF*B!)(9JdqgzS$ zb4L|?g+hV&9;z-ZLwm?S^ysv&kn>$;Z|1YJXyrntT(JIgg^)rkhC=wz8k>ai!b;e` z!Ns46)XLIXBvjl;HE+oD@t`xL>Owt#~wf!PMWM4GSHG1`qn{cfpK+7RK?Rx7Rc-tysDkW0l_1h)b-&A~rb>b6hUC?h< zIGe^;4`Izw=43pfJ+I@@v!@c#wHf;>oTm6qYsD1ZM{XF1H%NL#wOt9gQt?DdqOsMU zPJ7m&bY+D*ab@?CnU5E!R}#}oU9ZpD|HfUuLTphoug$t3o`BDxhQQAT2xdac8~J5V zpRLKu&0|x9kRAN*!qRR*{cQwSr7*XtO87KQC}&YgS=(-majoQYI17-o`Nq1fMN&xy^N{*?Ttv@^wV%U@N*{F08xJZPw}VX|Ds99`8s<&&#ECv2vNwU`?NSU%CEoXgi`F>WR zz0_fJ0mh&8fxI}`vTayf8#}y>=xQXX(~EOMme>w3mtk8!fMa4-zm{DkdAzS-eyj^lovNXU;d}-atF=2h(?xVWRkMdYVr9*-e^SaZGQ_27?i@3I`3xed7FN7!x@~jZS-+mLoh=jG99wfP+n+l4ZYHXDbs8pVn2$%4{KvAs zZa1UgTuU94H2iPjs+;&oP{x=C zbx=s#dL$g#bjN|tot~-Ybya+lf1_Dg+&#NmP5vY7f`-Y(c%E#SzkTy#oGgOp>vyR~ z_67HT|H6pRFiACeo}t7C8YYQ1x3xY!>vSwob3Y|CC|yaXFk5eM3rau5zf(h|G;epj zgHN`*l=M2D^US#}dGI&CbmP}O_kQ@K|4(pmGxO%hXAq&p$CdSz|LvCe0}H*cF+ zFD=+ncH|xZ&-vmRom)Jl#AF9Lt~iphck|Sw|I08h@eC7J9#=b$p|sN^KwUZ*1gV#I zwE2*f_2~!iMT~Z<@w_5MzmfZMNiXGt5n}G`)usQYyc+xe*y0HWHR z`xq_z$~>^fI9|pk%hhB0yGD|{JL?0yu;$hb8YuW?<~MC#HMk1Tlh6Od!_R(ifV8JJNBC{s`l3lP3A9dJ2;lwM)rH+yBrqbFo2}L!GCF-jyND zu6EN8*633m$%z)KLswRz&etysla7@`vNVOo&5njiB$p|~iCH;I+-&LU6^iCt7gpjg zn|t6^^NwB?$$ij!*)eqAe;WD6RBXefFRL$1^j{s@XRDM~(b*qEArYRxWvvk3b6cmO zpRfEdr1Z#)Jq`NlGiQsHbWFF`_&PUowHZ+3O{fTNDohc{O6~-F@+8zCKbSaNP_)?7 z&-&+DPX#l2Zn`@ zAb1@=*EZCpZuQ>=E5QHE2i3+SE8YX0x4Aa-q1}$-Ukz!03ff;59Q}Rr;xWL*cO(_ZU&=kM=q4%FQPMBN?H~p3` zqaV=eGxvuG*-+CZvH^OX94omO9la|s!~Wr#{m0g7ll#ekQ-KDfIx{Pu_k=sgM*j9x z&3AO{3k&sj&*zSAykCKqwD#20B>Vql%yf3{n_T%!$+^7t7wJ3Gt*FzjSPIR`z2CWW zPkum5kzFO>IXcr>S2OZ(XHEIrgDi5-pGAAZC|5 implements Promise> { return (await this.map(selector).await()).sumOf((it) => it) } - takeLastWhile(predicate: (el: T) => boolean): AsyncChain { + takeLastWhile( + predicate: (el: T) => Promise | boolean, + ): AsyncChain { return new TakeLastWhileAsyncChain(this, predicate) } - takeWhile(predicate: (el: T) => boolean): AsyncChain { + takeWhile(predicate: (el: T) => Promise | boolean): AsyncChain { return new TakeWhileAsyncChain(this, predicate) } From 0256b956a7a148d4b5ef2be93c07af4a2415d086 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Fri, 1 Aug 2025 18:52:13 +0200 Subject: [PATCH 21/26] Also allow async filters for the asyncObjChain filters --- src/collections/AsyncChain.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/collections/AsyncChain.ts b/src/collections/AsyncChain.ts index 7e21eef..0ccf766 100644 --- a/src/collections/AsyncChain.ts +++ b/src/collections/AsyncChain.ts @@ -1462,15 +1462,21 @@ export abstract class AsyncObjectChain< ) } - filterKeys(filter: (key: K) => boolean): AsyncObjectChain { + filterKeys( + filter: (key: K) => Promise | boolean, + ): AsyncObjectChain { return new FilteringAsyncObjectChain(this, (k, _) => filter(k)) } - filterValues(filter: (value: T) => boolean): AsyncObjectChain { + filterValues( + filter: (value: T) => Promise | boolean, + ): AsyncObjectChain { return new FilteringAsyncObjectChain(this, (_, v) => filter(v)) } - filterEntries(filter: (key: K, value: T) => boolean): AsyncObjectChain { + filterEntries( + filter: (key: K, value: T) => Promise | boolean, + ): AsyncObjectChain { return new FilteringAsyncObjectChain(this, filter) } } From 752f0b9c7bad2fa8b4b7445ebbf2c447bff91ff4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Fri, 1 Aug 2025 19:00:18 +0200 Subject: [PATCH 22/26] Update src/collections/AsyncChain.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/collections/AsyncChain.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/collections/AsyncChain.ts b/src/collections/AsyncChain.ts index 0ccf766..7e85c23 100644 --- a/src/collections/AsyncChain.ts +++ b/src/collections/AsyncChain.ts @@ -284,7 +284,7 @@ export abstract class AsyncChain implements Promise> { const last = await this.findLastIndex(predicate) - if (first != last) return undefined + if (first !== last) return undefined return (await this.value())[last] } From 056c96f5f0b5f00f61ccc67b930d4ee47b3b7d38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Mon, 4 Aug 2025 09:45:06 +0200 Subject: [PATCH 23/26] Switch to pnpm and update dependencies --- .github/workflows/pull-request.yml | 20 +- .github/workflows/push.yml | 45 +- package-lock.json | 5089 ---------------------------- package.json | 18 +- pnpm-lock.yaml | 3453 +++++++++++++++++++ 5 files changed, 3490 insertions(+), 5135 deletions(-) delete mode 100644 package-lock.json create mode 100644 pnpm-lock.yaml diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index afe3a2c..9c89dab 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -11,7 +11,10 @@ jobs: steps: - uses: actions/checkout@main - uses: actions/setup-node@main - - run: npx auto pr-check --url https://github.com/$GITHUB_REPOSITORY + - uses: pnpm/action-setup@v4 + with: + version: 10 + - run: pnpx auto pr-check --url https://github.com/$GITHUB_REPOSITORY env: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -29,17 +32,12 @@ jobs: with: path: node_modules key: ${{ runner.os }}-node-modules-${{ hashFiles('**/package-lock.json') }} - - uses: actions/cache@main - if: steps.cache-modules.outputs.cache-hit != 'true' + - uses: pnpm/action-setup@v4 with: - path: ~/.npm - key: ${{ runner.os }}-node-global - - run: npm ci - if: steps.cache-modules.outputs.cache-hit != 'true' - env: - NPM_TOKEN: ${{secrets.NPM_TOKEN}} - - run: npm run build - - run: npx auto shipit + version: 10 + - run: pnpm install + - run: pnpm run build + - run: pnpx auto shipit env: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index f79e96b..85a8152 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -9,7 +9,10 @@ jobs: steps: - uses: actions/checkout@main - uses: actions/setup-node@main - - run: npm audit + - uses: pnpm/action-setup@v4 + with: + version: 10 + - run: pnpm audit lint: name: Lint runs-on: ubuntu-latest @@ -26,11 +29,11 @@ jobs: with: path: ~/.npm key: ${{ runner.os }}-node-global - - run: npm ci - if: steps.cache-modules.outputs.cache-hit != 'true' - env: - NPM_TOKEN: ${{secrets.NPM_TOKEN}} - - run: npm run lint + - uses: pnpm/action-setup@v4 + with: + version: 10 + - run: pnpm install + - run: pnpm run lint test: name: Test runs-on: ubuntu-latest @@ -42,17 +45,12 @@ jobs: with: path: node_modules key: ${{ runner.os }}-node-modules-${{ hashFiles('**/package-lock.json') }} - - uses: actions/cache@main - if: steps.cache-modules.outputs.cache-hit != 'true' + - uses: pnpm/action-setup@v4 with: - path: ~/.npm - key: ${{ runner.os }}-node-global - - run: npm ci - if: steps.cache-modules.outputs.cache-hit != 'true' - env: - NPM_TOKEN: ${{secrets.NPM_TOKEN}} - - run: npm run test - - run: npm run build + version: 10 + - run: pnpm install + - run: pnpm run test + - run: pnpm run build publish-gpr: name: Publish Version @@ -68,17 +66,12 @@ jobs: with: path: node_modules key: ${{ runner.os }}-node-modules-${{ hashFiles('**/package-lock.json') }} - - uses: actions/cache@main - if: steps.cache-modules.outputs.cache-hit != 'true' + - uses: pnpm/action-setup@v4 with: - path: ~/.npm - key: ${{ runner.os }}-node-global - - run: npm ci - if: steps.cache-modules.outputs.cache-hit != 'true' - env: - NPM_TOKEN: ${{secrets.NPM_TOKEN}} - - run: npm run build - - run: npx auto shipit + version: 10 + - run: pnpm install + - run: pnpm run build + - run: pnpx auto shipit env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 7b71c77..0000000 --- a/package-lock.json +++ /dev/null @@ -1,5089 +0,0 @@ -{ - "name": "@opencreek/ext", - "version": "2.7.4", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "@opencreek/ext", - "version": "2.7.4", - "license": "MIT", - "dependencies": { - "@opencreek/deno-std-collections": "^0.109.1" - }, - "devDependencies": { - "@types/node": "^17.0.17", - "@typescript-eslint/eslint-plugin": "^6.2.1", - "@typescript-eslint/parser": "^6.2.1", - "auto": "^11.1.2", - "ava": "^5.3.1", - "eslint": "^8.46.0", - "eslint-config-prettier": "^8.10.0", - "prettier": "^3.0.1", - "typescript": "5.1.6" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@auto-it/bot-list": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@auto-it/bot-list/-/bot-list-11.1.2.tgz", - "integrity": "sha512-3OxS04InYbMT67JH+zZ9STgPgWNyyE5gfm14z/aKJIKjpSRCmtM+nNimsNgEUvaZsN8MOPNU7QJC5ixOfxwsSA==", - "dev": true, - "engines": { - "node": ">=10.x" - } - }, - "node_modules/@auto-it/core": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@auto-it/core/-/core-11.1.2.tgz", - "integrity": "sha512-Hg1/aQo11MPDBNeB6HGVO/Sp/RsDAJU5XoSIbimwiX65/3Nz5jam3HbgNSwmjZspgnspdQ9XfUITC5xTxOnY6w==", - "dev": true, - "dependencies": { - "@auto-it/bot-list": "11.1.2", - "@endemolshinegroup/cosmiconfig-typescript-loader": "^3.0.2", - "@octokit/core": "^3.5.1", - "@octokit/plugin-enterprise-compatibility": "1.3.0", - "@octokit/plugin-retry": "^3.0.9", - "@octokit/plugin-throttling": "^3.6.2", - "@octokit/rest": "^18.12.0", - "await-to-js": "^3.0.0", - "chalk": "^4.0.0", - "cosmiconfig": "7.0.0", - "deepmerge": "^4.0.0", - "dotenv": "^8.0.0", - "endent": "^2.1.0", - "enquirer": "^2.3.4", - "env-ci": "^5.0.1", - "fast-glob": "^3.1.1", - "fp-ts": "^2.5.3", - "fromentries": "^1.2.0", - "gitlog": "^4.0.3", - "https-proxy-agent": "^5.0.0", - "import-cwd": "^3.0.0", - "import-from": "^3.0.0", - "io-ts": "^2.1.2", - "lodash.chunk": "^4.2.0", - "log-symbols": "^4.0.0", - "node-fetch": "2.6.7", - "parse-author": "^2.0.0", - "parse-github-url": "1.0.2", - "pretty-ms": "^7.0.0", - "requireg": "^0.2.2", - "semver": "^7.0.0", - "signale": "^1.4.0", - "tapable": "^2.2.0", - "terminal-link": "^2.1.1", - "tinycolor2": "^1.4.1", - "ts-node": "^10.9.1", - "tslib": "2.1.0", - "type-fest": "^0.21.1", - "typescript-memoize": "^1.0.0-alpha.3", - "url-join": "^4.0.0" - }, - "peerDependencies": { - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@auto-it/npm": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@auto-it/npm/-/npm-11.1.2.tgz", - "integrity": "sha512-s0itO3ZgkQ+0G6eMuOlYw4C5tpBJ21egOYktcK2e2OfPLENiGnLU0PlX74u9m2+rNBiykNR/UJpzgwLCFPBD5g==", - "dev": true, - "dependencies": { - "@auto-it/core": "11.1.2", - "@auto-it/package-json-utils": "11.1.2", - "await-to-js": "^3.0.0", - "endent": "^2.1.0", - "env-ci": "^5.0.1", - "fp-ts": "^2.5.3", - "get-monorepo-packages": "^1.1.0", - "io-ts": "^2.1.2", - "registry-url": "^5.1.0", - "semver": "^7.0.0", - "tslib": "2.1.0", - "typescript-memoize": "^1.0.0-alpha.3", - "url-join": "^4.0.0", - "user-home": "^2.0.0" - } - }, - "node_modules/@auto-it/package-json-utils": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@auto-it/package-json-utils/-/package-json-utils-11.1.2.tgz", - "integrity": "sha512-R9YE/7jEBZzWkC/hc6Ju77iRGg9VnqYfIdj7oGkQq8jvbfvLxTm8g/BheBOvvVJuaY/C272Orvcw+3Pu+xtc+Q==", - "dev": true, - "dependencies": { - "parse-author": "^2.0.0", - "parse-github-url": "1.0.2" - }, - "engines": { - "node": ">=10.x" - } - }, - "node_modules/@auto-it/released": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@auto-it/released/-/released-11.1.2.tgz", - "integrity": "sha512-jhNznq+eNwzTitGwWeF6RQkR9yQRy6mKWFjZOK5jNnsiNaXYX1PJiJ/WCWMvXRromJOvcQQK8OoAzQN5s97+zw==", - "dev": true, - "dependencies": { - "@auto-it/bot-list": "11.1.2", - "@auto-it/core": "11.1.2", - "deepmerge": "^4.0.0", - "fp-ts": "^2.5.3", - "io-ts": "^2.1.2", - "tslib": "2.1.0" - } - }, - "node_modules/@auto-it/version-file": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/@auto-it/version-file/-/version-file-11.1.2.tgz", - "integrity": "sha512-ZZnq1Svodd3SrNznYJqZ4SeMxxYoD14OFeH8yyGLFaDFwmIrDkoEOQWVbTSNU05rOQNJfi+OobSM89XV44MSCQ==", - "dev": true, - "dependencies": { - "@auto-it/core": "11.1.2", - "fp-ts": "^2.5.3", - "io-ts": "^2.1.2", - "semver": "^7.0.0", - "tslib": "1.10.0" - } - }, - "node_modules/@auto-it/version-file/node_modules/tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", - "dev": true - }, - "node_modules/@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.24.2", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", - "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@endemolshinegroup/cosmiconfig-typescript-loader": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.2.tgz", - "integrity": "sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA==", - "dev": true, - "dependencies": { - "lodash.get": "^4", - "make-error": "^1", - "ts-node": "^9", - "tslib": "^2" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "cosmiconfig": ">=6" - } - }, - "node_modules/@endemolshinegroup/cosmiconfig-typescript-loader/node_modules/ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "dev": true, - "dependencies": { - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "typescript": ">=2.7" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", - "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.1.tgz", - "integrity": "sha512-9t7ZA7NGGK8ckelF0PQCfcxIUzs1Md5rrO6U/c+FIQNanea5UZC0wqKXH4vHBccmu4ZJgZ2idtPeW7+Q2npOEA==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/js": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.46.0.tgz", - "integrity": "sha512-a8TLtmPi8xzPkCbp/OGFUo5yhRkHM2Ko9kOWP4znJr0WAhWyThaw3PnwX4vOTWOAMsV2uRt32PPDcEz63esSaA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@octokit/auth-token": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.0.3" - } - }, - "node_modules/@octokit/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", - "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", - "dev": true, - "dependencies": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.3", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/endpoint": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/graphql": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", - "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", - "dev": true, - "dependencies": { - "@octokit/request": "^5.6.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/openapi-types": { - "version": "12.11.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", - "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==", - "dev": true - }, - "node_modules/@octokit/plugin-enterprise-compatibility": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-compatibility/-/plugin-enterprise-compatibility-1.3.0.tgz", - "integrity": "sha512-h34sMGdEOER/OKrZJ55v26ntdHb9OPfR1fwOx6Q4qYyyhWA104o11h9tFxnS/l41gED6WEI41Vu2G2zHDVC5lQ==", - "dev": true, - "dependencies": { - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.0.3" - } - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "2.21.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz", - "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.40.0" - }, - "peerDependencies": { - "@octokit/core": ">=2" - } - }, - "node_modules/@octokit/plugin-request-log": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "dev": true, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", - "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.39.0", - "deprecation": "^2.3.1" - }, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/plugin-retry": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.9.tgz", - "integrity": "sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.0.3", - "bottleneck": "^2.15.3" - } - }, - "node_modules/@octokit/plugin-throttling": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.7.0.tgz", - "integrity": "sha512-qrKT1Yl/KuwGSC6/oHpLBot3ooC9rq0/ryDYBCpkRtoj+R8T47xTMDT6Tk2CxWopFota/8Pi/2SqArqwC0JPow==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.0.1", - "bottleneck": "^2.15.3" - }, - "peerDependencies": { - "@octokit/core": "^3.5.0" - } - }, - "node_modules/@octokit/request": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", - "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", - "dev": true, - "dependencies": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/request-error": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" - } - }, - "node_modules/@octokit/rest": { - "version": "18.12.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", - "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", - "dev": true, - "dependencies": { - "@octokit/core": "^3.5.1", - "@octokit/plugin-paginate-rest": "^2.16.8", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^5.12.0" - } - }, - "node_modules/@octokit/types": { - "version": "6.41.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.41.0.tgz", - "integrity": "sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==", - "dev": true, - "dependencies": { - "@octokit/openapi-types": "^12.11.0" - } - }, - "node_modules/@opencreek/deno-std-collections": { - "version": "0.109.1", - "resolved": "https://registry.npmjs.org/@opencreek/deno-std-collections/-/deno-std-collections-0.109.1.tgz", - "integrity": "sha512-Xa5X4Hd4cGvh2HnDi8kwWxEipj/D6MuMf9HmGDFFAEFLd8ncqJ5EuKdGlWIJig7RIxe0s7TbdJptP09l2BOxvA==" - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "node_modules/@types/command-line-args": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.0.tgz", - "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==", - "dev": true - }, - "node_modules/@types/command-line-usage": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.2.tgz", - "integrity": "sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "dev": true - }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==", - "dev": true - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.2.1.tgz", - "integrity": "sha512-iZVM/ALid9kO0+I81pnp1xmYiFyqibAHzrqX4q5YvvVEyJqY+e6rfTXSCsc2jUxGNqJqTfFSSij/NFkZBiBzLw==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.2.1", - "@typescript-eslint/type-utils": "6.2.1", - "@typescript-eslint/utils": "6.2.1", - "@typescript-eslint/visitor-keys": "6.2.1", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.2.1.tgz", - "integrity": "sha512-Ld+uL1kYFU8e6btqBFpsHkwQ35rw30IWpdQxgOqOh4NfxSDH6uCkah1ks8R/RgQqI5hHPXMaLy9fbFseIe+dIg==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "6.2.1", - "@typescript-eslint/types": "6.2.1", - "@typescript-eslint/typescript-estree": "6.2.1", - "@typescript-eslint/visitor-keys": "6.2.1", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.2.1.tgz", - "integrity": "sha512-UCqBF9WFqv64xNsIEPfBtenbfodPXsJ3nPAr55mGPkQIkiQvgoWNo+astj9ZUfJfVKiYgAZDMnM6dIpsxUMp3Q==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.2.1", - "@typescript-eslint/visitor-keys": "6.2.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.2.1.tgz", - "integrity": "sha512-fTfCgomBMIgu2Dh2Or3gMYgoNAnQm3RLtRp+jP7A8fY+LJ2+9PNpi5p6QB5C4RSP+U3cjI0vDlI3mspAkpPVbQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "6.2.1", - "@typescript-eslint/utils": "6.2.1", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.2.1.tgz", - "integrity": "sha512-528bGcoelrpw+sETlyM91k51Arl2ajbNT9L4JwoXE2dvRe1yd8Q64E4OL7vHYw31mlnVsf+BeeLyAZUEQtqahQ==", - "dev": true, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.2.1.tgz", - "integrity": "sha512-G+UJeQx9AKBHRQBpmvr8T/3K5bJa485eu+4tQBxFq0KoT22+jJyzo1B50JDT9QdC1DEmWQfdKsa8ybiNWYsi0Q==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.2.1", - "@typescript-eslint/visitor-keys": "6.2.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.2.1.tgz", - "integrity": "sha512-eBIXQeupYmxVB6S7x+B9SdBeB6qIdXKjgQBge2J+Ouv8h9Cxm5dHf/gfAZA6dkMaag+03HdbVInuXMmqFB/lKQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.2.1", - "@typescript-eslint/types": "6.2.1", - "@typescript-eslint/typescript-estree": "6.2.1", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.2.1.tgz", - "integrity": "sha512-iTN6w3k2JEZ7cyVdZJTVJx2Lv7t6zFA8DCrJEHD2mwfc16AEvvBWVhbFh34XyG2NORCd0viIgQY1+u7kPI0WpA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.2.1", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", - "dev": true, - "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arrgv": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arrgv/-/arrgv-1.0.2.tgz", - "integrity": "sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/arrify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", - "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/author-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/author-regex/-/author-regex-1.0.0.tgz", - "integrity": "sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/auto": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/auto/-/auto-11.1.2.tgz", - "integrity": "sha512-cE1Tt0dPPH1YhoOLoYlZscwFUl1xYOEgdICw5VLX9EUZZfWUpjWCBukKV+dYN5bJr353XOFr/GFR/kaL+j25sQ==", - "dev": true, - "dependencies": { - "@auto-it/core": "11.1.2", - "@auto-it/npm": "11.1.2", - "@auto-it/released": "11.1.2", - "@auto-it/version-file": "11.1.2", - "await-to-js": "^3.0.0", - "chalk": "^4.0.0", - "command-line-application": "^0.10.1", - "endent": "^2.1.0", - "module-alias": "^2.2.2", - "signale": "^1.4.0", - "terminal-link": "^2.1.1", - "tslib": "2.1.0" - }, - "bin": { - "auto": "dist/bin/auto.js" - }, - "engines": { - "node": ">=10.x" - } - }, - "node_modules/ava": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ava/-/ava-5.3.1.tgz", - "integrity": "sha512-Scv9a4gMOXB6+ni4toLuhAm9KYWEjsgBglJl+kMGI5+IVDt120CCDZyB5HNU9DjmLI2t4I0GbnxGLmmRfGTJGg==", - "dev": true, - "dependencies": { - "acorn": "^8.8.2", - "acorn-walk": "^8.2.0", - "ansi-styles": "^6.2.1", - "arrgv": "^1.0.2", - "arrify": "^3.0.0", - "callsites": "^4.0.0", - "cbor": "^8.1.0", - "chalk": "^5.2.0", - "chokidar": "^3.5.3", - "chunkd": "^2.0.1", - "ci-info": "^3.8.0", - "ci-parallel-vars": "^1.0.1", - "clean-yaml-object": "^0.1.0", - "cli-truncate": "^3.1.0", - "code-excerpt": "^4.0.0", - "common-path-prefix": "^3.0.0", - "concordance": "^5.0.4", - "currently-unhandled": "^0.4.1", - "debug": "^4.3.4", - "emittery": "^1.0.1", - "figures": "^5.0.0", - "globby": "^13.1.4", - "ignore-by-default": "^2.1.0", - "indent-string": "^5.0.0", - "is-error": "^2.2.2", - "is-plain-object": "^5.0.0", - "is-promise": "^4.0.0", - "matcher": "^5.0.0", - "mem": "^9.0.2", - "ms": "^2.1.3", - "p-event": "^5.0.1", - "p-map": "^5.5.0", - "picomatch": "^2.3.1", - "pkg-conf": "^4.0.0", - "plur": "^5.1.0", - "pretty-ms": "^8.0.0", - "resolve-cwd": "^3.0.0", - "stack-utils": "^2.0.6", - "strip-ansi": "^7.0.1", - "supertap": "^3.0.1", - "temp-dir": "^3.0.0", - "write-file-atomic": "^5.0.1", - "yargs": "^17.7.2" - }, - "bin": { - "ava": "entrypoints/cli.mjs" - }, - "engines": { - "node": ">=14.19 <15 || >=16.15 <17 || >=18" - }, - "peerDependencies": { - "@ava/typescript": "*" - }, - "peerDependenciesMeta": { - "@ava/typescript": { - "optional": true - } - } - }, - "node_modules/ava/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ava/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ava/node_modules/globby/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ava/node_modules/parse-ms": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-3.0.0.tgz", - "integrity": "sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ava/node_modules/pretty-ms": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-8.0.0.tgz", - "integrity": "sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==", - "dev": true, - "dependencies": { - "parse-ms": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/await-to-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/await-to-js/-/await-to-js-3.0.0.tgz", - "integrity": "sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/blueimp-md5": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", - "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", - "dev": true - }, - "node_modules/bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/callsites": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-4.0.0.tgz", - "integrity": "sha512-y3jRROutgpKdz5vzEhWM34TidDU8vkJppF8dszITeb1PQmSqV3DTxyV8G/lyO/DNvtE1YTedehmw9MPZsCBHxQ==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cbor": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz", - "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==", - "dev": true, - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=12.19" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/chalk/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/chalk/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "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" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chunkd": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/chunkd/-/chunkd-2.0.1.tgz", - "integrity": "sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==", - "dev": true - }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/ci-parallel-vars": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz", - "integrity": "sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==", - "dev": true - }, - "node_modules/clean-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clean-stack/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clean-yaml-object": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz", - "integrity": "sha512-3yONmlN9CSAkzNwnRCiJQ7Q2xK5mWuEfL3PuTZcAUzhObbXsfsnMptJzXwz93nc5zn9V9TwCVMmV7w4xsm43dw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", - "dev": true, - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/code-excerpt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz", - "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==", - "dev": true, - "dependencies": { - "convert-to-spaces": "^2.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/command-line-application": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/command-line-application/-/command-line-application-0.10.1.tgz", - "integrity": "sha512-PWZ4nRkz09MbBRocqEe/Fil3RjTaMNqw0didl1n/i3flDcw/vecVfvsw3r+ZHhGs4BOuW7sk3cEYSdfM3Wv5/Q==", - "dev": true, - "dependencies": { - "@types/command-line-args": "^5.0.0", - "@types/command-line-usage": "^5.0.1", - "chalk": "^2.4.1", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.0.0", - "meant": "^1.0.1", - "remove-markdown": "^0.3.0", - "tslib": "1.10.0" - } - }, - "node_modules/command-line-application/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-application/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-application/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/command-line-application/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-application/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-application/node_modules/tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", - "dev": true - }, - "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "dev": true, - "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", - "dev": true, - "dependencies": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/command-line-usage/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/command-line-usage/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/command-line-usage/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/concordance": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz", - "integrity": "sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==", - "dev": true, - "dependencies": { - "date-time": "^3.1.0", - "esutils": "^2.0.3", - "fast-diff": "^1.2.0", - "js-string-escape": "^1.0.1", - "lodash": "^4.17.15", - "md5-hex": "^3.0.1", - "semver": "^7.3.2", - "well-known-symbols": "^2.0.0" - }, - "engines": { - "node": ">=10.18.0 <11 || >=12.14.0 <13 || >=14" - } - }, - "node_modules/convert-to-spaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", - "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", - "dev": true, - "dependencies": { - "array-find-index": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/date-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz", - "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==", - "dev": true, - "dependencies": { - "time-zone": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/emittery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-1.0.1.tgz", - "integrity": "sha512-2ID6FdrMD9KDLldGesP6317G78K7km/kMcwItRtVFva7I/cSEOIaLpewaUb+YLXVwdAp3Ctfxh/V5zIl1sj7dQ==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/endent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/endent/-/endent-2.1.0.tgz", - "integrity": "sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==", - "dev": true, - "dependencies": { - "dedent": "^0.7.0", - "fast-json-parse": "^1.0.3", - "objectorarray": "^1.0.5" - } - }, - "node_modules/enquirer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/enquirer/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/enquirer/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/env-ci": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-5.5.0.tgz", - "integrity": "sha512-o0JdWIbOLP+WJKIUt36hz1ImQQFuN92nhsfTkHHap+J8CiI8WgGpH/a9jEGHh4/TU5BUUGjlnKXNoDb57+ne+A==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "fromentries": "^1.3.2", - "java-properties": "^1.0.0" - }, - "engines": { - "node": ">=10.17" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.46.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.46.0.tgz", - "integrity": "sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.1", - "@eslint/js": "^8.46.0", - "@humanwhocodes/config-array": "^0.11.10", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.2", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", - "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.2.tgz", - "integrity": "sha512-8drBzUEyZ2llkpCA67iYrgEssKDUu68V8ChqqOfFupIaG/LCVPUT+CoGJpT77zJprs4T/W7p07LP7zAIMuweVw==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, - "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" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-parse": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz", - "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/figures": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", - "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dev": true, - "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", - "dev": true - }, - "node_modules/fp-ts": { - "version": "2.16.4", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.16.4.tgz", - "integrity": "sha512-EkV/l6oHaf/w/DlVc5UiqLibqTV1S+idiDdcWQ+UjnLLflL9pZG28ebJfPLor8ifoL8NgEFDIo9fOvHyiSCrJQ==", - "dev": true - }, - "node_modules/fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-monorepo-packages": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-monorepo-packages/-/get-monorepo-packages-1.2.0.tgz", - "integrity": "sha512-aDP6tH+eM3EuVSp3YyCutOcFS4Y9AhRRH9FAd+cjtR/g63Hx+DCXdKoP1ViRPUJz5wm+BOEXB4FhoffGHxJ7jQ==", - "dev": true, - "dependencies": { - "globby": "^7.1.1", - "load-json-file": "^4.0.0" - } - }, - "node_modules/get-monorepo-packages/node_modules/array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", - "dev": true, - "dependencies": { - "array-uniq": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/get-monorepo-packages/node_modules/dir-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", - "dev": true, - "dependencies": { - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/get-monorepo-packages/node_modules/globby": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", - "integrity": "sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g==", - "dev": true, - "dependencies": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/get-monorepo-packages/node_modules/ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - }, - "node_modules/get-monorepo-packages/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/get-monorepo-packages/node_modules/slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gitlog": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/gitlog/-/gitlog-4.0.8.tgz", - "integrity": "sha512-FcTLP7Rc0H1vWXD+J/aj5JS1uiCEBblcYXlcacRAT73N26OMYFFzrBXYmDozmWlV2K7zwK5PrH16/nuRNhqSlQ==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "tslib": "^2.5.0" - }, - "engines": { - "node": ">= 10.x" - } - }, - "node_modules/gitlog/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-by-default": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-2.1.0.tgz", - "integrity": "sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==", - "dev": true, - "engines": { - "node": ">=10 <11 || >=12 <13 || >=14" - } - }, - "node_modules/import-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", - "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", - "dev": true, - "dependencies": { - "import-from": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", - "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-from/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/io-ts": { - "version": "2.2.21", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-2.2.21.tgz", - "integrity": "sha512-zz2Z69v9ZIC3mMLYWIeoUcwWD6f+O7yP92FMVVaXEOSZH1jnVBmET/urd/uoarD1WGBY4rCj8TAyMPzsGNzMFQ==", - "dev": true, - "peerDependencies": { - "fp-ts": "^2.5.0" - } - }, - "node_modules/irregular-plurals": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz", - "integrity": "sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-error": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz", - "integrity": "sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==", - "dev": true - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "dev": true - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/java-properties": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", - "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/js-string-escape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/load-json-file/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/locate-path": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", - "dev": true, - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "node_modules/lodash.chunk": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", - "integrity": "sha512-ZzydJKfUHJwHa+hF5X66zLFCBrWn5GeF28OHEr4WVWtNDXlQ/IjWKPBiikqKo2ne0+v6JgCgJ0GzJp8k8bHC7w==", - "dev": true - }, - "node_modules/lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "dependencies": { - "p-defer": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/matcher": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-5.0.0.tgz", - "integrity": "sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/matcher/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/md5-hex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz", - "integrity": "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==", - "dev": true, - "dependencies": { - "blueimp-md5": "^2.10.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/meant": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/meant/-/meant-1.0.3.tgz", - "integrity": "sha512-88ZRGcNxAq4EH38cQ4D85PM57pikCwS8Z99EWHODxN7KBY+UuPiqzRTtZzS8KTXO/ywSWbdjjJST2Hly/EQxLw==", - "dev": true - }, - "node_modules/mem": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/mem/-/mem-9.0.2.tgz", - "integrity": "sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A==", - "dev": true, - "dependencies": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sindresorhus/mem?sponsor=1" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/module-alias": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.3.tgz", - "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==", - "dev": true - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, - "node_modules/nested-error-stacks": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz", - "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==", - "dev": true - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/nofilter": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz", - "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==", - "dev": true, - "engines": { - "node": ">=12.19" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/objectorarray": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz", - "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==", - "dev": true - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/onetime/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-event": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz", - "integrity": "sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ==", - "dev": true, - "dependencies": { - "p-timeout": "^5.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", - "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", - "dev": true, - "dependencies": { - "aggregate-error": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-timeout": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", - "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module/node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-author": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-author/-/parse-author-2.0.0.tgz", - "integrity": "sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw==", - "dev": true, - "dependencies": { - "author-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-github-url": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-github-url/-/parse-github-url-1.0.2.tgz", - "integrity": "sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==", - "dev": true, - "bin": { - "parse-github-url": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-ms": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", - "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-conf": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-4.0.0.tgz", - "integrity": "sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w==", - "dev": true, - "dependencies": { - "find-up": "^6.0.0", - "load-json-file": "^7.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-conf/node_modules/load-json-file": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-7.0.1.tgz", - "integrity": "sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/plur": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/plur/-/plur-5.1.0.tgz", - "integrity": "sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==", - "dev": true, - "dependencies": { - "irregular-plurals": "^3.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.1.tgz", - "integrity": "sha512-fcOWSnnpCrovBsmFZIGIy9UqK2FaI7Hqax+DIO0A9UxeVoY4iweyaFjS5TavZN97Hfehph0nhsZnjlVKzEQSrQ==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/pretty-ms": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", - "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", - "dev": true, - "dependencies": { - "parse-ms": "^2.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/remove-markdown": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/remove-markdown/-/remove-markdown-0.3.0.tgz", - "integrity": "sha512-5392eIuy1mhjM74739VunOlsOYKjsH82rQcTBlJ1bkICVC3dQ3ksQzTHh4jGHQFnM+1xzLzcFOMH+BofqXhroQ==", - "dev": true - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requireg": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/requireg/-/requireg-0.2.2.tgz", - "integrity": "sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==", - "dev": true, - "dependencies": { - "nested-error-stacks": "~2.0.1", - "rc": "~1.2.7", - "resolve": "~1.7.1" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "dev": true, - "dependencies": { - "path-parse": "^1.0.5" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serialize-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, - "dependencies": { - "type-fest": "^0.13.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/serialize-error/node_modules/type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/signale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", - "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", - "dev": true, - "dependencies": { - "chalk": "^2.3.2", - "figures": "^2.0.0", - "pkg-conf": "^2.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/signale/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/signale/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/signale/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/signale/node_modules/figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/signale/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/signale/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/signale/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/signale/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/signale/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/signale/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/signale/node_modules/pkg-conf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==", - "dev": true, - "dependencies": { - "find-up": "^2.0.0", - "load-json-file": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/signale/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supertap": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/supertap/-/supertap-3.0.1.tgz", - "integrity": "sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==", - "dev": true, - "dependencies": { - "indent-string": "^5.0.0", - "js-yaml": "^3.14.1", - "serialize-error": "^7.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dev": true, - "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/temp-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", - "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", - "dev": true, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/time-zone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz", - "integrity": "sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tinycolor2": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", - "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", - "dev": true - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "node_modules/ts-api-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.1.tgz", - "integrity": "sha512-lC/RGlPmwdrIBFTX59wwNzqh7aR2otPNPR/5brHZm/XKFYKsfqxihXUe9pU3JI+3vGkl+vyCoNNnPhJn3aLK1A==", - "dev": true, - "engines": { - "node": ">=16.13.0" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", - "dev": true - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/typescript-memoize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/typescript-memoize/-/typescript-memoize-1.1.1.tgz", - "integrity": "sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA==", - "dev": true - }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/universal-user-agent": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", - "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", - "dev": true - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-join": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "dev": true - }, - "node_modules/user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==", - "dev": true, - "dependencies": { - "os-homedir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/well-known-symbols": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz", - "integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dev": true, - "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/wordwrapjs/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/package.json b/package.json index 19056d2..b4caac0 100644 --- a/package.json +++ b/package.json @@ -24,15 +24,15 @@ }, "license": "MIT", "devDependencies": { - "@types/node": "^17.0.17", - "@typescript-eslint/eslint-plugin": "^6.2.1", - "@typescript-eslint/parser": "^6.2.1", - "auto": "^11.1.2", - "ava": "^5.3.1", - "eslint": "^8.46.0", - "eslint-config-prettier": "^8.10.0", - "prettier": "^3.0.1", - "typescript": "5.1.6" + "@types/node": "^24.1.0", + "@typescript-eslint/eslint-plugin": "^8.38.0", + "@typescript-eslint/parser": "^8.38.0", + "auto": "^11.3.0", + "ava": "^6.4.1", + "eslint": "^9.0.0", + "eslint-config-prettier": "^10.1.8", + "prettier": "^3.6.2", + "typescript": "5.9.2" }, "prettier": { "semi": false diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..105a424 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,3453 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@opencreek/deno-std-collections': + specifier: ^0.109.1 + version: 0.109.1 + devDependencies: + '@types/node': + specifier: ^24.1.0 + version: 24.1.0 + '@typescript-eslint/eslint-plugin': + specifier: ^8.38.0 + version: 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2))(eslint@9.32.0)(typescript@5.9.2) + '@typescript-eslint/parser': + specifier: ^8.38.0 + version: 8.38.0(eslint@9.32.0)(typescript@5.9.2) + auto: + specifier: ^11.3.0 + version: 11.3.0(@types/node@24.1.0)(typescript@5.9.2) + ava: + specifier: ^6.4.1 + version: 6.4.1 + eslint: + specifier: ^9.0.0 + version: 9.32.0 + eslint-config-prettier: + specifier: ^10.1.8 + version: 10.1.8(eslint@9.32.0) + prettier: + specifier: ^3.6.2 + version: 3.6.2 + typescript: + specifier: 5.9.2 + version: 5.9.2 + +packages: + + '@auto-it/bot-list@11.3.0': + resolution: {integrity: sha512-+izoqAyOSiDVt3WcjVkSvLBV9c82VXLSf3oSWWcCeoxW/YDQ2AoInQ3M3EEyuBP+Yw9KQwGTTYHqpR7ZFkZpDQ==} + engines: {node: '>=10.x'} + + '@auto-it/core@11.3.0': + resolution: {integrity: sha512-3i7ooAhQJulVDG3gmdOioTXLhpFoS75Z/OsLV8ZkrEaEH/sfxlslqFx20VjWva7gMLl2iO8IjbRnlLhkXy5geg==} + peerDependencies: + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@types/node': + optional: true + + '@auto-it/npm@11.3.0': + resolution: {integrity: sha512-II7u1trzi2hSd1Vww635DmvHqHlgtVPqr4VPJlq1M7zqPwi9+FcaMW5J/DSqlwJgWRWviWqepIhasUQhj69p0A==} + + '@auto-it/package-json-utils@11.3.0': + resolution: {integrity: sha512-wZQLfxYCzqNTlqgYhgm1mZaasA35tuOhGl0npWMZlq0HJ4rbNvUYnjb8bXlyfm/dxTYtYp70IhoV5kv1NmPX8Q==} + engines: {node: '>=10.x'} + + '@auto-it/released@11.3.0': + resolution: {integrity: sha512-8Aw8WGuTi3giKU9+KEutebLhhX+4eNVa7SmVLaRIFECUxI/+PS20yMbWsYjsyk5qju1MdpEQGPOW/4U5OZ6Bdw==} + + '@auto-it/version-file@11.3.0': + resolution: {integrity: sha512-+ax5/oXKLc5moXrSJuGm3eC10YFapWFwS5MEVwdspPM2YJn1ImuhagXOq5FJ1XK8aeHILZI+2iA+YB5wI1bcLA==} + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@endemolshinegroup/cosmiconfig-typescript-loader@3.0.2': + resolution: {integrity: sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA==} + engines: {node: '>=10.0.0'} + peerDependencies: + cosmiconfig: '>=6' + + '@eslint-community/eslint-utils@4.7.0': + resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.21.0': + resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.3.0': + resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.15.1': + resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.32.0': + resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.3.4': + resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.4': + resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@mapbox/node-pre-gyp@2.0.0': + resolution: {integrity: sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==} + engines: {node: '>=18'} + hasBin: true + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@octokit/auth-token@2.5.0': + resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==} + + '@octokit/core@3.6.0': + resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==} + + '@octokit/endpoint@6.0.12': + resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} + + '@octokit/graphql@4.8.0': + resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==} + + '@octokit/openapi-types@12.11.0': + resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==} + + '@octokit/plugin-enterprise-compatibility@1.3.0': + resolution: {integrity: sha512-h34sMGdEOER/OKrZJ55v26ntdHb9OPfR1fwOx6Q4qYyyhWA104o11h9tFxnS/l41gED6WEI41Vu2G2zHDVC5lQ==} + + '@octokit/plugin-paginate-rest@2.21.3': + resolution: {integrity: sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==} + peerDependencies: + '@octokit/core': '>=2' + + '@octokit/plugin-request-log@1.0.4': + resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} + peerDependencies: + '@octokit/core': '>=3' + + '@octokit/plugin-rest-endpoint-methods@5.16.2': + resolution: {integrity: sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==} + peerDependencies: + '@octokit/core': '>=3' + + '@octokit/plugin-retry@3.0.9': + resolution: {integrity: sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==} + + '@octokit/plugin-throttling@3.7.0': + resolution: {integrity: sha512-qrKT1Yl/KuwGSC6/oHpLBot3ooC9rq0/ryDYBCpkRtoj+R8T47xTMDT6Tk2CxWopFota/8Pi/2SqArqwC0JPow==} + peerDependencies: + '@octokit/core': ^3.5.0 + + '@octokit/request-error@2.1.0': + resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} + + '@octokit/request@5.6.3': + resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==} + + '@octokit/rest@18.12.0': + resolution: {integrity: sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==} + + '@octokit/types@6.41.0': + resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==} + + '@opencreek/deno-std-collections@0.109.1': + resolution: {integrity: sha512-Xa5X4Hd4cGvh2HnDi8kwWxEipj/D6MuMf9HmGDFFAEFLd8ncqJ5EuKdGlWIJig7RIxe0s7TbdJptP09l2BOxvA==} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@rollup/pluginutils@5.2.0': + resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@types/command-line-args@5.2.3': + resolution: {integrity: sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==} + + '@types/command-line-usage@5.0.4': + resolution: {integrity: sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/node@24.1.0': + resolution: {integrity: sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==} + + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + + '@typescript-eslint/eslint-plugin@8.38.0': + resolution: {integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.38.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/parser@8.38.0': + resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/project-service@8.38.0': + resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/scope-manager@8.38.0': + resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.38.0': + resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/type-utils@8.38.0': + resolution: {integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/types@8.38.0': + resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.38.0': + resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/utils@8.38.0': + resolution: {integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/visitor-keys@8.38.0': + resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@vercel/nft@0.29.4': + resolution: {integrity: sha512-6lLqMNX3TuycBPABycx7A9F1bHQR7kiQln6abjFbPrf5C/05qHM9M5E4PeTE59c7z8g6vHnx1Ioihb2AQl7BTA==} + engines: {node: '>=18'} + hasBin: true + + abbrev@3.0.1: + resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} + engines: {node: ^18.17.0 || >=20.5.0} + + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-back@3.1.0: + resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} + engines: {node: '>=6'} + + array-back@4.0.2: + resolution: {integrity: sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==} + engines: {node: '>=8'} + + array-find-index@1.0.2: + resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==} + engines: {node: '>=0.10.0'} + + array-union@1.0.2: + resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} + engines: {node: '>=0.10.0'} + + array-uniq@1.0.3: + resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} + engines: {node: '>=0.10.0'} + + arrgv@1.0.2: + resolution: {integrity: sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==} + engines: {node: '>=8.0.0'} + + arrify@3.0.0: + resolution: {integrity: sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==} + engines: {node: '>=12'} + + async-sema@3.1.1: + resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} + + author-regex@1.0.0: + resolution: {integrity: sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g==} + engines: {node: '>=0.8'} + + auto@11.3.0: + resolution: {integrity: sha512-7FWjxrfsVKaToAcjxsijdpL8prbffZk5ovPCTVDk6c0Yq3pNKd2AMm5fkPR5lDbnYNeoU7lbm+0wVtJSoTQhpw==} + engines: {node: '>=10.x'} + hasBin: true + + ava@6.4.1: + resolution: {integrity: sha512-vxmPbi1gZx9zhAjHBgw81w/iEDKcrokeRk/fqDTyA2DQygZ0o+dUGRHFOtX8RA5N0heGJTTsIk7+xYxitDb61Q==} + engines: {node: ^18.18 || ^20.8 || ^22 || ^23 || >=24} + hasBin: true + peerDependencies: + '@ava/typescript': '*' + peerDependenciesMeta: + '@ava/typescript': + optional: true + + await-to-js@3.0.0: + resolution: {integrity: sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g==} + engines: {node: '>=6.0.0'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + before-after-hook@2.2.3: + resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + blueimp-md5@2.19.0: + resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} + + bottleneck@2.19.5: + resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + callsites@4.2.0: + resolution: {integrity: sha512-kfzR4zzQtAE9PC7CzZsjl3aBNbXWuXiSeOCdLcPpBfGW8YuCqQHcRPFDbr/BPVmd3EEPVpuFzLyuT/cUhPr4OQ==} + engines: {node: '>=12.20'} + + cbor@10.0.10: + resolution: {integrity: sha512-EirvzAg0G4okCsdTfTjLWHU+tToQ2V2ptO3577Vyy2GOTeVJad99uCIuDqdK7ppFRRcEuigyJY6TJ59wv5JpSg==} + engines: {node: '>=20'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.5.0: + resolution: {integrity: sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + + chunkd@2.0.1: + resolution: {integrity: sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==} + + ci-info@4.3.0: + resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} + engines: {node: '>=8'} + + ci-parallel-vars@1.0.1: + resolution: {integrity: sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + code-excerpt@4.0.0: + resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + command-line-application@0.10.1: + resolution: {integrity: sha512-PWZ4nRkz09MbBRocqEe/Fil3RjTaMNqw0didl1n/i3flDcw/vecVfvsw3r+ZHhGs4BOuW7sk3cEYSdfM3Wv5/Q==} + + command-line-args@5.2.1: + resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} + engines: {node: '>=4.0.0'} + + command-line-usage@6.1.3: + resolution: {integrity: sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==} + engines: {node: '>=8.0.0'} + + common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concordance@5.0.4: + resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==} + engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + + convert-to-spaces@2.0.1: + resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + cosmiconfig@7.0.0: + resolution: {integrity: sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==} + engines: {node: '>=10'} + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + currently-unhandled@0.4.1: + resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==} + engines: {node: '>=0.10.0'} + + date-time@3.1.0: + resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==} + engines: {node: '>=6'} + + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + dedent@0.7.0: + resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + deprecation@2.3.1: + resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + + detect-libc@2.0.4: + resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + engines: {node: '>=8'} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + dir-glob@2.2.2: + resolution: {integrity: sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==} + engines: {node: '>=4'} + + dotenv@8.6.0: + resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} + engines: {node: '>=10'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + emittery@1.2.0: + resolution: {integrity: sha512-KxdRyyFcS85pH3dnU8Y5yFUm2YJdaHwcBZWrfG8o89ZY9a13/f9itbN+YG3ELbBo9Pg5zvIozstmuV8bX13q6g==} + engines: {node: '>=14.16'} + + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + endent@2.1.0: + resolution: {integrity: sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==} + + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + + env-ci@5.5.0: + resolution: {integrity: sha512-o0JdWIbOLP+WJKIUt36hz1ImQQFuN92nhsfTkHHap+J8CiI8WgGpH/a9jEGHh4/TU5BUUGjlnKXNoDb57+ne+A==} + engines: {node: '>=10.17'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + eslint-config-prettier@10.1.8: + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.32.0: + resolution: {integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-parse@1.0.3: + resolution: {integrity: sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + figures@2.0.0: + resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} + engines: {node: '>=4'} + + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-replace@3.0.0: + resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} + engines: {node: '>=4.0.0'} + + find-up-simple@1.0.1: + resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} + engines: {node: '>=18'} + + find-up@2.1.0: + resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} + engines: {node: '>=4'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + fp-ts@2.16.10: + resolution: {integrity: sha512-vuROzbNVfCmUkZSUbnWSltR1sbheyQbTzug7LB/46fEa1c0EucLeBaCEUE0gF3ZGUGBt9lVUiziGOhhj6K1ORA==} + + fromentries@1.3.2: + resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + engines: {node: '>=18'} + + get-monorepo-packages@1.3.0: + resolution: {integrity: sha512-A/s881nNcKhoM7RgkvYFTOtGO+dy4EWbyRaatncPEhhlJAaZRlpfHwuT68p5GJenEt81nnjJOwGg0WKLkR5ZdQ==} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + gitlog@4.0.8: + resolution: {integrity: sha512-FcTLP7Rc0H1vWXD+J/aj5JS1uiCEBblcYXlcacRAT73N26OMYFFzrBXYmDozmWlV2K7zwK5PrH16/nuRNhqSlQ==} + engines: {node: '>= 10.x'} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globby@14.1.0: + resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} + engines: {node: '>=18'} + + globby@7.1.1: + resolution: {integrity: sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g==} + engines: {node: '>=4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + ignore-by-default@2.1.0: + resolution: {integrity: sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==} + engines: {node: '>=10 <11 || >=12 <13 || >=14'} + + ignore@3.3.10: + resolution: {integrity: sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + import-cwd@3.0.0: + resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} + engines: {node: '>=8'} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-from@3.0.0: + resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} + engines: {node: '>=8'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + io-ts@2.2.22: + resolution: {integrity: sha512-FHCCztTkHoV9mdBsHpocLpdTAfh956ZQcIkWQxxS0U5HT53vtrcuYdQneEJKH6xILaLNzXVl2Cvwtoy8XNN0AA==} + peerDependencies: + fp-ts: ^2.5.0 + + irregular-plurals@3.5.0: + resolution: {integrity: sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==} + engines: {node: '>=8'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + java-properties@1.0.2: + resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==} + engines: {node: '>= 0.6.0'} + + js-string-escape@1.0.1: + resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} + engines: {node: '>= 0.8'} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + load-json-file@4.0.0: + resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} + engines: {node: '>=4'} + + load-json-file@7.0.1: + resolution: {integrity: sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + locate-path@2.0.0: + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.chunk@4.2.0: + resolution: {integrity: sha512-ZzydJKfUHJwHa+hF5X66zLFCBrWn5GeF28OHEr4WVWtNDXlQ/IjWKPBiikqKo2ne0+v6JgCgJ0GzJp8k8bHC7w==} + + lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + matcher@5.0.0: + resolution: {integrity: sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + md5-hex@3.0.1: + resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==} + engines: {node: '>=8'} + + meant@1.0.3: + resolution: {integrity: sha512-88ZRGcNxAq4EH38cQ4D85PM57pikCwS8Z99EWHODxN7KBY+UuPiqzRTtZzS8KTXO/ywSWbdjjJST2Hly/EQxLw==} + + memoize@10.1.0: + resolution: {integrity: sha512-MMbFhJzh4Jlg/poq1si90XRlTZRDHVqdlz2mPyGJ6kqMpyHUyVpDd5gpFAvVehW64+RA1eKE9Yt8aSLY7w2Kgg==} + engines: {node: '>=18'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@3.0.2: + resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} + engines: {node: '>= 18'} + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + + module-alias@2.2.3: + resolution: {integrity: sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + nested-error-stacks@2.0.1: + resolution: {integrity: sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==} + + node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + nofilter@3.1.0: + resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==} + engines: {node: '>=12.19'} + + nopt@8.1.0: + resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + objectorarray@1.0.5: + resolution: {integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + os-homedir@1.0.2: + resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} + engines: {node: '>=0.10.0'} + + p-limit@1.3.0: + resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} + engines: {node: '>=4'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@2.0.0: + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@7.0.3: + resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} + engines: {node: '>=18'} + + p-try@1.0.0: + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} + + package-config@5.0.0: + resolution: {integrity: sha512-GYTTew2slBcYdvRHqjhwaaydVMvn/qrGC323+nKclYioNSLTDUM/lGgtGTgyHVtYcozb+XkE8CNhwcraOmZ9Mg==} + engines: {node: '>=18'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-author@2.0.0: + resolution: {integrity: sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw==} + engines: {node: '>=0.10.0'} + + parse-github-url@1.0.2: + resolution: {integrity: sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==} + engines: {node: '>=0.10.0'} + hasBin: true + + parse-json@4.0.0: + resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} + engines: {node: '>=4'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-ms@2.1.0: + resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} + engines: {node: '>=6'} + + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + + path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-type@3.0.0: + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + path-type@6.0.0: + resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} + engines: {node: '>=18'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + + pkg-conf@2.1.0: + resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} + engines: {node: '>=4'} + + plur@5.1.0: + resolution: {integrity: sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + engines: {node: '>=14'} + hasBin: true + + pretty-ms@7.0.1: + resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} + engines: {node: '>=10'} + + pretty-ms@9.2.0: + resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} + engines: {node: '>=18'} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + reduce-flatten@2.0.0: + resolution: {integrity: sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==} + engines: {node: '>=6'} + + registry-url@5.1.0: + resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==} + engines: {node: '>=8'} + + remove-markdown@0.3.0: + resolution: {integrity: sha512-5392eIuy1mhjM74739VunOlsOYKjsH82rQcTBlJ1bkICVC3dQ3ksQzTHh4jGHQFnM+1xzLzcFOMH+BofqXhroQ==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + requireg@0.2.2: + resolution: {integrity: sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==} + engines: {node: '>= 4.0.0'} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve@1.7.1: + resolution: {integrity: sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + serialize-error@7.0.1: + resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} + engines: {node: '>=10'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + signale@1.4.0: + resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==} + engines: {node: '>=6'} + + slash@1.0.0: + resolution: {integrity: sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==} + engines: {node: '>=0.10.0'} + + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + supertap@3.0.1: + resolution: {integrity: sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-hyperlinks@2.3.0: + resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} + engines: {node: '>=8'} + + table-layout@1.0.2: + resolution: {integrity: sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==} + engines: {node: '>=8.0.0'} + + tapable@2.2.2: + resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} + engines: {node: '>=6'} + + tar@7.4.3: + resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + engines: {node: '>=18'} + + temp-dir@3.0.0: + resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} + engines: {node: '>=14.16'} + + terminal-link@2.1.1: + resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} + engines: {node: '>=8'} + + time-zone@1.0.0: + resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==} + engines: {node: '>=4'} + + tinycolor2@1.6.0: + resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + ts-node@9.1.1: + resolution: {integrity: sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==} + engines: {node: '>=10.0.0'} + hasBin: true + peerDependencies: + typescript: '>=2.7' + + tslib@1.10.0: + resolution: {integrity: sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==} + + tslib@2.1.0: + resolution: {integrity: sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.13.1: + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + typescript-memoize@1.1.1: + resolution: {integrity: sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA==} + + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} + engines: {node: '>=14.17'} + hasBin: true + + typical@4.0.0: + resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} + engines: {node: '>=8'} + + typical@5.2.0: + resolution: {integrity: sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==} + engines: {node: '>=8'} + + undici-types@7.8.0: + resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + + universal-user-agent@6.0.1: + resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-join@4.0.1: + resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} + + user-home@2.0.0: + resolution: {integrity: sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==} + engines: {node: '>=0.10.0'} + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + well-known-symbols@2.0.0: + resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==} + engines: {node: '>=6'} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wordwrapjs@4.0.1: + resolution: {integrity: sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==} + engines: {node: '>=8.0.0'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@6.0.0: + resolution: {integrity: sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@auto-it/bot-list@11.3.0': {} + + '@auto-it/core@11.3.0(@types/node@24.1.0)(typescript@5.9.2)': + dependencies: + '@auto-it/bot-list': 11.3.0 + '@endemolshinegroup/cosmiconfig-typescript-loader': 3.0.2(cosmiconfig@7.0.0)(typescript@5.9.2) + '@octokit/core': 3.6.0 + '@octokit/plugin-enterprise-compatibility': 1.3.0 + '@octokit/plugin-retry': 3.0.9 + '@octokit/plugin-throttling': 3.7.0(@octokit/core@3.6.0) + '@octokit/rest': 18.12.0 + await-to-js: 3.0.0 + chalk: 4.1.2 + cosmiconfig: 7.0.0 + deepmerge: 4.3.1 + dotenv: 8.6.0 + endent: 2.1.0 + enquirer: 2.4.1 + env-ci: 5.5.0 + fast-glob: 3.3.3 + fp-ts: 2.16.10 + fromentries: 1.3.2 + gitlog: 4.0.8 + https-proxy-agent: 5.0.1 + import-cwd: 3.0.0 + import-from: 3.0.0 + io-ts: 2.2.22(fp-ts@2.16.10) + lodash.chunk: 4.2.0 + log-symbols: 4.1.0 + node-fetch: 2.6.7 + parse-author: 2.0.0 + parse-github-url: 1.0.2 + pretty-ms: 7.0.1 + requireg: 0.2.2 + semver: 7.7.2 + signale: 1.4.0 + tapable: 2.2.2 + terminal-link: 2.1.1 + tinycolor2: 1.6.0 + ts-node: 10.9.2(@types/node@24.1.0)(typescript@5.9.2) + tslib: 2.1.0 + type-fest: 0.21.3 + typescript: 5.9.2 + typescript-memoize: 1.1.1 + url-join: 4.0.1 + optionalDependencies: + '@types/node': 24.1.0 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - encoding + - supports-color + + '@auto-it/npm@11.3.0(@types/node@24.1.0)(typescript@5.9.2)': + dependencies: + '@auto-it/core': 11.3.0(@types/node@24.1.0)(typescript@5.9.2) + '@auto-it/package-json-utils': 11.3.0 + await-to-js: 3.0.0 + endent: 2.1.0 + env-ci: 5.5.0 + fp-ts: 2.16.10 + get-monorepo-packages: 1.3.0 + io-ts: 2.2.22(fp-ts@2.16.10) + registry-url: 5.1.0 + semver: 7.7.2 + tslib: 2.1.0 + typescript-memoize: 1.1.1 + url-join: 4.0.1 + user-home: 2.0.0 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - encoding + - supports-color + - typescript + + '@auto-it/package-json-utils@11.3.0': + dependencies: + parse-author: 2.0.0 + parse-github-url: 1.0.2 + + '@auto-it/released@11.3.0(@types/node@24.1.0)(typescript@5.9.2)': + dependencies: + '@auto-it/bot-list': 11.3.0 + '@auto-it/core': 11.3.0(@types/node@24.1.0)(typescript@5.9.2) + deepmerge: 4.3.1 + fp-ts: 2.16.10 + io-ts: 2.2.22(fp-ts@2.16.10) + tslib: 2.1.0 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - encoding + - supports-color + - typescript + + '@auto-it/version-file@11.3.0(@types/node@24.1.0)(typescript@5.9.2)': + dependencies: + '@auto-it/core': 11.3.0(@types/node@24.1.0)(typescript@5.9.2) + fp-ts: 2.16.10 + io-ts: 2.2.22(fp-ts@2.16.10) + semver: 7.7.2 + tslib: 1.10.0 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - encoding + - supports-color + - typescript + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/helper-validator-identifier@7.27.1': {} + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@endemolshinegroup/cosmiconfig-typescript-loader@3.0.2(cosmiconfig@7.0.0)(typescript@5.9.2)': + dependencies: + cosmiconfig: 7.0.0 + lodash.get: 4.4.2 + make-error: 1.3.6 + ts-node: 9.1.1(typescript@5.9.2) + tslib: 2.1.0 + transitivePeerDependencies: + - typescript + + '@eslint-community/eslint-utils@4.7.0(eslint@9.32.0)': + dependencies: + eslint: 9.32.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.21.0': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.1 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.3.0': {} + + '@eslint/core@0.15.1': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': + dependencies: + ajv: 6.12.6 + debug: 4.4.1 + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.32.0': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.3.4': + dependencies: + '@eslint/core': 0.15.1 + levn: 0.4.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.2 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/sourcemap-codec@1.5.4': {} + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.4 + + '@mapbox/node-pre-gyp@2.0.0': + dependencies: + consola: 3.4.2 + detect-libc: 2.0.4 + https-proxy-agent: 7.0.6 + node-fetch: 2.7.0 + nopt: 8.1.0 + semver: 7.7.2 + tar: 7.4.3 + transitivePeerDependencies: + - encoding + - supports-color + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@octokit/auth-token@2.5.0': + dependencies: + '@octokit/types': 6.41.0 + + '@octokit/core@3.6.0': + dependencies: + '@octokit/auth-token': 2.5.0 + '@octokit/graphql': 4.8.0 + '@octokit/request': 5.6.3 + '@octokit/request-error': 2.1.0 + '@octokit/types': 6.41.0 + before-after-hook: 2.2.3 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + + '@octokit/endpoint@6.0.12': + dependencies: + '@octokit/types': 6.41.0 + is-plain-object: 5.0.0 + universal-user-agent: 6.0.1 + + '@octokit/graphql@4.8.0': + dependencies: + '@octokit/request': 5.6.3 + '@octokit/types': 6.41.0 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + + '@octokit/openapi-types@12.11.0': {} + + '@octokit/plugin-enterprise-compatibility@1.3.0': + dependencies: + '@octokit/request-error': 2.1.0 + '@octokit/types': 6.41.0 + + '@octokit/plugin-paginate-rest@2.21.3(@octokit/core@3.6.0)': + dependencies: + '@octokit/core': 3.6.0 + '@octokit/types': 6.41.0 + + '@octokit/plugin-request-log@1.0.4(@octokit/core@3.6.0)': + dependencies: + '@octokit/core': 3.6.0 + + '@octokit/plugin-rest-endpoint-methods@5.16.2(@octokit/core@3.6.0)': + dependencies: + '@octokit/core': 3.6.0 + '@octokit/types': 6.41.0 + deprecation: 2.3.1 + + '@octokit/plugin-retry@3.0.9': + dependencies: + '@octokit/types': 6.41.0 + bottleneck: 2.19.5 + + '@octokit/plugin-throttling@3.7.0(@octokit/core@3.6.0)': + dependencies: + '@octokit/core': 3.6.0 + '@octokit/types': 6.41.0 + bottleneck: 2.19.5 + + '@octokit/request-error@2.1.0': + dependencies: + '@octokit/types': 6.41.0 + deprecation: 2.3.1 + once: 1.4.0 + + '@octokit/request@5.6.3': + dependencies: + '@octokit/endpoint': 6.0.12 + '@octokit/request-error': 2.1.0 + '@octokit/types': 6.41.0 + is-plain-object: 5.0.0 + node-fetch: 2.6.7 + universal-user-agent: 6.0.1 + transitivePeerDependencies: + - encoding + + '@octokit/rest@18.12.0': + dependencies: + '@octokit/core': 3.6.0 + '@octokit/plugin-paginate-rest': 2.21.3(@octokit/core@3.6.0) + '@octokit/plugin-request-log': 1.0.4(@octokit/core@3.6.0) + '@octokit/plugin-rest-endpoint-methods': 5.16.2(@octokit/core@3.6.0) + transitivePeerDependencies: + - encoding + + '@octokit/types@6.41.0': + dependencies: + '@octokit/openapi-types': 12.11.0 + + '@opencreek/deno-std-collections@0.109.1': {} + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@rollup/pluginutils@5.2.0': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + + '@sindresorhus/merge-streams@2.3.0': {} + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@types/command-line-args@5.2.3': {} + + '@types/command-line-usage@5.0.4': {} + + '@types/estree@1.0.8': {} + + '@types/json-schema@7.0.15': {} + + '@types/node@24.1.0': + dependencies: + undici-types: 7.8.0 + + '@types/parse-json@4.0.2': {} + + '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2))(eslint@9.32.0)(typescript@5.9.2)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.38.0 + eslint: 9.32.0 + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2)': + dependencies: + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.38.0 + debug: 4.4.1 + eslint: 9.32.0 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.38.0(typescript@5.9.2)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) + '@typescript-eslint/types': 8.38.0 + debug: 4.4.1 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.38.0': + dependencies: + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/visitor-keys': 8.38.0 + + '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.9.2)': + dependencies: + typescript: 5.9.2 + + '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0)(typescript@5.9.2)': + dependencies: + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) + debug: 4.4.1 + eslint: 9.32.0 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.38.0': {} + + '@typescript-eslint/typescript-estree@8.38.0(typescript@5.9.2)': + dependencies: + '@typescript-eslint/project-service': 8.38.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/visitor-keys': 8.38.0 + debug: 4.4.1 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.38.0(eslint@9.32.0)(typescript@5.9.2)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) + eslint: 9.32.0 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.38.0': + dependencies: + '@typescript-eslint/types': 8.38.0 + eslint-visitor-keys: 4.2.1 + + '@vercel/nft@0.29.4': + dependencies: + '@mapbox/node-pre-gyp': 2.0.0 + '@rollup/pluginutils': 5.2.0 + acorn: 8.15.0 + acorn-import-attributes: 1.9.5(acorn@8.15.0) + async-sema: 3.1.1 + bindings: 1.5.0 + estree-walker: 2.0.2 + glob: 10.4.5 + graceful-fs: 4.2.11 + node-gyp-build: 4.8.4 + picomatch: 4.0.3 + resolve-from: 5.0.0 + transitivePeerDependencies: + - encoding + - rollup + - supports-color + + abbrev@3.0.1: {} + + acorn-import-attributes@1.9.5(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.15.0 + + acorn@8.15.0: {} + + agent-base@6.0.2: + dependencies: + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + + agent-base@7.1.4: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-colors@4.1.3: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@6.2.1: {} + + arg@4.1.3: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + array-back@3.1.0: {} + + array-back@4.0.2: {} + + array-find-index@1.0.2: {} + + array-union@1.0.2: + dependencies: + array-uniq: 1.0.3 + + array-uniq@1.0.3: {} + + arrgv@1.0.2: {} + + arrify@3.0.0: {} + + async-sema@3.1.1: {} + + author-regex@1.0.0: {} + + auto@11.3.0(@types/node@24.1.0)(typescript@5.9.2): + dependencies: + '@auto-it/core': 11.3.0(@types/node@24.1.0)(typescript@5.9.2) + '@auto-it/npm': 11.3.0(@types/node@24.1.0)(typescript@5.9.2) + '@auto-it/released': 11.3.0(@types/node@24.1.0)(typescript@5.9.2) + '@auto-it/version-file': 11.3.0(@types/node@24.1.0)(typescript@5.9.2) + await-to-js: 3.0.0 + chalk: 4.1.2 + command-line-application: 0.10.1 + endent: 2.1.0 + module-alias: 2.2.3 + signale: 1.4.0 + terminal-link: 2.1.1 + tslib: 2.1.0 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - encoding + - supports-color + - typescript + + ava@6.4.1: + dependencies: + '@vercel/nft': 0.29.4 + acorn: 8.15.0 + acorn-walk: 8.3.4 + ansi-styles: 6.2.1 + arrgv: 1.0.2 + arrify: 3.0.0 + callsites: 4.2.0 + cbor: 10.0.10 + chalk: 5.5.0 + chunkd: 2.0.1 + ci-info: 4.3.0 + ci-parallel-vars: 1.0.1 + cli-truncate: 4.0.0 + code-excerpt: 4.0.0 + common-path-prefix: 3.0.0 + concordance: 5.0.4 + currently-unhandled: 0.4.1 + debug: 4.4.1 + emittery: 1.2.0 + figures: 6.1.0 + globby: 14.1.0 + ignore-by-default: 2.1.0 + indent-string: 5.0.0 + is-plain-object: 5.0.0 + is-promise: 4.0.0 + matcher: 5.0.0 + memoize: 10.1.0 + ms: 2.1.3 + p-map: 7.0.3 + package-config: 5.0.0 + picomatch: 4.0.3 + plur: 5.1.0 + pretty-ms: 9.2.0 + resolve-cwd: 3.0.0 + stack-utils: 2.0.6 + strip-ansi: 7.1.0 + supertap: 3.0.1 + temp-dir: 3.0.0 + write-file-atomic: 6.0.0 + yargs: 17.7.2 + transitivePeerDependencies: + - encoding + - rollup + - supports-color + + await-to-js@3.0.0: {} + + balanced-match@1.0.2: {} + + before-after-hook@2.2.3: {} + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + + blueimp-md5@2.19.0: {} + + bottleneck@2.19.5: {} + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + buffer-from@1.1.2: {} + + callsites@3.1.0: {} + + callsites@4.2.0: {} + + cbor@10.0.10: + dependencies: + nofilter: 3.1.0 + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.5.0: {} + + chownr@3.0.0: {} + + chunkd@2.0.1: {} + + ci-info@4.3.0: {} + + ci-parallel-vars@1.0.1: {} + + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.2.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + code-excerpt@4.0.0: + dependencies: + convert-to-spaces: 2.0.1 + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + command-line-application@0.10.1: + dependencies: + '@types/command-line-args': 5.2.3 + '@types/command-line-usage': 5.0.4 + chalk: 2.4.2 + command-line-args: 5.2.1 + command-line-usage: 6.1.3 + meant: 1.0.3 + remove-markdown: 0.3.0 + tslib: 1.10.0 + + command-line-args@5.2.1: + dependencies: + array-back: 3.1.0 + find-replace: 3.0.0 + lodash.camelcase: 4.3.0 + typical: 4.0.0 + + command-line-usage@6.1.3: + dependencies: + array-back: 4.0.2 + chalk: 2.4.2 + table-layout: 1.0.2 + typical: 5.2.0 + + common-path-prefix@3.0.0: {} + + concat-map@0.0.1: {} + + concordance@5.0.4: + dependencies: + date-time: 3.1.0 + esutils: 2.0.3 + fast-diff: 1.3.0 + js-string-escape: 1.0.1 + lodash: 4.17.21 + md5-hex: 3.0.1 + semver: 7.7.2 + well-known-symbols: 2.0.0 + + consola@3.4.2: {} + + convert-to-spaces@2.0.1: {} + + cosmiconfig@7.0.0: + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.1 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + + create-require@1.1.1: {} + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + currently-unhandled@0.4.1: + dependencies: + array-find-index: 1.0.2 + + date-time@3.1.0: + dependencies: + time-zone: 1.0.0 + + debug@4.4.1: + dependencies: + ms: 2.1.3 + + dedent@0.7.0: {} + + deep-extend@0.6.0: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + deprecation@2.3.1: {} + + detect-libc@2.0.4: {} + + diff@4.0.2: {} + + dir-glob@2.2.2: + dependencies: + path-type: 3.0.0 + + dotenv@8.6.0: {} + + eastasianwidth@0.2.0: {} + + emittery@1.2.0: {} + + emoji-regex@10.4.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + endent@2.1.0: + dependencies: + dedent: 0.7.0 + fast-json-parse: 1.0.3 + objectorarray: 1.0.5 + + enquirer@2.4.1: + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + + env-ci@5.5.0: + dependencies: + execa: 5.1.1 + fromentries: 1.3.2 + java-properties: 1.0.2 + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + escalade@3.2.0: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + eslint-config-prettier@10.1.8(eslint@9.32.0): + dependencies: + eslint: 9.32.0 + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint@9.32.0: + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.21.0 + '@eslint/config-helpers': 0.3.0 + '@eslint/core': 0.15.1 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.32.0 + '@eslint/plugin-kit': 0.3.4 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.1 + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + transitivePeerDependencies: + - supports-color + + espree@10.4.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 + + esprima@4.0.1: {} + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-walker@2.0.2: {} + + esutils@2.0.3: {} + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-parse@1.0.3: {} + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + figures@2.0.0: + dependencies: + escape-string-regexp: 1.0.5 + + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + file-uri-to-path@1.0.0: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-replace@3.0.0: + dependencies: + array-back: 3.1.0 + + find-up-simple@1.0.1: {} + + find-up@2.1.0: + dependencies: + locate-path: 2.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flatted@3.3.3: {} + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + fp-ts@2.16.10: {} + + fromentries@1.3.2: {} + + fs.realpath@1.0.0: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.3.0: {} + + get-monorepo-packages@1.3.0: + dependencies: + globby: 7.1.1 + load-json-file: 4.0.0 + + get-stream@6.0.1: {} + + gitlog@4.0.8: + dependencies: + debug: 4.4.1 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + globals@14.0.0: {} + + globby@14.1.0: + dependencies: + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.3 + ignore: 7.0.5 + path-type: 6.0.0 + slash: 5.1.0 + unicorn-magic: 0.3.0 + + globby@7.1.1: + dependencies: + array-union: 1.0.2 + dir-glob: 2.2.2 + glob: 7.2.3 + ignore: 3.3.10 + pify: 3.0.0 + slash: 1.0.0 + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + + human-signals@2.1.0: {} + + ignore-by-default@2.1.0: {} + + ignore@3.3.10: {} + + ignore@5.3.2: {} + + ignore@7.0.5: {} + + import-cwd@3.0.0: + dependencies: + import-from: 3.0.0 + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-from@3.0.0: + dependencies: + resolve-from: 5.0.0 + + imurmurhash@0.1.4: {} + + indent-string@5.0.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ini@1.3.8: {} + + io-ts@2.2.22(fp-ts@2.16.10): + dependencies: + fp-ts: 2.16.10 + + irregular-plurals@3.5.0: {} + + is-arrayish@0.2.1: {} + + is-extglob@2.1.1: {} + + is-fullwidth-code-point@3.0.0: {} + + is-fullwidth-code-point@4.0.0: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-plain-object@5.0.0: {} + + is-promise@4.0.0: {} + + is-stream@2.0.1: {} + + is-unicode-supported@0.1.0: {} + + is-unicode-supported@2.1.0: {} + + isexe@2.0.0: {} + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + java-properties@1.0.2: {} + + js-string-escape@1.0.1: {} + + js-tokens@4.0.0: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-buffer@3.0.1: {} + + json-parse-better-errors@1.0.2: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lines-and-columns@1.2.4: {} + + load-json-file@4.0.0: + dependencies: + graceful-fs: 4.2.11 + parse-json: 4.0.0 + pify: 3.0.0 + strip-bom: 3.0.0 + + load-json-file@7.0.1: {} + + locate-path@2.0.0: + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.camelcase@4.3.0: {} + + lodash.chunk@4.2.0: {} + + lodash.get@4.4.2: {} + + lodash.merge@4.6.2: {} + + lodash@4.17.21: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + lru-cache@10.4.3: {} + + make-error@1.3.6: {} + + matcher@5.0.0: + dependencies: + escape-string-regexp: 5.0.0 + + md5-hex@3.0.1: + dependencies: + blueimp-md5: 2.19.0 + + meant@1.0.3: {} + + memoize@10.1.0: + dependencies: + mimic-function: 5.0.1 + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mimic-fn@2.1.0: {} + + mimic-function@5.0.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + minimist@1.2.8: {} + + minipass@7.1.2: {} + + minizlib@3.0.2: + dependencies: + minipass: 7.1.2 + + mkdirp@3.0.1: {} + + module-alias@2.2.3: {} + + ms@2.1.3: {} + + natural-compare@1.4.0: {} + + nested-error-stacks@2.0.1: {} + + node-fetch@2.6.7: + dependencies: + whatwg-url: 5.0.0 + + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-gyp-build@4.8.4: {} + + nofilter@3.1.0: {} + + nopt@8.1.0: + dependencies: + abbrev: 3.0.1 + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + objectorarray@1.0.5: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + os-homedir@1.0.2: {} + + p-limit@1.3.0: + dependencies: + p-try: 1.0.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@2.0.0: + dependencies: + p-limit: 1.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-map@7.0.3: {} + + p-try@1.0.0: {} + + package-config@5.0.0: + dependencies: + find-up-simple: 1.0.1 + load-json-file: 7.0.1 + + package-json-from-dist@1.0.1: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-author@2.0.0: + dependencies: + author-regex: 1.0.0 + + parse-github-url@1.0.2: {} + + parse-json@4.0.0: + dependencies: + error-ex: 1.3.2 + json-parse-better-errors: 1.0.2 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.27.1 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-ms@2.1.0: {} + + parse-ms@4.0.0: {} + + path-exists@3.0.0: {} + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-type@3.0.0: + dependencies: + pify: 3.0.0 + + path-type@4.0.0: {} + + path-type@6.0.0: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.3: {} + + pify@3.0.0: {} + + pkg-conf@2.1.0: + dependencies: + find-up: 2.1.0 + load-json-file: 4.0.0 + + plur@5.1.0: + dependencies: + irregular-plurals: 3.5.0 + + prelude-ls@1.2.1: {} + + prettier@3.6.2: {} + + pretty-ms@7.0.1: + dependencies: + parse-ms: 2.1.0 + + pretty-ms@9.2.0: + dependencies: + parse-ms: 4.0.0 + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + reduce-flatten@2.0.0: {} + + registry-url@5.1.0: + dependencies: + rc: 1.2.8 + + remove-markdown@0.3.0: {} + + require-directory@2.1.1: {} + + requireg@0.2.2: + dependencies: + nested-error-stacks: 2.0.1 + rc: 1.2.8 + resolve: 1.7.1 + + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve@1.7.1: + dependencies: + path-parse: 1.0.7 + + reusify@1.1.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + semver@7.7.2: {} + + serialize-error@7.0.1: + dependencies: + type-fest: 0.13.1 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + signale@1.4.0: + dependencies: + chalk: 2.4.2 + figures: 2.0.0 + pkg-conf: 2.1.0 + + slash@1.0.0: {} + + slash@5.1.0: {} + + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + sprintf-js@1.0.3: {} + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.4.0 + get-east-asian-width: 1.3.0 + strip-ansi: 7.1.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-bom@3.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-json-comments@2.0.1: {} + + strip-json-comments@3.1.1: {} + + supertap@3.0.1: + dependencies: + indent-string: 5.0.0 + js-yaml: 3.14.1 + serialize-error: 7.0.1 + strip-ansi: 7.1.0 + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-hyperlinks@2.3.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + + table-layout@1.0.2: + dependencies: + array-back: 4.0.2 + deep-extend: 0.6.0 + typical: 5.2.0 + wordwrapjs: 4.0.1 + + tapable@2.2.2: {} + + tar@7.4.3: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.0.2 + mkdirp: 3.0.1 + yallist: 5.0.0 + + temp-dir@3.0.0: {} + + terminal-link@2.1.1: + dependencies: + ansi-escapes: 4.3.2 + supports-hyperlinks: 2.3.0 + + time-zone@1.0.0: {} + + tinycolor2@1.6.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + tr46@0.0.3: {} + + ts-api-utils@2.1.0(typescript@5.9.2): + dependencies: + typescript: 5.9.2 + + ts-node@10.9.2(@types/node@24.1.0)(typescript@5.9.2): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 24.1.0 + acorn: 8.15.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.9.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + + ts-node@9.1.1(typescript@5.9.2): + dependencies: + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + source-map-support: 0.5.21 + typescript: 5.9.2 + yn: 3.1.1 + + tslib@1.10.0: {} + + tslib@2.1.0: {} + + tslib@2.8.1: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@0.13.1: {} + + type-fest@0.21.3: {} + + typescript-memoize@1.1.1: {} + + typescript@5.9.2: {} + + typical@4.0.0: {} + + typical@5.2.0: {} + + undici-types@7.8.0: {} + + unicorn-magic@0.3.0: {} + + universal-user-agent@6.0.1: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + url-join@4.0.1: {} + + user-home@2.0.0: + dependencies: + os-homedir: 1.0.2 + + v8-compile-cache-lib@3.0.1: {} + + webidl-conversions@3.0.1: {} + + well-known-symbols@2.0.0: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + word-wrap@1.2.5: {} + + wordwrapjs@4.0.1: + dependencies: + reduce-flatten: 2.0.0 + typical: 5.2.0 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + write-file-atomic@6.0.0: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + + y18n@5.0.8: {} + + yallist@5.0.0: {} + + yaml@1.10.2: {} + + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yn@3.1.1: {} + + yocto-queue@0.1.0: {} From 0f3bf10906b224ae550756cc9aadb5828c3def33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Mon, 4 Aug 2025 09:50:20 +0200 Subject: [PATCH 24/26] Fix eslint config --- .eslintrc.json | 29 - package.json | 2 + pnpm-lock.yaml | 3428 ++++++++++++++++++++++----------- src/collections.test.ts | 16 +- src/collections.ts | 5 +- src/collections/AsyncChain.ts | 19 +- src/extendPrototype.ts | 10 +- src/strings.ts | 4 +- 8 files changed, 2377 insertions(+), 1136 deletions(-) delete mode 100644 .eslintrc.json diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 7dde40a..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "ignorePatterns": ["build/"], - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended", - "prettier" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": 11, - "sourceType": "module", - "project": "./tsconfig.json" - }, - "plugins": ["@typescript-eslint"], - "rules": { - "@typescript-eslint/no-unused-vars": [ - "error", - { - "varsIgnorePattern": "^_", - "argsIgnorePattern": "^_", - "ignoreRestSiblings": true - } - ], - "@typescript-eslint/no-explicit-any": 0, - "@typescript-eslint/no-this-alias": 0, - "@typescript-eslint/ban-ts-comment": 0, - "@typescript-eslint/no-floating-promises": ["error"] - } -} diff --git a/package.json b/package.json index b4caac0..452a87d 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,8 @@ }, "license": "MIT", "devDependencies": { + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "^9.32.0", "@types/node": "^24.1.0", "@typescript-eslint/eslint-plugin": "^8.38.0", "@typescript-eslint/parser": "^8.38.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 105a424..6627336 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,24 +1,29 @@ -lockfileVersion: '9.0' +lockfileVersion: "9.0" settings: autoInstallPeers: true excludeLinksFromLockfile: false importers: - .: dependencies: - '@opencreek/deno-std-collections': + "@opencreek/deno-std-collections": specifier: ^0.109.1 version: 0.109.1 devDependencies: - '@types/node': + "@eslint/eslintrc": + specifier: ^3.3.1 + version: 3.3.1 + "@eslint/js": + specifier: ^9.32.0 + version: 9.32.0 + "@types/node": specifier: ^24.1.0 version: 24.1.0 - '@typescript-eslint/eslint-plugin': + "@typescript-eslint/eslint-plugin": specifier: ^8.38.0 version: 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2))(eslint@9.32.0)(typescript@5.9.2) - '@typescript-eslint/parser': + "@typescript-eslint/parser": specifier: ^8.38.0 version: 8.38.0(eslint@9.32.0)(typescript@5.9.2) auto: @@ -41,1137 +46,2012 @@ importers: version: 5.9.2 packages: - - '@auto-it/bot-list@11.3.0': - resolution: {integrity: sha512-+izoqAyOSiDVt3WcjVkSvLBV9c82VXLSf3oSWWcCeoxW/YDQ2AoInQ3M3EEyuBP+Yw9KQwGTTYHqpR7ZFkZpDQ==} - engines: {node: '>=10.x'} - - '@auto-it/core@11.3.0': - resolution: {integrity: sha512-3i7ooAhQJulVDG3gmdOioTXLhpFoS75Z/OsLV8ZkrEaEH/sfxlslqFx20VjWva7gMLl2iO8IjbRnlLhkXy5geg==} + "@auto-it/bot-list@11.3.0": + resolution: + { + integrity: sha512-+izoqAyOSiDVt3WcjVkSvLBV9c82VXLSf3oSWWcCeoxW/YDQ2AoInQ3M3EEyuBP+Yw9KQwGTTYHqpR7ZFkZpDQ==, + } + engines: { node: ">=10.x" } + + "@auto-it/core@11.3.0": + resolution: + { + integrity: sha512-3i7ooAhQJulVDG3gmdOioTXLhpFoS75Z/OsLV8ZkrEaEH/sfxlslqFx20VjWva7gMLl2iO8IjbRnlLhkXy5geg==, + } peerDependencies: - '@types/node': '*' - typescript: '>=2.7' + "@types/node": "*" + typescript: ">=2.7" peerDependenciesMeta: - '@types/node': + "@types/node": optional: true - '@auto-it/npm@11.3.0': - resolution: {integrity: sha512-II7u1trzi2hSd1Vww635DmvHqHlgtVPqr4VPJlq1M7zqPwi9+FcaMW5J/DSqlwJgWRWviWqepIhasUQhj69p0A==} - - '@auto-it/package-json-utils@11.3.0': - resolution: {integrity: sha512-wZQLfxYCzqNTlqgYhgm1mZaasA35tuOhGl0npWMZlq0HJ4rbNvUYnjb8bXlyfm/dxTYtYp70IhoV5kv1NmPX8Q==} - engines: {node: '>=10.x'} - - '@auto-it/released@11.3.0': - resolution: {integrity: sha512-8Aw8WGuTi3giKU9+KEutebLhhX+4eNVa7SmVLaRIFECUxI/+PS20yMbWsYjsyk5qju1MdpEQGPOW/4U5OZ6Bdw==} - - '@auto-it/version-file@11.3.0': - resolution: {integrity: sha512-+ax5/oXKLc5moXrSJuGm3eC10YFapWFwS5MEVwdspPM2YJn1ImuhagXOq5FJ1XK8aeHILZI+2iA+YB5wI1bcLA==} - - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} - engines: {node: '>=6.9.0'} - - '@cspotcode/source-map-support@0.8.1': - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} - - '@endemolshinegroup/cosmiconfig-typescript-loader@3.0.2': - resolution: {integrity: sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA==} - engines: {node: '>=10.0.0'} + "@auto-it/npm@11.3.0": + resolution: + { + integrity: sha512-II7u1trzi2hSd1Vww635DmvHqHlgtVPqr4VPJlq1M7zqPwi9+FcaMW5J/DSqlwJgWRWviWqepIhasUQhj69p0A==, + } + + "@auto-it/package-json-utils@11.3.0": + resolution: + { + integrity: sha512-wZQLfxYCzqNTlqgYhgm1mZaasA35tuOhGl0npWMZlq0HJ4rbNvUYnjb8bXlyfm/dxTYtYp70IhoV5kv1NmPX8Q==, + } + engines: { node: ">=10.x" } + + "@auto-it/released@11.3.0": + resolution: + { + integrity: sha512-8Aw8WGuTi3giKU9+KEutebLhhX+4eNVa7SmVLaRIFECUxI/+PS20yMbWsYjsyk5qju1MdpEQGPOW/4U5OZ6Bdw==, + } + + "@auto-it/version-file@11.3.0": + resolution: + { + integrity: sha512-+ax5/oXKLc5moXrSJuGm3eC10YFapWFwS5MEVwdspPM2YJn1ImuhagXOq5FJ1XK8aeHILZI+2iA+YB5wI1bcLA==, + } + + "@babel/code-frame@7.27.1": + resolution: + { + integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-validator-identifier@7.27.1": + resolution: + { + integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==, + } + engines: { node: ">=6.9.0" } + + "@cspotcode/source-map-support@0.8.1": + resolution: + { + integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==, + } + engines: { node: ">=12" } + + "@endemolshinegroup/cosmiconfig-typescript-loader@3.0.2": + resolution: + { + integrity: sha512-QRVtqJuS1mcT56oHpVegkKBlgtWjXw/gHNWO3eL9oyB5Sc7HBoc2OLG/nYpVfT/Jejvo3NUrD0Udk7XgoyDKkA==, + } + engines: { node: ">=10.0.0" } peerDependencies: - cosmiconfig: '>=6' - - '@eslint-community/eslint-utils@4.7.0': - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + cosmiconfig: ">=6" + + "@eslint-community/eslint-utils@4.7.0": + resolution: + { + integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/config-array@0.21.0': - resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.3.0': - resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.15.1': - resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@9.32.0': - resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.6': - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.3.4': - resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} - - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} - engines: {node: '>=18.18.0'} - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} - - '@humanwhocodes/retry@0.4.3': - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} - engines: {node: '>=18.18'} - - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - - '@isaacs/fs-minipass@4.0.1': - resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} - engines: {node: '>=18.0.0'} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.4': - resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} - - '@jridgewell/trace-mapping@0.3.9': - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - - '@mapbox/node-pre-gyp@2.0.0': - resolution: {integrity: sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==} - engines: {node: '>=18'} + "@eslint-community/regexpp@4.12.1": + resolution: + { + integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==, + } + engines: { node: ^12.0.0 || ^14.0.0 || >=16.0.0 } + + "@eslint/config-array@0.21.0": + resolution: + { + integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/config-helpers@0.3.0": + resolution: + { + integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/core@0.15.1": + resolution: + { + integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/eslintrc@3.3.1": + resolution: + { + integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/js@9.32.0": + resolution: + { + integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/object-schema@2.1.6": + resolution: + { + integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@eslint/plugin-kit@0.3.4": + resolution: + { + integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@humanfs/core@0.19.1": + resolution: + { + integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==, + } + engines: { node: ">=18.18.0" } + + "@humanfs/node@0.16.6": + resolution: + { + integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==, + } + engines: { node: ">=18.18.0" } + + "@humanwhocodes/module-importer@1.0.1": + resolution: + { + integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==, + } + engines: { node: ">=12.22" } + + "@humanwhocodes/retry@0.3.1": + resolution: + { + integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==, + } + engines: { node: ">=18.18" } + + "@humanwhocodes/retry@0.4.3": + resolution: + { + integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==, + } + engines: { node: ">=18.18" } + + "@isaacs/cliui@8.0.2": + resolution: + { + integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==, + } + engines: { node: ">=12" } + + "@isaacs/fs-minipass@4.0.1": + resolution: + { + integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==, + } + engines: { node: ">=18.0.0" } + + "@jridgewell/resolve-uri@3.1.2": + resolution: + { + integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==, + } + engines: { node: ">=6.0.0" } + + "@jridgewell/sourcemap-codec@1.5.4": + resolution: + { + integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==, + } + + "@jridgewell/trace-mapping@0.3.9": + resolution: + { + integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==, + } + + "@mapbox/node-pre-gyp@2.0.0": + resolution: + { + integrity: sha512-llMXd39jtP0HpQLVI37Bf1m2ADlEb35GYSh1SDSLsBhR+5iCxiNGlT31yqbNtVHygHAtMy6dWFERpU2JgufhPg==, + } + engines: { node: ">=18" } hasBin: true - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@octokit/auth-token@2.5.0': - resolution: {integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==} - - '@octokit/core@3.6.0': - resolution: {integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==} - - '@octokit/endpoint@6.0.12': - resolution: {integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==} - - '@octokit/graphql@4.8.0': - resolution: {integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==} - - '@octokit/openapi-types@12.11.0': - resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==} - - '@octokit/plugin-enterprise-compatibility@1.3.0': - resolution: {integrity: sha512-h34sMGdEOER/OKrZJ55v26ntdHb9OPfR1fwOx6Q4qYyyhWA104o11h9tFxnS/l41gED6WEI41Vu2G2zHDVC5lQ==} - - '@octokit/plugin-paginate-rest@2.21.3': - resolution: {integrity: sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==} + "@nodelib/fs.scandir@2.1.5": + resolution: + { + integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==, + } + engines: { node: ">= 8" } + + "@nodelib/fs.stat@2.0.5": + resolution: + { + integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==, + } + engines: { node: ">= 8" } + + "@nodelib/fs.walk@1.2.8": + resolution: + { + integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==, + } + engines: { node: ">= 8" } + + "@octokit/auth-token@2.5.0": + resolution: + { + integrity: sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==, + } + + "@octokit/core@3.6.0": + resolution: + { + integrity: sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==, + } + + "@octokit/endpoint@6.0.12": + resolution: + { + integrity: sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==, + } + + "@octokit/graphql@4.8.0": + resolution: + { + integrity: sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==, + } + + "@octokit/openapi-types@12.11.0": + resolution: + { + integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==, + } + + "@octokit/plugin-enterprise-compatibility@1.3.0": + resolution: + { + integrity: sha512-h34sMGdEOER/OKrZJ55v26ntdHb9OPfR1fwOx6Q4qYyyhWA104o11h9tFxnS/l41gED6WEI41Vu2G2zHDVC5lQ==, + } + + "@octokit/plugin-paginate-rest@2.21.3": + resolution: + { + integrity: sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==, + } peerDependencies: - '@octokit/core': '>=2' + "@octokit/core": ">=2" - '@octokit/plugin-request-log@1.0.4': - resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==} + "@octokit/plugin-request-log@1.0.4": + resolution: + { + integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==, + } peerDependencies: - '@octokit/core': '>=3' + "@octokit/core": ">=3" - '@octokit/plugin-rest-endpoint-methods@5.16.2': - resolution: {integrity: sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==} + "@octokit/plugin-rest-endpoint-methods@5.16.2": + resolution: + { + integrity: sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==, + } peerDependencies: - '@octokit/core': '>=3' - - '@octokit/plugin-retry@3.0.9': - resolution: {integrity: sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==} - - '@octokit/plugin-throttling@3.7.0': - resolution: {integrity: sha512-qrKT1Yl/KuwGSC6/oHpLBot3ooC9rq0/ryDYBCpkRtoj+R8T47xTMDT6Tk2CxWopFota/8Pi/2SqArqwC0JPow==} + "@octokit/core": ">=3" + + "@octokit/plugin-retry@3.0.9": + resolution: + { + integrity: sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==, + } + + "@octokit/plugin-throttling@3.7.0": + resolution: + { + integrity: sha512-qrKT1Yl/KuwGSC6/oHpLBot3ooC9rq0/ryDYBCpkRtoj+R8T47xTMDT6Tk2CxWopFota/8Pi/2SqArqwC0JPow==, + } peerDependencies: - '@octokit/core': ^3.5.0 - - '@octokit/request-error@2.1.0': - resolution: {integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==} - - '@octokit/request@5.6.3': - resolution: {integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==} - - '@octokit/rest@18.12.0': - resolution: {integrity: sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==} - - '@octokit/types@6.41.0': - resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==} - - '@opencreek/deno-std-collections@0.109.1': - resolution: {integrity: sha512-Xa5X4Hd4cGvh2HnDi8kwWxEipj/D6MuMf9HmGDFFAEFLd8ncqJ5EuKdGlWIJig7RIxe0s7TbdJptP09l2BOxvA==} - - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - - '@rollup/pluginutils@5.2.0': - resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} - engines: {node: '>=14.0.0'} + "@octokit/core": ^3.5.0 + + "@octokit/request-error@2.1.0": + resolution: + { + integrity: sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==, + } + + "@octokit/request@5.6.3": + resolution: + { + integrity: sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==, + } + + "@octokit/rest@18.12.0": + resolution: + { + integrity: sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==, + } + + "@octokit/types@6.41.0": + resolution: + { + integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==, + } + + "@opencreek/deno-std-collections@0.109.1": + resolution: + { + integrity: sha512-Xa5X4Hd4cGvh2HnDi8kwWxEipj/D6MuMf9HmGDFFAEFLd8ncqJ5EuKdGlWIJig7RIxe0s7TbdJptP09l2BOxvA==, + } + + "@pkgjs/parseargs@0.11.0": + resolution: + { + integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==, + } + engines: { node: ">=14" } + + "@rollup/pluginutils@5.2.0": + resolution: + { + integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==, + } + engines: { node: ">=14.0.0" } peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 peerDependenciesMeta: rollup: optional: true - '@sindresorhus/merge-streams@2.3.0': - resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} - engines: {node: '>=18'} - - '@tsconfig/node10@1.0.11': - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - - '@tsconfig/node12@1.0.11': - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - - '@tsconfig/node14@1.0.3': - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - - '@tsconfig/node16@1.0.4': - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - - '@types/command-line-args@5.2.3': - resolution: {integrity: sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==} - - '@types/command-line-usage@5.0.4': - resolution: {integrity: sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==} - - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/node@24.1.0': - resolution: {integrity: sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==} - - '@types/parse-json@4.0.2': - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - - '@typescript-eslint/eslint-plugin@8.38.0': - resolution: {integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + "@sindresorhus/merge-streams@2.3.0": + resolution: + { + integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==, + } + engines: { node: ">=18" } + + "@tsconfig/node10@1.0.11": + resolution: + { + integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==, + } + + "@tsconfig/node12@1.0.11": + resolution: + { + integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==, + } + + "@tsconfig/node14@1.0.3": + resolution: + { + integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==, + } + + "@tsconfig/node16@1.0.4": + resolution: + { + integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==, + } + + "@types/command-line-args@5.2.3": + resolution: + { + integrity: sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==, + } + + "@types/command-line-usage@5.0.4": + resolution: + { + integrity: sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==, + } + + "@types/estree@1.0.8": + resolution: + { + integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==, + } + + "@types/json-schema@7.0.15": + resolution: + { + integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==, + } + + "@types/node@24.1.0": + resolution: + { + integrity: sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==, + } + + "@types/parse-json@4.0.2": + resolution: + { + integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==, + } + + "@typescript-eslint/eslint-plugin@8.38.0": + resolution: + { + integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: - '@typescript-eslint/parser': ^8.38.0 + "@typescript-eslint/parser": ^8.38.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/parser@8.38.0': - resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + typescript: ">=4.8.4 <5.9.0" + + "@typescript-eslint/parser@8.38.0": + resolution: + { + integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/project-service@8.38.0': - resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + typescript: ">=4.8.4 <5.9.0" + + "@typescript-eslint/project-service@8.38.0": + resolution: + { + integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/scope-manager@8.38.0': - resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/tsconfig-utils@8.38.0': - resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + typescript: ">=4.8.4 <5.9.0" + + "@typescript-eslint/scope-manager@8.38.0": + resolution: + { + integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@typescript-eslint/tsconfig-utils@8.38.0": + resolution: + { + integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/type-utils@8.38.0': - resolution: {integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + typescript: ">=4.8.4 <5.9.0" + + "@typescript-eslint/type-utils@8.38.0": + resolution: + { + integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/types@8.38.0': - resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.38.0': - resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + typescript: ">=4.8.4 <5.9.0" + + "@typescript-eslint/types@8.38.0": + resolution: + { + integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@typescript-eslint/typescript-estree@8.38.0": + resolution: + { + integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/utils@8.38.0': - resolution: {integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + typescript: ">=4.8.4 <5.9.0" + + "@typescript-eslint/utils@8.38.0": + resolution: + { + integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/visitor-keys@8.38.0': - resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@vercel/nft@0.29.4': - resolution: {integrity: sha512-6lLqMNX3TuycBPABycx7A9F1bHQR7kiQln6abjFbPrf5C/05qHM9M5E4PeTE59c7z8g6vHnx1Ioihb2AQl7BTA==} - engines: {node: '>=18'} + typescript: ">=4.8.4 <5.9.0" + + "@typescript-eslint/visitor-keys@8.38.0": + resolution: + { + integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + + "@vercel/nft@0.29.4": + resolution: + { + integrity: sha512-6lLqMNX3TuycBPABycx7A9F1bHQR7kiQln6abjFbPrf5C/05qHM9M5E4PeTE59c7z8g6vHnx1Ioihb2AQl7BTA==, + } + engines: { node: ">=18" } hasBin: true abbrev@3.0.1: - resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} - engines: {node: ^18.17.0 || >=20.5.0} + resolution: + { + integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==, + } + engines: { node: ^18.17.0 || >=20.5.0 } acorn-import-attributes@1.9.5: - resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + resolution: + { + integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==, + } peerDependencies: acorn: ^8 acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + resolution: + { + integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, + } peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} + resolution: + { + integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==, + } + engines: { node: ">=0.4.0" } acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} - engines: {node: '>=0.4.0'} + resolution: + { + integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==, + } + engines: { node: ">=0.4.0" } hasBin: true agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} + resolution: + { + integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==, + } + engines: { node: ">= 6.0.0" } agent-base@7.1.4: - resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} - engines: {node: '>= 14'} + resolution: + { + integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==, + } + engines: { node: ">= 14" } ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + resolution: + { + integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, + } ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==, + } + engines: { node: ">=6" } ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==, + } + engines: { node: ">=8" } ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, + } + engines: { node: ">=8" } ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==, + } + engines: { node: ">=12" } ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, + } + engines: { node: ">=4" } ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, + } + engines: { node: ">=8" } ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==, + } + engines: { node: ">=12" } arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + resolution: + { + integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==, + } argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + resolution: + { + integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, + } argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + resolution: + { + integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, + } array-back@3.1.0: - resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==, + } + engines: { node: ">=6" } array-back@4.0.2: - resolution: {integrity: sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==, + } + engines: { node: ">=8" } array-find-index@1.0.2: - resolution: {integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==, + } + engines: { node: ">=0.10.0" } array-union@1.0.2: - resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==, + } + engines: { node: ">=0.10.0" } array-uniq@1.0.3: - resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==, + } + engines: { node: ">=0.10.0" } arrgv@1.0.2: - resolution: {integrity: sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==} - engines: {node: '>=8.0.0'} + resolution: + { + integrity: sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==, + } + engines: { node: ">=8.0.0" } arrify@3.0.0: - resolution: {integrity: sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==, + } + engines: { node: ">=12" } async-sema@3.1.1: - resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} + resolution: + { + integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==, + } author-regex@1.0.0: - resolution: {integrity: sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g==} - engines: {node: '>=0.8'} + resolution: + { + integrity: sha512-KbWgR8wOYRAPekEmMXrYYdc7BRyhn2Ftk7KWfMUnQ43hFdojWEFRxhhRUm3/OFEdPa1r0KAvTTg9YQK57xTe0g==, + } + engines: { node: ">=0.8" } auto@11.3.0: - resolution: {integrity: sha512-7FWjxrfsVKaToAcjxsijdpL8prbffZk5ovPCTVDk6c0Yq3pNKd2AMm5fkPR5lDbnYNeoU7lbm+0wVtJSoTQhpw==} - engines: {node: '>=10.x'} + resolution: + { + integrity: sha512-7FWjxrfsVKaToAcjxsijdpL8prbffZk5ovPCTVDk6c0Yq3pNKd2AMm5fkPR5lDbnYNeoU7lbm+0wVtJSoTQhpw==, + } + engines: { node: ">=10.x" } hasBin: true ava@6.4.1: - resolution: {integrity: sha512-vxmPbi1gZx9zhAjHBgw81w/iEDKcrokeRk/fqDTyA2DQygZ0o+dUGRHFOtX8RA5N0heGJTTsIk7+xYxitDb61Q==} - engines: {node: ^18.18 || ^20.8 || ^22 || ^23 || >=24} + resolution: + { + integrity: sha512-vxmPbi1gZx9zhAjHBgw81w/iEDKcrokeRk/fqDTyA2DQygZ0o+dUGRHFOtX8RA5N0heGJTTsIk7+xYxitDb61Q==, + } + engines: { node: ^18.18 || ^20.8 || ^22 || ^23 || >=24 } hasBin: true peerDependencies: - '@ava/typescript': '*' + "@ava/typescript": "*" peerDependenciesMeta: - '@ava/typescript': + "@ava/typescript": optional: true await-to-js@3.0.0: - resolution: {integrity: sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g==} - engines: {node: '>=6.0.0'} + resolution: + { + integrity: sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g==, + } + engines: { node: ">=6.0.0" } balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + resolution: + { + integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, + } before-after-hook@2.2.3: - resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + resolution: + { + integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==, + } bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + resolution: + { + integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==, + } blueimp-md5@2.19.0: - resolution: {integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==} + resolution: + { + integrity: sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==, + } bottleneck@2.19.5: - resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} + resolution: + { + integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==, + } brace-expansion@1.1.12: - resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + resolution: + { + integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==, + } brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + resolution: + { + integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==, + } braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==, + } + engines: { node: ">=8" } buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + resolution: + { + integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, + } callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, + } + engines: { node: ">=6" } callsites@4.2.0: - resolution: {integrity: sha512-kfzR4zzQtAE9PC7CzZsjl3aBNbXWuXiSeOCdLcPpBfGW8YuCqQHcRPFDbr/BPVmd3EEPVpuFzLyuT/cUhPr4OQ==} - engines: {node: '>=12.20'} + resolution: + { + integrity: sha512-kfzR4zzQtAE9PC7CzZsjl3aBNbXWuXiSeOCdLcPpBfGW8YuCqQHcRPFDbr/BPVmd3EEPVpuFzLyuT/cUhPr4OQ==, + } + engines: { node: ">=12.20" } cbor@10.0.10: - resolution: {integrity: sha512-EirvzAg0G4okCsdTfTjLWHU+tToQ2V2ptO3577Vyy2GOTeVJad99uCIuDqdK7ppFRRcEuigyJY6TJ59wv5JpSg==} - engines: {node: '>=20'} + resolution: + { + integrity: sha512-EirvzAg0G4okCsdTfTjLWHU+tToQ2V2ptO3577Vyy2GOTeVJad99uCIuDqdK7ppFRRcEuigyJY6TJ59wv5JpSg==, + } + engines: { node: ">=20" } chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, + } + engines: { node: ">=4" } chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, + } + engines: { node: ">=10" } chalk@5.5.0: - resolution: {integrity: sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + resolution: + { + integrity: sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==, + } + engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==, + } + engines: { node: ">=18" } chunkd@2.0.1: - resolution: {integrity: sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==} + resolution: + { + integrity: sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==, + } ci-info@4.3.0: - resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==, + } + engines: { node: ">=8" } ci-parallel-vars@1.0.1: - resolution: {integrity: sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==} + resolution: + { + integrity: sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==, + } cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==, + } + engines: { node: ">=18" } cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, + } + engines: { node: ">=12" } code-excerpt@4.0.0: - resolution: {integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + resolution: + { + integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, + } color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + resolution: + { + integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, + } + engines: { node: ">=7.0.0" } color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + resolution: + { + integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, + } color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + resolution: + { + integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, + } command-line-application@0.10.1: - resolution: {integrity: sha512-PWZ4nRkz09MbBRocqEe/Fil3RjTaMNqw0didl1n/i3flDcw/vecVfvsw3r+ZHhGs4BOuW7sk3cEYSdfM3Wv5/Q==} + resolution: + { + integrity: sha512-PWZ4nRkz09MbBRocqEe/Fil3RjTaMNqw0didl1n/i3flDcw/vecVfvsw3r+ZHhGs4BOuW7sk3cEYSdfM3Wv5/Q==, + } command-line-args@5.2.1: - resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} - engines: {node: '>=4.0.0'} + resolution: + { + integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==, + } + engines: { node: ">=4.0.0" } command-line-usage@6.1.3: - resolution: {integrity: sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==} - engines: {node: '>=8.0.0'} + resolution: + { + integrity: sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==, + } + engines: { node: ">=8.0.0" } common-path-prefix@3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + resolution: + { + integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==, + } concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + resolution: + { + integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, + } concordance@5.0.4: - resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==} - engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'} + resolution: + { + integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==, + } + engines: { node: ">=10.18.0 <11 || >=12.14.0 <13 || >=14" } consola@3.4.2: - resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} - engines: {node: ^14.18.0 || >=16.10.0} + resolution: + { + integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==, + } + engines: { node: ^14.18.0 || >=16.10.0 } convert-to-spaces@2.0.1: - resolution: {integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } cosmiconfig@7.0.0: - resolution: {integrity: sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==, + } + engines: { node: ">=10" } create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + resolution: + { + integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==, + } cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==, + } + engines: { node: ">= 8" } currently-unhandled@0.4.1: - resolution: {integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==, + } + engines: { node: ">=0.10.0" } date-time@3.1.0: - resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==, + } + engines: { node: ">=6" } debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} - engines: {node: '>=6.0'} + resolution: + { + integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==, + } + engines: { node: ">=6.0" } peerDependencies: - supports-color: '*' + supports-color: "*" peerDependenciesMeta: supports-color: optional: true dedent@0.7.0: - resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + resolution: + { + integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==, + } deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} + resolution: + { + integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==, + } + engines: { node: ">=4.0.0" } deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + resolution: + { + integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, + } deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==, + } + engines: { node: ">=0.10.0" } deprecation@2.3.1: - resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} + resolution: + { + integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==, + } detect-libc@2.0.4: - resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==, + } + engines: { node: ">=8" } diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} + resolution: + { + integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==, + } + engines: { node: ">=0.3.1" } dir-glob@2.2.2: - resolution: {integrity: sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==, + } + engines: { node: ">=4" } dotenv@8.6.0: - resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==, + } + engines: { node: ">=10" } eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + resolution: + { + integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==, + } emittery@1.2.0: - resolution: {integrity: sha512-KxdRyyFcS85pH3dnU8Y5yFUm2YJdaHwcBZWrfG8o89ZY9a13/f9itbN+YG3ELbBo9Pg5zvIozstmuV8bX13q6g==} - engines: {node: '>=14.16'} + resolution: + { + integrity: sha512-KxdRyyFcS85pH3dnU8Y5yFUm2YJdaHwcBZWrfG8o89ZY9a13/f9itbN+YG3ELbBo9Pg5zvIozstmuV8bX13q6g==, + } + engines: { node: ">=14.16" } emoji-regex@10.4.0: - resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + resolution: + { + integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==, + } emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + resolution: + { + integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==, + } emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + resolution: + { + integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==, + } endent@2.1.0: - resolution: {integrity: sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==} + resolution: + { + integrity: sha512-r8VyPX7XL8U01Xgnb1CjZ3XV+z90cXIJ9JPE/R9SEC9vpw2P6CfsRPJmp20DppC5N7ZAMCmjYkJIa744Iyg96w==, + } enquirer@2.4.1: - resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} - engines: {node: '>=8.6'} + resolution: + { + integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==, + } + engines: { node: ">=8.6" } env-ci@5.5.0: - resolution: {integrity: sha512-o0JdWIbOLP+WJKIUt36hz1ImQQFuN92nhsfTkHHap+J8CiI8WgGpH/a9jEGHh4/TU5BUUGjlnKXNoDb57+ne+A==} - engines: {node: '>=10.17'} + resolution: + { + integrity: sha512-o0JdWIbOLP+WJKIUt36hz1ImQQFuN92nhsfTkHHap+J8CiI8WgGpH/a9jEGHh4/TU5BUUGjlnKXNoDb57+ne+A==, + } + engines: { node: ">=10.17" } error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + resolution: + { + integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, + } escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, + } + engines: { node: ">=6" } escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} + resolution: + { + integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, + } + engines: { node: ">=0.8.0" } escape-string-regexp@2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==, + } + engines: { node: ">=8" } escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, + } + engines: { node: ">=10" } escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==, + } + engines: { node: ">=12" } eslint-config-prettier@10.1.8: - resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} + resolution: + { + integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==, + } hasBin: true peerDependencies: - eslint: '>=7.0.0' + eslint: ">=7.0.0" eslint-scope@8.4.0: - resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + resolution: + { + integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==, + } + engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } eslint-visitor-keys@4.2.1: - resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } eslint@9.32.0: - resolution: {integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } hasBin: true peerDependencies: - jiti: '*' + jiti: "*" peerDependenciesMeta: jiti: optional: true espree@10.4.0: - resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + resolution: + { + integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==, + } + engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, + } + engines: { node: ">=4" } hasBin: true esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} + resolution: + { + integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==, + } + engines: { node: ">=0.10" } esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + resolution: + { + integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, + } + engines: { node: ">=4.0" } estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} + resolution: + { + integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, + } + engines: { node: ">=4.0" } estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + resolution: + { + integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, + } esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, + } + engines: { node: ">=0.10.0" } execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==, + } + engines: { node: ">=10" } fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + resolution: + { + integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, + } fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + resolution: + { + integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==, + } fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} + resolution: + { + integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==, + } + engines: { node: ">=8.6.0" } fast-json-parse@1.0.3: - resolution: {integrity: sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==} + resolution: + { + integrity: sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==, + } fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + resolution: + { + integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, + } fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + resolution: + { + integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, + } fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + resolution: + { + integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==, + } figures@2.0.0: - resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==, + } + engines: { node: ">=4" } figures@6.1.0: - resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==, + } + engines: { node: ">=18" } file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} + resolution: + { + integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==, + } + engines: { node: ">=16.0.0" } file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + resolution: + { + integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==, + } fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==, + } + engines: { node: ">=8" } find-replace@3.0.0: - resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} - engines: {node: '>=4.0.0'} + resolution: + { + integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==, + } + engines: { node: ">=4.0.0" } find-up-simple@1.0.1: - resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==, + } + engines: { node: ">=18" } find-up@2.1.0: - resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==, + } + engines: { node: ">=4" } find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==, + } + engines: { node: ">=10" } flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} + resolution: + { + integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==, + } + engines: { node: ">=16" } flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + resolution: + { + integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==, + } foreground-child@3.3.1: - resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==, + } + engines: { node: ">=14" } fp-ts@2.16.10: - resolution: {integrity: sha512-vuROzbNVfCmUkZSUbnWSltR1sbheyQbTzug7LB/46fEa1c0EucLeBaCEUE0gF3ZGUGBt9lVUiziGOhhj6K1ORA==} + resolution: + { + integrity: sha512-vuROzbNVfCmUkZSUbnWSltR1sbheyQbTzug7LB/46fEa1c0EucLeBaCEUE0gF3ZGUGBt9lVUiziGOhhj6K1ORA==, + } fromentries@1.3.2: - resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} + resolution: + { + integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==, + } fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + resolution: + { + integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, + } get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} + resolution: + { + integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, + } + engines: { node: 6.* || 8.* || >= 10.* } get-east-asian-width@1.3.0: - resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==, + } + engines: { node: ">=18" } get-monorepo-packages@1.3.0: - resolution: {integrity: sha512-A/s881nNcKhoM7RgkvYFTOtGO+dy4EWbyRaatncPEhhlJAaZRlpfHwuT68p5GJenEt81nnjJOwGg0WKLkR5ZdQ==} + resolution: + { + integrity: sha512-A/s881nNcKhoM7RgkvYFTOtGO+dy4EWbyRaatncPEhhlJAaZRlpfHwuT68p5GJenEt81nnjJOwGg0WKLkR5ZdQ==, + } get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==, + } + engines: { node: ">=10" } gitlog@4.0.8: - resolution: {integrity: sha512-FcTLP7Rc0H1vWXD+J/aj5JS1uiCEBblcYXlcacRAT73N26OMYFFzrBXYmDozmWlV2K7zwK5PrH16/nuRNhqSlQ==} - engines: {node: '>= 10.x'} + resolution: + { + integrity: sha512-FcTLP7Rc0H1vWXD+J/aj5JS1uiCEBblcYXlcacRAT73N26OMYFFzrBXYmDozmWlV2K7zwK5PrH16/nuRNhqSlQ==, + } + engines: { node: ">= 10.x" } glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, + } + engines: { node: ">= 6" } glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + resolution: + { + integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, + } + engines: { node: ">=10.13.0" } glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + resolution: + { + integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==, + } hasBin: true glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + resolution: + { + integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, + } deprecated: Glob versions prior to v9 are no longer supported globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==, + } + engines: { node: ">=18" } globby@14.1.0: - resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==, + } + engines: { node: ">=18" } globby@7.1.1: - resolution: {integrity: sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g==, + } + engines: { node: ">=4" } graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + resolution: + { + integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, + } graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + resolution: + { + integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==, + } has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, + } + engines: { node: ">=4" } has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, + } + engines: { node: ">=8" } https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==, + } + engines: { node: ">= 6" } https-proxy-agent@7.0.6: - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} + resolution: + { + integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==, + } + engines: { node: ">= 14" } human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} + resolution: + { + integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==, + } + engines: { node: ">=10.17.0" } ignore-by-default@2.1.0: - resolution: {integrity: sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==} - engines: {node: '>=10 <11 || >=12 <13 || >=14'} + resolution: + { + integrity: sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==, + } + engines: { node: ">=10 <11 || >=12 <13 || >=14" } ignore@3.3.10: - resolution: {integrity: sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==} + resolution: + { + integrity: sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==, + } ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} + resolution: + { + integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==, + } + engines: { node: ">= 4" } ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} - engines: {node: '>= 4'} + resolution: + { + integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==, + } + engines: { node: ">= 4" } import-cwd@3.0.0: - resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==, + } + engines: { node: ">=8" } import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==, + } + engines: { node: ">=6" } import-from@3.0.0: - resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==, + } + engines: { node: ">=8" } imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} + resolution: + { + integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==, + } + engines: { node: ">=0.8.19" } indent-string@5.0.0: - resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==, + } + engines: { node: ">=12" } inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + resolution: + { + integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, + } deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + resolution: + { + integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, + } ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + resolution: + { + integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==, + } io-ts@2.2.22: - resolution: {integrity: sha512-FHCCztTkHoV9mdBsHpocLpdTAfh956ZQcIkWQxxS0U5HT53vtrcuYdQneEJKH6xILaLNzXVl2Cvwtoy8XNN0AA==} + resolution: + { + integrity: sha512-FHCCztTkHoV9mdBsHpocLpdTAfh956ZQcIkWQxxS0U5HT53vtrcuYdQneEJKH6xILaLNzXVl2Cvwtoy8XNN0AA==, + } peerDependencies: fp-ts: ^2.5.0 irregular-plurals@3.5.0: - resolution: {integrity: sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==, + } + engines: { node: ">=8" } is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + resolution: + { + integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==, + } is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==, + } + engines: { node: ">=0.10.0" } is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==, + } + engines: { node: ">=8" } is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==, + } + engines: { node: ">=12" } is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, + } + engines: { node: ">=0.10.0" } is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} + resolution: + { + integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, + } + engines: { node: ">=0.12.0" } is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==, + } + engines: { node: ">=0.10.0" } is-promise@4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + resolution: + { + integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==, + } is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==, + } + engines: { node: ">=8" } is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==, + } + engines: { node: ">=10" } is-unicode-supported@2.1.0: - resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==, + } + engines: { node: ">=18" } isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + resolution: + { + integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==, + } jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + resolution: + { + integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==, + } java-properties@1.0.2: - resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==} - engines: {node: '>= 0.6.0'} + resolution: + { + integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==, + } + engines: { node: ">= 0.6.0" } js-string-escape@1.0.1: - resolution: {integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==} - engines: {node: '>= 0.8'} + resolution: + { + integrity: sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==, + } + engines: { node: ">= 0.8" } js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + resolution: + { + integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, + } js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + resolution: + { + integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==, + } hasBin: true js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + resolution: + { + integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, + } hasBin: true json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + resolution: + { + integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==, + } json-parse-better-errors@1.0.2: - resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + resolution: + { + integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==, + } json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + resolution: + { + integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, + } json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + resolution: + { + integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, + } json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + resolution: + { + integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==, + } keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + resolution: + { + integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, + } levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + resolution: + { + integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, + } + engines: { node: ">= 0.8.0" } lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + resolution: + { + integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==, + } load-json-file@4.0.0: - resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==, + } + engines: { node: ">=4" } load-json-file@7.0.1: - resolution: {integrity: sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } locate-path@2.0.0: - resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==, + } + engines: { node: ">=4" } locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==, + } + engines: { node: ">=10" } lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + resolution: + { + integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==, + } lodash.chunk@4.2.0: - resolution: {integrity: sha512-ZzydJKfUHJwHa+hF5X66zLFCBrWn5GeF28OHEr4WVWtNDXlQ/IjWKPBiikqKo2ne0+v6JgCgJ0GzJp8k8bHC7w==} + resolution: + { + integrity: sha512-ZzydJKfUHJwHa+hF5X66zLFCBrWn5GeF28OHEr4WVWtNDXlQ/IjWKPBiikqKo2ne0+v6JgCgJ0GzJp8k8bHC7w==, + } lodash.get@4.4.2: - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + resolution: + { + integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==, + } deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + resolution: + { + integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, + } lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + resolution: + { + integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, + } log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==, + } + engines: { node: ">=10" } lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + resolution: + { + integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==, + } make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + resolution: + { + integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==, + } matcher@5.0.0: - resolution: {integrity: sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } md5-hex@3.0.1: - resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==, + } + engines: { node: ">=8" } meant@1.0.3: - resolution: {integrity: sha512-88ZRGcNxAq4EH38cQ4D85PM57pikCwS8Z99EWHODxN7KBY+UuPiqzRTtZzS8KTXO/ywSWbdjjJST2Hly/EQxLw==} + resolution: + { + integrity: sha512-88ZRGcNxAq4EH38cQ4D85PM57pikCwS8Z99EWHODxN7KBY+UuPiqzRTtZzS8KTXO/ywSWbdjjJST2Hly/EQxLw==, + } memoize@10.1.0: - resolution: {integrity: sha512-MMbFhJzh4Jlg/poq1si90XRlTZRDHVqdlz2mPyGJ6kqMpyHUyVpDd5gpFAvVehW64+RA1eKE9Yt8aSLY7w2Kgg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-MMbFhJzh4Jlg/poq1si90XRlTZRDHVqdlz2mPyGJ6kqMpyHUyVpDd5gpFAvVehW64+RA1eKE9Yt8aSLY7w2Kgg==, + } + engines: { node: ">=18" } merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + resolution: + { + integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, + } merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==, + } + engines: { node: ">= 8" } micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} + resolution: + { + integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==, + } + engines: { node: ">=8.6" } mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==, + } + engines: { node: ">=6" } mimic-function@5.0.1: - resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==, + } + engines: { node: ">=18" } minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + resolution: + { + integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, + } minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} + resolution: + { + integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==, + } + engines: { node: ">=16 || 14 >=14.17" } minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + resolution: + { + integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, + } minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} + resolution: + { + integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==, + } + engines: { node: ">=16 || 14 >=14.17" } minizlib@3.0.2: - resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} - engines: {node: '>= 18'} + resolution: + { + integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==, + } + engines: { node: ">= 18" } mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==, + } + engines: { node: ">=10" } hasBin: true module-alias@2.2.3: - resolution: {integrity: sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==} + resolution: + { + integrity: sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==, + } ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + resolution: + { + integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, + } natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + resolution: + { + integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==, + } nested-error-stacks@2.0.1: - resolution: {integrity: sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==} + resolution: + { + integrity: sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==, + } node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} - engines: {node: 4.x || >=6.0.0} + resolution: + { + integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==, + } + engines: { node: 4.x || >=6.0.0 } peerDependencies: encoding: ^0.1.0 peerDependenciesMeta: @@ -1179,8 +2059,11 @@ packages: optional: true node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} + resolution: + { + integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==, + } + engines: { node: 4.x || >=6.0.0 } peerDependencies: encoding: ^0.1.0 peerDependenciesMeta: @@ -1188,533 +2071,922 @@ packages: optional: true node-gyp-build@4.8.4: - resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + resolution: + { + integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==, + } hasBin: true nofilter@3.1.0: - resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==} - engines: {node: '>=12.19'} + resolution: + { + integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==, + } + engines: { node: ">=12.19" } nopt@8.1.0: - resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} - engines: {node: ^18.17.0 || >=20.5.0} + resolution: + { + integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==, + } + engines: { node: ^18.17.0 || >=20.5.0 } hasBin: true npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==, + } + engines: { node: ">=8" } objectorarray@1.0.5: - resolution: {integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==} + resolution: + { + integrity: sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==, + } once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + resolution: + { + integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, + } onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==, + } + engines: { node: ">=6" } optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} + resolution: + { + integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==, + } + engines: { node: ">= 0.8.0" } os-homedir@1.0.2: - resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==, + } + engines: { node: ">=0.10.0" } p-limit@1.3.0: - resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==, + } + engines: { node: ">=4" } p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==, + } + engines: { node: ">=10" } p-locate@2.0.0: - resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==, + } + engines: { node: ">=4" } p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==, + } + engines: { node: ">=10" } p-map@7.0.3: - resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==, + } + engines: { node: ">=18" } p-try@1.0.0: - resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==, + } + engines: { node: ">=4" } package-config@5.0.0: - resolution: {integrity: sha512-GYTTew2slBcYdvRHqjhwaaydVMvn/qrGC323+nKclYioNSLTDUM/lGgtGTgyHVtYcozb+XkE8CNhwcraOmZ9Mg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-GYTTew2slBcYdvRHqjhwaaydVMvn/qrGC323+nKclYioNSLTDUM/lGgtGTgyHVtYcozb+XkE8CNhwcraOmZ9Mg==, + } + engines: { node: ">=18" } package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + resolution: + { + integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==, + } parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, + } + engines: { node: ">=6" } parse-author@2.0.0: - resolution: {integrity: sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-yx5DfvkN8JsHL2xk2Os9oTia467qnvRgey4ahSm2X8epehBLx/gWLcy5KI+Y36ful5DzGbCS6RazqZGgy1gHNw==, + } + engines: { node: ">=0.10.0" } parse-github-url@1.0.2: - resolution: {integrity: sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-kgBf6avCbO3Cn6+RnzRGLkUsv4ZVqv/VfAYkRsyBcgkshNvVBkRn1FEZcW0Jb+npXQWm2vHPnnOqFteZxRRGNw==, + } + engines: { node: ">=0.10.0" } hasBin: true parse-json@4.0.0: - resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==, + } + engines: { node: ">=4" } parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==, + } + engines: { node: ">=8" } parse-ms@2.1.0: - resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==, + } + engines: { node: ">=6" } parse-ms@4.0.0: - resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==, + } + engines: { node: ">=18" } path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==, + } + engines: { node: ">=4" } path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==, + } + engines: { node: ">=8" } path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, + } + engines: { node: ">=0.10.0" } path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, + } + engines: { node: ">=8" } path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + resolution: + { + integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, + } path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} + resolution: + { + integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==, + } + engines: { node: ">=16 || 14 >=14.18" } path-type@3.0.0: - resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==, + } + engines: { node: ">=4" } path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, + } + engines: { node: ">=8" } path-type@6.0.0: - resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==, + } + engines: { node: ">=18" } picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + resolution: + { + integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, + } picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} + resolution: + { + integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, + } + engines: { node: ">=8.6" } picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==, + } + engines: { node: ">=12" } pify@3.0.0: - resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==, + } + engines: { node: ">=4" } pkg-conf@2.1.0: - resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==, + } + engines: { node: ">=4" } plur@5.1.0: - resolution: {integrity: sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} + resolution: + { + integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, + } + engines: { node: ">= 0.8.0" } prettier@3.6.2: - resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==, + } + engines: { node: ">=14" } hasBin: true pretty-ms@7.0.1: - resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==, + } + engines: { node: ">=10" } pretty-ms@9.2.0: - resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==, + } + engines: { node: ">=18" } punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==, + } + engines: { node: ">=6" } queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + resolution: + { + integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==, + } rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + resolution: + { + integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==, + } hasBin: true reduce-flatten@2.0.0: - resolution: {integrity: sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==, + } + engines: { node: ">=6" } registry-url@5.1.0: - resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==, + } + engines: { node: ">=8" } remove-markdown@0.3.0: - resolution: {integrity: sha512-5392eIuy1mhjM74739VunOlsOYKjsH82rQcTBlJ1bkICVC3dQ3ksQzTHh4jGHQFnM+1xzLzcFOMH+BofqXhroQ==} + resolution: + { + integrity: sha512-5392eIuy1mhjM74739VunOlsOYKjsH82rQcTBlJ1bkICVC3dQ3ksQzTHh4jGHQFnM+1xzLzcFOMH+BofqXhroQ==, + } require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, + } + engines: { node: ">=0.10.0" } requireg@0.2.2: - resolution: {integrity: sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==} - engines: {node: '>= 4.0.0'} + resolution: + { + integrity: sha512-nYzyjnFcPNGR3lx9lwPPPnuQxv6JWEZd2Ci0u9opN7N5zUEPIhY/GbL3vMGOr2UXwEg9WwSyV9X9Y/kLFgPsOg==, + } + engines: { node: ">= 4.0.0" } resolve-cwd@3.0.0: - resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==, + } + engines: { node: ">=8" } resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, + } + engines: { node: ">=4" } resolve-from@5.0.0: - resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==, + } + engines: { node: ">=8" } resolve@1.7.1: - resolution: {integrity: sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==} + resolution: + { + integrity: sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==, + } reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + resolution: + { + integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==, + } + engines: { iojs: ">=1.0.0", node: ">=0.10.0" } run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + resolution: + { + integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==, + } semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==, + } + engines: { node: ">=10" } hasBin: true serialize-error@7.0.1: - resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==, + } + engines: { node: ">=10" } shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, + } + engines: { node: ">=8" } shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, + } + engines: { node: ">=8" } signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + resolution: + { + integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, + } signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} + resolution: + { + integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==, + } + engines: { node: ">=14" } signale@1.4.0: - resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==, + } + engines: { node: ">=6" } slash@1.0.0: - resolution: {integrity: sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==, + } + engines: { node: ">=0.10.0" } slash@5.1.0: - resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} - engines: {node: '>=14.16'} + resolution: + { + integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==, + } + engines: { node: ">=14.16" } slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==, + } + engines: { node: ">=12" } source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + resolution: + { + integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, + } source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, + } + engines: { node: ">=0.10.0" } sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + resolution: + { + integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, + } stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==, + } + engines: { node: ">=10" } string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==, + } + engines: { node: ">=8" } string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==, + } + engines: { node: ">=12" } string-width@7.2.0: - resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==, + } + engines: { node: ">=18" } strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, + } + engines: { node: ">=8" } strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==, + } + engines: { node: ">=12" } strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==, + } + engines: { node: ">=4" } strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==, + } + engines: { node: ">=6" } strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==, + } + engines: { node: ">=0.10.0" } strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, + } + engines: { node: ">=8" } supertap@3.0.1: - resolution: {integrity: sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + resolution: + { + integrity: sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==, + } + engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, + } + engines: { node: ">=4" } supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, + } + engines: { node: ">=8" } supports-hyperlinks@2.3.0: - resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==, + } + engines: { node: ">=8" } table-layout@1.0.2: - resolution: {integrity: sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==} - engines: {node: '>=8.0.0'} + resolution: + { + integrity: sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==, + } + engines: { node: ">=8.0.0" } tapable@2.2.2: - resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==, + } + engines: { node: ">=6" } tar@7.4.3: - resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==, + } + engines: { node: ">=18" } temp-dir@3.0.0: - resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} - engines: {node: '>=14.16'} + resolution: + { + integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==, + } + engines: { node: ">=14.16" } terminal-link@2.1.1: - resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==, + } + engines: { node: ">=8" } time-zone@1.0.0: - resolution: {integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==} - engines: {node: '>=4'} + resolution: + { + integrity: sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==, + } + engines: { node: ">=4" } tinycolor2@1.6.0: - resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} + resolution: + { + integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==, + } to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + resolution: + { + integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, + } + engines: { node: ">=8.0" } tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + resolution: + { + integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==, + } ts-api-utils@2.1.0: - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} - engines: {node: '>=18.12'} + resolution: + { + integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==, + } + engines: { node: ">=18.12" } peerDependencies: - typescript: '>=4.8.4' + typescript: ">=4.8.4" ts-node@10.9.2: - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + resolution: + { + integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==, + } hasBin: true peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: '>=2.7' + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" peerDependenciesMeta: - '@swc/core': + "@swc/core": optional: true - '@swc/wasm': + "@swc/wasm": optional: true ts-node@9.1.1: - resolution: {integrity: sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==} - engines: {node: '>=10.0.0'} + resolution: + { + integrity: sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==, + } + engines: { node: ">=10.0.0" } hasBin: true peerDependencies: - typescript: '>=2.7' + typescript: ">=2.7" tslib@1.10.0: - resolution: {integrity: sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==} + resolution: + { + integrity: sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==, + } tslib@2.1.0: - resolution: {integrity: sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==} + resolution: + { + integrity: sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==, + } tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + resolution: + { + integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==, + } type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + resolution: + { + integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, + } + engines: { node: ">= 0.8.0" } type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==, + } + engines: { node: ">=10" } type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==, + } + engines: { node: ">=10" } typescript-memoize@1.1.1: - resolution: {integrity: sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA==} + resolution: + { + integrity: sha512-GQ90TcKpIH4XxYTI2F98yEQYZgjNMOGPpOgdjIBhaLaWji5HPWlRnZ4AeA1hfBxtY7bCGDJsqDDHk/KaHOl5bA==, + } typescript@5.9.2: - resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} - engines: {node: '>=14.17'} + resolution: + { + integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==, + } + engines: { node: ">=14.17" } hasBin: true typical@4.0.0: - resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==, + } + engines: { node: ">=8" } typical@5.2.0: - resolution: {integrity: sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==} - engines: {node: '>=8'} + resolution: + { + integrity: sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==, + } + engines: { node: ">=8" } undici-types@7.8.0: - resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} + resolution: + { + integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==, + } unicorn-magic@0.3.0: - resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==, + } + engines: { node: ">=18" } universal-user-agent@6.0.1: - resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} + resolution: + { + integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==, + } uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + resolution: + { + integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, + } url-join@4.0.1: - resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} + resolution: + { + integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==, + } user-home@2.0.0: - resolution: {integrity: sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==, + } + engines: { node: ">=0.10.0" } v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + resolution: + { + integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==, + } webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + resolution: + { + integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==, + } well-known-symbols@2.0.0: - resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==, + } + engines: { node: ">=6" } whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + resolution: + { + integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==, + } which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} + resolution: + { + integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, + } + engines: { node: ">= 8" } hasBin: true word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} + resolution: + { + integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==, + } + engines: { node: ">=0.10.0" } wordwrapjs@4.0.1: - resolution: {integrity: sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==} - engines: {node: '>=8.0.0'} + resolution: + { + integrity: sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==, + } + engines: { node: ">=8.0.0" } wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, + } + engines: { node: ">=10" } wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==, + } + engines: { node: ">=12" } wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + resolution: + { + integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, + } write-file-atomic@6.0.0: - resolution: {integrity: sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==} - engines: {node: ^18.17.0 || >=20.5.0} + resolution: + { + integrity: sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==, + } + engines: { node: ^18.17.0 || >=20.5.0 } y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, + } + engines: { node: ">=10" } yallist@5.0.0: - resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} - engines: {node: '>=18'} + resolution: + { + integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==, + } + engines: { node: ">=18" } yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} - engines: {node: '>= 6'} + resolution: + { + integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==, + } + engines: { node: ">= 6" } yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, + } + engines: { node: ">=12" } yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + resolution: + { + integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, + } + engines: { node: ">=12" } yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} + resolution: + { + integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==, + } + engines: { node: ">=6" } yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} + resolution: + { + integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==, + } + engines: { node: ">=10" } snapshots: + "@auto-it/bot-list@11.3.0": {} - '@auto-it/bot-list@11.3.0': {} - - '@auto-it/core@11.3.0(@types/node@24.1.0)(typescript@5.9.2)': + "@auto-it/core@11.3.0(@types/node@24.1.0)(typescript@5.9.2)": dependencies: - '@auto-it/bot-list': 11.3.0 - '@endemolshinegroup/cosmiconfig-typescript-loader': 3.0.2(cosmiconfig@7.0.0)(typescript@5.9.2) - '@octokit/core': 3.6.0 - '@octokit/plugin-enterprise-compatibility': 1.3.0 - '@octokit/plugin-retry': 3.0.9 - '@octokit/plugin-throttling': 3.7.0(@octokit/core@3.6.0) - '@octokit/rest': 18.12.0 + "@auto-it/bot-list": 11.3.0 + "@endemolshinegroup/cosmiconfig-typescript-loader": 3.0.2(cosmiconfig@7.0.0)(typescript@5.9.2) + "@octokit/core": 3.6.0 + "@octokit/plugin-enterprise-compatibility": 1.3.0 + "@octokit/plugin-retry": 3.0.9 + "@octokit/plugin-throttling": 3.7.0(@octokit/core@3.6.0) + "@octokit/rest": 18.12.0 await-to-js: 3.0.0 chalk: 4.1.2 cosmiconfig: 7.0.0 @@ -1750,17 +3022,17 @@ snapshots: typescript-memoize: 1.1.1 url-join: 4.0.1 optionalDependencies: - '@types/node': 24.1.0 + "@types/node": 24.1.0 transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' + - "@swc/core" + - "@swc/wasm" - encoding - supports-color - '@auto-it/npm@11.3.0(@types/node@24.1.0)(typescript@5.9.2)': + "@auto-it/npm@11.3.0(@types/node@24.1.0)(typescript@5.9.2)": dependencies: - '@auto-it/core': 11.3.0(@types/node@24.1.0)(typescript@5.9.2) - '@auto-it/package-json-utils': 11.3.0 + "@auto-it/core": 11.3.0(@types/node@24.1.0)(typescript@5.9.2) + "@auto-it/package-json-utils": 11.3.0 await-to-js: 3.0.0 endent: 2.1.0 env-ci: 5.5.0 @@ -1774,62 +3046,62 @@ snapshots: url-join: 4.0.1 user-home: 2.0.0 transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' + - "@swc/core" + - "@swc/wasm" + - "@types/node" - encoding - supports-color - typescript - '@auto-it/package-json-utils@11.3.0': + "@auto-it/package-json-utils@11.3.0": dependencies: parse-author: 2.0.0 parse-github-url: 1.0.2 - '@auto-it/released@11.3.0(@types/node@24.1.0)(typescript@5.9.2)': + "@auto-it/released@11.3.0(@types/node@24.1.0)(typescript@5.9.2)": dependencies: - '@auto-it/bot-list': 11.3.0 - '@auto-it/core': 11.3.0(@types/node@24.1.0)(typescript@5.9.2) + "@auto-it/bot-list": 11.3.0 + "@auto-it/core": 11.3.0(@types/node@24.1.0)(typescript@5.9.2) deepmerge: 4.3.1 fp-ts: 2.16.10 io-ts: 2.2.22(fp-ts@2.16.10) tslib: 2.1.0 transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' + - "@swc/core" + - "@swc/wasm" + - "@types/node" - encoding - supports-color - typescript - '@auto-it/version-file@11.3.0(@types/node@24.1.0)(typescript@5.9.2)': + "@auto-it/version-file@11.3.0(@types/node@24.1.0)(typescript@5.9.2)": dependencies: - '@auto-it/core': 11.3.0(@types/node@24.1.0)(typescript@5.9.2) + "@auto-it/core": 11.3.0(@types/node@24.1.0)(typescript@5.9.2) fp-ts: 2.16.10 io-ts: 2.2.22(fp-ts@2.16.10) semver: 7.7.2 tslib: 1.10.0 transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' + - "@swc/core" + - "@swc/wasm" + - "@types/node" - encoding - supports-color - typescript - '@babel/code-frame@7.27.1': + "@babel/code-frame@7.27.1": dependencies: - '@babel/helper-validator-identifier': 7.27.1 + "@babel/helper-validator-identifier": 7.27.1 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/helper-validator-identifier@7.27.1': {} + "@babel/helper-validator-identifier@7.27.1": {} - '@cspotcode/source-map-support@0.8.1': + "@cspotcode/source-map-support@0.8.1": dependencies: - '@jridgewell/trace-mapping': 0.3.9 + "@jridgewell/trace-mapping": 0.3.9 - '@endemolshinegroup/cosmiconfig-typescript-loader@3.0.2(cosmiconfig@7.0.0)(typescript@5.9.2)': + "@endemolshinegroup/cosmiconfig-typescript-loader@3.0.2(cosmiconfig@7.0.0)(typescript@5.9.2)": dependencies: cosmiconfig: 7.0.0 lodash.get: 4.4.2 @@ -1839,28 +3111,28 @@ snapshots: transitivePeerDependencies: - typescript - '@eslint-community/eslint-utils@4.7.0(eslint@9.32.0)': + "@eslint-community/eslint-utils@4.7.0(eslint@9.32.0)": dependencies: eslint: 9.32.0 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.12.1': {} + "@eslint-community/regexpp@4.12.1": {} - '@eslint/config-array@0.21.0': + "@eslint/config-array@0.21.0": dependencies: - '@eslint/object-schema': 2.1.6 + "@eslint/object-schema": 2.1.6 debug: 4.4.1 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.3.0': {} + "@eslint/config-helpers@0.3.0": {} - '@eslint/core@0.15.1': + "@eslint/core@0.15.1": dependencies: - '@types/json-schema': 7.0.15 + "@types/json-schema": 7.0.15 - '@eslint/eslintrc@3.3.1': + "@eslint/eslintrc@3.3.1": dependencies: ajv: 6.12.6 debug: 4.4.1 @@ -1874,29 +3146,29 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.32.0': {} + "@eslint/js@9.32.0": {} - '@eslint/object-schema@2.1.6': {} + "@eslint/object-schema@2.1.6": {} - '@eslint/plugin-kit@0.3.4': + "@eslint/plugin-kit@0.3.4": dependencies: - '@eslint/core': 0.15.1 + "@eslint/core": 0.15.1 levn: 0.4.1 - '@humanfs/core@0.19.1': {} + "@humanfs/core@0.19.1": {} - '@humanfs/node@0.16.6': + "@humanfs/node@0.16.6": dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 + "@humanfs/core": 0.19.1 + "@humanwhocodes/retry": 0.3.1 - '@humanwhocodes/module-importer@1.0.1': {} + "@humanwhocodes/module-importer@1.0.1": {} - '@humanwhocodes/retry@0.3.1': {} + "@humanwhocodes/retry@0.3.1": {} - '@humanwhocodes/retry@0.4.3': {} + "@humanwhocodes/retry@0.4.3": {} - '@isaacs/cliui@8.0.2': + "@isaacs/cliui@8.0.2": dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 @@ -1905,20 +3177,20 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@isaacs/fs-minipass@4.0.1': + "@isaacs/fs-minipass@4.0.1": dependencies: minipass: 7.1.2 - '@jridgewell/resolve-uri@3.1.2': {} + "@jridgewell/resolve-uri@3.1.2": {} - '@jridgewell/sourcemap-codec@1.5.4': {} + "@jridgewell/sourcemap-codec@1.5.4": {} - '@jridgewell/trace-mapping@0.3.9': + "@jridgewell/trace-mapping@0.3.9": dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.4 + "@jridgewell/resolve-uri": 3.1.2 + "@jridgewell/sourcemap-codec": 1.5.4 - '@mapbox/node-pre-gyp@2.0.0': + "@mapbox/node-pre-gyp@2.0.0": dependencies: consola: 3.4.2 detect-libc: 2.0.4 @@ -1931,154 +3203,154 @@ snapshots: - encoding - supports-color - '@nodelib/fs.scandir@2.1.5': + "@nodelib/fs.scandir@2.1.5": dependencies: - '@nodelib/fs.stat': 2.0.5 + "@nodelib/fs.stat": 2.0.5 run-parallel: 1.2.0 - '@nodelib/fs.stat@2.0.5': {} + "@nodelib/fs.stat@2.0.5": {} - '@nodelib/fs.walk@1.2.8': + "@nodelib/fs.walk@1.2.8": dependencies: - '@nodelib/fs.scandir': 2.1.5 + "@nodelib/fs.scandir": 2.1.5 fastq: 1.19.1 - '@octokit/auth-token@2.5.0': + "@octokit/auth-token@2.5.0": dependencies: - '@octokit/types': 6.41.0 + "@octokit/types": 6.41.0 - '@octokit/core@3.6.0': + "@octokit/core@3.6.0": dependencies: - '@octokit/auth-token': 2.5.0 - '@octokit/graphql': 4.8.0 - '@octokit/request': 5.6.3 - '@octokit/request-error': 2.1.0 - '@octokit/types': 6.41.0 + "@octokit/auth-token": 2.5.0 + "@octokit/graphql": 4.8.0 + "@octokit/request": 5.6.3 + "@octokit/request-error": 2.1.0 + "@octokit/types": 6.41.0 before-after-hook: 2.2.3 universal-user-agent: 6.0.1 transitivePeerDependencies: - encoding - '@octokit/endpoint@6.0.12': + "@octokit/endpoint@6.0.12": dependencies: - '@octokit/types': 6.41.0 + "@octokit/types": 6.41.0 is-plain-object: 5.0.0 universal-user-agent: 6.0.1 - '@octokit/graphql@4.8.0': + "@octokit/graphql@4.8.0": dependencies: - '@octokit/request': 5.6.3 - '@octokit/types': 6.41.0 + "@octokit/request": 5.6.3 + "@octokit/types": 6.41.0 universal-user-agent: 6.0.1 transitivePeerDependencies: - encoding - '@octokit/openapi-types@12.11.0': {} + "@octokit/openapi-types@12.11.0": {} - '@octokit/plugin-enterprise-compatibility@1.3.0': + "@octokit/plugin-enterprise-compatibility@1.3.0": dependencies: - '@octokit/request-error': 2.1.0 - '@octokit/types': 6.41.0 + "@octokit/request-error": 2.1.0 + "@octokit/types": 6.41.0 - '@octokit/plugin-paginate-rest@2.21.3(@octokit/core@3.6.0)': + "@octokit/plugin-paginate-rest@2.21.3(@octokit/core@3.6.0)": dependencies: - '@octokit/core': 3.6.0 - '@octokit/types': 6.41.0 + "@octokit/core": 3.6.0 + "@octokit/types": 6.41.0 - '@octokit/plugin-request-log@1.0.4(@octokit/core@3.6.0)': + "@octokit/plugin-request-log@1.0.4(@octokit/core@3.6.0)": dependencies: - '@octokit/core': 3.6.0 + "@octokit/core": 3.6.0 - '@octokit/plugin-rest-endpoint-methods@5.16.2(@octokit/core@3.6.0)': + "@octokit/plugin-rest-endpoint-methods@5.16.2(@octokit/core@3.6.0)": dependencies: - '@octokit/core': 3.6.0 - '@octokit/types': 6.41.0 + "@octokit/core": 3.6.0 + "@octokit/types": 6.41.0 deprecation: 2.3.1 - '@octokit/plugin-retry@3.0.9': + "@octokit/plugin-retry@3.0.9": dependencies: - '@octokit/types': 6.41.0 + "@octokit/types": 6.41.0 bottleneck: 2.19.5 - '@octokit/plugin-throttling@3.7.0(@octokit/core@3.6.0)': + "@octokit/plugin-throttling@3.7.0(@octokit/core@3.6.0)": dependencies: - '@octokit/core': 3.6.0 - '@octokit/types': 6.41.0 + "@octokit/core": 3.6.0 + "@octokit/types": 6.41.0 bottleneck: 2.19.5 - '@octokit/request-error@2.1.0': + "@octokit/request-error@2.1.0": dependencies: - '@octokit/types': 6.41.0 + "@octokit/types": 6.41.0 deprecation: 2.3.1 once: 1.4.0 - '@octokit/request@5.6.3': + "@octokit/request@5.6.3": dependencies: - '@octokit/endpoint': 6.0.12 - '@octokit/request-error': 2.1.0 - '@octokit/types': 6.41.0 + "@octokit/endpoint": 6.0.12 + "@octokit/request-error": 2.1.0 + "@octokit/types": 6.41.0 is-plain-object: 5.0.0 node-fetch: 2.6.7 universal-user-agent: 6.0.1 transitivePeerDependencies: - encoding - '@octokit/rest@18.12.0': + "@octokit/rest@18.12.0": dependencies: - '@octokit/core': 3.6.0 - '@octokit/plugin-paginate-rest': 2.21.3(@octokit/core@3.6.0) - '@octokit/plugin-request-log': 1.0.4(@octokit/core@3.6.0) - '@octokit/plugin-rest-endpoint-methods': 5.16.2(@octokit/core@3.6.0) + "@octokit/core": 3.6.0 + "@octokit/plugin-paginate-rest": 2.21.3(@octokit/core@3.6.0) + "@octokit/plugin-request-log": 1.0.4(@octokit/core@3.6.0) + "@octokit/plugin-rest-endpoint-methods": 5.16.2(@octokit/core@3.6.0) transitivePeerDependencies: - encoding - '@octokit/types@6.41.0': + "@octokit/types@6.41.0": dependencies: - '@octokit/openapi-types': 12.11.0 + "@octokit/openapi-types": 12.11.0 - '@opencreek/deno-std-collections@0.109.1': {} + "@opencreek/deno-std-collections@0.109.1": {} - '@pkgjs/parseargs@0.11.0': + "@pkgjs/parseargs@0.11.0": optional: true - '@rollup/pluginutils@5.2.0': + "@rollup/pluginutils@5.2.0": dependencies: - '@types/estree': 1.0.8 + "@types/estree": 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 - '@sindresorhus/merge-streams@2.3.0': {} + "@sindresorhus/merge-streams@2.3.0": {} - '@tsconfig/node10@1.0.11': {} + "@tsconfig/node10@1.0.11": {} - '@tsconfig/node12@1.0.11': {} + "@tsconfig/node12@1.0.11": {} - '@tsconfig/node14@1.0.3': {} + "@tsconfig/node14@1.0.3": {} - '@tsconfig/node16@1.0.4': {} + "@tsconfig/node16@1.0.4": {} - '@types/command-line-args@5.2.3': {} + "@types/command-line-args@5.2.3": {} - '@types/command-line-usage@5.0.4': {} + "@types/command-line-usage@5.0.4": {} - '@types/estree@1.0.8': {} + "@types/estree@1.0.8": {} - '@types/json-schema@7.0.15': {} + "@types/json-schema@7.0.15": {} - '@types/node@24.1.0': + "@types/node@24.1.0": dependencies: undici-types: 7.8.0 - '@types/parse-json@4.0.2': {} + "@types/parse-json@4.0.2": {} - '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2))(eslint@9.32.0)(typescript@5.9.2)': + "@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2))(eslint@9.32.0)(typescript@5.9.2)": dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.9.2) - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.38.0 + "@eslint-community/regexpp": 4.12.1 + "@typescript-eslint/parser": 8.38.0(eslint@9.32.0)(typescript@5.9.2) + "@typescript-eslint/scope-manager": 8.38.0 + "@typescript-eslint/type-utils": 8.38.0(eslint@9.32.0)(typescript@5.9.2) + "@typescript-eslint/utils": 8.38.0(eslint@9.32.0)(typescript@5.9.2) + "@typescript-eslint/visitor-keys": 8.38.0 eslint: 9.32.0 graphemer: 1.4.0 ignore: 7.0.5 @@ -2088,41 +3360,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2)': + "@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.9.2)": dependencies: - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.38.0 + "@typescript-eslint/scope-manager": 8.38.0 + "@typescript-eslint/types": 8.38.0 + "@typescript-eslint/typescript-estree": 8.38.0(typescript@5.9.2) + "@typescript-eslint/visitor-keys": 8.38.0 debug: 4.4.1 eslint: 9.32.0 typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.38.0(typescript@5.9.2)': + "@typescript-eslint/project-service@8.38.0(typescript@5.9.2)": dependencies: - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) - '@typescript-eslint/types': 8.38.0 + "@typescript-eslint/tsconfig-utils": 8.38.0(typescript@5.9.2) + "@typescript-eslint/types": 8.38.0 debug: 4.4.1 typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.38.0': + "@typescript-eslint/scope-manager@8.38.0": dependencies: - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/visitor-keys': 8.38.0 + "@typescript-eslint/types": 8.38.0 + "@typescript-eslint/visitor-keys": 8.38.0 - '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.9.2)': + "@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.9.2)": dependencies: typescript: 5.9.2 - '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0)(typescript@5.9.2)': + "@typescript-eslint/type-utils@8.38.0(eslint@9.32.0)(typescript@5.9.2)": dependencies: - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.9.2) + "@typescript-eslint/types": 8.38.0 + "@typescript-eslint/typescript-estree": 8.38.0(typescript@5.9.2) + "@typescript-eslint/utils": 8.38.0(eslint@9.32.0)(typescript@5.9.2) debug: 4.4.1 eslint: 9.32.0 ts-api-utils: 2.1.0(typescript@5.9.2) @@ -2130,14 +3402,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.38.0': {} + "@typescript-eslint/types@8.38.0": {} - '@typescript-eslint/typescript-estree@8.38.0(typescript@5.9.2)': + "@typescript-eslint/typescript-estree@8.38.0(typescript@5.9.2)": dependencies: - '@typescript-eslint/project-service': 8.38.0(typescript@5.9.2) - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/visitor-keys': 8.38.0 + "@typescript-eslint/project-service": 8.38.0(typescript@5.9.2) + "@typescript-eslint/tsconfig-utils": 8.38.0(typescript@5.9.2) + "@typescript-eslint/types": 8.38.0 + "@typescript-eslint/visitor-keys": 8.38.0 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 @@ -2148,26 +3420,26 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.38.0(eslint@9.32.0)(typescript@5.9.2)': + "@typescript-eslint/utils@8.38.0(eslint@9.32.0)(typescript@5.9.2)": dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) + "@eslint-community/eslint-utils": 4.7.0(eslint@9.32.0) + "@typescript-eslint/scope-manager": 8.38.0 + "@typescript-eslint/types": 8.38.0 + "@typescript-eslint/typescript-estree": 8.38.0(typescript@5.9.2) eslint: 9.32.0 typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.38.0': + "@typescript-eslint/visitor-keys@8.38.0": dependencies: - '@typescript-eslint/types': 8.38.0 + "@typescript-eslint/types": 8.38.0 eslint-visitor-keys: 4.2.1 - '@vercel/nft@0.29.4': + "@vercel/nft@0.29.4": dependencies: - '@mapbox/node-pre-gyp': 2.0.0 - '@rollup/pluginutils': 5.2.0 + "@mapbox/node-pre-gyp": 2.0.0 + "@rollup/pluginutils": 5.2.0 acorn: 8.15.0 acorn-import-attributes: 1.9.5(acorn@8.15.0) async-sema: 3.1.1 @@ -2264,10 +3536,10 @@ snapshots: auto@11.3.0(@types/node@24.1.0)(typescript@5.9.2): dependencies: - '@auto-it/core': 11.3.0(@types/node@24.1.0)(typescript@5.9.2) - '@auto-it/npm': 11.3.0(@types/node@24.1.0)(typescript@5.9.2) - '@auto-it/released': 11.3.0(@types/node@24.1.0)(typescript@5.9.2) - '@auto-it/version-file': 11.3.0(@types/node@24.1.0)(typescript@5.9.2) + "@auto-it/core": 11.3.0(@types/node@24.1.0)(typescript@5.9.2) + "@auto-it/npm": 11.3.0(@types/node@24.1.0)(typescript@5.9.2) + "@auto-it/released": 11.3.0(@types/node@24.1.0)(typescript@5.9.2) + "@auto-it/version-file": 11.3.0(@types/node@24.1.0)(typescript@5.9.2) await-to-js: 3.0.0 chalk: 4.1.2 command-line-application: 0.10.1 @@ -2277,16 +3549,16 @@ snapshots: terminal-link: 2.1.1 tslib: 2.1.0 transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' + - "@swc/core" + - "@swc/wasm" + - "@types/node" - encoding - supports-color - typescript ava@6.4.1: dependencies: - '@vercel/nft': 0.29.4 + "@vercel/nft": 0.29.4 acorn: 8.15.0 acorn-walk: 8.3.4 ansi-styles: 6.2.1 @@ -2418,8 +3690,8 @@ snapshots: command-line-application@0.10.1: dependencies: - '@types/command-line-args': 5.2.3 - '@types/command-line-usage': 5.0.4 + "@types/command-line-args": 5.2.3 + "@types/command-line-usage": 5.0.4 chalk: 2.4.2 command-line-args: 5.2.1 command-line-usage: 6.1.3 @@ -2462,7 +3734,7 @@ snapshots: cosmiconfig@7.0.0: dependencies: - '@types/parse-json': 4.0.2 + "@types/parse-json": 4.0.2 import-fresh: 3.3.1 parse-json: 5.2.0 path-type: 4.0.0 @@ -2564,19 +3836,19 @@ snapshots: eslint@9.32.0: dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.21.0 - '@eslint/config-helpers': 0.3.0 - '@eslint/core': 0.15.1 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.32.0 - '@eslint/plugin-kit': 0.3.4 - '@humanfs/node': 0.16.6 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - '@types/json-schema': 7.0.15 + "@eslint-community/eslint-utils": 4.7.0(eslint@9.32.0) + "@eslint-community/regexpp": 4.12.1 + "@eslint/config-array": 0.21.0 + "@eslint/config-helpers": 0.3.0 + "@eslint/core": 0.15.1 + "@eslint/eslintrc": 3.3.1 + "@eslint/js": 9.32.0 + "@eslint/plugin-kit": 0.3.4 + "@humanfs/node": 0.16.6 + "@humanwhocodes/module-importer": 1.0.1 + "@humanwhocodes/retry": 0.4.3 + "@types/estree": 1.0.8 + "@types/json-schema": 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 @@ -2642,8 +3914,8 @@ snapshots: fast-glob@3.3.3: dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 + "@nodelib/fs.stat": 2.0.5 + "@nodelib/fs.walk": 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.8 @@ -2757,7 +4029,7 @@ snapshots: globby@14.1.0: dependencies: - '@sindresorhus/merge-streams': 2.3.0 + "@sindresorhus/merge-streams": 2.3.0 fast-glob: 3.3.3 ignore: 7.0.5 path-type: 6.0.0 @@ -2865,9 +4137,9 @@ snapshots: jackspeak@3.4.3: dependencies: - '@isaacs/cliui': 8.0.2 + "@isaacs/cliui": 8.0.2 optionalDependencies: - '@pkgjs/parseargs': 0.11.0 + "@pkgjs/parseargs": 0.11.0 java-properties@1.0.2: {} @@ -3080,7 +4352,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.27.1 + "@babel/code-frame": 7.27.1 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -3295,7 +4567,7 @@ snapshots: tar@7.4.3: dependencies: - '@isaacs/fs-minipass': 4.0.1 + "@isaacs/fs-minipass": 4.0.1 chownr: 3.0.0 minipass: 7.1.2 minizlib: 3.0.2 @@ -3325,12 +4597,12 @@ snapshots: ts-node@10.9.2(@types/node@24.1.0)(typescript@5.9.2): dependencies: - '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.11 - '@tsconfig/node12': 1.0.11 - '@tsconfig/node14': 1.0.3 - '@tsconfig/node16': 1.0.4 - '@types/node': 24.1.0 + "@cspotcode/source-map-support": 0.8.1 + "@tsconfig/node10": 1.0.11 + "@tsconfig/node12": 1.0.11 + "@tsconfig/node14": 1.0.3 + "@tsconfig/node16": 1.0.4 + "@types/node": 24.1.0 acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 diff --git a/src/collections.test.ts b/src/collections.test.ts index 3bb6a60..c5eee52 100644 --- a/src/collections.test.ts +++ b/src/collections.test.ts @@ -201,14 +201,14 @@ type Touched = [X in number]?: Touched } : Entity extends Array - ? { - [X in number]?: Touched - } - : Entity extends Record - ? { - [K in keyof Entity]?: Touched - } - : never) + ? { + [X in number]?: Touched + } + : Entity extends Record + ? { + [K in keyof Entity]?: Touched + } + : never) function testTouchedType< Entity extends Array | ReadonlyArray, diff --git a/src/collections.ts b/src/collections.ts index f77dda1..26d6882 100644 --- a/src/collections.ts +++ b/src/collections.ts @@ -41,9 +41,8 @@ export type ArrayOrChain = Chain | ReadonlyArray // used to mappe type union below // otherwise mixed types in chains, would not be carried over correctly type Distribute = U extends any ? { type: U } : never -type FlattenChain = Distribute extends { type: ArrayOrChain } - ? Chain - : Chain +type FlattenChain = + Distribute extends { type: ArrayOrChain } ? Chain : Chain export function objChain( value: diff --git a/src/collections/AsyncChain.ts b/src/collections/AsyncChain.ts index 7e85c23..c78ec54 100644 --- a/src/collections/AsyncChain.ts +++ b/src/collections/AsyncChain.ts @@ -1028,11 +1028,12 @@ export class FilterAsyncChain extends AsyncChain { type Distribute = U extends any ? { type: U } : never -type FlattenAsyncType = Distribute extends { - type: ArrayOrAsyncChain -} - ? U - : T +type FlattenAsyncType = + Distribute extends { + type: ArrayOrAsyncChain + } + ? U + : T export class FlattenAsyncChain extends AsyncChain> { constructor( @@ -1051,8 +1052,8 @@ export class FlattenAsyncChain extends AsyncChain> { el instanceof AsyncChain ? await el.value() : el instanceof Chain - ? el.value() - : el, + ? el.value() + : el, ) return flattened.flatten() as Chain> @@ -1354,8 +1355,8 @@ export class WithoutAllAsyncChain extends AsyncChain { this.without instanceof AsyncChain ? await this.without.value() : this.without instanceof Chain - ? this.without.value() - : this.without + ? this.without.value() + : this.without return (await this.val.await()).withoutAll(other) } } diff --git a/src/extendPrototype.ts b/src/extendPrototype.ts index 877997f..d537d33 100644 --- a/src/extendPrototype.ts +++ b/src/extendPrototype.ts @@ -1,4 +1,4 @@ -/* eslint-disable @typescript-eslint/ban-types */ +/* eslint-disable @typescript-eslint/no-unsafe-function-type */ export function extendProtoype( target: Function, func: Function, @@ -30,12 +30,8 @@ type ThisFunction any> = ( ...args: SkipFirstParameter ) => ReturnType -type FirstParameter any> = Parameters extends [ - infer T, - ...infer _, -] - ? T - : never +type FirstParameter any> = + Parameters extends [infer T, ...infer _] ? T : never type SkipFirst = T extends [infer _, ...infer R] ? [...R] diff --git a/src/strings.ts b/src/strings.ts index b6e5395..8b1c99a 100644 --- a/src/strings.ts +++ b/src/strings.ts @@ -7,8 +7,8 @@ export function format( arg === undefined ? "" : arg === null - ? "" - : arg.toString() + ? "" + : arg.toString() pattern = pattern.replace("{}", str) } From d4ed1ba388262613a6ef7e1d66efdbd22503ffb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Mon, 4 Aug 2025 09:51:13 +0200 Subject: [PATCH 25/26] Add missing file --- eslint.config.mjs | 56 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 eslint.config.mjs diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..4540f95 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,56 @@ +import { defineConfig, globalIgnores } from "eslint/config" +import typescriptEslint from "@typescript-eslint/eslint-plugin" +import tsParser from "@typescript-eslint/parser" +import path from "node:path" +import { fileURLToPath } from "node:url" +import js from "@eslint/js" +import { FlatCompat } from "@eslint/eslintrc" + +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, + allConfig: js.configs.all, +}) + +export default defineConfig([ + globalIgnores(["**/build/", "eslint.config.mjs"]), + { + extends: compat.extends( + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "prettier", + ), + + plugins: { + "@typescript-eslint": typescriptEslint, + }, + + languageOptions: { + parser: tsParser, + ecmaVersion: 11, + sourceType: "module", + + parserOptions: { + project: "./tsconfig.json", + }, + }, + + rules: { + "@typescript-eslint/no-unused-vars": [ + "error", + { + varsIgnorePattern: "^_", + argsIgnorePattern: "^_", + ignoreRestSiblings: true, + }, + ], + + "@typescript-eslint/no-explicit-any": 0, + "@typescript-eslint/no-this-alias": 0, + "@typescript-eslint/ban-ts-comment": 0, + "@typescript-eslint/no-floating-promises": ["error"], + }, + }, +]) From 286b4d9db06fe4cdc55c00d5c4380ac88b79fdde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20G=C3=BCdelh=C3=B6fer?= Date: Mon, 4 Aug 2025 21:31:12 +0200 Subject: [PATCH 26/26] Add more tests --- src/collections/AsyncChain.test.ts | 52 ++++++++++++++++++++++++++++-- src/collections/AsyncChain.ts | 1 + 2 files changed, 50 insertions(+), 3 deletions(-) diff --git a/src/collections/AsyncChain.test.ts b/src/collections/AsyncChain.test.ts index 82c3817..b543888 100644 --- a/src/collections/AsyncChain.test.ts +++ b/src/collections/AsyncChain.test.ts @@ -97,7 +97,7 @@ test("async obj chain should correctly handle exceptions", async (t) => { const c = asyncChain([1, 2, 3, 4]).associateBy((it) => it) await t.throwsAsync(async () => { - await c.mapKeys(withDelay((it) => (it == 3 ? error("3!") : it), 100)) + await c.mapKeys(withDelay((it) => (it == 3 ? error("3!") : it))) }) }) @@ -115,6 +115,28 @@ test("dropLastWhile should work correctly", async (t) => { t.deepEqual(result, [3, 1, 2]) }) +test("reduce should work correctly", async (t) => { + const c = asyncChain([1, 2, 3, 4, 5]) + + const result = await c.reduce(async (acc, cur) => { + await sleep(0) + return acc + cur + }) + + t.is(result, 15) +}) + +test("reduceRight should work correctly", async (t) => { + const c = asyncChain([1, 2, 3, 4, 5]) + + const result = await c.reduceRight(async (acc, cur) => { + await sleep(0) + return acc + cur.toString() + }) + + t.is(result, "54321") +}) + test("All the functions once, so they don't form infinite loops", async (t) => { const c = chain([1, 2, 3, 4, 5, 6, 7, 8, 9]).async() @@ -165,6 +187,7 @@ test("All the functions once, so they don't form infinite loops", async (t) => { await sleep(0) t.true(it < 10) }) + t.true(await c.every(withDelay((it) => it > 0))) t.true(await c.some(withDelay((it) => it > 3))) @@ -187,12 +210,35 @@ test("All the functions once, so they don't form infinite loops", async (t) => { t.snapshot(await c.mapJoin(",", (it) => it + "^"), "mapJoin") }) +test("firstNotNullishOf", async (t) => { + const c = asyncChain([1, 2, 3, 4, 5, 6, 7, 8, 9]) + + const result = await c.firstNotNullishOf( + withDelay((it) => (it < 5 ? null : it + 3)), + ) + + t.is(result, 8) +}) + +test("findIndex", async (t) => { + const c = asyncChain([1, 2, 3, 4, 5, 6, 4, 8, 9]) + const result = await c.findIndex(withDelay((it) => it == 4)) + + t.is(result, 3) +}) + +test("findLastIndex", async (t) => { + const c = asyncChain([1, 2, 3, 4, 5, 6, 4, 8, 9]) + const result = await c.findLastIndex(withDelay((it) => it == 4)) + + t.is(result, 6) +}) + function withDelay( transform: (el: T) => Promise | U, - time = 0, ): (el: T) => Promise { return async (el: T) => { - await sleep(time) + await sleep(Math.random() * 15) return await transform(el) } } diff --git a/src/collections/AsyncChain.ts b/src/collections/AsyncChain.ts index c78ec54..574673e 100644 --- a/src/collections/AsyncChain.ts +++ b/src/collections/AsyncChain.ts @@ -1542,6 +1542,7 @@ export class GroupingAsyncObjectChain< const entries = await this.val .map(async (it) => [await this.selector(it), it] as const) .value() + const record = {} as Record> for (const [key, el] of entries) { if (record[key] != null) {