diff --git a/package-lock.json b/package-lock.json index f9f9aab..5393295 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,8 @@ "devDependencies": { "@apeleghq/esbuild-plugin-closure-compiler": "^1.0.8", "esbuild": "^0.25.3", - "folktest": "git+https://git.kitsu.cafe/rowan/folktest.git" + "folktest": "git+https://git.kitsu.cafe/rowan/folktest.git", + "typescript": "^5.8.3" } }, "node_modules/@apeleghq/esbuild-plugin-closure-compiler": { @@ -814,6 +815,20 @@ "node": ">=8" } }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index 856a9c8..2072ec0 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "devDependencies": { "@apeleghq/esbuild-plugin-closure-compiler": "^1.0.8", "esbuild": "^0.25.3", - "folktest": "git+https://git.kitsu.cafe/rowan/folktest.git" + "folktest": "git+https://git.kitsu.cafe/rowan/folktest.git", + "typescript": "^5.8.3" } } diff --git a/src/index.d.ts b/src/index.d.ts new file mode 100644 index 0000000..c0b760f --- /dev/null +++ b/src/index.d.ts @@ -0,0 +1,188 @@ +type Nullable = T | null | undefined; +export interface Predicate { + (value: Nullable, index: number): boolean; +} +export interface Reducer { + (accumulator: U, value: Nullable, index: number): U; +} +export interface Morphism { + (value: Nullable, index: number): U; +} +export interface IEnumerator { + get current(): Nullable; + moveNext(): boolean; + reset(): void; + toIterator(): Iterator; +} +export interface IEnumerable { + enumerator(): IEnumerator; +} +export interface IEnumeratorFactory { + (iterator: Iterator): IEnumerator; +} +export declare function isIterable(value: any): value is Iterable; +export declare function isIterator(value: any): value is Iterator; +export declare function isBuffer(value: any): value is ArrayBufferLike; +export declare function isArrayLike(value: any): value is ArrayLike; +export declare class IteratorEnumerator implements IEnumerator, Iterator { + private _iterator; + private _consumed; + private _current; + get current(): Nullable; + constructor(iterator: Iterator); + static from(iterator: Iterator): IteratorEnumerator; + moveNext(): boolean; + reset(): void; + toIterator(): Iterator; + next(...[_value]: [] | [any]): IteratorResult; + return(value?: any): IteratorResult; + throw(e?: any): IteratorResult; +} +export declare class CachedIteratorEnumerator implements IEnumerator, Iterator { + private _iterator; + private _cache; + private _index; + get current(): Nullable; + constructor(iterator: Iterator); + static from(iterator: Iterator): CachedIteratorEnumerator; + moveNext(): boolean; + reset(): void; + toIterator(): Iterator; + next(...[_value]: [] | [any]): IteratorResult; + return?(value?: any): IteratorResult; + throw(e?: any): IteratorResult; +} +export declare class IterableEnumerator implements IEnumerator, Iterator { + private _iterable; + private _factory; + private _enumerator; + get current(): Nullable; + constructor(iterable: Iterable, factory?: IEnumeratorFactory); + static fromIterable(iterable: Iterable, factory?: IEnumeratorFactory): IEnumerator; + moveNext(): boolean; + _createIterator(): Iterator; + _createEnumerator(): IEnumerator; + reset(): void; + toIterator(): Iterator; + next(...[_value]: [] | [any]): IteratorResult; + return?(value?: any): IteratorResult; + throw?(e?: any): IteratorResult; +} +type ArrayType | ArrayBufferView> = T extends ArrayLike ? U : T extends ArrayBufferTypes ? number : never; +export declare class ArrayEnumerator implements IEnumerator, Iterator, Iterable { + private _array; + private _index; + get current(): Nullable; + constructor(array: ArrayLike); + static from | ArrayBufferView>(array: A): ArrayEnumerator>; + [Symbol.iterator](): Iterator; + setIndex(index: number): void; + moveNext(): boolean; + reset(): void; + toIterator(): Iterator; + next(...[_value]: [] | [any]): IteratorResult; + return?(_value?: any): IteratorResult; + throw?(_e?: any): IteratorResult; +} +export declare class Enumerator implements IEnumerator, Iterator { + protected _enumerator: IEnumerator; + protected _index: number; + get current(): Nullable; + constructor(enumerator: IEnumerator); + static fromIterable(iterable: Iterable): IEnumerator; + static fromIterator(iterator: Iterator, cache?: boolean): IEnumerator; + static toIterator(enumerator: IEnumerator): Iterator; + [Symbol.iterator](): Iterator; + toIterator(): Iterator; + moveNext(): boolean; + reset(): void; + next(...[_value]: [] | [any]): IteratorResult; + return?(_value?: any): IteratorResult; + throw?(_e?: any): IteratorResult; +} +export declare class HelperEnumerator implements IEnumerator, Iterator { + protected _enumerator: IEnumerator; + protected _index: number; + get current(): Nullable; + constructor(enumerator: IEnumerator); + static toIterator(enumerator: IEnumerator): Iterator; + [Symbol.iterator](): Iterator; + toIterator(): Iterator; + moveNext(): boolean; + reset(): void; + next(...[_value]: [] | [any]): IteratorResult; + return?(_value?: any): IteratorResult; + throw?(_e?: any): IteratorResult; +} +export declare class DropEnumerator extends HelperEnumerator { + private _limit; + constructor(enumerator: IEnumerator, limit: number); + moveNext(): boolean; +} +export declare class FilterEnumerator extends HelperEnumerator { + private _filter; + constructor(enumerator: IEnumerator, filter: Predicate); + moveNext(): boolean; +} +export declare class FlatMapEnumerator implements IEnumerator { + private _enumerator; + private _flatMap; + private _inner?; + private _index; + constructor(enumerator: IEnumerator, flatMap: Morphism>); + get current(): Nullable; + moveNext(): boolean; + reset(): void; + toIterator(): Iterator; +} +export declare class MapEnumerator implements IEnumerator { + private _enumerator; + private _map; + private _current; + private _index; + get current(): U; + constructor(enumerator: IEnumerator, map: Morphism); + toIterator(): Iterator; + moveNext(): boolean; + reset(): void; +} +export declare class TakeEnumerator extends HelperEnumerator { + private _limit; + constructor(enumerator: IEnumerator, limit: number); + moveNext(): boolean; +} +export declare class FusedEnumerator implements IEnumerator { + private _enumerators; + private _index; + get current(): Nullable; + constructor(enumerators: IEnumerator[]); + private _cur; + private _done; + toIterator(): Iterator; + moveNext(): boolean; + reset(): void; +} +export declare class Enumerable implements IEnumerable, Iterable { + protected _enumerator: IEnumerator; + constructor(enumerator: IEnumerator); + static from(value: IEnumerable | IEnumerator | Iterable | Iterator): Enumerable; + static isEnumerable(value: object): value is Enumerable; + static isEnumerator(value: object): value is IEnumerator; + [Symbol.iterator](): Iterator; + at(index: number): Nullable; + atOrDefault(index: number, defaultValue: T): T; + atOrElse(index: number, defaultValue: () => T): T; + concat(other: IEnumerable): IEnumerable; + drop(limit: number): Enumerable; + enumerator(): IEnumerator; + every(predicate: Predicate): boolean; + filter(predicate: Predicate): IEnumerable; + flatMap(fn: Morphism>): IEnumerable; + map(fn: Morphism): IEnumerable; + some(predicate: Predicate): boolean; + take(limit: number): IEnumerable; +} +export declare class ArrayEnumerble extends Enumerable { + at(index: number): Nullable; +} +export {};