or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

array-helpers.mdasync-generators.mdclass-helpers.mddecorators.mdindex.mdmodule-interop.mdobject-helpers.mdprivate-members.mdresource-management.mdtype-utilities.md
tile.json

async-generators.mddocs/

Async and Generator Helpers

Async and generator helpers provide comprehensive support for JavaScript async/await syntax and generator functions, including regenerator runtime integration, async iterators, and generator delegation patterns.

Capabilities

Async Function Support

asyncToGenerator

Converts generator functions to async functions for async/await syntax support.

/**
 * Converts generator functions to async functions
 * @param fn - Generator function to convert
 * @returns Function that returns a Promise
 */
function asyncToGenerator(fn: GeneratorFunction): (...args: any[]) => Promise<any>;

Usage Example:

import _asyncToGenerator from '@babel/runtime/helpers/esm/asyncToGenerator';
import '@babel/runtime/regenerator';

// Used by Babel for: async function example() { return await fetch('/api'); }
const example = _asyncToGenerator(function* () {
  return yield fetch('/api');
});

Async Iterator Support

asyncIterator

Creates async iterators from objects with Symbol.asyncIterator or Symbol.iterator.

/**
 * Creates async iterators
 * @param iterable - Object to create async iterator from
 * @returns Async iterator
 */
function asyncIterator(iterable: any): AsyncIterator<any>;

asyncGeneratorDelegate

Delegates async generator calls to another async iterator.

/**
 * Delegates to async generators
 * @param inner - Inner async iterator to delegate to
 * @param awaitWrap - Function to wrap awaited values
 * @returns Delegating async iterator
 */
function asyncGeneratorDelegate(inner: AsyncIterator<any>, awaitWrap: Function): AsyncIterator<any>;

awaitAsyncGenerator

Awaits values from async generators.

/**
 * Awaits async generator values
 * @param value - Value to await from async generator
 * @returns Promise resolving to awaited value
 */
function awaitAsyncGenerator(value: any): Promise<any>;

wrapAsyncGenerator

Wraps functions as async generators.

/**
 * Wraps functions as async generators
 * @param fn - Function to wrap as async generator
 * @returns Async generator function
 */
function wrapAsyncGenerator(fn: Function): AsyncGeneratorFunction;

Generator Runtime Support

regenerator

Core regenerator functionality for generator and async function support.

/**
 * Core regenerator functionality
 * @returns Regenerator runtime object
 */
function regenerator(): any;

regeneratorRuntime

Complete regenerator runtime implementation providing full generator and async support.

/**
 * Complete regenerator runtime
 * @returns Full regenerator runtime with all generator capabilities
 */
function regeneratorRuntime(): RegeneratorRuntime;

interface RegeneratorRuntime {
  wrap: (fn: GeneratorFunction, outerFn?: Function, self?: any, tryLocsList?: any[]) => Generator<any, any, any>;
  isGeneratorFunction: (genFun: any) => boolean;
  mark: (genFun: GeneratorFunction) => GeneratorFunction;
  awrap: (arg: any) => AwaitArgument;
  async: (innerFn: GeneratorFunction, outerFn?: Function, self?: any, tryLocsList?: any[]) => Promise<any>;
  keys: (object: any) => string[];
  values: (iterable: any) => any[];
}

Usage Example:

// Import regenerator runtime globally
import '@babel/runtime/regenerator';

// Now generator functions and async/await work
function* myGenerator() {
  yield 1;
  yield 2;
  return 3;
}

async function myAsyncFunction() {
  const result = await Promise.resolve('hello');
  return result;
}

Advanced Generator Support

regeneratorAsync

Async generator implementation support.

/**
 * Async generator support
 * @param innerFn - Inner generator function
 * @param outerFn - Outer function context
 * @param self - This binding
 * @param tryLocsList - Try/catch location list
 * @returns Promise resolving to generator result
 */
function regeneratorAsync(innerFn: GeneratorFunction, outerFn?: Function, self?: any, tryLocsList?: any[]): Promise<any>;

