sync
This commit is contained in:
@@ -918,19 +918,19 @@ export class DelegatedAsyncSequence<TElement> extends AsyncSequenceMarker implem
|
|||||||
return this.#sequence.boundsBy(selector, comparer);
|
return this.#sequence.boundsBy(selector, comparer);
|
||||||
}
|
}
|
||||||
|
|
||||||
order(comparer?: MaybeAsyncComparisonOrComparer<TElement> | undefined): AsyncSequence<TElement> {
|
order(comparer?: MaybeAsyncComparisonOrComparer<TElement> | undefined): OrderedAsyncSequence<TElement> {
|
||||||
return this.#sequence.order(comparer);
|
return this.#sequence.order(comparer);
|
||||||
}
|
}
|
||||||
|
|
||||||
orderBy<TBy>(selector: MaybeAsyncConverter<TElement, TBy>, comparer?: MaybeAsyncComparisonOrComparer<TBy> | undefined): AsyncSequence<TElement> {
|
orderBy<TBy>(selector: MaybeAsyncConverter<TElement, TBy>, comparer?: MaybeAsyncComparisonOrComparer<TBy> | undefined): OrderedAsyncSequence<TElement> {
|
||||||
return this.#sequence.orderBy(selector, comparer);
|
return this.#sequence.orderBy(selector, comparer);
|
||||||
}
|
}
|
||||||
|
|
||||||
orderDescending(comparer?: MaybeAsyncComparisonOrComparer<TElement> | undefined): AsyncSequence<TElement> {
|
orderDescending(comparer?: MaybeAsyncComparisonOrComparer<TElement> | undefined): OrderedAsyncSequence<TElement> {
|
||||||
return this.#sequence.orderDescending(comparer);
|
return this.#sequence.orderDescending(comparer);
|
||||||
}
|
}
|
||||||
|
|
||||||
orderByDescending<TBy>(selector: MaybeAsyncConverter<TElement, TBy>, comparer?: MaybeAsyncComparisonOrComparer<TBy> | undefined): AsyncSequence<TElement> {
|
orderByDescending<TBy>(selector: MaybeAsyncConverter<TElement, TBy>, comparer?: MaybeAsyncComparisonOrComparer<TBy> | undefined): OrderedAsyncSequence<TElement> {
|
||||||
return this.#sequence.orderByDescending(selector, comparer);
|
return this.#sequence.orderByDescending(selector, comparer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1241,6 +1241,20 @@ export class WrappedObjectAsync<T> extends BaseAsyncSequence<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class WrappedPromise<T> extends BaseAsyncSequence<T> {
|
||||||
|
readonly #promise: Promise<MaybeAsyncIterable<T>>;
|
||||||
|
|
||||||
|
constructor(promise: Promise<MaybeAsyncIterable<T>>) {
|
||||||
|
super();
|
||||||
|
|
||||||
|
this.#promise = promise;
|
||||||
|
}
|
||||||
|
|
||||||
|
override async *iterator() {
|
||||||
|
yield* await this.#promise;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export class WrappedArrayAsync<T> extends BaseAsyncSequence<T> {
|
export class WrappedArrayAsync<T> extends BaseAsyncSequence<T> {
|
||||||
readonly #array: ReadonlyArray<MaybePromiseLike<T>>;
|
readonly #array: ReadonlyArray<MaybePromiseLike<T>>;
|
||||||
|
|
||||||
|
|||||||
@@ -2,13 +2,17 @@ import { wrap as wrapSync } from "../sync/index.js";
|
|||||||
import { Sequence } from "../sync/types.js";
|
import { Sequence } from "../sync/types.js";
|
||||||
import { MaybeAsyncGenerator, MaybeAsyncIterable, MaybePromiseLike } from "../types.js";
|
import { MaybeAsyncGenerator, MaybeAsyncIterable, MaybePromiseLike } from "../types.js";
|
||||||
import { isAsyncIterable } from "../utils.js";
|
import { isAsyncIterable } from "../utils.js";
|
||||||
import { WrappedSequence, WrappedAsyncIterable, WrappedObjectAsync, WrappedArrayAsync, WrappedArrayLikeAsync, FunctionAsyncSequence, GeneratorAsyncSequence, RangeAsyncSequence, RepeatForeverAsyncSequence, RepeatAsyncSequence, AsyncSequenceMarker, EMPTY, ConcatAsyncSequence } from "./impl.js";
|
import { WrappedSequence, WrappedAsyncIterable, WrappedObjectAsync, WrappedArrayAsync, WrappedArrayLikeAsync, FunctionAsyncSequence, GeneratorAsyncSequence, RangeAsyncSequence, RepeatForeverAsyncSequence, RepeatAsyncSequence, AsyncSequenceMarker, EMPTY, ConcatAsyncSequence, WrappedPromise } from "./impl.js";
|
||||||
import { AsyncSequence } from "./types.js";
|
import { AsyncSequence } from "./types.js";
|
||||||
|
|
||||||
export function asAsync<T>(sequence: Sequence<MaybePromiseLike<T>>): AsyncSequence<T> {
|
export function asAsync<T>(sequence: Sequence<MaybePromiseLike<T>>): AsyncSequence<T> {
|
||||||
return new WrappedSequence(sequence);
|
return new WrappedSequence(sequence);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function wrapPromise<T>(promise: Promise<MaybeAsyncIterable<T>>): AsyncSequence<T> {
|
||||||
|
return new WrappedPromise(promise);
|
||||||
|
}
|
||||||
|
|
||||||
export function wrap<T>(iterable: MaybeAsyncIterable<MaybePromiseLike<T>>): AsyncSequence<T> {
|
export function wrap<T>(iterable: MaybeAsyncIterable<MaybePromiseLike<T>>): AsyncSequence<T> {
|
||||||
if (isAsyncSequence<T>(iterable)) {
|
if (isAsyncSequence<T>(iterable)) {
|
||||||
return iterable;
|
return iterable;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { AsyncRandomOptions } from "../random/types.js";
|
|||||||
import { MaybeAsyncAnyPredicate, MaybeAsyncConverter, MaybeAsyncBiConverter, MaybeAsyncAccumulator, MaybeAsyncAction, MaybeAsyncFunction, MaybePromise, MaybeAsyncIterable } from "../types.js";
|
import { MaybeAsyncAnyPredicate, MaybeAsyncConverter, MaybeAsyncBiConverter, MaybeAsyncAccumulator, MaybeAsyncAction, MaybeAsyncFunction, MaybePromise, MaybeAsyncIterable } from "../types.js";
|
||||||
|
|
||||||
export type AsyncSequencePipeline<TElement, TResult> = MaybeAsyncFunction<(sequence: AsyncSequence<TElement>) => TResult>;
|
export type AsyncSequencePipeline<TElement, TResult> = MaybeAsyncFunction<(sequence: AsyncSequence<TElement>) => TResult>;
|
||||||
|
export type AsyncSequenceElement<TAsyncSequence extends AsyncSequence<any>> = TAsyncSequence extends AsyncSequence<infer TElement> ? TElement : never;
|
||||||
|
|
||||||
export interface AsyncSequence<TElement> extends AsyncIterable<TElement> {
|
export interface AsyncSequence<TElement> extends AsyncIterable<TElement> {
|
||||||
iterator(): AsyncIterator<TElement>;
|
iterator(): AsyncIterator<TElement>;
|
||||||
@@ -68,11 +69,11 @@ export interface AsyncSequence<TElement> extends AsyncIterable<TElement> {
|
|||||||
bounds(comparer?: MaybeAsyncComparisonOrComparer<TElement>): Promise<[min: TElement, max: TElement]>;
|
bounds(comparer?: MaybeAsyncComparisonOrComparer<TElement>): Promise<[min: TElement, max: TElement]>;
|
||||||
boundsBy<TBy>(selector: MaybeAsyncConverter<TElement, TBy>, comparer?: MaybeAsyncComparisonOrComparer<TBy>): Promise<[min: TElement, max: TElement]>;
|
boundsBy<TBy>(selector: MaybeAsyncConverter<TElement, TBy>, comparer?: MaybeAsyncComparisonOrComparer<TBy>): Promise<[min: TElement, max: TElement]>;
|
||||||
|
|
||||||
order(comparer?: MaybeAsyncComparisonOrComparer<TElement>): AsyncSequence<TElement>;
|
order(comparer?: MaybeAsyncComparisonOrComparer<TElement>): OrderedAsyncSequence<TElement>;
|
||||||
orderBy<TBy>(selector: MaybeAsyncConverter<TElement, TBy>, comparer?: MaybeAsyncComparisonOrComparer<TBy>): AsyncSequence<TElement>;
|
orderBy<TBy>(selector: MaybeAsyncConverter<TElement, TBy>, comparer?: MaybeAsyncComparisonOrComparer<TBy>): OrderedAsyncSequence<TElement>;
|
||||||
|
|
||||||
orderDescending(comparer?: MaybeAsyncComparisonOrComparer<TElement>): AsyncSequence<TElement>;
|
orderDescending(comparer?: MaybeAsyncComparisonOrComparer<TElement>): OrderedAsyncSequence<TElement>;
|
||||||
orderByDescending<TBy>(selector: MaybeAsyncConverter<TElement, TBy>, comparer?: MaybeAsyncComparisonOrComparer<TBy>): AsyncSequence<TElement>;
|
orderByDescending<TBy>(selector: MaybeAsyncConverter<TElement, TBy>, comparer?: MaybeAsyncComparisonOrComparer<TBy>): OrderedAsyncSequence<TElement>;
|
||||||
|
|
||||||
partition(equater?: MaybeAsyncEqualityComparisonOrComparer<TElement>): AsyncSequence<AsyncSequence<TElement>>;
|
partition(equater?: MaybeAsyncEqualityComparisonOrComparer<TElement>): AsyncSequence<AsyncSequence<TElement>>;
|
||||||
partitionBy<TBy>(selector: MaybeAsyncConverter<TElement, TBy>, equater?: MaybeAsyncEqualityComparisonOrComparer<TBy>): AsyncSequence<AsyncSequence<TElement>>;
|
partitionBy<TBy>(selector: MaybeAsyncConverter<TElement, TBy>, equater?: MaybeAsyncEqualityComparisonOrComparer<TBy>): AsyncSequence<AsyncSequence<TElement>>;
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ class ThenEqualityComparer<T> extends BaseEqualityComparer<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const alwaysFalseEqualityComparer = new class AlwaysFalseEqualityComparer extends BaseEqualityComparer<any> {
|
class AlwaysFalseEqualityComparer extends BaseEqualityComparer<any> {
|
||||||
public override equals(_a: any, _b: any): boolean {
|
public override equals(_a: any, _b: any): boolean {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -148,7 +148,9 @@ export const alwaysFalseEqualityComparer = new class AlwaysFalseEqualityComparer
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const alwaysTrueEqualityComparer = new class AlwaysTrueEqualityComparer extends BaseEqualityComparer<any> {
|
export const alwaysFalseEqualityComparer = new AlwaysFalseEqualityComparer();
|
||||||
|
|
||||||
|
class AlwaysTrueEqualityComparer extends BaseEqualityComparer<any> {
|
||||||
public override equals(_a: any, _b: any): boolean {
|
public override equals(_a: any, _b: any): boolean {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -168,7 +170,9 @@ export const alwaysTrueEqualityComparer = new class AlwaysTrueEqualityComparer e
|
|||||||
public override thenEqualsUsing<U>(projection: Converter<any, U>, equalityComparison?: EqualityComparisonOrComparer<U> | undefined): EqualityComparer<any> {
|
public override thenEqualsUsing<U>(projection: Converter<any, U>, equalityComparison?: EqualityComparisonOrComparer<U> | undefined): EqualityComparer<any> {
|
||||||
return createEqualityComparerUsing(projection, equalityComparison);
|
return createEqualityComparerUsing(projection, equalityComparison);
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
|
export const alwaysTrueEqualityComparer = new AlwaysTrueEqualityComparer();
|
||||||
|
|
||||||
export const looseEqualityComparer: EqualityComparer<any> = new class LooseEqualityComparer extends BaseEqualityComparer<any> {
|
export const looseEqualityComparer: EqualityComparer<any> = new class LooseEqualityComparer extends BaseEqualityComparer<any> {
|
||||||
public override equals(a: any, b: any): boolean {
|
public override equals(a: any, b: any): boolean {
|
||||||
|
|||||||
@@ -70,7 +70,9 @@ export function keys(o: object): Sequence<string> {
|
|||||||
return array(Object.keys(o));
|
return array(Object.keys(o));
|
||||||
}
|
}
|
||||||
|
|
||||||
export function values(o: object): Sequence<any> {
|
export function values(o: object): Sequence<any>;
|
||||||
|
export function values<T>(o: Record<any, T> | ArrayLike<T>): Sequence<T>;
|
||||||
|
export function values(o: object) {
|
||||||
return array(Object.values(o));
|
return array(Object.values(o));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import { RandomOptions } from "../random/types.js";
|
|||||||
import { AnyPredicate, Converter, TypePredicate, BiConverter, Accumulator, Action } from "../types.js";
|
import { AnyPredicate, Converter, TypePredicate, BiConverter, Accumulator, Action } from "../types.js";
|
||||||
|
|
||||||
export type SequencePipeline<TElement, TResult> = (sequence: Sequence<TElement>) => TResult;
|
export type SequencePipeline<TElement, TResult> = (sequence: Sequence<TElement>) => TResult;
|
||||||
|
export type SequenceElement<TSequence extends Sequence<any>> = TSequence extends Sequence<infer TElement> ? TElement : never;
|
||||||
|
|
||||||
export interface Sequence<TElement> extends Iterable<TElement> {
|
export interface Sequence<TElement> extends Iterable<TElement> {
|
||||||
iterator(): Iterator<TElement>;
|
iterator(): Iterator<TElement>;
|
||||||
|
|||||||
Reference in New Issue
Block a user