ember-source
Version:
A JavaScript framework for creating ambitious web applications
46 lines • 1.81 kB
TypeScript
declare module '@glimmer/reference/lib/iterable' {
import type { Nullable } from "@glimmer/interfaces";
import type { Reference, ReferenceEnvironment } from "@glimmer/reference/lib/reference";
export interface IterationItem<T, U> {
key: unknown;
value: T;
memo: U;
}
export interface AbstractIterator<T, U, V extends IterationItem<T, U>> {
isEmpty(): boolean;
next(): Nullable<V>;
}
export type OpaqueIterationItem = IterationItem<unknown, unknown>;
export type OpaqueIterator = AbstractIterator<unknown, unknown, OpaqueIterationItem>;
export interface IteratorDelegate {
isEmpty(): boolean;
next(): {
value: unknown;
memo: unknown;
} | null;
}
export interface IteratorReferenceEnvironment extends ReferenceEnvironment {
getPath(obj: unknown, path: string): unknown;
toIterator(obj: unknown): Nullable<IteratorDelegate>;
}
type KeyFor = (item: unknown, index: unknown) => unknown;
export function createIteratorRef(listRef: Reference, key: string): Reference<ArrayIterator | IteratorWrapper>;
export function createIteratorItemRef(_value: unknown): Reference<unknown>;
class IteratorWrapper implements OpaqueIterator {
private inner;
private keyFor;
constructor(inner: IteratorDelegate, keyFor: KeyFor);
isEmpty(): boolean;
next(): OpaqueIterationItem | null;
}
class ArrayIterator implements OpaqueIterator {
private iterator;
private keyFor;
private current;
private pos;
constructor(iterator: unknown[] | readonly unknown[], keyFor: KeyFor);
isEmpty(): boolean;
next(): Nullable<IterationItem<unknown, number>>;
}
export {};
}