regeneratorAsyncGen

Creates async generators from regular generator functions.

/**
 * Async generator creation
 * @param innerFn - Inner generator function
 * @param outerFn - Outer function context
 * @param self - This binding
 * @returns Async generator
 */
function regeneratorAsyncGen(innerFn: GeneratorFunction, outerFn?: Function, self?: any): AsyncGenerator<any, any, any>;

Iterator Utilities

regeneratorKeys

Generator-based object key iteration.

/**
 * Generator key iteration
 * @param object - Object to iterate keys
 * @returns Generator yielding object keys
 */
function regeneratorKeys(object: any): Generator<string, void, unknown>;

regeneratorValues

Generator-based object value iteration.

/**
 * Generator value iteration
 * @param iterable - Iterable to get values from
 * @returns Generator yielding values
 */
function regeneratorValues(iterable: any): Generator<any, void, unknown>;

skipFirstGeneratorNext

Skips the first next() call on generators (handles initial state).

/**
 * Skips first generator next()
 * @param fn - Generator function
 * @returns Generator with first next() skipped
 */
function skipFirstGeneratorNext(fn: GeneratorFunction): Generator<any, any, any>;

Async Generator Values

AwaitValue

Wrapper for values that need to be awaited in async generators.

/**
 * Wrapper for awaited values
 * @param value - Value to wrap for awaiting
 * @returns Wrapped await value
 */
function AwaitValue(value: any): AwaitArgument;

interface AwaitArgument {
  __await: any;
}

OverloadYield

Handles generator yield overloading for different yield types.

/**
 * Handles generator yield overloading
 * @param value - Value being yielded
 * @returns Processed yield value
 */
function OverloadYield(value: any): any;

Regenerator Runtime Integration

The regenerator runtime is automatically available when imported:

// Global regenerator setup
require('@babel/runtime/regenerator');

// Or ES module import
import '@babel/runtime/regenerator';

This enables:

  • Generator functions (function*)
  • Async functions (async function)
  • Async generators (async function*)
  • For-await-of loops
  • Yield delegation (yield*)

Types

// Generator function types
type GeneratorFunction = (...args: any[]) => Generator<any, any, any>;
type AsyncGeneratorFunction = (...args: any[]) => AsyncGenerator<any, any, any>;

// Generator interfaces
interface Generator<T, TReturn, TNext> {
  next(value?: TNext): IteratorResult<T>;
  return(value?: TReturn): IteratorResult<T>;
  throw(e?: any): IteratorResult<T>;
  [Symbol.iterator](): Generator<T, TReturn, TNext>;
}

interface AsyncGenerator<T, TReturn, TNext> {
  next(value?: TNext): Promise<IteratorResult<T>>;
  return(value?: TReturn): Promise<IteratorResult<T>>;
  throw(e?: any): Promise<IteratorResult<T>>;
  [Symbol.asyncIterator](): AsyncGenerator<T, TReturn, TNext>;
}

// Iterator result
interface IteratorResult<T> {
  done: boolean;
  value: T;
}

// Async iterator
interface AsyncIterator<T> {
  next(value?: any): Promise<IteratorResult<T>>;
  return?(value?: any): Promise<IteratorResult<T>>;
  throw?(e?: any): Promise<IteratorResult<T>>;
}

// Await wrapper
interface AwaitArgument {
  __await: any;
}

// Regenerator runtime interface
interface RegeneratorRuntime {
  wrap(fn: GeneratorFunction, outerFn?: Function, self?: any, tryLocsList?: any[]): Generator<any, any, any>;
  isGeneratorFunction(genFun: any): boolean;
  mark(genFun: GeneratorFunction): GeneratorFunction;
  awrap(arg: any): AwaitArgument;
  async(innerFn: GeneratorFunction, outerFn?: Function, self?: any, tryLocsList?: any[]): Promise<any>;
  keys(object: any): string[];
  values(iterable: any): any[];
}