ix
Version:
The Interactive Extensions for JavaScript
33 lines (28 loc) • 964 B
text/typescript
import { AsyncIterableX } from './asynciterablex.js';
import { throwIfAborted } from '../aborterror.js';
/** @ignore */
export class OfAsyncIterable<TSource> extends AsyncIterableX<TSource> {
private _args: TSource[];
constructor(args: TSource[]) {
super();
this._args = args;
}
async *[Symbol.asyncIterator](signal?: AbortSignal) {
throwIfAborted(signal);
for (const item of this._args) {
yield item;
}
}
}
/**
* Creates an async-iterable from the specified elements.
*
* @template TSource The type of the elements to create an async-iterable sequence.
* @param {...TSource[]} args The elements to turn into an async-iterable sequence.
* @returns {AsyncIterableX<TSource>} The async-iterable sequence created from the elements.
*/
export function of<TSource extends any[]>(
...args: TSource
): AsyncIterableX<TSource[number & keyof TSource]> {
return new OfAsyncIterable<TSource[number & keyof TSource]>(args);
}