iterflow 0.2.2 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/validation.ts","../src/iter-flow.ts","../src/async-iter-flow.ts","../src/debug.ts","../src/recovery.ts","../src/deprecation.ts","../src/index.ts"],"names":["asyncIter","config","iter","iter2"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Error handling utilities and custom error classes for iterflow\n * @module errors\n */\n\n/**\n * Base error class for all iterflow errors\n */\nexport class iterflowError extends Error {\n public readonly operation?: string;\n public readonly context?: Record<string, unknown>;\n\n constructor(\n message: string,\n operation?: string,\n context?: Record<string, unknown>,\n ) {\n super(message);\n this.name = \"iterflowError\";\n this.operation = operation;\n this.context = context;\n\n // Maintain proper stack trace for where our error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n\n /**\n * Returns a detailed error message with context\n */\n toDetailedString(): string {\n let msg = `${this.name}: ${this.message}`;\n\n if (this.operation) {\n msg += `\\n Operation: ${this.operation}`;\n }\n\n if (this.context && Object.keys(this.context).length > 0) {\n msg += \"\\n Context:\";\n for (const [key, value] of Object.entries(this.context)) {\n msg += `\\n ${key}: ${JSON.stringify(value)}`;\n }\n }\n\n if (this.stack) {\n msg += `\\n Stack: ${this.stack.split(\"\\n\").slice(1).join(\"\\n\")}`;\n }\n\n return msg;\n }\n}\n\n/**\n * Error thrown when operation parameters are invalid\n */\nexport class ValidationError extends iterflowError {\n constructor(\n message: string,\n operation?: string,\n context?: Record<string, unknown>,\n ) {\n super(message, operation, context);\n this.name = \"ValidationError\";\n }\n}\n\n/**\n * Error thrown when an operation fails during execution\n */\nexport class OperationError extends iterflowError {\n public readonly cause?: Error;\n\n constructor(\n message: string,\n operation?: string,\n cause?: Error,\n context?: Record<string, unknown>,\n ) {\n super(message, operation, context);\n this.name = \"OperationError\";\n this.cause = cause;\n }\n\n toDetailedString(): string {\n let msg = super.toDetailedString();\n\n if (this.cause) {\n msg += `\\n Caused by: ${this.cause.message}`;\n if (this.cause.stack) {\n msg += `\\n ${this.cause.stack}`;\n }\n }\n\n return msg;\n }\n}\n\n/**\n * Error thrown when an operation requires a non-empty sequence\n */\nexport class EmptySequenceError extends iterflowError {\n constructor(operation: string, message?: string) {\n super(\n message || `Operation '${operation}' requires a non-empty sequence`,\n operation,\n );\n this.name = \"EmptySequenceError\";\n }\n}\n\n/**\n * Error thrown when accessing an invalid index\n */\nexport class IndexOutOfBoundsError extends iterflowError {\n public readonly index: number;\n public readonly size?: number;\n\n constructor(index: number, size?: number, operation?: string) {\n const sizeInfo = size !== undefined ? ` (size: ${size})` : \"\";\n super(`Index ${index} is out of bounds${sizeInfo}`, operation, {\n index,\n size,\n });\n this.name = \"IndexOutOfBoundsError\";\n this.index = index;\n this.size = size;\n }\n}\n\n/**\n * Error thrown when a type conversion or coercion fails\n */\nexport class TypeConversionError extends iterflowError {\n public readonly value: unknown;\n public readonly expectedType: string;\n\n constructor(value: unknown, expectedType: string, operation?: string) {\n super(\n `Cannot convert value ${JSON.stringify(value)} to type ${expectedType}`,\n operation,\n { value, expectedType },\n );\n this.name = \"TypeConversionError\";\n this.value = value;\n this.expectedType = expectedType;\n }\n}\n","/**\n * Input validation utilities for iterflow operations\n * @module validation\n */\n\nimport { ValidationError, TypeConversionError } from \"./errors.js\";\n\n/**\n * Validates that a value is a positive integer\n */\nexport function validatePositiveInteger(\n value: number,\n paramName: string,\n operation?: string,\n): void {\n if (!Number.isInteger(value)) {\n throw new ValidationError(\n `${paramName} must be an integer, got ${value}`,\n operation,\n { paramName, value },\n );\n }\n\n if (value < 1) {\n throw new ValidationError(\n `${paramName} must be at least 1, got ${value}`,\n operation,\n { paramName, value },\n );\n }\n}\n\n/**\n * Validates that a value is a non-negative integer\n */\nexport function validateNonNegativeInteger(\n value: number,\n paramName: string,\n operation?: string,\n): void {\n if (!Number.isInteger(value)) {\n throw new ValidationError(\n `${paramName} must be an integer, got ${value}`,\n operation,\n { paramName, value },\n );\n }\n\n if (value < 0) {\n throw new ValidationError(\n `${paramName} must be non-negative, got ${value}`,\n operation,\n { paramName, value },\n );\n }\n}\n\n/**\n * Validates that a value is within a specific range\n */\nexport function validateRange(\n value: number,\n min: number,\n max: number,\n paramName: string,\n operation?: string,\n): void {\n if (value < min || value > max) {\n throw new ValidationError(\n `${paramName} must be between ${min} and ${max}, got ${value}`,\n operation,\n { paramName, value, min, max },\n );\n }\n}\n\n/**\n * Validates that a value is a finite number (not NaN or Infinity)\n */\nexport function validateFiniteNumber(\n value: number,\n paramName: string,\n operation?: string,\n): void {\n if (!Number.isFinite(value)) {\n throw new ValidationError(\n `${paramName} must be a finite number, got ${value}`,\n operation,\n { paramName, value },\n );\n }\n}\n\n/**\n * Validates that a value is not zero\n */\nexport function validateNonZero(\n value: number,\n paramName: string,\n operation?: string,\n): void {\n if (value === 0) {\n throw new ValidationError(`${paramName} cannot be zero`, operation, {\n paramName,\n value,\n });\n }\n}\n\n/**\n * Validates that a value is a function\n */\nexport function validateFunction(\n value: unknown,\n paramName: string,\n operation?: string,\n): asserts value is Function {\n if (typeof value !== \"function\") {\n throw new ValidationError(\n `${paramName} must be a function, got ${typeof value}`,\n operation,\n { paramName, type: typeof value },\n );\n }\n}\n\n/**\n * Validates that a value is iterable\n */\nexport function validateIterable<T>(\n value: unknown,\n paramName: string,\n operation?: string,\n): asserts value is Iterable<T> {\n if (value == null || typeof (value as any)[Symbol.iterator] !== \"function\") {\n throw new ValidationError(`${paramName} must be iterable`, operation, {\n paramName,\n type: typeof value,\n });\n }\n}\n\n/**\n * Validates that a value is a valid comparator function\n */\nexport function validateComparator<T>(\n fn: unknown,\n operation?: string,\n): asserts fn is (a: T, b: T) => number {\n validateFunction(fn, \"comparator\", operation);\n\n // Optional: Test with sample values if needed\n // This is a basic check - actual validation happens at runtime\n}\n\n/**\n * Validates that an array is not empty\n */\nexport function validateNonEmpty<T>(arr: T[], operation?: string): void {\n if (arr.length === 0) {\n throw new ValidationError(\"Sequence cannot be empty\", operation);\n }\n}\n\n/**\n * Safely converts a value to a number\n */\nexport function toNumber(\n value: unknown,\n operation?: string,\n): number {\n const num = Number(value);\n\n if (Number.isNaN(num)) {\n throw new TypeConversionError(value, \"number\", operation);\n }\n\n return num;\n}\n\n/**\n * Safely converts a value to an integer\n */\nexport function toInteger(\n value: unknown,\n operation?: string,\n): number {\n const num = toNumber(value, operation);\n const int = Math.trunc(num);\n\n if (num !== int) {\n throw new TypeConversionError(value, \"integer\", operation);\n }\n\n return int;\n}\n\n/**\n * Validates array index\n */\nexport function validateIndex(\n index: number,\n size: number,\n operation?: string,\n): void {\n validateNonNegativeInteger(index, \"index\", operation);\n\n if (index >= size) {\n throw new ValidationError(\n `Index ${index} is out of bounds for size ${size}`,\n operation,\n { index, size },\n );\n }\n}\n\n/**\n * Validates that a number is a safe integer within JavaScript's safe integer range\n * @param value - The value to validate\n * @param paramName - The parameter name for error messages\n * @param operation - The operation name for error context\n */\nexport function validateSafeInteger(\n value: number,\n paramName: string,\n operation?: string,\n): void {\n if (!Number.isSafeInteger(value)) {\n throw new ValidationError(\n `${paramName} must be a safe integer (${Number.MIN_SAFE_INTEGER} to ${Number.MAX_SAFE_INTEGER}), got ${value}`,\n operation,\n { paramName, value },\n );\n }\n}\n\n/**\n * Validates that a window/chunk size is within reasonable bounds\n * @param size - The size to validate\n * @param maxSize - The maximum allowed size (default: 1,000,000)\n * @param operation - The operation name for error context\n */\nexport function validateWindowSize(\n size: number,\n maxSize: number = 1_000_000,\n operation?: string,\n): void {\n validatePositiveInteger(size, \"size\", operation);\n\n if (size > maxSize) {\n throw new ValidationError(\n `Window size ${size} exceeds maximum allowed size ${maxSize}. Consider using smaller windows or streaming operations.`,\n operation,\n { size, maxSize },\n );\n }\n}\n\n/**\n * Validates that an array size is within reasonable memory bounds\n * @param size - The estimated size\n * @param maxElements - The maximum allowed elements (default: 10,000,000)\n * @param operation - The operation name for error context\n */\nexport function validateMemoryLimit(\n size: number,\n maxElements: number = 10_000_000,\n operation?: string,\n): void {\n validateNonNegativeInteger(size, \"size\", operation);\n\n if (size > maxElements) {\n throw new ValidationError(\n `Operation would exceed memory limit (${size} elements > ${maxElements} maximum). Consider using streaming operations with take() or chunk().`,\n operation,\n { size, maxElements },\n );\n }\n}\n","import { validateRange, validatePositiveInteger } from \"./validation.js\";\n\n/**\n * A fluent interface wrapper for working with iterators and iterables.\n * Provides chainable methods for transforming, filtering, and analyzing data streams.\n *\n * @template T The type of elements in the iterator\n * @example\n * ```typescript\n * const result = new iterflow([1, 2, 3, 4, 5])\n * .filter(x => x % 2 === 0)\n * .map(x => x * 2)\n * .toArray(); // [4, 8]\n * ```\n */\nexport class iterflow<T> implements Iterable<T> {\n private source: Iterator<T>;\n\n /**\n * Creates a new iterflow instance from an iterable or iterator.\n *\n * @param source - The source iterable or iterator to wrap\n * @example\n * ```typescript\n * const flow1 = new iterflow([1, 2, 3]);\n * const flow2 = new iterflow(someIterator);\n * ```\n */\n constructor(source: Iterable<T> | Iterator<T>) {\n this.source =\n Symbol.iterator in source ? source[Symbol.iterator]() : source;\n }\n\n // Iterator protocol\n /**\n * Returns the iterator for this iterflow instance.\n * This allows iterflow to be used in for...of loops.\n *\n * @returns The underlying iterator\n */\n [Symbol.iterator](): Iterator<T> {\n return this.source;\n }\n\n /**\n * Retrieves the next value from the iterator.\n *\n * @returns An IteratorResult containing the next value or indicating completion\n */\n next(): IteratorResult<T> {\n return this.source.next();\n }\n\n // ES2025 native passthrough methods (would normally delegate to native implementations)\n /**\n * Transforms each element using the provided function.\n *\n * @template U The type of the transformed elements\n * @param fn - Function to transform each element\n * @returns A new iterflow with transformed elements\n * @example\n * ```typescript\n * iter([1, 2, 3]).map(x => x * 2).toArray(); // [2, 4, 6]\n * ```\n */\n map<U>(fn: (value: T) => U): iterflow<U> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n for (const value of self) {\n yield fn(value);\n }\n },\n });\n }\n\n /**\n * Filters elements based on a predicate function.\n * Only elements for which the predicate returns true are included.\n *\n * @param predicate - Function to test each element\n * @returns A new iterflow with only elements that pass the predicate\n * @example\n * ```typescript\n * iter([1, 2, 3, 4]).filter(x => x % 2 === 0).toArray(); // [2, 4]\n * ```\n */\n filter(predicate: (value: T) => boolean): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n for (const value of self) {\n if (predicate(value)) {\n yield value;\n }\n }\n },\n });\n }\n\n /**\n * Takes only the first `limit` elements from the iterator.\n *\n * @param limit - Maximum number of elements to take\n * @returns A new iterflow with at most `limit` elements\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).take(3).toArray(); // [1, 2, 3]\n * ```\n */\n take(limit: number): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n let count = 0;\n for (const value of self) {\n if (count >= limit) break;\n yield value;\n count++;\n }\n },\n });\n }\n\n /**\n * Skips the first `count` elements from the iterator.\n *\n * @param count - Number of elements to skip\n * @returns A new iterflow without the first `count` elements\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).drop(2).toArray(); // [3, 4, 5]\n * ```\n */\n drop(count: number): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n let dropped = 0;\n for (const value of self) {\n if (dropped < count) {\n dropped++;\n continue;\n }\n yield value;\n }\n },\n });\n }\n\n /**\n * Maps each element to an iterable and flattens the results into a single iterator.\n *\n * @template U The type of elements in the resulting iterator\n * @param fn - Function that maps each element to an iterable\n * @returns A new iterflow with all mapped iterables flattened\n * @example\n * ```typescript\n * iter([1, 2, 3]).flatMap(x => [x, x * 2]).toArray(); // [1, 2, 2, 4, 3, 6]\n * ```\n */\n flatMap<U>(fn: (value: T) => Iterable<U>): iterflow<U> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n for (const value of self) {\n yield* fn(value);\n }\n },\n });\n }\n\n /**\n * Concatenates multiple iterators sequentially.\n * Yields all elements from this iterator, then from each provided iterator.\n *\n * @param iterables - Additional iterables to concatenate\n * @returns A new iterflow with all elements from all iterables\n * @example\n * ```typescript\n * iter([1, 2]).concat([3, 4], [5, 6]).toArray();\n * // [1, 2, 3, 4, 5, 6]\n * ```\n */\n concat(...iterables: Iterable<T>[]): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n yield* self;\n for (const iterable of iterables) {\n yield* iterable;\n }\n },\n });\n }\n\n /**\n * Inserts a separator element between each item.\n * The separator is not added before the first element or after the last.\n *\n * @param separator - The element to insert between items\n * @returns A new iterflow with separators interspersed\n * @example\n * ```typescript\n * iter([1, 2, 3]).intersperse(0).toArray();\n * // [1, 0, 2, 0, 3]\n * iter(['a', 'b', 'c']).intersperse('-').toArray();\n * // ['a', '-', 'b', '-', 'c']\n * ```\n */\n intersperse(separator: T): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n let isFirst = true;\n for (const value of self) {\n if (!isFirst) {\n yield separator;\n }\n yield value;\n isFirst = false;\n }\n },\n });\n }\n\n /**\n * Like reduce, but emits all intermediate accumulator values.\n * Similar to reduce but returns an iterator of partial results.\n *\n * @template U The type of the accumulated value\n * @param fn - Function to combine the accumulator with each element\n * @param initial - The initial value for the accumulator\n * @returns A new iterflow of intermediate accumulator values\n * @example\n * ```typescript\n * iter([1, 2, 3, 4]).scan((acc, x) => acc + x, 0).toArray();\n * // [0, 1, 3, 6, 10]\n * iter([1, 2, 3]).scan((acc, x) => acc * x, 1).toArray();\n * // [1, 1, 2, 6]\n * ```\n */\n scan<U>(fn: (accumulator: U, value: T) => U, initial: U): iterflow<U> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n let accumulator = initial;\n yield accumulator;\n for (const value of self) {\n accumulator = fn(accumulator, value);\n yield accumulator;\n }\n },\n });\n }\n\n /**\n * Adds index as tuple with each element [index, value].\n * Creates tuples pairing each element with its zero-based index.\n *\n * @returns A new iterflow of tuples containing [index, value]\n * @example\n * ```typescript\n * iter(['a', 'b', 'c']).enumerate().toArray();\n * // [[0, 'a'], [1, 'b'], [2, 'c']]\n * ```\n */\n enumerate(): iterflow<[number, T]> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n let index = 0;\n for (const value of self) {\n yield [index, value];\n index++;\n }\n },\n });\n }\n\n /**\n * Reverses the iterator order.\n * Warning: This operation buffers all elements in memory and may cause\n * performance issues with large iterables. Consider using only when necessary.\n *\n * @returns A new iterflow with elements in reverse order\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).reverse().toArray();\n * // [5, 4, 3, 2, 1]\n * ```\n */\n reverse(): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n const buffer = Array.from(self);\n for (let i = buffer.length - 1; i >= 0; i--) {\n yield buffer[i]!;\n }\n },\n });\n }\n\n /**\n * Sorts elements using default comparison.\n * Numbers are sorted numerically, strings lexicographically.\n * Warning: This operation buffers all elements in memory. Avoid chaining\n * with other buffering operations (reverse, sort, sortBy) for better performance.\n *\n * @param this - iterflow instance constrained to numbers or strings\n * @returns A new iterflow with elements sorted\n * @example\n * ```typescript\n * iter([3, 1, 4, 1, 5]).sort().toArray();\n * // [1, 1, 3, 4, 5]\n * iter(['c', 'a', 'b']).sort().toArray();\n * // ['a', 'b', 'c']\n * ```\n */\n sort(this: iterflow<number | string>): iterflow<number | string> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n const buffer = Array.from(self);\n buffer.sort((a, b) => {\n if (typeof a === \"number\" && typeof b === \"number\") {\n return a - b;\n }\n return String(a).localeCompare(String(b));\n });\n yield* buffer;\n },\n });\n }\n\n /**\n * Sorts elements using a custom comparison function.\n * Warning: This operation buffers all elements in memory. Avoid chaining\n * with other buffering operations (reverse, sort, sortBy) for better performance.\n *\n * @param compareFn - Function that compares two elements (returns negative if a < b, 0 if equal, positive if a > b)\n * @returns A new iterflow with elements sorted\n * @example\n * ```typescript\n * iter([3, 1, 4, 1, 5]).sortBy((a, b) => a - b).toArray();\n * // [1, 1, 3, 4, 5]\n * iter([3, 1, 4, 1, 5]).sortBy((a, b) => b - a).toArray();\n * // [5, 4, 3, 1, 1]\n * iter(['alice', 'bob', 'charlie']).sortBy((a, b) => a.length - b.length).toArray();\n * // ['bob', 'alice', 'charlie']\n * ```\n */\n sortBy(compareFn: (a: T, b: T) => number): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n const buffer = Array.from(self);\n buffer.sort(compareFn);\n yield* buffer;\n },\n });\n }\n\n // Terminal operations (consume the iterator)\n /**\n * Collects all elements into an array.\n * This is a terminal operation that consumes the iterator.\n *\n * @returns An array containing all elements\n * @example\n * ```typescript\n * iter([1, 2, 3]).map(x => x * 2).toArray(); // [2, 4, 6]\n * ```\n */\n toArray(): T[] {\n return Array.from(this);\n }\n\n /**\n * Counts the total number of elements in the iterator.\n * This is a terminal operation that consumes the iterator.\n *\n * @returns The total count of elements\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).count(); // 5\n * ```\n */\n count(): number {\n let count = 0;\n for (const _ of this) {\n count++;\n }\n return count;\n }\n\n // Statistical operations - type-constrained to numbers\n /**\n * Calculates the sum of all numeric elements.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @returns The sum of all elements\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).sum(); // 15\n * ```\n */\n sum(this: iterflow<number>): number {\n let total = 0;\n for (const value of this) {\n total += value;\n }\n return total;\n }\n\n /**\n * Calculates the arithmetic mean (average) of all numeric elements.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @returns The mean value, or undefined if the iterator is empty\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).mean(); // 3\n * iter([]).mean(); // undefined\n * ```\n */\n mean(this: iterflow<number>): number | undefined {\n let total = 0;\n let count = 0;\n for (const value of this) {\n total += value;\n count++;\n }\n return count === 0 ? undefined : total / count;\n }\n\n /**\n * Finds the minimum value among all numeric elements.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @returns The minimum value, or undefined if the iterator is empty\n * @example\n * ```typescript\n * iter([3, 1, 4, 1, 5]).min(); // 1\n * iter([]).min(); // undefined\n * ```\n */\n min(this: iterflow<number>): number | undefined {\n let minimum: number | undefined = undefined;\n for (const value of this) {\n if (minimum === undefined || value < minimum) {\n minimum = value;\n }\n }\n return minimum;\n }\n\n /**\n * Finds the maximum value among all numeric elements.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @returns The maximum value, or undefined if the iterator is empty\n * @example\n * ```typescript\n * iter([3, 1, 4, 1, 5]).max(); // 5\n * iter([]).max(); // undefined\n * ```\n */\n max(this: iterflow<number>): number | undefined {\n let maximum: number | undefined = undefined;\n for (const value of this) {\n if (maximum === undefined || value > maximum) {\n maximum = value;\n }\n }\n return maximum;\n }\n\n /**\n * Calculates the median value of all numeric elements.\n * The median is the middle value when elements are sorted.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @returns The median value, or undefined if the iterator is empty\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).median(); // 3\n * iter([1, 2, 3, 4]).median(); // 2.5\n * iter([]).median(); // undefined\n * ```\n */\n median(this: iterflow<number>): number | undefined {\n const values = this.toArray();\n if (values.length === 0) return undefined;\n\n values.sort((a, b) => a - b);\n const mid = Math.floor(values.length / 2);\n\n if (values.length % 2 === 0) {\n return (values[mid - 1]! + values[mid]!) / 2;\n } else {\n return values[mid]!;\n }\n }\n\n /**\n * Calculates the variance of all numeric elements.\n * Variance measures how far each number in the set is from the mean.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @returns The variance, or undefined if the iterator is empty\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).variance(); // 2\n * iter([]).variance(); // undefined\n * ```\n */\n variance(this: iterflow<number>): number | undefined {\n const values = this.toArray();\n if (values.length === 0) return undefined;\n\n const mean = values.reduce((sum, val) => sum + val, 0) / values.length;\n\n // Optimize: calculate sum of squared differences in single pass without intermediate array\n let sumSquaredDiffs = 0;\n for (let i = 0; i < values.length; i++) {\n const value = values[i]!; // Safe assertion since i is within bounds\n const diff = value - mean;\n sumSquaredDiffs += diff * diff;\n }\n\n return sumSquaredDiffs / values.length;\n }\n\n /**\n * Calculates the standard deviation of all numeric elements.\n * Standard deviation is the square root of variance and measures dispersion.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @returns The standard deviation, or undefined if the iterator is empty\n * @example\n * ```typescript\n * iter([2, 4, 4, 4, 5, 5, 7, 9]).stdDev(); // ~2\n * iter([]).stdDev(); // undefined\n * ```\n */\n stdDev(this: iterflow<number>): number | undefined {\n const variance = this.variance();\n return variance === undefined ? undefined : Math.sqrt(variance);\n }\n\n /**\n * Calculates the specified percentile of all numeric elements.\n * Uses linear interpolation between closest ranks.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @param p - The percentile to calculate (0-100)\n * @returns The percentile value, or undefined if the iterator is empty\n * @throws {Error} If p is not between 0 and 100\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).percentile(50); // 3 (median)\n * iter([1, 2, 3, 4, 5]).percentile(75); // 4\n * iter([]).percentile(50); // undefined\n * ```\n */\n percentile(this: iterflow<number>, p: number): number | undefined {\n validateRange(p, 0, 100, \"percentile\", \"percentile\");\n\n const values = this.toArray();\n if (values.length === 0) return undefined;\n\n values.sort((a, b) => a - b);\n\n if (p === 0) return values[0]!;\n if (p === 100) return values[values.length - 1]!\n\n const index = (p / 100) * (values.length - 1);\n const lower = Math.floor(index);\n const upper = Math.ceil(index);\n\n if (lower === upper) {\n return values[lower]!;\n }\n\n const weight = index - lower;\n return values[lower]! * (1 - weight) + values[upper]! * weight;\n }\n\n /**\n * Finds the most frequent value(s) in the dataset.\n * Returns an array of all values that appear most frequently.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @returns An array of the most frequent value(s), or undefined if the iterator is empty\n * @example\n * ```typescript\n * iter([1, 2, 2, 3, 3, 3]).mode(); // [3]\n * iter([1, 1, 2, 2, 3]).mode(); // [1, 2] (bimodal)\n * iter([]).mode(); // undefined\n * ```\n */\n mode(this: iterflow<number>): number[] | undefined {\n const values = this.toArray();\n if (values.length === 0) return undefined;\n\n const frequency = new Map<number, number>();\n let maxFreq = 0;\n\n for (const value of values) {\n const count = (frequency.get(value) || 0) + 1;\n frequency.set(value, count);\n maxFreq = Math.max(maxFreq, count);\n }\n\n const modes: number[] = [];\n for (const [value, freq] of frequency) {\n if (freq === maxFreq) {\n modes.push(value);\n }\n }\n\n return modes.sort((a, b) => a - b);\n }\n\n /**\n * Calculates the quartiles (Q1, Q2, Q3) of all numeric elements.\n * Q1 is the 25th percentile, Q2 is the median (50th percentile), Q3 is the 75th percentile.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @returns An object with Q1, Q2, and Q3 values, or undefined if the iterator is empty\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5, 6, 7, 8, 9]).quartiles();\n * // { Q1: 3, Q2: 5, Q3: 7 }\n * iter([]).quartiles(); // undefined\n * ```\n */\n quartiles(\n this: iterflow<number>,\n ): { Q1: number; Q2: number; Q3: number } | undefined {\n const values = this.toArray();\n if (values.length === 0) return undefined;\n\n values.sort((a, b) => a - b);\n\n const calculatePercentile = (p: number): number => {\n if (p === 0) return values[0]!;\n if (p === 100) return values[values.length - 1]!;\n\n const index = (p / 100) * (values.length - 1);\n const lower = Math.floor(index);\n const upper = Math.ceil(index);\n\n if (lower === upper) {\n return values[lower]!;\n }\n\n const weight = index - lower;\n return values[lower]! * (1 - weight) + values[upper]! * weight;\n };\n\n return {\n Q1: calculatePercentile(25),\n Q2: calculatePercentile(50),\n Q3: calculatePercentile(75),\n };\n }\n\n /**\n * Calculates the span (range from minimum to maximum value) of all numeric elements.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @returns The span (max - min), or undefined if the iterator is empty\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).span(); // 4\n * iter([10]).span(); // 0\n * iter([]).span(); // undefined\n * ```\n */\n span(this: iterflow<number>): number | undefined {\n let minimum: number | undefined = undefined;\n let maximum: number | undefined = undefined;\n\n for (const value of this) {\n if (minimum === undefined || value < minimum) {\n minimum = value;\n }\n if (maximum === undefined || value > maximum) {\n maximum = value;\n }\n }\n\n return minimum === undefined || maximum === undefined\n ? undefined\n : maximum - minimum;\n }\n\n /**\n * Calculates the product of all numeric elements.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @returns The product of all elements, or 1 if the iterator is empty\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).product(); // 120\n * iter([2, 3, 4]).product(); // 24\n * iter([]).product(); // 1\n * ```\n */\n product(this: iterflow<number>): number {\n let result = 1;\n for (const value of this) {\n result *= value;\n }\n return result;\n }\n\n /**\n * Calculates the covariance between two numeric sequences.\n * Covariance measures the joint variability of two random variables.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @param other - An iterable of numbers to compare with\n * @returns The covariance, or undefined if either sequence is empty or sequences have different lengths\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).covariance([2, 4, 6, 8, 10]); // 4\n * iter([]).covariance([1, 2, 3]); // undefined\n * ```\n */\n covariance(\n this: iterflow<number>,\n other: Iterable<number>,\n ): number | undefined {\n const values1 = this.toArray();\n const values2 = Array.from(other);\n\n if (\n values1.length === 0 ||\n values2.length === 0 ||\n values1.length !== values2.length\n ) {\n return undefined;\n }\n\n const mean1 = values1.reduce((sum, val) => sum + val, 0) / values1.length;\n const mean2 = values2.reduce((sum, val) => sum + val, 0) / values2.length;\n\n let covariance = 0;\n for (let i = 0; i < values1.length; i++) {\n covariance += (values1[i]! - mean1) * (values2[i]! - mean2);\n }\n\n return covariance / values1.length;\n }\n\n /**\n * Calculates the Pearson correlation coefficient between two numeric sequences.\n * Correlation measures the strength and direction of the linear relationship between two variables.\n * Values range from -1 (perfect negative correlation) to 1 (perfect positive correlation).\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @param other - An iterable of numbers to compare with\n * @returns The correlation coefficient, or undefined if either sequence is empty or sequences have different lengths\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).correlation([2, 4, 6, 8, 10]); // 1 (perfect positive correlation)\n * iter([1, 2, 3]).correlation([3, 2, 1]); // -1 (perfect negative correlation)\n * iter([]).correlation([1, 2, 3]); // undefined\n * ```\n */\n correlation(\n this: iterflow<number>,\n other: Iterable<number>,\n ): number | undefined {\n const values1 = this.toArray();\n const values2 = Array.from(other);\n\n if (\n values1.length === 0 ||\n values2.length === 0 ||\n values1.length !== values2.length\n ) {\n return undefined;\n }\n\n const mean1 = values1.reduce((sum, val) => sum + val, 0) / values1.length;\n const mean2 = values2.reduce((sum, val) => sum + val, 0) / values2.length;\n\n let covariance = 0;\n let variance1 = 0;\n let variance2 = 0;\n\n for (let i = 0; i < values1.length; i++) {\n const diff1 = values1[i]! - mean1;\n const diff2 = values2[i]! - mean2;\n covariance += diff1 * diff2;\n variance1 += diff1 * diff1;\n variance2 += diff2 * diff2;\n }\n\n const stdDev1 = Math.sqrt(variance1 / values1.length);\n const stdDev2 = Math.sqrt(variance2 / values2.length);\n\n if (stdDev1 === 0 || stdDev2 === 0) {\n return undefined;\n }\n\n return covariance / (values1.length * stdDev1 * stdDev2);\n }\n\n // Windowing operations\n /**\n * Creates a sliding window of the specified size over the elements.\n * Each window contains `size` consecutive elements.\n *\n * @param size - The size of each window (must be at least 1)\n * @returns A new iterflow of arrays, each containing `size` consecutive elements\n * @throws {Error} If size is less than 1\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).window(3).toArray();\n * // [[1, 2, 3], [2, 3, 4], [3, 4, 5]]\n * ```\n */\n window(size: number): iterflow<T[]> {\n validatePositiveInteger(size, \"size\", \"window\");\n\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n // Use circular buffer to avoid O(n) shift() operations\n const buffer: T[] = new Array(size);\n let count = 0;\n let index = 0;\n\n for (const value of self) {\n buffer[index] = value;\n count++;\n index = (index + 1) % size;\n\n if (count >= size) {\n // Build window array in correct order from circular buffer\n const window = new Array(size);\n for (let i = 0; i < size; i++) {\n window[i] = buffer[(index + i) % size];\n }\n yield window;\n }\n }\n },\n });\n }\n\n /**\n * Splits elements into chunks of the specified size.\n * Unlike window, chunks don't overlap. The last chunk may be smaller.\n *\n * @param size - The size of each chunk (must be at least 1)\n * @returns A new iterflow of arrays, each containing up to `size` elements\n * @throws {Error} If size is less than 1\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).chunk(2).toArray();\n * // [[1, 2], [3, 4], [5]]\n * ```\n */\n chunk(size: number): iterflow<T[]> {\n validatePositiveInteger(size, \"size\", \"chunk\");\n\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n // Preallocate buffer to avoid dynamic resizing\n let buffer: T[] = new Array(size);\n let bufferIndex = 0;\n\n for (const value of self) {\n buffer[bufferIndex++] = value;\n\n if (bufferIndex === size) {\n yield buffer;\n buffer = new Array(size);\n bufferIndex = 0;\n }\n }\n\n if (bufferIndex > 0) {\n // Slice to remove unused preallocated slots\n yield buffer.slice(0, bufferIndex);\n }\n },\n });\n }\n\n /**\n * Creates pairs of consecutive elements.\n * Equivalent to window(2) but returns tuples instead of arrays.\n *\n * @returns A new iterflow of tuples, each containing two consecutive elements\n * @example\n * ```typescript\n * iter([1, 2, 3, 4]).pairwise().toArray();\n * // [[1, 2], [2, 3], [3, 4]]\n * ```\n */\n pairwise(): iterflow<[T, T]> {\n return this.window(2).map((arr) => [arr[0]!, arr[1]!] as [T, T]);\n }\n\n // Set operations\n /**\n * Removes duplicate elements, keeping only the first occurrence of each.\n * Uses strict equality (===) to compare elements.\n *\n * @returns A new iterflow with duplicate elements removed\n * @example\n * ```typescript\n * iter([1, 2, 2, 3, 1, 4]).distinct().toArray();\n * // [1, 2, 3, 4]\n * ```\n */\n distinct(): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n const seen = new Set<T>();\n\n for (const value of self) {\n if (!seen.has(value)) {\n seen.add(value);\n yield value;\n }\n }\n },\n });\n }\n\n /**\n * Removes duplicate elements based on a key function.\n * Keeps only the first occurrence of each unique key.\n *\n * @template K The type of the key used for comparison\n * @param keyFn - Function to extract the comparison key from each element\n * @returns A new iterflow with duplicate elements (by key) removed\n * @example\n * ```typescript\n * const users = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 1, name: 'Charlie'}];\n * iter(users).distinctBy(u => u.id).toArray();\n * // [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}]\n * ```\n */\n distinctBy<K>(keyFn: (value: T) => K): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n const seenKeys = new Set<K>();\n\n for (const value of self) {\n const key = keyFn(value);\n if (!seenKeys.has(key)) {\n seenKeys.add(key);\n yield value;\n }\n }\n },\n });\n }\n\n // Utility operations\n /**\n * Executes a side-effect function on each element without modifying the stream.\n * Useful for debugging or performing operations like logging.\n *\n * @param fn - Function to execute for each element\n * @returns A new iterflow with the same elements\n * @example\n * ```typescript\n * iter([1, 2, 3])\n * .tap(x => console.log('Processing:', x))\n * .map(x => x * 2)\n * .toArray(); // logs each value, returns [2, 4, 6]\n * ```\n */\n tap(fn: (value: T) => void): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n for (const value of self) {\n fn(value);\n yield value;\n }\n },\n });\n }\n\n /**\n * Takes elements while the predicate returns true, then stops.\n * Stops at the first element that fails the predicate.\n *\n * @param predicate - Function to test each element\n * @returns A new iterflow with elements up to the first failing predicate\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 1, 2]).takeWhile(x => x < 4).toArray();\n * // [1, 2, 3]\n * ```\n */\n takeWhile(predicate: (value: T) => boolean): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n for (const value of self) {\n if (!predicate(value)) break;\n yield value;\n }\n },\n });\n }\n\n /**\n * Skips elements while the predicate returns true, then yields all remaining elements.\n * Starts yielding from the first element that fails the predicate.\n *\n * @param predicate - Function to test each element\n * @returns A new iterflow starting from the first element that fails the predicate\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 1, 2]).dropWhile(x => x < 3).toArray();\n * // [3, 4, 1, 2]\n * ```\n */\n dropWhile(predicate: (value: T) => boolean): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n let dropping = true;\n for (const value of self) {\n if (dropping && predicate(value)) {\n continue;\n }\n dropping = false;\n yield value;\n }\n },\n });\n }\n\n // Grouping operations (terminal)\n /**\n * Splits elements into two arrays based on a predicate.\n * This is a terminal operation that consumes the iterator.\n *\n * @param predicate - Function to test each element\n * @returns A tuple of two arrays: [elements passing predicate, elements failing predicate]\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).partition(x => x % 2 === 0);\n * // [[2, 4], [1, 3, 5]]\n * ```\n */\n partition(predicate: (value: T) => boolean): [T[], T[]] {\n const truthy: T[] = [];\n const falsy: T[] = [];\n\n for (const value of this) {\n if (predicate(value)) {\n truthy.push(value);\n } else {\n falsy.push(value);\n }\n }\n\n return [truthy, falsy];\n }\n\n /**\n * Groups elements by a key function into a Map.\n * This is a terminal operation that consumes the iterator.\n *\n * @template K The type of the grouping key\n * @param keyFn - Function to extract the grouping key from each element\n * @returns A Map where keys are the result of keyFn and values are arrays of elements\n * @example\n * ```typescript\n * iter(['alice', 'bob', 'charlie', 'dave'])\n * .groupBy(name => name.length);\n * // Map { 3 => ['bob'], 5 => ['alice'], 7 => ['charlie'], 4 => ['dave'] }\n * ```\n */\n groupBy<K>(keyFn: (value: T) => K): Map<K, T[]> {\n const groups = new Map<K, T[]>();\n\n for (const value of this) {\n const key = keyFn(value);\n if (!groups.has(key)) {\n groups.set(key, []);\n }\n groups.get(key)!.push(value);\n }\n\n return groups;\n }\n\n // Additional terminal operations\n /**\n * Reduces the iterator to a single value using an accumulator function.\n * This is a terminal operation that consumes the iterator.\n *\n * @template U The type of the accumulated value\n * @param fn - Function to combine the accumulator with each element\n * @param initial - The initial value for the accumulator\n * @returns The final accumulated value\n * @example\n * ```typescript\n * iter([1, 2, 3, 4]).reduce((acc, x) => acc + x, 0); // 10\n * iter(['a', 'b', 'c']).reduce((acc, x) => acc + x, ''); // 'abc'\n * ```\n */\n reduce<U>(fn: (accumulator: U, value: T) => U, initial: U): U {\n let accumulator = initial;\n for (const value of this) {\n accumulator = fn(accumulator, value);\n }\n return accumulator;\n }\n\n /**\n * Finds the first element that matches the predicate.\n * This is a terminal operation that may consume part of the iterator.\n *\n * @param predicate - Function to test each element\n * @returns The first matching element, or undefined if none found\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).find(x => x > 3); // 4\n * iter([1, 2, 3]).find(x => x > 10); // undefined\n * ```\n */\n find(predicate: (value: T) => boolean): T | undefined {\n for (const value of this) {\n if (predicate(value)) {\n return value;\n }\n }\n return undefined;\n }\n\n /**\n * Finds the index of the first element that matches the predicate.\n * This is a terminal operation that may consume part of the iterator.\n *\n * @param predicate - Function to test each element\n * @returns The index of the first matching element, or -1 if none found\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).findIndex(x => x > 3); // 3\n * iter([1, 2, 3]).findIndex(x => x > 10); // -1\n * ```\n */\n findIndex(predicate: (value: T) => boolean): number {\n let index = 0;\n for (const value of this) {\n if (predicate(value)) {\n return index;\n }\n index++;\n }\n return -1;\n }\n\n /**\n * Tests whether at least one element matches the predicate.\n * This is a terminal operation that may consume part of the iterator.\n *\n * @param predicate - Function to test each element\n * @returns true if any element matches, false otherwise\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).some(x => x > 3); // true\n * iter([1, 2, 3]).some(x => x > 10); // false\n * ```\n */\n some(predicate: (value: T) => boolean): boolean {\n for (const value of this) {\n if (predicate(value)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Tests whether all elements match the predicate.\n * This is a terminal operation that may consume part or all of the iterator.\n *\n * @param predicate - Function to test each element\n * @returns true if all elements match, false otherwise\n * @example\n * ```typescript\n * iter([2, 4, 6]).every(x => x % 2 === 0); // true\n * iter([1, 2, 3]).every(x => x % 2 === 0); // false\n * ```\n */\n every(predicate: (value: T) => boolean): boolean {\n for (const value of this) {\n if (!predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Executes a function for each element in the iterator.\n * This is a terminal operation that consumes the entire iterator.\n *\n * @param fn - Function to execute for each element\n * @example\n * ```typescript\n * iter([1, 2, 3]).forEach(x => console.log(x));\n * // Logs: 1, 2, 3\n * ```\n */\n forEach(fn: (value: T) => void): void {\n for (const value of this) {\n fn(value);\n }\n }\n\n /**\n * Gets the first element from the iterator.\n * This is a terminal operation that consumes the first element.\n *\n * @param defaultValue - Optional default value to return if iterator is empty\n * @returns The first element, the default value, or undefined if empty and no default\n * @example\n * ```typescript\n * iter([1, 2, 3]).first(); // 1\n * iter([]).first(); // undefined\n * iter([]).first(0); // 0\n * ```\n */\n first(defaultValue?: T): T | undefined {\n const result = this.source.next();\n return result.done ? defaultValue : result.value;\n }\n\n /**\n * Gets the last element from the iterator.\n * This is a terminal operation that consumes the entire iterator.\n *\n * @param defaultValue - Optional default value to return if iterator is empty\n * @returns The last element, the default value, or undefined if empty and no default\n * @example\n * ```typescript\n * iter([1, 2, 3]).last(); // 3\n * iter([]).last(); // undefined\n * iter([]).last(0); // 0\n * ```\n */\n last(defaultValue?: T): T | undefined {\n let lastValue: T | undefined = defaultValue;\n let hasValue = false;\n for (const value of this) {\n lastValue = value;\n hasValue = true;\n }\n return hasValue ? lastValue : defaultValue;\n }\n\n /**\n * Gets the element at the specified index.\n * This is a terminal operation that may consume part of the iterator.\n *\n * @param index - Zero-based index of the element to retrieve\n * @returns The element at the index, or undefined if index is out of bounds\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).nth(2); // 3\n * iter([1, 2, 3]).nth(10); // undefined\n * iter([1, 2, 3]).nth(-1); // undefined\n * ```\n */\n nth(index: number): T | undefined {\n if (index < 0) {\n return undefined;\n }\n let currentIndex = 0;\n for (const value of this) {\n if (currentIndex === index) {\n return value;\n }\n currentIndex++;\n }\n return undefined;\n }\n\n /**\n * Checks if the iterator is empty.\n * This is a terminal operation that may consume the first element.\n *\n * @returns true if the iterator has no elements, false otherwise\n * @example\n * ```typescript\n * iter([]).isEmpty(); // true\n * iter([1, 2, 3]).isEmpty(); // false\n * ```\n */\n isEmpty(): boolean {\n const result = this.source.next();\n return result.done === true;\n }\n\n /**\n * Checks if the iterator includes a specific value.\n * Uses strict equality (===) for comparison.\n * This is a terminal operation that may consume part or all of the iterator.\n *\n * @param searchValue - The value to search for\n * @returns true if the value is found, false otherwise\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).includes(3); // true\n * iter([1, 2, 3]).includes(10); // false\n * iter(['a', 'b', 'c']).includes('b'); // true\n * ```\n */\n includes(searchValue: T): boolean {\n for (const value of this) {\n if (value === searchValue) {\n return true;\n }\n }\n return false;\n }\n\n // Alias methods for compatibility\n /**\n * Alias for stdDev() method for compatibility.\n * Calculates the standard deviation of all numeric elements.\n */\n stddev(this: iterflow<number>): number | undefined {\n return this.stdDev();\n }\n\n /**\n * Alias for drop() method for compatibility.\n * Skips the first `count` elements from the iterator.\n */\n skip(count: number): iterflow<T> {\n return this.drop(count);\n }\n\n /**\n * Interleaves elements from this iterator with elements from other iterables.\n * Takes one element from each iterable in round-robin fashion.\n *\n * @param others - Variable number of iterables to interleave with\n * @returns A new iterflow with elements from all iterables interleaved\n * @example\n * ```typescript\n * iter([1, 2, 3]).interleave([4, 5, 6]).toArray(); // [1, 4, 2, 5, 3, 6]\n * ```\n */\n interleave(...others: Iterable<T>[]): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n const allIterables = [self, ...others];\n if (allIterables.length === 0) return;\n\n const iterators = allIterables.map((it) => it[Symbol.iterator]());\n const active = new Set(iterators);\n\n while (active.size > 0) {\n for (const iterator of iterators) {\n if (!active.has(iterator)) continue;\n\n const result = iterator.next();\n if (result.done) {\n active.delete(iterator);\n } else {\n yield result.value;\n }\n }\n }\n },\n });\n }\n\n /**\n * Merges this iterator with other sorted iterables into a single sorted iterator.\n * Assumes all input iterables are already sorted in ascending order.\n *\n * @param others - Variable number of sorted iterables to merge with\n * @returns A new iterflow with all elements merged in sorted order\n * @example\n * ```typescript\n * iter([1, 3, 5]).merge([2, 4, 6]).toArray(); // [1, 2, 3, 4, 5, 6]\n * ```\n */\n merge(...others: Iterable<T>[]): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n const allIterables = [self, ...others];\n if (allIterables.length === 0) return;\n\n // Default comparator for numbers/strings\n const compareFn = (a: T, b: T) => {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n };\n\n // Initialize all iterators with their first value\n const heap: Array<{\n value: T;\n iterator: Iterator<T>;\n index: number;\n }> = [];\n\n for (let i = 0; i < allIterables.length; i++) {\n const iterator = allIterables[i]![Symbol.iterator]();\n const result = iterator.next();\n if (!result.done) {\n heap.push({ value: result.value, iterator, index: i });\n }\n }\n\n // Helper to maintain min-heap property\n const bubbleDown = (index: number) => {\n const length = heap.length;\n while (true) {\n let smallest = index;\n const leftChild = 2 * index + 1;\n const rightChild = 2 * index + 2;\n\n if (\n leftChild < length &&\n compareFn(heap[leftChild]!.value, heap[smallest]!.value) < 0\n ) {\n smallest = leftChild;\n }\n\n if (\n rightChild < length &&\n compareFn(heap[rightChild]!.value, heap[smallest]!.value) < 0\n ) {\n smallest = rightChild;\n }\n\n if (smallest === index) break;\n\n // Swap elements\n const temp = heap[index]!;\n heap[index] = heap[smallest]!;\n heap[smallest] = temp;\n index = smallest;\n }\n };\n\n // Build initial heap\n for (let i = Math.floor(heap.length / 2) - 1; i >= 0; i--) {\n bubbleDown(i);\n }\n\n // Main merge loop\n while (heap.length > 0) {\n // Get minimum element\n const min = heap[0]!;\n yield min.value;\n\n // Get next value from the same iterator\n const nextResult = min.iterator.next();\n if (nextResult.done) {\n // Remove this iterator from heap\n heap[0] = heap[heap.length - 1]!;\n heap.pop();\n if (heap.length > 0) {\n bubbleDown(0);\n }\n } else {\n // Update with new value and bubble down\n heap[0]!.value = nextResult.value;\n bubbleDown(0);\n }\n }\n },\n });\n }\n}\n","import { validateRange, validatePositiveInteger, validateNonZero } from \"./validation.js\";\n\n/**\n * A fluent interface wrapper for working with async iterators and async iterables.\n * Provides chainable methods for transforming, filtering, and analyzing async data streams.\n *\n * @template T The type of elements in the async iterator\n * @example\n * ```typescript\n * const result = await new Asynciterflow(asyncIterable)\n * .filter(async x => x % 2 === 0)\n * .map(async x => x * 2)\n * .toArray(); // [4, 8]\n * ```\n */\nexport class Asynciterflow<T> implements AsyncIterable<T> {\n private source: AsyncIterator<T>;\n\n /**\n * Creates a new async iterflow instance from an async iterable or async iterator.\n *\n * @param source - The source async iterable or async iterator to wrap\n * @example\n * ```typescript\n * const flow1 = new Asynciterflow(asyncIterable);\n * const flow2 = new Asynciterflow(asyncIterator);\n * ```\n */\n constructor(source: AsyncIterable<T> | AsyncIterator<T>) {\n this.source =\n Symbol.asyncIterator in source ? source[Symbol.asyncIterator]() : source;\n }\n\n // Async Iterator protocol\n /**\n * Returns the async iterator for this iterflow instance.\n * This allows iterflow to be used in for await...of loops.\n *\n * @returns The underlying async iterator\n */\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return this.source;\n }\n\n /**\n * Retrieves the next value from the async iterator.\n *\n * @returns A promise of an IteratorResult containing the next value or indicating completion\n */\n next(): Promise<IteratorResult<T>> {\n return this.source.next();\n }\n\n // Transformation operations\n /**\n * Transforms each element using the provided async or sync function.\n *\n * @template U The type of the transformed elements\n * @param fn - Async or sync function to transform each element\n * @returns A new async iterflow with transformed elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3]).map(async x => x * 2).toArray(); // [2, 4, 6]\n * ```\n */\n map<U>(fn: (value: T) => U | Promise<U>): Asynciterflow<U> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n for await (const value of self) {\n yield await fn(value);\n }\n },\n });\n }\n\n /**\n * Filters elements based on an async or sync predicate function.\n * Only elements for which the predicate returns true are included.\n *\n * @param predicate - Async or sync function to test each element\n * @returns A new async iterflow with only elements that pass the predicate\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4]).filter(async x => x % 2 === 0).toArray(); // [2, 4]\n * ```\n */\n filter(\n predicate: (value: T) => boolean | Promise<boolean>,\n ): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n for await (const value of self) {\n if (await predicate(value)) {\n yield value;\n }\n }\n },\n });\n }\n\n /**\n * Takes only the first `limit` elements from the async iterator.\n *\n * @param limit - Maximum number of elements to take\n * @returns A new async iterflow with at most `limit` elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).take(3).toArray(); // [1, 2, 3]\n * ```\n */\n take(limit: number): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n let count = 0;\n for await (const value of self) {\n if (count >= limit) break;\n yield value;\n count++;\n }\n },\n });\n }\n\n /**\n * Skips the first `count` elements from the async iterator.\n *\n * @param count - Number of elements to skip\n * @returns A new async iterflow without the first `count` elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).drop(2).toArray(); // [3, 4, 5]\n * ```\n */\n drop(count: number): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n let dropped = 0;\n for await (const value of self) {\n if (dropped < count) {\n dropped++;\n continue;\n }\n yield value;\n }\n },\n });\n }\n\n /**\n * Maps each element to an async iterable and flattens the results.\n *\n * @template U The type of elements in the resulting iterator\n * @param fn - Async or sync function that maps each element to an async iterable\n * @returns A new async iterflow with all mapped iterables flattened\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3]).flatMap(async x => [x, x * 2]).toArray(); // [1, 2, 2, 4, 3, 6]\n * ```\n */\n flatMap<U>(\n fn: (\n value: T,\n ) =>\n | AsyncIterable<U>\n | Iterable<U>\n | Promise<AsyncIterable<U> | Iterable<U>>,\n ): Asynciterflow<U> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n for await (const value of self) {\n const result = await fn(value);\n if (Symbol.asyncIterator in result) {\n yield* result;\n } else {\n yield* result;\n }\n }\n },\n });\n }\n\n /**\n * Concatenates multiple async iterators sequentially.\n *\n * @param iterables - Additional async iterables to concatenate\n * @returns A new async iterflow with all elements from all iterables\n * @example\n * ```typescript\n * await asyncIter([1, 2]).concat([3, 4], [5, 6]).toArray();\n * // [1, 2, 3, 4, 5, 6]\n * ```\n */\n concat(\n ...iterables: Array<AsyncIterable<T> | Iterable<T>>\n ): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n yield* self;\n for (const iterable of iterables) {\n if (Symbol.asyncIterator in iterable) {\n yield* iterable;\n } else {\n yield* iterable;\n }\n }\n },\n });\n }\n\n /**\n * Inserts a separator element between each item.\n *\n * @param separator - The element to insert between items\n * @returns A new async iterflow with separators interspersed\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3]).intersperse(0).toArray();\n * // [1, 0, 2, 0, 3]\n * ```\n */\n intersperse(separator: T): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n let isFirst = true;\n for await (const value of self) {\n if (!isFirst) {\n yield separator;\n }\n yield value;\n isFirst = false;\n }\n },\n });\n }\n\n /**\n * Like reduce, but emits all intermediate accumulator values.\n *\n * @template U The type of the accumulated value\n * @param fn - Async or sync function to combine the accumulator with each element\n * @param initial - The initial value for the accumulator\n * @returns A new async iterflow of intermediate accumulator values\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4]).scan((acc, x) => acc + x, 0).toArray();\n * // [0, 1, 3, 6, 10]\n * ```\n */\n scan<U>(\n fn: (accumulator: U, value: T) => U | Promise<U>,\n initial: U,\n ): Asynciterflow<U> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n let accumulator = initial;\n yield accumulator;\n for await (const value of self) {\n accumulator = await fn(accumulator, value);\n yield accumulator;\n }\n },\n });\n }\n\n /**\n * Adds index as tuple with each element [index, value].\n *\n * @returns A new async iterflow of tuples containing [index, value]\n * @example\n * ```typescript\n * await asyncIter(['a', 'b', 'c']).enumerate().toArray();\n * // [[0, 'a'], [1, 'b'], [2, 'c']]\n * ```\n */\n enumerate(): Asynciterflow<[number, T]> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n let index = 0;\n for await (const value of self) {\n yield [index, value];\n index++;\n }\n },\n });\n }\n\n /**\n * Reverses the async iterator order.\n * Warning: This operation buffers all elements in memory.\n *\n * @returns A new async iterflow with elements in reverse order\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).reverse().toArray();\n * // [5, 4, 3, 2, 1]\n * ```\n */\n reverse(): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const buffer = await self.toArray();\n for (let i = buffer.length - 1; i >= 0; i--) {\n yield buffer[i]!;\n }\n },\n });\n }\n\n /**\n * Sorts elements using default comparison.\n * Warning: This operation buffers all elements in memory.\n *\n * @param this - async iterflow instance constrained to numbers or strings\n * @returns A new async iterflow with elements sorted\n * @example\n * ```typescript\n * await asyncIter([3, 1, 4, 1, 5]).sort().toArray();\n * // [1, 1, 3, 4, 5]\n * ```\n */\n sort(this: Asynciterflow<number | string>): Asynciterflow<number | string> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const buffer = await self.toArray();\n buffer.sort((a, b) => {\n if (typeof a === \"number\" && typeof b === \"number\") {\n return a - b;\n }\n return String(a).localeCompare(String(b));\n });\n yield* buffer;\n },\n });\n }\n\n /**\n * Sorts elements using a custom comparison function.\n * Warning: This operation buffers all elements in memory.\n *\n * @param compareFn - Function that compares two elements\n * @returns A new async iterflow with elements sorted\n * @example\n * ```typescript\n * await asyncIter([3, 1, 4, 1, 5]).sortBy((a, b) => a - b).toArray();\n * // [1, 1, 3, 4, 5]\n * ```\n */\n sortBy(compareFn: (a: T, b: T) => number): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const buffer = await self.toArray();\n buffer.sort(compareFn);\n yield* buffer;\n },\n });\n }\n\n // Terminal operations\n /**\n * Collects all elements into an array.\n * This is a terminal operation that consumes the async iterator.\n *\n * @returns A promise of an array containing all elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3]).map(async x => x * 2).toArray(); // [2, 4, 6]\n * ```\n */\n async toArray(): Promise<T[]> {\n const result: T[] = [];\n for await (const value of this) {\n result.push(value);\n }\n return result;\n }\n\n /**\n * Counts the total number of elements in the async iterator.\n * This is a terminal operation that consumes the async iterator.\n *\n * @returns A promise of the total count of elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).count(); // 5\n * ```\n */\n async count(): Promise<number> {\n let count = 0;\n for await (const _ of this) {\n count++;\n }\n return count;\n }\n\n /**\n * Executes a function for each element.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param fn - Async or sync function to execute for each element\n * @returns A promise that resolves when all elements have been processed\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3]).forEach(async x => console.log(x));\n * ```\n */\n async forEach(fn: (value: T) => void | Promise<void>): Promise<void> {\n for await (const value of this) {\n await fn(value);\n }\n }\n\n // Statistical operations\n /**\n * Calculates the sum of all numeric elements.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @returns A promise of the sum of all elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).sum(); // 15\n * ```\n */\n async sum(this: Asynciterflow<number>): Promise<number> {\n let total = 0;\n for await (const value of this) {\n total += value;\n }\n return total;\n }\n\n /**\n * Calculates the arithmetic mean (average) of all numeric elements.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @returns A promise of the mean value, or undefined if empty\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).mean(); // 3\n * ```\n */\n async mean(this: Asynciterflow<number>): Promise<number | undefined> {\n let total = 0;\n let count = 0;\n for await (const value of this) {\n total += value;\n count++;\n }\n return count === 0 ? undefined : total / count;\n }\n\n /**\n * Finds the minimum value among all numeric elements.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @returns A promise of the minimum value, or undefined if empty\n * @example\n * ```typescript\n * await asyncIter([3, 1, 4, 1, 5]).min(); // 1\n * ```\n */\n async min(this: Asynciterflow<number>): Promise<number | undefined> {\n let minimum: number | undefined = undefined;\n for await (const value of this) {\n if (minimum === undefined || value < minimum) {\n minimum = value;\n }\n }\n return minimum;\n }\n\n /**\n * Finds the maximum value among all numeric elements.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @returns A promise of the maximum value, or undefined if empty\n * @example\n * ```typescript\n * await asyncIter([3, 1, 4, 1, 5]).max(); // 5\n * ```\n */\n async max(this: Asynciterflow<number>): Promise<number | undefined> {\n let maximum: number | undefined = undefined;\n for await (const value of this) {\n if (maximum === undefined || value > maximum) {\n maximum = value;\n }\n }\n return maximum;\n }\n\n /**\n * Calculates the median value of all numeric elements.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @returns A promise of the median value, or undefined if empty\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).median(); // 3\n * ```\n */\n async median(this: Asynciterflow<number>): Promise<number | undefined> {\n const values = await this.toArray();\n if (values.length === 0) return undefined;\n\n values.sort((a, b) => a - b);\n const mid = Math.floor(values.length / 2);\n\n if (values.length % 2 === 0) {\n return (values[mid - 1]! + values[mid]!) / 2;\n } else {\n return values[mid]!;\n }\n }\n\n /**\n * Calculates the variance of all numeric elements.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @returns A promise of the variance, or undefined if empty\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).variance(); // 2\n * ```\n */\n async variance(this: Asynciterflow<number>): Promise<number | undefined> {\n const values = await this.toArray();\n if (values.length === 0) return undefined;\n\n const mean = values.reduce((sum, val) => sum + val, 0) / values.length;\n\n // Optimize: calculate sum of squared differences in single pass without intermediate array\n let sumSquaredDiffs = 0;\n for (let i = 0; i < values.length; i++) {\n const diff = values[i]! - mean;\n sumSquaredDiffs += diff * diff;\n }\n\n return sumSquaredDiffs / values.length;\n }\n\n /**\n * Calculates the standard deviation of all numeric elements.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @returns A promise of the standard deviation, or undefined if empty\n * @example\n * ```typescript\n * await asyncIter([2, 4, 4, 4, 5, 5, 7, 9]).stdDev(); // ~2\n * ```\n */\n async stdDev(this: Asynciterflow<number>): Promise<number | undefined> {\n const variance = await this.variance();\n return variance === undefined ? undefined : Math.sqrt(variance);\n }\n\n /**\n * Calculates the specified percentile of all numeric elements.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @param p - The percentile to calculate (0-100)\n * @returns A promise of the percentile value, or undefined if empty\n * @throws {Error} If p is not between 0 and 100\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).percentile(50); // 3\n * ```\n */\n async percentile(\n this: Asynciterflow<number>,\n p: number,\n ): Promise<number | undefined> {\n validateRange(p, 0, 100, \"percentile\", \"percentile\");\n\n const values = await this.toArray();\n if (values.length === 0) return undefined;\n\n values.sort((a, b) => a - b);\n\n if (p === 0) return values[0]!;\n if (p === 100) return values[values.length - 1]!\n\n const index = (p / 100) * (values.length - 1);\n const lower = Math.floor(index);\n const upper = Math.ceil(index);\n\n if (lower === upper) {\n return values[lower]!;\n }\n\n const weight = index - lower;\n return values[lower]! * (1 - weight) + values[upper]! * weight;\n }\n\n /**\n * Finds the most frequent value(s) in the dataset.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @returns A promise of an array of the most frequent value(s), or undefined if empty\n * @example\n * ```typescript\n * await asyncIter([1, 2, 2, 3, 3, 3]).mode(); // [3]\n * ```\n */\n async mode(this: Asynciterflow<number>): Promise<number[] | undefined> {\n const values = await this.toArray();\n if (values.length === 0) return undefined;\n\n const frequency = new Map<number, number>();\n let maxFreq = 0;\n\n for (const value of values) {\n const count = (frequency.get(value) || 0) + 1;\n frequency.set(value, count);\n maxFreq = Math.max(maxFreq, count);\n }\n\n const modes: number[] = [];\n for (const [value, freq] of frequency) {\n if (freq === maxFreq) {\n modes.push(value);\n }\n }\n\n return modes.sort((a, b) => a - b);\n }\n\n /**\n * Calculates the quartiles (Q1, Q2, Q3) of all numeric elements.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @returns A promise of an object with Q1, Q2, and Q3 values, or undefined if empty\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5, 6, 7, 8, 9]).quartiles();\n * // { Q1: 3, Q2: 5, Q3: 7 }\n * ```\n */\n async quartiles(\n this: Asynciterflow<number>,\n ): Promise<{ Q1: number; Q2: number; Q3: number } | undefined> {\n const values = await this.toArray();\n if (values.length === 0) return undefined;\n\n values.sort((a, b) => a - b);\n\n const calculatePercentile = (p: number): number => {\n if (p === 0) return values[0]!;\n if (p === 100) return values[values.length - 1]!;\n\n const index = (p / 100) * (values.length - 1);\n const lower = Math.floor(index);\n const upper = Math.ceil(index);\n\n if (lower === upper) {\n return values[lower]!;\n }\n\n const weight = index - lower;\n return values[lower]! * (1 - weight) + values[upper]! * weight;\n };\n\n return {\n Q1: calculatePercentile(25),\n Q2: calculatePercentile(50),\n Q3: calculatePercentile(75),\n };\n }\n\n /**\n * Calculates the span (range from minimum to maximum value).\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @returns A promise of the span (max - min), or undefined if empty\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).span(); // 4\n * ```\n */\n async span(this: Asynciterflow<number>): Promise<number | undefined> {\n let minimum: number | undefined = undefined;\n let maximum: number | undefined = undefined;\n\n for await (const value of this) {\n if (minimum === undefined || value < minimum) {\n minimum = value;\n }\n if (maximum === undefined || value > maximum) {\n maximum = value;\n }\n }\n\n return minimum === undefined || maximum === undefined\n ? undefined\n : maximum - minimum;\n }\n\n /**\n * Calculates the product of all numeric elements.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @returns A promise of the product of all elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).product(); // 120\n * ```\n */\n async product(this: Asynciterflow<number>): Promise<number> {\n let result = 1;\n for await (const value of this) {\n result *= value;\n }\n return result;\n }\n\n /**\n * Calculates the covariance between two numeric sequences.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @param other - An async iterable of numbers to compare with\n * @returns A promise of the covariance, or undefined if sequences are empty or have different lengths\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).covariance([2, 4, 6, 8, 10]); // 4\n * ```\n */\n async covariance(\n this: Asynciterflow<number>,\n other: AsyncIterable<number> | Iterable<number>,\n ): Promise<number | undefined> {\n const values1 = await this.toArray();\n const values2: number[] = [];\n\n if (Symbol.asyncIterator in other) {\n for await (const value of other) {\n values2.push(value);\n }\n } else {\n for (const value of other) {\n values2.push(value);\n }\n }\n\n if (\n values1.length === 0 ||\n values2.length === 0 ||\n values1.length !== values2.length\n ) {\n return undefined;\n }\n\n const mean1 = values1.reduce((sum, val) => sum + val, 0) / values1.length;\n const mean2 = values2.reduce((sum, val) => sum + val, 0) / values2.length;\n\n let covariance = 0;\n for (let i = 0; i < values1.length; i++) {\n covariance += (values1[i]! - mean1) * (values2[i]! - mean2);\n }\n\n return covariance / values1.length;\n }\n\n /**\n * Calculates the Pearson correlation coefficient between two numeric sequences.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @param other - An async iterable of numbers to compare with\n * @returns A promise of the correlation coefficient, or undefined if sequences are empty or have different lengths\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).correlation([2, 4, 6, 8, 10]); // 1\n * ```\n */\n async correlation(\n this: Asynciterflow<number>,\n other: AsyncIterable<number> | Iterable<number>,\n ): Promise<number | undefined> {\n const values1 = await this.toArray();\n const values2: number[] = [];\n\n if (Symbol.asyncIterator in other) {\n for await (const value of other) {\n values2.push(value);\n }\n } else {\n for (const value of other) {\n values2.push(value);\n }\n }\n\n if (\n values1.length === 0 ||\n values2.length === 0 ||\n values1.length !== values2.length\n ) {\n return undefined;\n }\n\n const mean1 = values1.reduce((sum, val) => sum + val, 0) / values1.length;\n const mean2 = values2.reduce((sum, val) => sum + val, 0) / values2.length;\n\n let covariance = 0;\n let variance1 = 0;\n let variance2 = 0;\n\n for (let i = 0; i < values1.length; i++) {\n const diff1 = values1[i]! - mean1;\n const diff2 = values2[i]! - mean2;\n covariance += diff1 * diff2;\n variance1 += diff1 * diff1;\n variance2 += diff2 * diff2;\n }\n\n const stdDev1 = Math.sqrt(variance1 / values1.length);\n const stdDev2 = Math.sqrt(variance2 / values2.length);\n\n if (stdDev1 === 0 || stdDev2 === 0) {\n return undefined;\n }\n\n return covariance / (values1.length * stdDev1 * stdDev2);\n }\n\n // Windowing operations\n /**\n * Creates a sliding window of the specified size over the elements.\n *\n * @param size - The size of each window\n * @returns A new async iterflow of arrays, each containing `size` consecutive elements\n * @throws {Error} If size is less than 1\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).window(3).toArray();\n * // [[1, 2, 3], [2, 3, 4], [3, 4, 5]]\n * ```\n */\n window(size: number): Asynciterflow<T[]> {\n validatePositiveInteger(size, \"size\", \"window\");\n\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n // Use circular buffer to avoid O(n) shift() operations\n const buffer: T[] = new Array(size);\n let count = 0;\n let index = 0;\n\n for await (const value of self) {\n buffer[index] = value;\n count++;\n index = (index + 1) % size;\n\n if (count >= size) {\n // Build window array in correct order from circular buffer\n const window = new Array(size);\n for (let i = 0; i < size; i++) {\n window[i] = buffer[(index + i) % size];\n }\n yield window;\n }\n }\n },\n });\n }\n\n /**\n * Splits elements into chunks of the specified size.\n *\n * @param size - The size of each chunk\n * @returns A new async iterflow of arrays, each containing up to `size` elements\n * @throws {Error} If size is less than 1\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).chunk(2).toArray();\n * // [[1, 2], [3, 4], [5]]\n * ```\n */\n chunk(size: number): Asynciterflow<T[]> {\n validatePositiveInteger(size, \"size\", \"chunk\");\n\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n // Preallocate buffer to avoid dynamic resizing\n let buffer: T[] = new Array(size);\n let bufferIndex = 0;\n\n for await (const value of self) {\n buffer[bufferIndex++] = value;\n\n if (bufferIndex === size) {\n yield buffer;\n buffer = new Array(size);\n bufferIndex = 0;\n }\n }\n\n if (bufferIndex > 0) {\n // Slice to remove unused preallocated slots\n yield buffer.slice(0, bufferIndex);\n }\n },\n });\n }\n\n /**\n * Creates pairs of consecutive elements.\n *\n * @returns A new async iterflow of tuples, each containing two consecutive elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4]).pairwise().toArray();\n * // [[1, 2], [2, 3], [3, 4]]\n * ```\n */\n pairwise(): Asynciterflow<[T, T]> {\n return this.window(2).map((arr) => [arr[0]!, arr[1]!] as [T, T]);\n }\n\n // Set operations\n /**\n * Removes duplicate elements, keeping only the first occurrence.\n *\n * @returns A new async iterflow with duplicate elements removed\n * @example\n * ```typescript\n * await asyncIter([1, 2, 2, 3, 1, 4]).distinct().toArray();\n * // [1, 2, 3, 4]\n * ```\n */\n distinct(): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const seen = new Set<T>();\n\n for await (const value of self) {\n if (!seen.has(value)) {\n seen.add(value);\n yield value;\n }\n }\n },\n });\n }\n\n /**\n * Removes duplicate elements based on a key function.\n *\n * @template K The type of the key used for comparison\n * @param keyFn - Async or sync function to extract the comparison key\n * @returns A new async iterflow with duplicate elements (by key) removed\n * @example\n * ```typescript\n * const users = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 1, name: 'Charlie'}];\n * await asyncIter(users).distinctBy(async u => u.id).toArray();\n * // [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}]\n * ```\n */\n distinctBy<K>(keyFn: (value: T) => K | Promise<K>): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const seenKeys = new Set<K>();\n\n for await (const value of self) {\n const key = await keyFn(value);\n if (!seenKeys.has(key)) {\n seenKeys.add(key);\n yield value;\n }\n }\n },\n });\n }\n\n // Utility operations\n /**\n * Executes a side-effect function on each element without modifying the stream.\n *\n * @param fn - Async or sync function to execute for each element\n * @returns A new async iterflow with the same elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3])\n * .tap(async x => console.log('Processing:', x))\n * .map(async x => x * 2)\n * .toArray(); // logs each value, returns [2, 4, 6]\n * ```\n */\n tap(fn: (value: T) => void | Promise<void>): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n for await (const value of self) {\n await fn(value);\n yield value;\n }\n },\n });\n }\n\n /**\n * Takes elements while the predicate returns true, then stops.\n *\n * @param predicate - Async or sync function to test each element\n * @returns A new async iterflow with elements up to the first failing predicate\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 1, 2]).takeWhile(async x => x < 4).toArray();\n * // [1, 2, 3]\n * ```\n */\n takeWhile(\n predicate: (value: T) => boolean | Promise<boolean>,\n ): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n for await (const value of self) {\n if (!(await predicate(value))) break;\n yield value;\n }\n },\n });\n }\n\n /**\n * Skips elements while the predicate returns true, then yields all remaining.\n *\n * @param predicate - Async or sync function to test each element\n * @returns A new async iterflow starting from the first element that fails the predicate\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 1, 2]).dropWhile(async x => x < 3).toArray();\n * // [3, 4, 1, 2]\n * ```\n */\n dropWhile(\n predicate: (value: T) => boolean | Promise<boolean>,\n ): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n let dropping = true;\n for await (const value of self) {\n if (dropping && (await predicate(value))) {\n continue;\n }\n dropping = false;\n yield value;\n }\n },\n });\n }\n\n // Grouping operations (terminal)\n /**\n * Splits elements into two arrays based on a predicate.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param predicate - Async or sync function to test each element\n * @returns A promise of a tuple of two arrays\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).partition(async x => x % 2 === 0);\n * // [[2, 4], [1, 3, 5]]\n * ```\n */\n async partition(\n predicate: (value: T) => boolean | Promise<boolean>,\n ): Promise<[T[], T[]]> {\n const truthy: T[] = [];\n const falsy: T[] = [];\n\n for await (const value of this) {\n if (await predicate(value)) {\n truthy.push(value);\n } else {\n falsy.push(value);\n }\n }\n\n return [truthy, falsy];\n }\n\n /**\n * Groups elements by a key function into a Map.\n * This is a terminal operation that consumes the async iterator.\n *\n * @template K The type of the grouping key\n * @param keyFn - Async or sync function to extract the grouping key\n * @returns A promise of a Map where keys are the result of keyFn and values are arrays of elements\n * @example\n * ```typescript\n * await asyncIter(['alice', 'bob', 'charlie', 'dave'])\n * .groupBy(async name => name.length);\n * // Map { 3 => ['bob'], 5 => ['alice'], 7 => ['charlie'], 4 => ['dave'] }\n * ```\n */\n async groupBy<K>(keyFn: (value: T) => K | Promise<K>): Promise<Map<K, T[]>> {\n const groups = new Map<K, T[]>();\n\n for await (const value of this) {\n const key = await keyFn(value);\n if (!groups.has(key)) {\n groups.set(key, []);\n }\n groups.get(key)!.push(value);\n }\n\n return groups;\n }\n\n // Additional terminal operations\n /**\n * Reduces the async iterator to a single value using an accumulator function.\n * This is a terminal operation that consumes the async iterator.\n *\n * @template U The type of the accumulated value\n * @param fn - Async or sync function to combine the accumulator with each element\n * @param initial - The initial value for the accumulator\n * @returns A promise of the final accumulated value\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4]).reduce(async (acc, x) => acc + x, 0); // 10\n * ```\n */\n async reduce<U>(\n fn: (accumulator: U, value: T) => U | Promise<U>,\n initial: U,\n ): Promise<U> {\n let accumulator = initial;\n for await (const value of this) {\n accumulator = await fn(accumulator, value);\n }\n return accumulator;\n }\n\n /**\n * Finds the first element that matches the predicate.\n * This is a terminal operation that may consume part of the async iterator.\n *\n * @param predicate - Async or sync function to test each element\n * @returns A promise of the first matching element, or undefined if none found\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).find(async x => x > 3); // 4\n * ```\n */\n async find(\n predicate: (value: T) => boolean | Promise<boolean>,\n ): Promise<T | undefined> {\n for await (const value of this) {\n if (await predicate(value)) {\n return value;\n }\n }\n return undefined;\n }\n\n /**\n * Finds the index of the first element that matches the predicate.\n * This is a terminal operation that may consume part of the async iterator.\n *\n * @param predicate - Async or sync function to test each element\n * @returns A promise of the index of the first matching element, or -1 if none found\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).findIndex(async x => x > 3); // 3\n * ```\n */\n async findIndex(\n predicate: (value: T) => boolean | Promise<boolean>,\n ): Promise<number> {\n let index = 0;\n for await (const value of this) {\n if (await predicate(value)) {\n return index;\n }\n index++;\n }\n return -1;\n }\n\n /**\n * Tests whether at least one element matches the predicate.\n * This is a terminal operation that may consume part of the async iterator.\n *\n * @param predicate - Async or sync function to test each element\n * @returns A promise of true if any element matches, false otherwise\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).some(async x => x > 3); // true\n * ```\n */\n async some(\n predicate: (value: T) => boolean | Promise<boolean>,\n ): Promise<boolean> {\n for await (const value of this) {\n if (await predicate(value)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Tests whether all elements match the predicate.\n * This is a terminal operation that may consume part or all of the async iterator.\n *\n * @param predicate - Async or sync function to test each element\n * @returns A promise of true if all elements match, false otherwise\n * @example\n * ```typescript\n * await asyncIter([2, 4, 6]).every(async x => x % 2 === 0); // true\n * ```\n */\n async every(\n predicate: (value: T) => boolean | Promise<boolean>,\n ): Promise<boolean> {\n for await (const value of this) {\n if (!(await predicate(value))) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Gets the first element from the async iterator.\n * This is a terminal operation that consumes the first element.\n *\n * @param defaultValue - Optional default value to return if iterator is empty\n * @returns A promise of the first element, the default value, or undefined if empty and no default\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3]).first(); // 1\n * ```\n */\n async first(defaultValue?: T): Promise<T | undefined> {\n const result = await this.source.next();\n return result.done ? defaultValue : result.value;\n }\n\n /**\n * Gets the last element from the async iterator.\n * This is a terminal operation that consumes the entire async iterator.\n *\n * @param defaultValue - Optional default value to return if iterator is empty\n * @returns A promise of the last element, the default value, or undefined if empty and no default\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3]).last(); // 3\n * ```\n */\n async last(defaultValue?: T): Promise<T | undefined> {\n let lastValue: T | undefined = defaultValue;\n let hasValue = false;\n for await (const value of this) {\n lastValue = value;\n hasValue = true;\n }\n return hasValue ? lastValue : defaultValue;\n }\n\n /**\n * Gets the element at the specified index.\n * This is a terminal operation that may consume part of the async iterator.\n *\n * @param index - Zero-based index of the element to retrieve\n * @returns A promise of the element at the index, or undefined if index is out of bounds\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).nth(2); // 3\n * ```\n */\n async nth(index: number): Promise<T | undefined> {\n if (index < 0) {\n return undefined;\n }\n let currentIndex = 0;\n for await (const value of this) {\n if (currentIndex === index) {\n return value;\n }\n currentIndex++;\n }\n return undefined;\n }\n\n /**\n * Checks if the async iterator is empty.\n * This is a terminal operation that may consume the first element.\n *\n * @returns A promise of true if the iterator has no elements, false otherwise\n * @example\n * ```typescript\n * await asyncIter([]).isEmpty(); // true\n * ```\n */\n async isEmpty(): Promise<boolean> {\n const result = await this.source.next();\n return result.done === true;\n }\n\n /**\n * Checks if the async iterator includes a specific value.\n * This is a terminal operation that may consume part or all of the async iterator.\n *\n * @param searchValue - The value to search for\n * @returns A promise of true if the value is found, false otherwise\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).includes(3); // true\n * ```\n */\n async includes(searchValue: T): Promise<boolean> {\n for await (const value of this) {\n if (value === searchValue) {\n return true;\n }\n }\n return false;\n }\n\n // Concurrent/Parallel processing operations\n /**\n * Maps elements in parallel with a concurrency limit.\n * Processes multiple elements simultaneously while respecting the concurrency limit.\n *\n * @template U The type of the transformed elements\n * @param fn - Async function to transform each element\n * @param concurrency - Maximum number of concurrent operations (default: 10)\n * @returns A new async iterflow with transformed elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5])\n * .mapParallel(async x => {\n * await sleep(100);\n * return x * 2;\n * }, 3)\n * .toArray(); // Processes 3 items at a time\n * ```\n */\n mapParallel<U>(\n fn: (value: T) => Promise<U>,\n concurrency = 10,\n ): Asynciterflow<U> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const promises: Array<Promise<{ index: number; value: U }>> = [];\n const results: Map<number, U> = new Map();\n let nextIndex = 0;\n let completedIndex = 0;\n\n for await (const value of self) {\n const currentIndex = nextIndex++;\n const promise = fn(value).then((result) => ({\n index: currentIndex,\n value: result,\n }));\n\n promises.push(promise);\n\n if (promises.length >= concurrency) {\n const completed = await Promise.race(promises);\n results.set(completed.index, completed.value);\n promises.splice(\n promises.findIndex((p) =>\n p.then((r) => r.index === completed.index),\n ),\n 1,\n );\n\n while (results.has(completedIndex)) {\n yield results.get(completedIndex)!;\n results.delete(completedIndex);\n completedIndex++;\n }\n }\n }\n\n // Process remaining promises\n while (promises.length > 0) {\n const completed = await Promise.race(promises);\n results.set(completed.index, completed.value);\n promises.splice(\n promises.findIndex((p) =>\n p.then((r) => r.index === completed.index),\n ),\n 1,\n );\n\n while (results.has(completedIndex)) {\n yield results.get(completedIndex)!;\n results.delete(completedIndex);\n completedIndex++;\n }\n }\n },\n });\n }\n\n /**\n * Filters elements in parallel with a concurrency limit.\n *\n * @param predicate - Async function to test each element\n * @param concurrency - Maximum number of concurrent operations (default: 10)\n * @returns A new async iterflow with only elements that pass the predicate\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5])\n * .filterParallel(async x => {\n * await sleep(100);\n * return x % 2 === 0;\n * }, 3)\n * .toArray(); // [2, 4]\n * ```\n */\n filterParallel(\n predicate: (value: T) => Promise<boolean>,\n concurrency = 10,\n ): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const promises: Array<\n Promise<{ index: number; value: T; keep: boolean }>\n > = [];\n const results: Map<number, { value: T; keep: boolean }> = new Map();\n let nextIndex = 0;\n let completedIndex = 0;\n\n for await (const value of self) {\n const currentIndex = nextIndex++;\n const promise = predicate(value).then((keep) => ({\n index: currentIndex,\n value,\n keep,\n }));\n\n promises.push(promise);\n\n if (promises.length >= concurrency) {\n const completed = await Promise.race(promises);\n results.set(completed.index, {\n value: completed.value,\n keep: completed.keep,\n });\n promises.splice(\n promises.findIndex((p) =>\n p.then((r) => r.index === completed.index),\n ),\n 1,\n );\n\n while (results.has(completedIndex)) {\n const result = results.get(completedIndex)!;\n if (result.keep) {\n yield result.value;\n }\n results.delete(completedIndex);\n completedIndex++;\n }\n }\n }\n\n // Process remaining promises\n while (promises.length > 0) {\n const completed = await Promise.race(promises);\n results.set(completed.index, {\n value: completed.value,\n keep: completed.keep,\n });\n promises.splice(\n promises.findIndex((p) =>\n p.then((r) => r.index === completed.index),\n ),\n 1,\n );\n\n while (results.has(completedIndex)) {\n const result = results.get(completedIndex)!;\n if (result.keep) {\n yield result.value;\n }\n results.delete(completedIndex);\n completedIndex++;\n }\n }\n },\n });\n }\n\n /**\n * FlatMaps elements in parallel with a concurrency limit.\n *\n * @template U The type of elements in the resulting iterator\n * @param fn - Async function that maps each element to an async iterable\n * @param concurrency - Maximum number of concurrent operations (default: 10)\n * @returns A new async iterflow with all mapped iterables flattened\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3])\n * .flatMapParallel(async x => [x, x * 2], 2)\n * .toArray(); // [1, 2, 2, 4, 3, 6]\n * ```\n */\n flatMapParallel<U>(\n fn: (value: T) => Promise<AsyncIterable<U> | Iterable<U>>,\n concurrency = 10,\n ): Asynciterflow<U> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const promises: Array<\n Promise<{ index: number; values: AsyncIterable<U> | Iterable<U> }>\n > = [];\n const results: Map<number, AsyncIterable<U> | Iterable<U>> = new Map();\n let nextIndex = 0;\n let completedIndex = 0;\n\n for await (const value of self) {\n const currentIndex = nextIndex++;\n const promise = fn(value).then((values) => ({\n index: currentIndex,\n values,\n }));\n\n promises.push(promise);\n\n if (promises.length >= concurrency) {\n const completed = await Promise.race(promises);\n results.set(completed.index, completed.values);\n promises.splice(\n promises.findIndex((p) =>\n p.then((r) => r.index === completed.index),\n ),\n 1,\n );\n\n while (results.has(completedIndex)) {\n const result = results.get(completedIndex)!;\n if (Symbol.asyncIterator in result) {\n yield* result;\n } else {\n yield* result;\n }\n results.delete(completedIndex);\n completedIndex++;\n }\n }\n }\n\n // Process remaining promises\n while (promises.length > 0) {\n const completed = await Promise.race(promises);\n results.set(completed.index, completed.values);\n promises.splice(\n promises.findIndex((p) =>\n p.then((r) => r.index === completed.index),\n ),\n 1,\n );\n\n while (results.has(completedIndex)) {\n const result = results.get(completedIndex)!;\n if (Symbol.asyncIterator in result) {\n yield* result;\n } else {\n yield* result;\n }\n results.delete(completedIndex);\n completedIndex++;\n }\n }\n },\n });\n }\n\n // Backpressure handling\n /**\n * Buffers elements up to a specified size.\n *\n * @param size - Maximum buffer size\n * @returns A new async iterflow with buffered elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).buffer(2).toArray();\n * // [[1, 2], [3, 4], [5]]\n * ```\n */\n buffer(size: number): Asynciterflow<T[]> {\n return this.chunk(size);\n }\n\n /**\n * Throttles the stream to emit at most one value per time interval.\n *\n * @param intervalMs - Minimum time between emissions in milliseconds\n * @returns A new async iterflow with throttled elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).throttle(100).toArray();\n * // Emits one value every 100ms\n * ```\n */\n throttle(intervalMs: number): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n let lastEmitTime = 0;\n\n for await (const value of self) {\n const now = Date.now();\n \n if (now - lastEmitTime >= intervalMs) {\n lastEmitTime = now;\n yield value;\n } else {\n const delay = intervalMs - (now - lastEmitTime);\n await new Promise((resolve) => setTimeout(resolve, delay));\n lastEmitTime = Date.now();\n yield value;\n }\n }\n },\n });\n }\n\n /**\n * Debounces the stream, only emitting values after a period of silence.\n *\n * @param waitMs - Time to wait for silence in milliseconds\n * @returns A new async iterflow with debounced elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).debounce(100).toArray();\n * // Only emits values after 100ms of no new values\n * ```\n */\n debounce(waitMs: number): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const buffer: T[] = [];\n let lastValue: T | undefined;\n let hasValue = false;\n\n for await (const value of self) {\n hasValue = true;\n lastValue = value;\n buffer.push(value);\n\n // Wait for the debounce period\n await new Promise((resolve) => setTimeout(resolve, waitMs));\n\n // If this is still the last value after waiting, emit it\n if (lastValue === value && buffer[buffer.length - 1] === value) {\n yield value;\n buffer.length = 0;\n }\n }\n\n // Emit the last value if it hasn't been emitted yet\n if (hasValue && buffer.length > 0 && lastValue !== undefined) {\n yield lastValue;\n }\n },\n });\n }\n\n // Error handling\n /**\n * Catches errors and continues with a fallback value or stream.\n *\n * @param handler - Function to handle errors and return a fallback value or async iterable\n * @returns A new async iterflow with error handling\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3])\n * .map(async x => {\n * if (x === 2) throw new Error('Error!');\n * return x;\n * })\n * .catchError(async (error) => [-1])\n * .toArray(); // [1, -1, 3]\n * ```\n */\n catchError(\n handler: (\n error: unknown,\n ) =>\n | T\n | AsyncIterable<T>\n | Iterable<T>\n | Promise<T | AsyncIterable<T> | Iterable<T>>,\n ): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n try {\n for await (const value of self) {\n yield value;\n }\n } catch (error) {\n const fallback = await handler(error);\n if (\n typeof fallback === \"object\" &&\n fallback !== null &&\n (Symbol.asyncIterator in fallback || Symbol.iterator in fallback)\n ) {\n if (Symbol.asyncIterator in fallback) {\n yield* fallback as AsyncIterable<T>;\n } else {\n yield* fallback as Iterable<T>;\n }\n } else {\n yield fallback as T;\n }\n }\n },\n });\n }\n\n /**\n * Retries failed operations a specified number of times.\n *\n * @param maxRetries - Maximum number of retry attempts\n * @param delayMs - Optional delay between retries in milliseconds\n * @returns A new async iterflow with retry logic\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3])\n * .map(async x => {\n * if (Math.random() > 0.5) throw new Error('Random error');\n * return x;\n * })\n * .retry(3, 100)\n * .toArray(); // Retries up to 3 times with 100ms delay\n * ```\n */\n retry(maxRetries: number, delayMs = 0): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const iterator = self[Symbol.asyncIterator]();\n let retryCount = 0;\n\n while (true) {\n try {\n const result = await iterator.next();\n if (result.done) break;\n yield result.value;\n retryCount = 0; // Reset retry count on success\n } catch (error) {\n if (retryCount < maxRetries) {\n retryCount++;\n if (delayMs > 0) {\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n // Don't re-throw, continue to next iteration for retry\n } else {\n throw error;\n }\n }\n }\n },\n });\n }\n\n /**\n * Handles errors for each element individually.\n *\n * @param handler - Async or sync function to handle errors for each element\n * @returns A new async iterflow with error handling\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3])\n * .map(async x => {\n * if (x === 2) throw new Error('Error!');\n * return x;\n * })\n * .onError(async (error, value) => console.error('Error:', error))\n * .toArray(); // [1, 3] (2 is skipped)\n * ```\n */\n onError(\n handler: (error: unknown, value?: T) => void | Promise<void>,\n ): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n for await (const value of self) {\n try {\n yield value;\n } catch (error) {\n await handler(error, value);\n // Continue to next element\n }\n }\n },\n });\n }\n}\n\n/**\n * Creates an async iterflow instance from an async iterable or iterable.\n * This is the main entry point for working with async iterables in a fluent API style.\n *\n * @template T The type of elements in the iterable\n * @param source - The async iterable or iterable to wrap\n * @returns A new async iterflow instance\n * @example\n * ```typescript\n * await asyncIter(asyncIterable)\n * .filter(async x => x % 2 === 0)\n * .map(async x => x * 2)\n * .toArray(); // [4, 8]\n * ```\n */\nexport function asyncIter<T>(\n source: AsyncIterable<T> | Iterable<T>,\n): Asynciterflow<T> {\n if (Symbol.asyncIterator in source) {\n return new Asynciterflow(source);\n }\n // Convert sync iterable to async iterable\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n yield* source as Iterable<T>;\n },\n });\n}\n\n// Static helper methods namespace\nexport namespace asyncIter {\n /**\n * Combines two async iterables into an async iterator of tuples.\n * Stops when the shorter iterable is exhausted.\n *\n * @template T The type of elements in the first iterable\n * @template U The type of elements in the second iterable\n * @param iter1 - The first async iterable\n * @param iter2 - The second async iterable\n * @returns A new async iterflow of tuples pairing elements from both iterables\n * @example\n * ```typescript\n * await asyncIter.zip(asyncIter1, asyncIter2).toArray();\n * // [[1, 'a'], [2, 'b'], [3, 'c']]\n * ```\n */\n export function zip<T, U>(\n iter1: AsyncIterable<T> | Iterable<T>,\n iter2: AsyncIterable<U> | Iterable<U>,\n ): Asynciterflow<[T, U]> {\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const it1 =\n Symbol.asyncIterator in iter1\n ? iter1[Symbol.asyncIterator]()\n : (async function* () {\n yield* iter1 as Iterable<T>;\n })();\n const it2 =\n Symbol.asyncIterator in iter2\n ? iter2[Symbol.asyncIterator]()\n : (async function* () {\n yield* iter2 as Iterable<U>;\n })();\n\n while (true) {\n const result1 = await it1.next();\n const result2 = await it2.next();\n\n if (result1.done || result2.done) {\n break;\n }\n\n yield [result1.value, result2.value];\n }\n },\n });\n }\n\n /**\n * Combines two async iterables using a combining function.\n * Stops when the shorter iterable is exhausted.\n *\n * @template T The type of elements in the first iterable\n * @template U The type of elements in the second iterable\n * @template R The type of the result\n * @param iter1 - The first async iterable\n * @param iter2 - The second async iterable\n * @param fn - Async or sync function to combine elements\n * @returns A new async iterflow with combined results\n * @example\n * ```typescript\n * await asyncIter.zipWith(asyncIter1, asyncIter2, async (a, b) => a + b).toArray();\n * // [11, 22, 33]\n * ```\n */\n export function zipWith<T, U, R>(\n iter1: AsyncIterable<T> | Iterable<T>,\n iter2: AsyncIterable<U> | Iterable<U>,\n fn: (a: T, b: U) => R | Promise<R>,\n ): Asynciterflow<R> {\n return zip(iter1, iter2).map(async ([a, b]) => await fn(a, b));\n }\n\n /**\n * Generates an async sequence of numbers.\n *\n * @param stop - The end value (exclusive)\n * @returns A new async iterflow of numbers\n * @example\n * ```typescript\n * await asyncIter.range(5).toArray(); // [0, 1, 2, 3, 4]\n * ```\n */\n export function range(stop: number): Asynciterflow<number>;\n export function range(start: number, stop: number): Asynciterflow<number>;\n export function range(\n start: number,\n stop: number,\n step: number,\n ): Asynciterflow<number>;\n export function range(\n startOrStop: number,\n stop?: number,\n step = 1,\n ): Asynciterflow<number> {\n const actualStart = stop === undefined ? 0 : startOrStop;\n const actualStop = stop === undefined ? startOrStop : stop;\n\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n if (step === 0) {\n validateNonZero(step, \"step\", \"range\");\n }\n\n if (step > 0) {\n for (let i = actualStart; i < actualStop; i += step) {\n yield i;\n }\n } else {\n for (let i = actualStart; i > actualStop; i += step) {\n yield i;\n }\n }\n },\n });\n }\n\n /**\n * Repeats a value a specified number of times, or infinitely.\n *\n * @template T The type of the value to repeat\n * @param value - The value to repeat\n * @param times - Optional number of times to repeat (infinite if omitted)\n * @returns A new async iterflow repeating the value\n * @example\n * ```typescript\n * await asyncIter.repeat('x', 3).toArray(); // ['x', 'x', 'x']\n * ```\n */\n export function repeat<T>(value: T, times?: number): Asynciterflow<T> {\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n if (times === undefined) {\n while (true) {\n yield value;\n }\n } else {\n for (let i = 0; i < times; i++) {\n yield value;\n }\n }\n },\n });\n }\n\n /**\n * Alternates elements from multiple async iterables in a round-robin fashion.\n *\n * @template T The type of elements in all iterables\n * @param iterables - Variable number of async iterables to interleave\n * @returns A new async iterflow with elements from all iterables interleaved\n * @example\n * ```typescript\n * await asyncIter.interleave(asyncIter1, asyncIter2).toArray();\n * // [1, 4, 2, 5, 3, 6]\n * ```\n */\n export function interleave<T>(\n ...iterables: Array<AsyncIterable<T> | Iterable<T>>\n ): Asynciterflow<T> {\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n if (iterables.length === 0) return;\n\n const iterators = iterables.map((it) =>\n Symbol.asyncIterator in it\n ? it[Symbol.asyncIterator]()\n : (async function* () {\n yield* it as Iterable<T>;\n })(),\n );\n const active = new Set(iterators);\n\n while (active.size > 0) {\n for (const iterator of iterators) {\n if (!active.has(iterator)) continue;\n\n const result = await iterator.next();\n if (result.done) {\n active.delete(iterator);\n } else {\n yield result.value;\n }\n }\n }\n },\n });\n }\n\n /**\n * Merges multiple sorted async iterables into a single sorted async iterator.\n *\n * @template T The type of elements in all iterables\n * @param iterables - Variable number of sorted async iterables to merge\n * @returns A new async iterflow with all elements merged in sorted order\n * @example\n * ```typescript\n * await asyncIter.merge(asyncIter1, asyncIter2).toArray();\n * // [1, 2, 3, 4, 5, 6]\n * ```\n */\n export function merge<T>(\n ...iterables: Array<AsyncIterable<T> | Iterable<T>>\n ): Asynciterflow<T>;\n export function merge<T>(\n compareFn: (a: T, b: T) => number,\n ...iterables: Array<AsyncIterable<T> | Iterable<T>>\n ): Asynciterflow<T>;\n export function merge<T>(\n ...args: (AsyncIterable<T> | Iterable<T> | ((a: T, b: T) => number))[]\n ): Asynciterflow<T> {\n let compareFn: (a: T, b: T) => number;\n let iterables: Array<AsyncIterable<T> | Iterable<T>>;\n\n // Check if first argument is a function (comparator)\n if (typeof args[0] === \"function\") {\n compareFn = args[0] as (a: T, b: T) => number;\n iterables = args.slice(1) as Array<AsyncIterable<T> | Iterable<T>>;\n } else {\n // Default comparator for numbers/strings\n compareFn = (a: T, b: T) => {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n };\n iterables = args as Array<AsyncIterable<T> | Iterable<T>>;\n }\n\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n if (iterables.length === 0) return;\n\n // Initialize all iterators with their first value\n const heap: Array<{\n value: T;\n iterator: AsyncIterator<T>;\n index: number;\n }> = [];\n\n for (let i = 0; i < iterables.length; i++) {\n const iterable = iterables[i]!;\n const iterator =\n Symbol.asyncIterator in iterable\n ? iterable[Symbol.asyncIterator]()\n : (async function* () {\n yield* iterable as Iterable<T>;\n })();\n\n const result = await iterator.next();\n if (!result.done) {\n heap.push({ value: result.value, iterator, index: i });\n }\n }\n\n // Helper to maintain min-heap property\n const bubbleDown = (index: number) => {\n const length = heap.length;\n while (true) {\n let smallest = index;\n const leftChild = 2 * index + 1;\n const rightChild = 2 * index + 2;\n\n if (\n leftChild < length &&\n compareFn(heap[leftChild]!.value, heap[smallest]!.value) < 0\n ) {\n smallest = leftChild;\n }\n\n if (\n rightChild < length &&\n compareFn(heap[rightChild]!.value, heap[smallest]!.value) < 0\n ) {\n smallest = rightChild;\n }\n\n if (smallest === index) break;\n\n [heap[index], heap[smallest]] = [heap[smallest]!, heap[index]!];\n index = smallest;\n }\n };\n\n // Build initial heap\n for (let i = Math.floor(heap.length / 2) - 1; i >= 0; i--) {\n bubbleDown(i);\n }\n\n // Extract minimum and refill from same iterator\n while (heap.length > 0) {\n const { value, iterator } = heap[0]!;\n yield value;\n\n const result = await iterator.next();\n if (result.done) {\n // Remove this iterator from heap\n heap[0] = heap[heap.length - 1]!;\n heap.pop();\n if (heap.length > 0) {\n bubbleDown(0);\n }\n } else {\n // Replace with next value from same iterator\n heap[0]!.value = result.value;\n bubbleDown(0);\n }\n }\n },\n });\n }\n\n /**\n * Chains multiple async iterables sequentially, one after another.\n *\n * @template T The type of elements in all iterables\n * @param iterables - Variable number of async iterables to chain\n * @returns A new async iterflow with all elements chained sequentially\n * @example\n * ```typescript\n * await asyncIter.chain(asyncIter1, asyncIter2).toArray();\n * // [1, 2, 3, 4, 5, 6]\n * ```\n */\n export function chain<T>(\n ...iterables: Array<AsyncIterable<T> | Iterable<T>>\n ): Asynciterflow<T> {\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n for (const iterable of iterables) {\n if (Symbol.asyncIterator in iterable) {\n yield* iterable;\n } else {\n yield* iterable as Iterable<T>;\n }\n }\n },\n });\n }\n\n /**\n * Creates an async iterator from a generator function.\n *\n * @template T The type of elements to generate\n * @param fn - Async generator function\n * @returns A new async iterflow\n * @example\n * ```typescript\n * const fibonacci = asyncIter.fromGenerator(async function* () {\n * let [a, b] = [0, 1];\n * while (true) {\n * yield a;\n * [a, b] = [b, a + b];\n * }\n * });\n * await fibonacci.take(10).toArray(); // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]\n * ```\n */\n export function fromGenerator<T>(\n fn: () => AsyncGenerator<T>,\n ): Asynciterflow<T> {\n return new Asynciterflow(fn());\n }\n\n /**\n * Creates an async iterator from a promise.\n *\n * @template T The type of the resolved value\n * @param promise - Promise to convert to async iterator\n * @returns A new async iterflow\n * @example\n * ```typescript\n * await asyncIter.fromPromise(fetch('/api/data').then(r => r.json())).toArray();\n * ```\n */\n export function fromPromise<T>(promise: Promise<T>): Asynciterflow<T> {\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n yield await promise;\n },\n });\n }\n\n /**\n * Creates an async iterator from an array of promises, yielding results as they resolve.\n *\n * @template T The type of the resolved values\n * @param promises - Array of promises\n * @returns A new async iterflow\n * @example\n * ```typescript\n * const promises = [fetch('/api/1'), fetch('/api/2'), fetch('/api/3')];\n * await asyncIter.fromPromises(promises).map(r => r.json()).toArray();\n * ```\n */\n export function fromPromises<T>(promises: Promise<T>[]): Asynciterflow<T> {\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const pending = new Set(promises);\n const results: Map<number, T> = new Map();\n const indexed = promises.map((p, i) => p.then((v) => ({ i, v })));\n\n while (pending.size > 0) {\n const result = await Promise.race(indexed);\n results.set(result.i, result.v);\n pending.delete(promises[result.i]!);\n\n // Yield in order\n let nextIndex = promises.length - pending.size - 1;\n while (results.has(nextIndex)) {\n yield results.get(nextIndex)!;\n results.delete(nextIndex);\n nextIndex++;\n }\n }\n },\n });\n }\n}\n","/**\n * Debug mode and operation tracing utilities for iterflow\n * @module debug\n */\n\n/**\n * Trace entry representing a single operation execution\n */\nexport interface TraceEntry {\n operation: string;\n timestamp: number;\n input?: unknown;\n output?: unknown;\n error?: Error;\n duration?: number;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Debug configuration options\n */\nexport interface DebugConfig {\n enabled: boolean;\n traceOperations: boolean;\n traceInput: boolean;\n traceOutput: boolean;\n logToConsole: boolean;\n maxTraceEntries?: number;\n}\n\n/**\n * Global debug state\n */\nclass DebugState {\n private config: DebugConfig = {\n enabled: false,\n traceOperations: false,\n traceInput: false,\n traceOutput: false,\n logToConsole: false,\n maxTraceEntries: 1000,\n };\n\n private traces: TraceEntry[] = [];\n\n /**\n * Enable debug mode with optional configuration\n */\n enable(config?: Partial<DebugConfig>): void {\n this.config = {\n ...this.config,\n enabled: true,\n traceOperations: true,\n ...config,\n };\n\n if (this.config.logToConsole) {\n console.log(\"[iterflow Debug] Debug mode enabled\", this.config);\n }\n }\n\n /**\n * Disable debug mode\n */\n disable(): void {\n this.config.enabled = false;\n this.config.traceOperations = false;\n\n if (this.config.logToConsole) {\n console.log(\"[iterflow Debug] Debug mode disabled\");\n }\n }\n\n /**\n * Check if debug mode is enabled\n */\n isEnabled(): boolean {\n return this.config.enabled;\n }\n\n /**\n * Get current configuration\n */\n getConfig(): Readonly<DebugConfig> {\n return { ...this.config };\n }\n\n /**\n * Add a trace entry\n */\n trace(entry: TraceEntry): void {\n if (!this.config.traceOperations) {\n return;\n }\n\n // Limit trace entries to prevent memory issues\n if (this.traces.length >= (this.config.maxTraceEntries || 1000)) {\n this.traces.shift(); // Remove oldest entry\n }\n\n this.traces.push(entry);\n\n if (this.config.logToConsole) {\n this.logTrace(entry);\n }\n }\n\n /**\n * Get all trace entries\n */\n getTraces(): readonly TraceEntry[] {\n return [...this.traces];\n }\n\n /**\n * Clear all traces\n */\n clearTraces(): void {\n this.traces = [];\n\n if (this.config.logToConsole) {\n console.log(\"[iterflow Debug] Traces cleared\");\n }\n }\n\n /**\n * Get traces for a specific operation\n */\n getTracesForOperation(operation: string): TraceEntry[] {\n return this.traces.filter((t) => t.operation === operation);\n }\n\n /**\n * Get summary statistics for traces\n */\n getTraceSummary(): Record<\n string,\n { count: number; avgDuration: number; errors: number }\n > {\n const summary: Record<\n string,\n { count: number; totalDuration: number; errors: number }\n > = {};\n\n for (const trace of this.traces) {\n if (!summary[trace.operation]) {\n summary[trace.operation] = { count: 0, totalDuration: 0, errors: 0 };\n }\n\n const operationSummary = summary[trace.operation]!;\n operationSummary.count++;\n\n if (trace.duration !== undefined) {\n operationSummary.totalDuration += trace.duration;\n }\n\n if (trace.error) {\n operationSummary.errors++;\n }\n }\n\n // Convert to final format with average duration\n const result: Record<\n string,\n { count: number; avgDuration: number; errors: number }\n > = {};\n\n for (const [op, stats] of Object.entries(summary)) {\n result[op] = {\n count: stats.count,\n avgDuration: stats.count > 0 ? stats.totalDuration / stats.count : 0,\n errors: stats.errors,\n };\n }\n\n return result;\n }\n\n /**\n * Log a trace entry to console\n */\n private logTrace(entry: TraceEntry): void {\n const timestamp = new Date(entry.timestamp).toISOString();\n const duration =\n entry.duration !== undefined ? `${entry.duration.toFixed(2)}ms` : \"N/A\";\n\n if (entry.error) {\n console.error(\n `[iterflow Debug] ${timestamp} | ${entry.operation} | ERROR | ${duration}`,\n entry.error,\n );\n } else {\n console.log(\n `[iterflow Debug] ${timestamp} | ${entry.operation} | ${duration}`,\n );\n\n if (this.config.traceInput && entry.input !== undefined) {\n console.log(\" Input:\", entry.input);\n }\n\n if (this.config.traceOutput && entry.output !== undefined) {\n console.log(\" Output:\", entry.output);\n }\n\n if (entry.metadata) {\n console.log(\" Metadata:\", entry.metadata);\n }\n }\n }\n}\n\n// Global debug instance\nconst debugState = new DebugState();\n\n/**\n * Enable debug mode\n */\nexport function enableDebug(config?: Partial<DebugConfig>): void {\n debugState.enable(config);\n}\n\n/**\n * Disable debug mode\n */\nexport function disableDebug(): void {\n debugState.disable();\n}\n\n/**\n * Check if debug mode is enabled\n */\nexport function isDebugEnabled(): boolean {\n return debugState.isEnabled();\n}\n\n/**\n * Get debug configuration\n */\nexport function getDebugConfig(): Readonly<DebugConfig> {\n return debugState.getConfig();\n}\n\n/**\n * Add a trace entry\n */\nexport function addTrace(entry: TraceEntry): void {\n debugState.trace(entry);\n}\n\n/**\n * Get all trace entries\n */\nexport function getTraces(): readonly TraceEntry[] {\n return debugState.getTraces();\n}\n\n/**\n * Clear all traces\n */\nexport function clearTraces(): void {\n debugState.clearTraces();\n}\n\n/**\n * Get traces for a specific operation\n */\nexport function getTracesForOperation(operation: string): TraceEntry[] {\n return debugState.getTracesForOperation(operation);\n}\n\n/**\n * Get trace summary statistics\n */\nexport function getTraceSummary(): Record<\n string,\n { count: number; avgDuration: number; errors: number }\n> {\n return debugState.getTraceSummary();\n}\n\n/**\n * Wrapper function to trace operation execution\n */\nexport function traceOperation<T>(\n operation: string,\n fn: () => T,\n metadata?: Record<string, unknown>,\n): T {\n if (!debugState.isEnabled()) {\n return fn();\n }\n\n const startTime = performance.now();\n const timestamp = Date.now();\n\n try {\n const result = fn();\n const duration = performance.now() - startTime;\n\n debugState.trace({\n operation,\n timestamp,\n duration,\n output: debugState.getConfig().traceOutput ? result : undefined,\n metadata,\n });\n\n return result;\n } catch (error) {\n const duration = performance.now() - startTime;\n\n debugState.trace({\n operation,\n timestamp,\n duration,\n error: error as Error,\n metadata,\n });\n\n throw error;\n }\n}\n\n/**\n * Async version of traceOperation\n */\nexport async function traceOperationAsync<T>(\n operation: string,\n fn: () => Promise<T>,\n metadata?: Record<string, unknown>,\n): Promise<T> {\n if (!debugState.isEnabled()) {\n return fn();\n }\n\n const startTime = performance.now();\n const timestamp = Date.now();\n\n try {\n const result = await fn();\n const duration = performance.now() - startTime;\n\n debugState.trace({\n operation,\n timestamp,\n duration,\n output: debugState.getConfig().traceOutput ? result : undefined,\n metadata,\n });\n\n return result;\n } catch (error) {\n const duration = performance.now() - startTime;\n\n debugState.trace({\n operation,\n timestamp,\n duration,\n error: error as Error,\n metadata,\n });\n\n throw error;\n }\n}\n","/**\n * Error recovery utilities for iterflow\n * @module recovery\n */\n\nimport { OperationError } from \"./errors.js\";\n\n/**\n * Error handler function type\n */\nexport type ErrorHandler<T, R = T> = (\n error: Error,\n element?: T,\n index?: number,\n) => R;\n\n/**\n * Options for retry behavior\n */\nexport interface RetryOptions {\n maxAttempts?: number;\n delay?: number;\n backoff?: boolean;\n onRetry?: (attempt: number, error: Error) => void;\n}\n\n/**\n * Wraps a function with error recovery\n */\nexport function withErrorRecovery<T, R>(\n fn: (value: T, index?: number) => R,\n errorHandler: ErrorHandler<T, R>,\n): (value: T, index?: number) => R {\n return (value: T, index?: number): R => {\n try {\n return fn(value, index);\n } catch (error) {\n return errorHandler(error as Error, value, index);\n }\n };\n}\n\n/**\n * Wraps a function with retry logic\n */\nexport function withRetry<T extends any[], R>(\n fn: (...args: T) => R,\n options: RetryOptions = {},\n): (...args: T) => R {\n const { maxAttempts = 3, delay = 0, backoff = false, onRetry } = options;\n\n return (...args: T): R => {\n let lastError: Error;\n let currentDelay = delay;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return fn(...args);\n } catch (error) {\n lastError = error as Error;\n\n if (attempt < maxAttempts) {\n if (onRetry) {\n onRetry(attempt, lastError);\n }\n\n if (currentDelay > 0) {\n // Synchronous delay (note: this blocks, use with caution)\n const start = Date.now();\n while (Date.now() - start < currentDelay) {\n // busy wait\n }\n }\n\n if (backoff) {\n currentDelay *= 2;\n }\n }\n }\n }\n\n throw new OperationError(\n `Operation failed after ${maxAttempts} attempts`,\n \"retry\",\n lastError!,\n );\n };\n}\n\n/**\n * Async version of withRetry\n */\nexport function withRetryAsync<T extends any[], R>(\n fn: (...args: T) => Promise<R>,\n options: RetryOptions = {},\n): (...args: T) => Promise<R> {\n const { maxAttempts = 3, delay = 0, backoff = false, onRetry } = options;\n\n return async (...args: T): Promise<R> => {\n let lastError: Error;\n let currentDelay = delay;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return await fn(...args);\n } catch (error) {\n lastError = error as Error;\n\n if (attempt < maxAttempts) {\n if (onRetry) {\n onRetry(attempt, lastError);\n }\n\n if (currentDelay > 0) {\n await new Promise((resolve) => setTimeout(resolve, currentDelay));\n }\n\n if (backoff) {\n currentDelay *= 2;\n }\n }\n }\n }\n\n throw new OperationError(\n `Operation failed after ${maxAttempts} attempts`,\n \"retry\",\n lastError!,\n );\n };\n}\n\n/**\n * Returns a default value if an error occurs\n */\nexport function withDefault<T, R>(\n fn: (value: T) => R,\n defaultValue: R,\n): (value: T) => R {\n return (value: T): R => {\n try {\n return fn(value);\n } catch {\n return defaultValue;\n }\n };\n}\n\n/**\n * Returns undefined if an error occurs (swallows errors)\n */\nexport function tryOr<T, R>(fn: (value: T) => R, fallback: R): (value: T) => R {\n return (value: T): R => {\n try {\n return fn(value);\n } catch {\n return fallback;\n }\n };\n}\n\n/**\n * Executes a function and returns [result, error] tuple\n */\nexport function tryCatch<T, R>(\n fn: (value: T) => R,\n value: T,\n): [R | undefined, Error | undefined] {\n try {\n return [fn(value), undefined];\n } catch (error) {\n return [undefined, error as Error];\n }\n}\n\n/**\n * Async version of tryCatch\n */\nexport async function tryCatchAsync<T, R>(\n fn: (value: T) => Promise<R>,\n value: T,\n): Promise<[R | undefined, Error | undefined]> {\n try {\n return [await fn(value), undefined];\n } catch (error) {\n return [undefined, error as Error];\n }\n}\n\n/**\n * Result type for safe operations\n */\nexport type Result<T, E = Error> =\n | { success: true; value: T }\n | { success: false; error: E };\n\n/**\n * Wraps a function to return a Result type\n */\nexport function toResult<T, R>(fn: (value: T) => R): (value: T) => Result<R> {\n return (value: T): Result<R> => {\n try {\n return { success: true, value: fn(value) };\n } catch (error) {\n return { success: false, error: error as Error };\n }\n };\n}\n\n/**\n * Async version of toResult\n */\nexport function toResultAsync<T, R>(\n fn: (value: T) => Promise<R>,\n): (value: T) => Promise<Result<R>> {\n return async (value: T): Promise<Result<R>> => {\n try {\n return { success: true, value: await fn(value) };\n } catch (error) {\n return { success: false, error: error as Error };\n }\n };\n}\n\n/**\n * Guards a predicate function to return false on error instead of throwing\n */\nexport function safePredicate<T>(\n predicate: (value: T, index?: number) => boolean,\n defaultValue = false,\n): (value: T, index?: number) => boolean {\n return (value: T, index?: number): boolean => {\n try {\n return predicate(value, index);\n } catch {\n return defaultValue;\n }\n };\n}\n\n/**\n * Guards a comparator function to handle errors gracefully\n */\nexport function safeComparator<T>(\n comparator: (a: T, b: T) => number,\n defaultComparison = 0,\n): (a: T, b: T) => number {\n return (a: T, b: T): number => {\n try {\n return comparator(a, b);\n } catch {\n return defaultComparison;\n }\n };\n}\n\n/**\n * Creates an error boundary that catches and logs errors\n */\nexport function errorBoundary<T extends any[], R>(\n fn: (...args: T) => R,\n options: {\n onError?: (error: Error, args: T) => void;\n rethrow?: boolean;\n defaultValue?: R;\n } = {},\n): (...args: T) => R | undefined {\n const { onError, rethrow = true, defaultValue } = options;\n\n return (...args: T): R | undefined => {\n try {\n return fn(...args);\n } catch (error) {\n if (onError) {\n onError(error as Error, args);\n }\n\n if (rethrow) {\n throw error;\n }\n\n return defaultValue;\n }\n };\n}\n","/**\n * Deprecation warnings system for iterflow\n *\n * This module provides utilities for marking APIs as deprecated and emitting\n * warnings to help users migrate away from deprecated functionality.\n *\n * @module deprecation\n */\n\n/**\n * Configuration options for deprecation warnings\n */\nexport interface DeprecationConfig {\n /** Whether to show deprecation warnings (default: true in development, false in production) */\n enabled: boolean;\n /** Whether to show stack traces with warnings (default: false) */\n showStackTrace: boolean;\n /** Custom handler for deprecation warnings */\n handler?: (warning: DeprecationWarning) => void;\n}\n\n/**\n * Information about a deprecated API\n */\nexport interface DeprecationWarning {\n /** The deprecated feature name */\n feature: string;\n /** Version when it was deprecated */\n since: string;\n /** Version when it will be removed (if known) */\n removeIn?: string;\n /** Alternative to use instead */\n alternative?: string;\n /** Additional message with migration guidance */\n message?: string;\n /** Stack trace (if enabled) */\n stack?: string;\n}\n\n/**\n * Global deprecation configuration\n */\nlet config: DeprecationConfig = {\n enabled:\n typeof process !== \"undefined\" && process.env.NODE_ENV !== \"production\",\n showStackTrace: false,\n};\n\n/**\n * Set of features that have already shown a warning (to avoid duplicate warnings)\n */\nconst warnedFeatures = new Set<string>();\n\n/**\n * Configure the deprecation warning system\n *\n * @param options - Configuration options to update\n * @example\n * ```typescript\n * // Disable all deprecation warnings\n * configureDeprecation({ enabled: false });\n *\n * // Enable stack traces\n * configureDeprecation({ showStackTrace: true });\n *\n * // Use custom handler\n * configureDeprecation({\n * handler: (warning) => {\n * logger.warn(`Deprecated: ${warning.feature}`, warning);\n * }\n * });\n * ```\n */\nexport function configureDeprecation(\n options: Partial<DeprecationConfig>,\n): void {\n config = { ...config, ...options };\n}\n\n/**\n * Get current deprecation configuration\n *\n * @returns Current deprecation configuration\n */\nexport function getDeprecationConfig(): Readonly<DeprecationConfig> {\n return { ...config };\n}\n\n/**\n * Clear the set of warned features (mainly for testing)\n */\nexport function clearDeprecationWarnings(): void {\n warnedFeatures.clear();\n}\n\n/**\n * Emit a deprecation warning (internal implementation)\n *\n * @param warning - The deprecation warning to emit\n */\nfunction emitWarning(warning: DeprecationWarning): void {\n if (!config.enabled) return;\n\n // Only warn once per feature\n if (warnedFeatures.has(warning.feature)) return;\n warnedFeatures.add(warning.feature);\n\n // Use custom handler if provided\n if (config.handler) {\n config.handler(warning);\n return;\n }\n\n // Build warning message\n let message = `[iterflow] DEPRECATED: ${warning.feature} has been deprecated since v${warning.since}`;\n\n if (warning.removeIn) {\n message += ` and will be removed in v${warning.removeIn}`;\n }\n\n if (warning.alternative) {\n message += `\\nPlease use ${warning.alternative} instead.`;\n }\n\n if (warning.message) {\n message += `\\n${warning.message}`;\n }\n\n // Emit the warning\n if (typeof process !== \"undefined\" && process.emitWarning) {\n // Node.js environment\n const options: any = {\n type: \"DeprecationWarning\",\n code: \"ITERFLOW_DEPRECATION\",\n detail: warning.message,\n };\n\n process.emitWarning(message, options);\n } else {\n // Browser or other environment\n console.warn(message);\n }\n\n // Show stack trace if enabled\n if (config.showStackTrace && warning.stack) {\n console.warn(\"Stack trace:\", warning.stack);\n }\n}\n\n/**\n * Mark a feature as deprecated and emit a warning when called\n *\n * @param options - Deprecation warning details\n * @example\n * ```typescript\n * // In your code\n * function oldMethod() {\n * deprecate({\n * feature: 'oldMethod()',\n * since: '0.9.0',\n * removeIn: '2.0.0',\n * alternative: 'newMethod()',\n * message: 'See migration guide: https://...'\n * });\n *\n * // ... implementation\n * }\n * ```\n */\nexport function deprecate(options: Omit<DeprecationWarning, \"stack\">): void {\n const warning: DeprecationWarning = {\n ...options,\n stack: config.showStackTrace ? new Error().stack : undefined,\n };\n\n emitWarning(warning);\n}\n\n/**\n * Decorator to mark a method or function as deprecated\n *\n * @param options - Deprecation warning details\n * @returns Decorator function\n * @example\n * ```typescript\n * class MyClass {\n * @deprecated({\n * feature: 'MyClass.oldMethod',\n * since: '0.9.0',\n * alternative: 'MyClass.newMethod'\n * })\n * oldMethod() {\n * // implementation\n * }\n * }\n * ```\n */\nexport function deprecated(\n options: Omit<DeprecationWarning, \"stack\" | \"feature\">,\n) {\n return function <T extends Function>(\n target: any,\n propertyKey: string,\n descriptor: TypedPropertyDescriptor<T>,\n ): TypedPropertyDescriptor<T> | void {\n const originalMethod = descriptor.value;\n\n if (!originalMethod) return;\n\n const className = target.constructor?.name || \"Object\";\n const feature = `${className}.${propertyKey}`;\n\n descriptor.value = function (this: any, ...args: any[]) {\n deprecate({ ...options, feature });\n return originalMethod.apply(this, args);\n } as any;\n\n return descriptor;\n };\n}\n\n/**\n * Create a wrapper function that marks the original function as deprecated\n *\n * @param fn - The function to wrap\n * @param options - Deprecation warning details\n * @returns Wrapped function that emits deprecation warning\n * @example\n * ```typescript\n * const oldFunction = deprecatedFunction(\n * (x: number) => x * 2,\n * {\n * feature: 'oldFunction',\n * since: '0.9.0',\n * alternative: 'newFunction'\n * }\n * );\n * ```\n */\nexport function deprecatedFunction<T extends (...args: any[]) => any>(\n fn: T,\n options: Omit<DeprecationWarning, \"stack\">,\n): T {\n return function (this: any, ...args: any[]) {\n deprecate(options);\n return fn.apply(this, args);\n } as T;\n}\n\n/**\n * Check if a feature has been marked as deprecated (for testing)\n *\n * @param feature - The feature name to check\n * @returns True if the feature has been warned about\n */\nexport function hasDeprecationWarning(feature: string): boolean {\n return warnedFeatures.has(feature);\n}\n","import { iterflow } from \"./iter-flow.js\";\nimport { validateNonZero } from \"./validation.js\";\n\n/**\n * Creates an iterflow instance from an iterable.\n * This is the main entry point for working with iterables in a fluent API style.\n *\n * @template T The type of elements in the iterable\n * @param source - The iterable to wrap\n * @returns A new iterflow instance\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5])\n * .filter(x => x % 2 === 0)\n * .map(x => x * 2)\n * .toArray(); // [4, 8]\n * ```\n */\nexport function iter<T>(source: Iterable<T>): iterflow<T> {\n return new iterflow(source);\n}\n\n// Static helper methods namespace\nexport namespace iter {\n /**\n * Combines two iterables into an iterator of tuples.\n * Stops when the shorter iterable is exhausted.\n *\n * @template T The type of elements in the first iterable\n * @template U The type of elements in the second iterable\n * @param iter1 - The first iterable\n * @param iter2 - The second iterable\n * @returns A new iterflow of tuples pairing elements from both iterables\n * @example\n * ```typescript\n * iter.zip([1, 2, 3], ['a', 'b', 'c']).toArray();\n * // [[1, 'a'], [2, 'b'], [3, 'c']]\n * ```\n */\n export function zip<T, U>(\n iter1: Iterable<T>,\n iter2: Iterable<U>,\n ): iterflow<[T, U]> {\n return new iterflow({\n *[Symbol.iterator]() {\n const it1 = iter1[Symbol.iterator]();\n const it2 = iter2[Symbol.iterator]();\n\n while (true) {\n const result1 = it1.next();\n const result2 = it2.next();\n\n if (result1.done || result2.done) {\n break;\n }\n\n yield [result1.value, result2.value];\n }\n },\n });\n }\n\n /**\n * Combines two iterables using a combining function.\n * Stops when the shorter iterable is exhausted.\n *\n * @template T The type of elements in the first iterable\n * @template U The type of elements in the second iterable\n * @template R The type of the result\n * @param iter1 - The first iterable\n * @param iter2 - The second iterable\n * @param fn - Function to combine elements from both iterables\n * @returns A new iterflow with combined results\n * @example\n * ```typescript\n * iter.zipWith([1, 2, 3], [10, 20, 30], (a, b) => a + b).toArray();\n * // [11, 22, 33]\n * ```\n */\n export function zipWith<T, U, R>(\n iter1: Iterable<T>,\n iter2: Iterable<U>,\n fn: (a: T, b: U) => R,\n ): iterflow<R> {\n return zip(iter1, iter2).map(([a, b]) => fn(a, b));\n }\n\n /**\n * Generates a sequence of numbers.\n * Supports three call signatures:\n * - range(stop): generates [0, stop) with step 1\n * - range(start, stop): generates [start, stop) with step 1\n * - range(start, stop, step): generates [start, stop) with custom step\n *\n * @param stop - The end value (exclusive) when called with one argument\n * @returns A new iterflow of numbers\n * @throws {Error} If step is zero\n * @example\n * ```typescript\n * iter.range(5).toArray(); // [0, 1, 2, 3, 4]\n * iter.range(2, 5).toArray(); // [2, 3, 4]\n * iter.range(0, 10, 2).toArray(); // [0, 2, 4, 6, 8]\n * iter.range(5, 0, -1).toArray(); // [5, 4, 3, 2, 1]\n * ```\n */\n export function range(stop: number): iterflow<number>;\n /**\n * Generates a sequence of numbers from start to stop (exclusive).\n *\n * @param start - The starting value (inclusive)\n * @param stop - The end value (exclusive)\n * @returns A new iterflow of numbers\n */\n export function range(start: number, stop: number): iterflow<number>;\n /**\n * Generates a sequence of numbers from start to stop (exclusive) with a custom step.\n *\n * @param start - The starting value (inclusive)\n * @param stop - The end value (exclusive)\n * @param step - The increment between values\n * @returns A new iterflow of numbers\n */\n export function range(\n start: number,\n stop: number,\n step: number,\n ): iterflow<number>;\n export function range(\n startOrStop: number,\n stop?: number,\n step = 1,\n ): iterflow<number> {\n const actualStart = stop === undefined ? 0 : startOrStop;\n const actualStop = stop === undefined ? startOrStop : stop;\n\n return new iterflow({\n *[Symbol.iterator]() {\n validateNonZero(step, \"step\", \"range\");\n\n if (step > 0) {\n for (let i = actualStart; i < actualStop; i += step) {\n yield i;\n }\n } else {\n for (let i = actualStart; i > actualStop; i += step) {\n yield i;\n }\n }\n },\n });\n }\n\n /**\n * Repeats a value a specified number of times, or infinitely.\n * If times is not specified, creates an infinite iterator.\n *\n * @template T The type of the value to repeat\n * @param value - The value to repeat\n * @param times - Optional number of times to repeat (infinite if omitted)\n * @returns A new iterflow repeating the value\n * @example\n * ```typescript\n * iter.repeat('x', 3).toArray(); // ['x', 'x', 'x']\n * iter.repeat(0, 5).toArray(); // [0, 0, 0, 0, 0]\n * iter.repeat(1).take(3).toArray(); // [1, 1, 1] (infinite, limited by take)\n * ```\n */\n export function repeat<T>(value: T, times?: number): iterflow<T> {\n return new iterflow({\n *[Symbol.iterator]() {\n if (times === undefined) {\n while (true) {\n yield value;\n }\n } else {\n for (let i = 0; i < times; i++) {\n yield value;\n }\n }\n },\n });\n }\n\n /**\n * Alternates elements from multiple iterables in a round-robin fashion.\n * Continues until all iterables are exhausted.\n *\n * @template T The type of elements in all iterables\n * @param iterables - Variable number of iterables to interleave\n * @returns A new iterflow with elements from all iterables interleaved\n * @example\n * ```typescript\n * iter.interleave([1, 2, 3], [4, 5, 6]).toArray();\n * // [1, 4, 2, 5, 3, 6]\n * iter.interleave([1, 2], [3, 4, 5], [6]).toArray();\n * // [1, 3, 6, 2, 4, 5]\n * ```\n */\n export function interleave<T>(...iterables: Iterable<T>[]): iterflow<T> {\n return new iterflow({\n *[Symbol.iterator]() {\n if (iterables.length === 0) return;\n\n const iterators = iterables.map((it) => it[Symbol.iterator]());\n const active = new Set(iterators);\n\n while (active.size > 0) {\n for (const iterator of iterators) {\n if (!active.has(iterator)) continue;\n\n const result = iterator.next();\n if (result.done) {\n active.delete(iterator);\n } else {\n yield result.value;\n }\n }\n }\n },\n });\n }\n\n /**\n * Merges multiple sorted iterables into a single sorted iterator.\n * Assumes input iterables are already sorted in ascending order.\n * Uses a custom comparator if provided, otherwise uses default < comparison.\n *\n * @template T The type of elements in all iterables\n * @param iterables - Variable number of sorted iterables to merge\n * @param compareFn - Optional comparison function (returns negative if a < b, positive if a > b, 0 if equal)\n * @returns A new iterflow with all elements merged in sorted order\n * @example\n * ```typescript\n * iter.merge([1, 3, 5], [2, 4, 6]).toArray();\n * // [1, 2, 3, 4, 5, 6]\n * iter.merge([1, 5, 9], [2, 6, 10], [3, 7, 11]).toArray();\n * // [1, 2, 3, 5, 6, 7, 9, 10, 11]\n * ```\n */\n export function merge<T>(...iterables: Iterable<T>[]): iterflow<T>;\n export function merge<T>(\n compareFn: (a: T, b: T) => number,\n ...iterables: Iterable<T>[]\n ): iterflow<T>;\n export function merge<T>(\n ...args: (Iterable<T> | ((a: T, b: T) => number))[]\n ): iterflow<T> {\n let compareFn: (a: T, b: T) => number;\n let iterables: Iterable<T>[];\n\n // Check if first argument is a function (comparator)\n if (typeof args[0] === \"function\") {\n compareFn = args[0] as (a: T, b: T) => number;\n iterables = args.slice(1) as Iterable<T>[];\n } else {\n // Default comparator for numbers/strings\n compareFn = (a: T, b: T) => {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n };\n iterables = args as Iterable<T>[];\n }\n\n return new iterflow({\n *[Symbol.iterator]() {\n if (iterables.length === 0) return;\n\n // Initialize all iterators with their first value\n const heap: Array<{\n value: T;\n iterator: Iterator<T>;\n index: number;\n }> = [];\n\n for (let i = 0; i < iterables.length; i++) {\n const iterator = iterables[i]![Symbol.iterator]();\n const result = iterator.next();\n if (!result.done) {\n heap.push({ value: result.value, iterator, index: i });\n }\n }\n\n // Helper to maintain min-heap property\n const bubbleDown = (index: number) => {\n const length = heap.length;\n while (true) {\n let smallest = index;\n const leftChild = 2 * index + 1;\n const rightChild = 2 * index + 2;\n\n if (\n leftChild < length &&\n compareFn(heap[leftChild]!.value, heap[smallest]!.value) < 0\n ) {\n smallest = leftChild;\n }\n\n if (\n rightChild < length &&\n compareFn(heap[rightChild]!.value, heap[smallest]!.value) < 0\n ) {\n smallest = rightChild;\n }\n\n if (smallest === index) break;\n\n [heap[index], heap[smallest]] = [heap[smallest]!, heap[index]!];\n index = smallest;\n }\n };\n\n // Build initial heap\n for (let i = Math.floor(heap.length / 2) - 1; i >= 0; i--) {\n bubbleDown(i);\n }\n\n // Extract minimum and refill from same iterator\n while (heap.length > 0) {\n const { value, iterator } = heap[0]!;\n yield value;\n\n const result = iterator.next();\n if (result.done) {\n // Remove this iterator from heap\n heap[0] = heap[heap.length - 1]!;\n heap.pop();\n if (heap.length > 0) {\n bubbleDown(0);\n }\n } else {\n // Replace with next value from same iterator\n heap[0]!.value = result.value;\n bubbleDown(0);\n }\n }\n },\n });\n }\n\n /**\n * Chains multiple iterables sequentially, one after another.\n * Yields all elements from the first iterable, then all from the second, etc.\n *\n * @template T The type of elements in all iterables\n * @param iterables - Variable number of iterables to chain\n * @returns A new iterflow with all elements chained sequentially\n * @example\n * ```typescript\n * iter.chain([1, 2], [3, 4], [5, 6]).toArray();\n * // [1, 2, 3, 4, 5, 6]\n * iter.chain([1], [2, 3], [], [4, 5, 6]).toArray();\n * // [1, 2, 3, 4, 5, 6]\n * ```\n */\n export function chain<T>(...iterables: Iterable<T>[]): iterflow<T> {\n return new iterflow({\n *[Symbol.iterator]() {\n for (const iterable of iterables) {\n yield* iterable;\n }\n },\n });\n }\n}\n\n// Export the sync class\nexport { iterflow } from \"./iter-flow.js\";\n\n// Export async functionality\nexport { Asynciterflow, asyncIter } from \"./async-iter-flow.js\";\n\n// Export error handling\nexport {\n iterflowError,\n ValidationError,\n OperationError,\n EmptySequenceError,\n IndexOutOfBoundsError,\n TypeConversionError,\n} from \"./errors.js\";\n\n// Export validation utilities\nexport {\n validatePositiveInteger,\n validateNonNegativeInteger,\n validateRange,\n validateFiniteNumber,\n validateNonZero,\n validateFunction,\n validateIterable,\n validateComparator,\n validateNonEmpty,\n toNumber,\n toInteger,\n validateIndex,\n} from \"./validation.js\";\n\n// Export debug utilities\nexport {\n enableDebug,\n disableDebug,\n isDebugEnabled,\n getDebugConfig,\n addTrace,\n getTraces,\n clearTraces,\n getTracesForOperation,\n getTraceSummary,\n traceOperation,\n traceOperationAsync,\n} from \"./debug.js\";\nexport type { TraceEntry, DebugConfig } from \"./debug.js\";\n\n// Export error recovery utilities\nexport {\n withErrorRecovery,\n withRetry,\n withRetryAsync,\n withDefault,\n tryOr,\n tryCatch,\n tryCatchAsync,\n toResult,\n toResultAsync,\n safePredicate,\n safeComparator,\n errorBoundary,\n} from \"./recovery.js\";\nexport type { ErrorHandler, RetryOptions, Result } from \"./recovery.js\";\n\n// Export deprecation utilities\nexport {\n configureDeprecation,\n getDeprecationConfig,\n clearDeprecationWarnings,\n deprecate,\n deprecated,\n deprecatedFunction,\n hasDeprecationWarning,\n} from \"./deprecation.js\";\nexport type { DeprecationConfig, DeprecationWarning } from \"./deprecation.js\";\n"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/validation.ts","../src/iter-flow.ts","../src/async-iter-flow.ts","../src/debug.ts","../src/recovery.ts","../src/deprecation.ts","../src/index.ts"],"names":["asyncIter","config","iter","iter2"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Error handling utilities and custom error classes for iterflow\n * @module errors\n */\n\n/**\n * Base error class for all iterflow errors\n */\nexport class iterflowError extends Error {\n public readonly operation?: string;\n public readonly context?: Record<string, unknown>;\n\n constructor(\n message: string,\n operation?: string,\n context?: Record<string, unknown>,\n ) {\n super(message);\n this.name = \"iterflowError\";\n this.operation = operation;\n this.context = context;\n\n // Maintain proper stack trace for where our error was thrown\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n\n /**\n * Returns a detailed error message with context\n */\n toDetailedString(): string {\n let msg = `${this.name}: ${this.message}`;\n\n if (this.operation) {\n msg += `\\n Operation: ${this.operation}`;\n }\n\n if (this.context && Object.keys(this.context).length > 0) {\n msg += \"\\n Context:\";\n for (const [key, value] of Object.entries(this.context)) {\n msg += `\\n ${key}: ${JSON.stringify(value)}`;\n }\n }\n\n if (this.stack) {\n msg += `\\n Stack: ${this.stack.split(\"\\n\").slice(1).join(\"\\n\")}`;\n }\n\n return msg;\n }\n}\n\n/**\n * Error thrown when operation parameters are invalid\n */\nexport class ValidationError extends iterflowError {\n constructor(\n message: string,\n operation?: string,\n context?: Record<string, unknown>,\n ) {\n super(message, operation, context);\n this.name = \"ValidationError\";\n }\n}\n\n/**\n * Error thrown when an operation fails during execution\n */\nexport class OperationError extends iterflowError {\n public readonly cause?: Error;\n\n constructor(\n message: string,\n operation?: string,\n cause?: Error,\n context?: Record<string, unknown>,\n ) {\n super(message, operation, context);\n this.name = \"OperationError\";\n this.cause = cause;\n }\n\n toDetailedString(): string {\n let msg = super.toDetailedString();\n\n if (this.cause) {\n msg += `\\n Caused by: ${this.cause.message}`;\n if (this.cause.stack) {\n msg += `\\n ${this.cause.stack}`;\n }\n }\n\n return msg;\n }\n}\n\n/**\n * Error thrown when an operation requires a non-empty sequence\n */\nexport class EmptySequenceError extends iterflowError {\n constructor(operation: string, message?: string) {\n super(\n message || `Operation '${operation}' requires a non-empty sequence`,\n operation,\n );\n this.name = \"EmptySequenceError\";\n }\n}\n\n/**\n * Error thrown when accessing an invalid index\n */\nexport class IndexOutOfBoundsError extends iterflowError {\n public readonly index: number;\n public readonly size?: number;\n\n constructor(index: number, size?: number, operation?: string) {\n const sizeInfo = size !== undefined ? ` (size: ${size})` : \"\";\n super(`Index ${index} is out of bounds${sizeInfo}`, operation, {\n index,\n size,\n });\n this.name = \"IndexOutOfBoundsError\";\n this.index = index;\n this.size = size;\n }\n}\n\n/**\n * Error thrown when a type conversion or coercion fails\n */\nexport class TypeConversionError extends iterflowError {\n public readonly value: unknown;\n public readonly expectedType: string;\n\n constructor(value: unknown, expectedType: string, operation?: string) {\n super(\n `Cannot convert value ${JSON.stringify(value)} to type ${expectedType}`,\n operation,\n { value, expectedType },\n );\n this.name = \"TypeConversionError\";\n this.value = value;\n this.expectedType = expectedType;\n }\n}\n","/**\n * Input validation utilities for iterflow operations\n * @module validation\n */\n\nimport { ValidationError, TypeConversionError } from \"./errors.js\";\n\n/**\n * Validates that a value is a positive integer\n */\nexport function validatePositiveInteger(\n value: number,\n paramName: string,\n operation?: string,\n): void {\n if (!Number.isInteger(value)) {\n throw new ValidationError(\n `${paramName} must be an integer, got ${value}`,\n operation,\n { paramName, value },\n );\n }\n\n if (value < 1) {\n throw new ValidationError(\n `${paramName} must be at least 1, got ${value}`,\n operation,\n { paramName, value },\n );\n }\n}\n\n/**\n * Validates that a value is a non-negative integer\n */\nexport function validateNonNegativeInteger(\n value: number,\n paramName: string,\n operation?: string,\n): void {\n if (!Number.isInteger(value)) {\n throw new ValidationError(\n `${paramName} must be an integer, got ${value}`,\n operation,\n { paramName, value },\n );\n }\n\n if (value < 0) {\n throw new ValidationError(\n `${paramName} must be non-negative, got ${value}`,\n operation,\n { paramName, value },\n );\n }\n}\n\n/**\n * Validates that a value is within a specific range\n */\nexport function validateRange(\n value: number,\n min: number,\n max: number,\n paramName: string,\n operation?: string,\n): void {\n if (value < min || value > max) {\n throw new ValidationError(\n `${paramName} must be between ${min} and ${max}, got ${value}`,\n operation,\n { paramName, value, min, max },\n );\n }\n}\n\n/**\n * Validates that a value is a finite number (not NaN or Infinity)\n */\nexport function validateFiniteNumber(\n value: number,\n paramName: string,\n operation?: string,\n): void {\n if (!Number.isFinite(value)) {\n throw new ValidationError(\n `${paramName} must be a finite number, got ${value}`,\n operation,\n { paramName, value },\n );\n }\n}\n\n/**\n * Validates that a value is not zero\n */\nexport function validateNonZero(\n value: number,\n paramName: string,\n operation?: string,\n): void {\n if (value === 0) {\n throw new ValidationError(`${paramName} cannot be zero`, operation, {\n paramName,\n value,\n });\n }\n}\n\n/**\n * Validates that a value is a function\n */\nexport function validateFunction(\n value: unknown,\n paramName: string,\n operation?: string,\n): asserts value is Function {\n if (typeof value !== \"function\") {\n throw new ValidationError(\n `${paramName} must be a function, got ${typeof value}`,\n operation,\n { paramName, type: typeof value },\n );\n }\n}\n\n/**\n * Validates that a value is iterable\n */\nexport function validateIterable<T>(\n value: unknown,\n paramName: string,\n operation?: string,\n): asserts value is Iterable<T> {\n if (value == null || typeof (value as any)[Symbol.iterator] !== \"function\") {\n throw new ValidationError(`${paramName} must be iterable`, operation, {\n paramName,\n type: typeof value,\n });\n }\n}\n\n/**\n * Validates that a value is a valid comparator function\n */\nexport function validateComparator<T>(\n fn: unknown,\n operation?: string,\n): asserts fn is (a: T, b: T) => number {\n validateFunction(fn, \"comparator\", operation);\n\n // Optional: Test with sample values if needed\n // This is a basic check - actual validation happens at runtime\n}\n\n/**\n * Validates that an array is not empty\n */\nexport function validateNonEmpty<T>(arr: T[], operation?: string): void {\n if (arr.length === 0) {\n throw new ValidationError(\"Sequence cannot be empty\", operation);\n }\n}\n\n/**\n * Safely converts a value to a number\n */\nexport function toNumber(\n value: unknown,\n operation?: string,\n): number {\n const num = Number(value);\n\n if (Number.isNaN(num)) {\n throw new TypeConversionError(value, \"number\", operation);\n }\n\n return num;\n}\n\n/**\n * Safely converts a value to an integer\n */\nexport function toInteger(\n value: unknown,\n operation?: string,\n): number {\n const num = toNumber(value, operation);\n const int = Math.trunc(num);\n\n if (num !== int) {\n throw new TypeConversionError(value, \"integer\", operation);\n }\n\n return int;\n}\n\n/**\n * Validates array index\n */\nexport function validateIndex(\n index: number,\n size: number,\n operation?: string,\n): void {\n validateNonNegativeInteger(index, \"index\", operation);\n\n if (index >= size) {\n throw new ValidationError(\n `Index ${index} is out of bounds for size ${size}`,\n operation,\n { index, size },\n );\n }\n}\n\n/**\n * Validates that a number is a safe integer within JavaScript's safe integer range\n * @param value - The value to validate\n * @param paramName - The parameter name for error messages\n * @param operation - The operation name for error context\n */\nexport function validateSafeInteger(\n value: number,\n paramName: string,\n operation?: string,\n): void {\n if (!Number.isSafeInteger(value)) {\n throw new ValidationError(\n `${paramName} must be a safe integer (${Number.MIN_SAFE_INTEGER} to ${Number.MAX_SAFE_INTEGER}), got ${value}`,\n operation,\n { paramName, value },\n );\n }\n}\n\n/**\n * Validates that a window/chunk size is within reasonable bounds\n * @param size - The size to validate\n * @param maxSize - The maximum allowed size (default: 1,000,000)\n * @param operation - The operation name for error context\n */\nexport function validateWindowSize(\n size: number,\n maxSize: number = 1_000_000,\n operation?: string,\n): void {\n validatePositiveInteger(size, \"size\", operation);\n\n if (size > maxSize) {\n throw new ValidationError(\n `Window size ${size} exceeds maximum allowed size ${maxSize}. Consider using smaller windows or streaming operations.`,\n operation,\n { size, maxSize },\n );\n }\n}\n\n/**\n * Validates that an array size is within reasonable memory bounds\n * @param size - The estimated size\n * @param maxElements - The maximum allowed elements (default: 10,000,000)\n * @param operation - The operation name for error context\n */\nexport function validateMemoryLimit(\n size: number,\n maxElements: number = 10_000_000,\n operation?: string,\n): void {\n validateNonNegativeInteger(size, \"size\", operation);\n\n if (size > maxElements) {\n throw new ValidationError(\n `Operation would exceed memory limit (${size} elements > ${maxElements} maximum). Consider using streaming operations with take() or chunk().`,\n operation,\n { size, maxElements },\n );\n }\n}\n","import { validateRange, validatePositiveInteger } from \"./validation.js\";\n\n/**\n * A fluent interface wrapper for working with iterators and iterables.\n * Provides chainable methods for transforming, filtering, and analyzing data streams.\n *\n * @template T The type of elements in the iterator\n * @example\n * ```typescript\n * const result = new iterflow([1, 2, 3, 4, 5])\n * .filter(x => x % 2 === 0)\n * .map(x => x * 2)\n * .toArray(); // [4, 8]\n * ```\n */\nexport class iterflow<T> implements Iterable<T> {\n private source: Iterator<T>;\n\n /**\n * Creates a new iterflow instance from an iterable or iterator.\n *\n * @param source - The source iterable or iterator to wrap\n * @example\n * ```typescript\n * const flow1 = new iterflow([1, 2, 3]);\n * const flow2 = new iterflow(someIterator);\n * ```\n */\n constructor(source: Iterable<T> | Iterator<T>) {\n this.source =\n Symbol.iterator in source ? source[Symbol.iterator]() : source;\n }\n\n // Iterator protocol\n /**\n * Returns the iterator for this iterflow instance.\n * This allows iterflow to be used in for...of loops.\n *\n * @returns The underlying iterator\n */\n [Symbol.iterator](): Iterator<T> {\n return this.source;\n }\n\n /**\n * Retrieves the next value from the iterator.\n *\n * @returns An IteratorResult containing the next value or indicating completion\n */\n next(): IteratorResult<T> {\n return this.source.next();\n }\n\n // ES2025 native passthrough methods (would normally delegate to native implementations)\n /**\n * Transforms each element using the provided function.\n *\n * @template U The type of the transformed elements\n * @param fn - Function to transform each element\n * @returns A new iterflow with transformed elements\n * @example\n * ```typescript\n * iter([1, 2, 3]).map(x => x * 2).toArray(); // [2, 4, 6]\n * ```\n */\n map<U>(fn: (value: T) => U): iterflow<U> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n for (const value of self) {\n yield fn(value);\n }\n },\n });\n }\n\n /**\n * Filters elements based on a predicate function.\n * Only elements for which the predicate returns true are included.\n *\n * @param predicate - Function to test each element\n * @returns A new iterflow with only elements that pass the predicate\n * @example\n * ```typescript\n * iter([1, 2, 3, 4]).filter(x => x % 2 === 0).toArray(); // [2, 4]\n * ```\n */\n filter(predicate: (value: T) => boolean): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n for (const value of self) {\n if (predicate(value)) {\n yield value;\n }\n }\n },\n });\n }\n\n /**\n * Takes only the first `limit` elements from the iterator.\n *\n * @param limit - Maximum number of elements to take\n * @returns A new iterflow with at most `limit` elements\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).take(3).toArray(); // [1, 2, 3]\n * ```\n */\n take(limit: number): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n let count = 0;\n for (const value of self) {\n if (count >= limit) break;\n yield value;\n count++;\n }\n },\n });\n }\n\n /**\n * Skips the first `count` elements from the iterator.\n *\n * @param count - Number of elements to skip\n * @returns A new iterflow without the first `count` elements\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).drop(2).toArray(); // [3, 4, 5]\n * ```\n */\n drop(count: number): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n let dropped = 0;\n for (const value of self) {\n if (dropped < count) {\n dropped++;\n continue;\n }\n yield value;\n }\n },\n });\n }\n\n /**\n * Maps each element to an iterable and flattens the results into a single iterator.\n *\n * @template U The type of elements in the resulting iterator\n * @param fn - Function that maps each element to an iterable\n * @returns A new iterflow with all mapped iterables flattened\n * @example\n * ```typescript\n * iter([1, 2, 3]).flatMap(x => [x, x * 2]).toArray(); // [1, 2, 2, 4, 3, 6]\n * ```\n */\n flatMap<U>(fn: (value: T) => Iterable<U>): iterflow<U> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n for (const value of self) {\n yield* fn(value);\n }\n },\n });\n }\n\n /**\n * Concatenates multiple iterators sequentially.\n * Yields all elements from this iterator, then from each provided iterator.\n *\n * @param iterables - Additional iterables to concatenate\n * @returns A new iterflow with all elements from all iterables\n * @example\n * ```typescript\n * iter([1, 2]).concat([3, 4], [5, 6]).toArray();\n * // [1, 2, 3, 4, 5, 6]\n * ```\n */\n concat(...iterables: Iterable<T>[]): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n yield* self;\n for (const iterable of iterables) {\n yield* iterable;\n }\n },\n });\n }\n\n /**\n * Inserts a separator element between each item.\n * The separator is not added before the first element or after the last.\n *\n * @param separator - The element to insert between items\n * @returns A new iterflow with separators interspersed\n * @example\n * ```typescript\n * iter([1, 2, 3]).intersperse(0).toArray();\n * // [1, 0, 2, 0, 3]\n * iter(['a', 'b', 'c']).intersperse('-').toArray();\n * // ['a', '-', 'b', '-', 'c']\n * ```\n */\n intersperse(separator: T): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n let isFirst = true;\n for (const value of self) {\n if (!isFirst) {\n yield separator;\n }\n yield value;\n isFirst = false;\n }\n },\n });\n }\n\n /**\n * Like reduce, but emits all intermediate accumulator values.\n * Similar to reduce but returns an iterator of partial results.\n *\n * @template U The type of the accumulated value\n * @param fn - Function to combine the accumulator with each element\n * @param initial - The initial value for the accumulator\n * @returns A new iterflow of intermediate accumulator values\n * @example\n * ```typescript\n * iter([1, 2, 3, 4]).scan((acc, x) => acc + x, 0).toArray();\n * // [0, 1, 3, 6, 10]\n * iter([1, 2, 3]).scan((acc, x) => acc * x, 1).toArray();\n * // [1, 1, 2, 6]\n * ```\n */\n scan<U>(fn: (accumulator: U, value: T) => U, initial: U): iterflow<U> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n let accumulator = initial;\n yield accumulator;\n for (const value of self) {\n accumulator = fn(accumulator, value);\n yield accumulator;\n }\n },\n });\n }\n\n /**\n * Adds index as tuple with each element [index, value].\n * Creates tuples pairing each element with its zero-based index.\n *\n * @returns A new iterflow of tuples containing [index, value]\n * @example\n * ```typescript\n * iter(['a', 'b', 'c']).enumerate().toArray();\n * // [[0, 'a'], [1, 'b'], [2, 'c']]\n * ```\n */\n enumerate(): iterflow<[number, T]> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n let index = 0;\n for (const value of self) {\n yield [index, value];\n index++;\n }\n },\n });\n }\n\n /**\n * Reverses the iterator order.\n * Warning: This operation buffers all elements in memory and may cause\n * performance issues with large iterables. Consider using only when necessary.\n *\n * @returns A new iterflow with elements in reverse order\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).reverse().toArray();\n * // [5, 4, 3, 2, 1]\n * ```\n */\n reverse(): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n const buffer = Array.from(self);\n for (let i = buffer.length - 1; i >= 0; i--) {\n yield buffer[i]!;\n }\n },\n });\n }\n\n /**\n * Sorts elements using default comparison.\n * Numbers are sorted numerically, strings lexicographically.\n * Warning: This operation buffers all elements in memory. Avoid chaining\n * with other buffering operations (reverse, sort, sortBy) for better performance.\n *\n * @param this - iterflow instance constrained to numbers or strings\n * @returns A new iterflow with elements sorted\n * @example\n * ```typescript\n * iter([3, 1, 4, 1, 5]).sort().toArray();\n * // [1, 1, 3, 4, 5]\n * iter(['c', 'a', 'b']).sort().toArray();\n * // ['a', 'b', 'c']\n * ```\n */\n sort(this: iterflow<number | string>): iterflow<number | string> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n const buffer = Array.from(self);\n buffer.sort((a, b) => {\n if (typeof a === \"number\" && typeof b === \"number\") {\n return a - b;\n }\n return String(a).localeCompare(String(b));\n });\n yield* buffer;\n },\n });\n }\n\n /**\n * Sorts elements using a custom comparison function.\n * Warning: This operation buffers all elements in memory. Avoid chaining\n * with other buffering operations (reverse, sort, sortBy) for better performance.\n *\n * @param compareFn - Function that compares two elements (returns negative if a < b, 0 if equal, positive if a > b)\n * @returns A new iterflow with elements sorted\n * @example\n * ```typescript\n * iter([3, 1, 4, 1, 5]).sortBy((a, b) => a - b).toArray();\n * // [1, 1, 3, 4, 5]\n * iter([3, 1, 4, 1, 5]).sortBy((a, b) => b - a).toArray();\n * // [5, 4, 3, 1, 1]\n * iter(['alice', 'bob', 'charlie']).sortBy((a, b) => a.length - b.length).toArray();\n * // ['bob', 'alice', 'charlie']\n * ```\n */\n sortBy(compareFn: (a: T, b: T) => number): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n const buffer = Array.from(self);\n buffer.sort(compareFn);\n yield* buffer;\n },\n });\n }\n\n // Terminal operations (consume the iterator)\n /**\n * Collects all elements into an array.\n * This is a terminal operation that consumes the iterator.\n *\n * @returns An array containing all elements\n * @example\n * ```typescript\n * iter([1, 2, 3]).map(x => x * 2).toArray(); // [2, 4, 6]\n * ```\n */\n toArray(): T[] {\n return Array.from(this);\n }\n\n /**\n * Counts the total number of elements in the iterator.\n * This is a terminal operation that consumes the iterator.\n *\n * @returns The total count of elements\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).count(); // 5\n * ```\n */\n count(): number {\n let count = 0;\n for (const _ of this) {\n count++;\n }\n return count;\n }\n\n // Statistical operations - type-constrained to numbers\n /**\n * Calculates the sum of all numeric elements.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @returns The sum of all elements\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).sum(); // 15\n * ```\n */\n sum(this: iterflow<number>): number {\n let total = 0;\n for (const value of this) {\n total += value;\n }\n return total;\n }\n\n /**\n * Calculates the arithmetic mean (average) of all numeric elements.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @returns The mean value, or undefined if the iterator is empty\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).mean(); // 3\n * iter([]).mean(); // undefined\n * ```\n */\n mean(this: iterflow<number>): number | undefined {\n let total = 0;\n let count = 0;\n for (const value of this) {\n total += value;\n count++;\n }\n return count === 0 ? undefined : total / count;\n }\n\n /**\n * Finds the minimum value among all numeric elements.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @returns The minimum value, or undefined if the iterator is empty\n * @example\n * ```typescript\n * iter([3, 1, 4, 1, 5]).min(); // 1\n * iter([]).min(); // undefined\n * ```\n */\n min(this: iterflow<number>): number | undefined {\n let minimum: number | undefined = undefined;\n for (const value of this) {\n if (minimum === undefined || value < minimum) {\n minimum = value;\n }\n }\n return minimum;\n }\n\n /**\n * Finds the maximum value among all numeric elements.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @returns The maximum value, or undefined if the iterator is empty\n * @example\n * ```typescript\n * iter([3, 1, 4, 1, 5]).max(); // 5\n * iter([]).max(); // undefined\n * ```\n */\n max(this: iterflow<number>): number | undefined {\n let maximum: number | undefined = undefined;\n for (const value of this) {\n if (maximum === undefined || value > maximum) {\n maximum = value;\n }\n }\n return maximum;\n }\n\n /**\n * Calculates the median value of all numeric elements.\n * The median is the middle value when elements are sorted.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @returns The median value, or undefined if the iterator is empty\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).median(); // 3\n * iter([1, 2, 3, 4]).median(); // 2.5\n * iter([]).median(); // undefined\n * ```\n */\n median(this: iterflow<number>): number | undefined {\n const values = this.toArray();\n if (values.length === 0) return undefined;\n\n values.sort((a, b) => a - b);\n const mid = Math.floor(values.length / 2);\n\n if (values.length % 2 === 0) {\n return (values[mid - 1]! + values[mid]!) / 2;\n } else {\n return values[mid]!;\n }\n }\n\n /**\n * Calculates the variance of all numeric elements.\n * Variance measures how far each number in the set is from the mean.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @returns The variance, or undefined if the iterator is empty\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).variance(); // 2\n * iter([]).variance(); // undefined\n * ```\n */\n variance(this: iterflow<number>): number | undefined {\n const values = this.toArray();\n if (values.length === 0) return undefined;\n\n const mean = values.reduce((sum, val) => sum + val, 0) / values.length;\n\n // Optimize: calculate sum of squared differences in single pass without intermediate array\n let sumSquaredDiffs = 0;\n for (let i = 0; i < values.length; i++) {\n const value = values[i]!; // Safe assertion since i is within bounds\n const diff = value - mean;\n sumSquaredDiffs += diff * diff;\n }\n\n return sumSquaredDiffs / values.length;\n }\n\n /**\n * Calculates the standard deviation of all numeric elements.\n * Standard deviation is the square root of variance and measures dispersion.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @returns The standard deviation, or undefined if the iterator is empty\n * @example\n * ```typescript\n * iter([2, 4, 4, 4, 5, 5, 7, 9]).stdDev(); // ~2\n * iter([]).stdDev(); // undefined\n * ```\n */\n stdDev(this: iterflow<number>): number | undefined {\n const variance = this.variance();\n return variance === undefined ? undefined : Math.sqrt(variance);\n }\n\n /**\n * Calculates the specified percentile of all numeric elements.\n * Uses linear interpolation between closest ranks.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @param p - The percentile to calculate (0-100)\n * @returns The percentile value, or undefined if the iterator is empty\n * @throws {Error} If p is not between 0 and 100\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).percentile(50); // 3 (median)\n * iter([1, 2, 3, 4, 5]).percentile(75); // 4\n * iter([]).percentile(50); // undefined\n * ```\n */\n percentile(this: iterflow<number>, p: number): number | undefined {\n validateRange(p, 0, 100, \"percentile\", \"percentile\");\n\n const values = this.toArray();\n if (values.length === 0) return undefined;\n\n values.sort((a, b) => a - b);\n\n if (p === 0) return values[0]!;\n if (p === 100) return values[values.length - 1]!\n\n const index = (p / 100) * (values.length - 1);\n const lower = Math.floor(index);\n const upper = Math.ceil(index);\n\n if (lower === upper) {\n return values[lower]!;\n }\n\n const weight = index - lower;\n return values[lower]! * (1 - weight) + values[upper]! * weight;\n }\n\n /**\n * Finds the most frequent value(s) in the dataset.\n * Returns an array of all values that appear most frequently.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @returns An array of the most frequent value(s), or undefined if the iterator is empty\n * @example\n * ```typescript\n * iter([1, 2, 2, 3, 3, 3]).mode(); // [3]\n * iter([1, 1, 2, 2, 3]).mode(); // [1, 2] (bimodal)\n * iter([]).mode(); // undefined\n * ```\n */\n mode(this: iterflow<number>): number[] | undefined {\n const values = this.toArray();\n if (values.length === 0) return undefined;\n\n const frequency = new Map<number, number>();\n let maxFreq = 0;\n\n for (const value of values) {\n const count = (frequency.get(value) || 0) + 1;\n frequency.set(value, count);\n maxFreq = Math.max(maxFreq, count);\n }\n\n const modes: number[] = [];\n for (const [value, freq] of frequency) {\n if (freq === maxFreq) {\n modes.push(value);\n }\n }\n\n return modes.sort((a, b) => a - b);\n }\n\n /**\n * Calculates the quartiles (Q1, Q2, Q3) of all numeric elements.\n * Q1 is the 25th percentile, Q2 is the median (50th percentile), Q3 is the 75th percentile.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @returns An object with Q1, Q2, and Q3 values, or undefined if the iterator is empty\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5, 6, 7, 8, 9]).quartiles();\n * // { Q1: 3, Q2: 5, Q3: 7 }\n * iter([]).quartiles(); // undefined\n * ```\n */\n quartiles(\n this: iterflow<number>,\n ): { Q1: number; Q2: number; Q3: number } | undefined {\n const values = this.toArray();\n if (values.length === 0) return undefined;\n\n values.sort((a, b) => a - b);\n\n const calculatePercentile = (p: number): number => {\n if (p === 0) return values[0]!;\n if (p === 100) return values[values.length - 1]!;\n\n const index = (p / 100) * (values.length - 1);\n const lower = Math.floor(index);\n const upper = Math.ceil(index);\n\n if (lower === upper) {\n return values[lower]!;\n }\n\n const weight = index - lower;\n return values[lower]! * (1 - weight) + values[upper]! * weight;\n };\n\n return {\n Q1: calculatePercentile(25),\n Q2: calculatePercentile(50),\n Q3: calculatePercentile(75),\n };\n }\n\n /**\n * Calculates the span (range from minimum to maximum value) of all numeric elements.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @returns The span (max - min), or undefined if the iterator is empty\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).span(); // 4\n * iter([10]).span(); // 0\n * iter([]).span(); // undefined\n * ```\n */\n span(this: iterflow<number>): number | undefined {\n let minimum: number | undefined = undefined;\n let maximum: number | undefined = undefined;\n\n for (const value of this) {\n if (minimum === undefined || value < minimum) {\n minimum = value;\n }\n if (maximum === undefined || value > maximum) {\n maximum = value;\n }\n }\n\n return minimum === undefined || maximum === undefined\n ? undefined\n : maximum - minimum;\n }\n\n /**\n * Calculates the product of all numeric elements.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @returns The product of all elements, or 1 if the iterator is empty\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).product(); // 120\n * iter([2, 3, 4]).product(); // 24\n * iter([]).product(); // 1\n * ```\n */\n product(this: iterflow<number>): number {\n let result = 1;\n for (const value of this) {\n result *= value;\n }\n return result;\n }\n\n /**\n * Calculates the covariance between two numeric sequences.\n * Covariance measures the joint variability of two random variables.\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @param other - An iterable of numbers to compare with\n * @returns The covariance, or undefined if either sequence is empty or sequences have different lengths\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).covariance([2, 4, 6, 8, 10]); // 4\n * iter([]).covariance([1, 2, 3]); // undefined\n * ```\n */\n covariance(\n this: iterflow<number>,\n other: Iterable<number>,\n ): number | undefined {\n const values1 = this.toArray();\n const values2 = Array.from(other);\n\n if (\n values1.length === 0 ||\n values2.length === 0 ||\n values1.length !== values2.length\n ) {\n return undefined;\n }\n\n const mean1 = values1.reduce((sum, val) => sum + val, 0) / values1.length;\n const mean2 = values2.reduce((sum, val) => sum + val, 0) / values2.length;\n\n let covariance = 0;\n for (let i = 0; i < values1.length; i++) {\n covariance += (values1[i]! - mean1) * (values2[i]! - mean2);\n }\n\n return covariance / values1.length;\n }\n\n /**\n * Calculates the Pearson correlation coefficient between two numeric sequences.\n * Correlation measures the strength and direction of the linear relationship between two variables.\n * Values range from -1 (perfect negative correlation) to 1 (perfect positive correlation).\n * This method is only available when T is number.\n * This is a terminal operation that consumes the iterator.\n *\n * @param this - iterflow instance constrained to numbers\n * @param other - An iterable of numbers to compare with\n * @returns The correlation coefficient, or undefined if either sequence is empty or sequences have different lengths\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).correlation([2, 4, 6, 8, 10]); // 1 (perfect positive correlation)\n * iter([1, 2, 3]).correlation([3, 2, 1]); // -1 (perfect negative correlation)\n * iter([]).correlation([1, 2, 3]); // undefined\n * ```\n */\n correlation(\n this: iterflow<number>,\n other: Iterable<number>,\n ): number | undefined {\n const values1 = this.toArray();\n const values2 = Array.from(other);\n\n if (\n values1.length === 0 ||\n values2.length === 0 ||\n values1.length !== values2.length\n ) {\n return undefined;\n }\n\n const mean1 = values1.reduce((sum, val) => sum + val, 0) / values1.length;\n const mean2 = values2.reduce((sum, val) => sum + val, 0) / values2.length;\n\n let covariance = 0;\n let variance1 = 0;\n let variance2 = 0;\n\n for (let i = 0; i < values1.length; i++) {\n const diff1 = values1[i]! - mean1;\n const diff2 = values2[i]! - mean2;\n covariance += diff1 * diff2;\n variance1 += diff1 * diff1;\n variance2 += diff2 * diff2;\n }\n\n const stdDev1 = Math.sqrt(variance1 / values1.length);\n const stdDev2 = Math.sqrt(variance2 / values2.length);\n\n if (stdDev1 === 0 || stdDev2 === 0) {\n return undefined;\n }\n\n return covariance / (values1.length * stdDev1 * stdDev2);\n }\n\n // Windowing operations\n /**\n * Creates a sliding window of the specified size over the elements.\n * Each window contains `size` consecutive elements.\n *\n * @param size - The size of each window (must be at least 1)\n * @returns A new iterflow of arrays, each containing `size` consecutive elements\n * @throws {Error} If size is less than 1\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).window(3).toArray();\n * // [[1, 2, 3], [2, 3, 4], [3, 4, 5]]\n * ```\n */\n window(size: number): iterflow<T[]> {\n validatePositiveInteger(size, \"size\", \"window\");\n\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n // Use circular buffer to avoid O(n) shift() operations\n const buffer: T[] = new Array(size);\n let count = 0;\n let index = 0;\n\n for (const value of self) {\n buffer[index] = value;\n count++;\n index = (index + 1) % size;\n\n if (count >= size) {\n // Build window array in correct order from circular buffer\n const window = new Array(size);\n for (let i = 0; i < size; i++) {\n window[i] = buffer[(index + i) % size];\n }\n yield window;\n }\n }\n },\n });\n }\n\n /**\n * Splits elements into chunks of the specified size.\n * Unlike window, chunks don't overlap. The last chunk may be smaller.\n *\n * @param size - The size of each chunk (must be at least 1)\n * @returns A new iterflow of arrays, each containing up to `size` elements\n * @throws {Error} If size is less than 1\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).chunk(2).toArray();\n * // [[1, 2], [3, 4], [5]]\n * ```\n */\n chunk(size: number): iterflow<T[]> {\n validatePositiveInteger(size, \"size\", \"chunk\");\n\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n // Preallocate buffer to avoid dynamic resizing\n let buffer: T[] = new Array(size);\n let bufferIndex = 0;\n\n for (const value of self) {\n buffer[bufferIndex++] = value;\n\n if (bufferIndex === size) {\n yield buffer;\n buffer = new Array(size);\n bufferIndex = 0;\n }\n }\n\n if (bufferIndex > 0) {\n // Slice to remove unused preallocated slots\n yield buffer.slice(0, bufferIndex);\n }\n },\n });\n }\n\n /**\n * Creates pairs of consecutive elements.\n * Equivalent to window(2) but returns tuples instead of arrays.\n *\n * @returns A new iterflow of tuples, each containing two consecutive elements\n * @example\n * ```typescript\n * iter([1, 2, 3, 4]).pairwise().toArray();\n * // [[1, 2], [2, 3], [3, 4]]\n * ```\n */\n pairwise(): iterflow<[T, T]> {\n return this.window(2).map((arr) => [arr[0]!, arr[1]!] as [T, T]);\n }\n\n // Set operations\n /**\n * Removes duplicate elements, keeping only the first occurrence of each.\n * Uses strict equality (===) to compare elements.\n *\n * @returns A new iterflow with duplicate elements removed\n * @example\n * ```typescript\n * iter([1, 2, 2, 3, 1, 4]).distinct().toArray();\n * // [1, 2, 3, 4]\n * ```\n */\n distinct(): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n const seen = new Set<T>();\n\n for (const value of self) {\n if (!seen.has(value)) {\n seen.add(value);\n yield value;\n }\n }\n },\n });\n }\n\n /**\n * Removes duplicate elements based on a key function.\n * Keeps only the first occurrence of each unique key.\n *\n * @template K The type of the key used for comparison\n * @param keyFn - Function to extract the comparison key from each element\n * @returns A new iterflow with duplicate elements (by key) removed\n * @example\n * ```typescript\n * const users = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 1, name: 'Charlie'}];\n * iter(users).distinctBy(u => u.id).toArray();\n * // [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}]\n * ```\n */\n distinctBy<K>(keyFn: (value: T) => K): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n const seenKeys = new Set<K>();\n\n for (const value of self) {\n const key = keyFn(value);\n if (!seenKeys.has(key)) {\n seenKeys.add(key);\n yield value;\n }\n }\n },\n });\n }\n\n // Utility operations\n /**\n * Executes a side-effect function on each element without modifying the stream.\n * Useful for debugging or performing operations like logging.\n *\n * @param fn - Function to execute for each element\n * @returns A new iterflow with the same elements\n * @example\n * ```typescript\n * iter([1, 2, 3])\n * .tap(x => console.log('Processing:', x))\n * .map(x => x * 2)\n * .toArray(); // logs each value, returns [2, 4, 6]\n * ```\n */\n tap(fn: (value: T) => void): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n for (const value of self) {\n fn(value);\n yield value;\n }\n },\n });\n }\n\n /**\n * Takes elements while the predicate returns true, then stops.\n * Stops at the first element that fails the predicate.\n *\n * @param predicate - Function to test each element\n * @returns A new iterflow with elements up to the first failing predicate\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 1, 2]).takeWhile(x => x < 4).toArray();\n * // [1, 2, 3]\n * ```\n */\n takeWhile(predicate: (value: T) => boolean): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n for (const value of self) {\n if (!predicate(value)) break;\n yield value;\n }\n },\n });\n }\n\n /**\n * Skips elements while the predicate returns true, then yields all remaining elements.\n * Starts yielding from the first element that fails the predicate.\n *\n * @param predicate - Function to test each element\n * @returns A new iterflow starting from the first element that fails the predicate\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 1, 2]).dropWhile(x => x < 3).toArray();\n * // [3, 4, 1, 2]\n * ```\n */\n dropWhile(predicate: (value: T) => boolean): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n let dropping = true;\n for (const value of self) {\n if (dropping && predicate(value)) {\n continue;\n }\n dropping = false;\n yield value;\n }\n },\n });\n }\n\n // Grouping operations (terminal)\n /**\n * Splits elements into two arrays based on a predicate.\n * This is a terminal operation that consumes the iterator.\n *\n * @param predicate - Function to test each element\n * @returns A tuple of two arrays: [elements passing predicate, elements failing predicate]\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).partition(x => x % 2 === 0);\n * // [[2, 4], [1, 3, 5]]\n * ```\n */\n partition(predicate: (value: T) => boolean): [T[], T[]] {\n const truthy: T[] = [];\n const falsy: T[] = [];\n\n for (const value of this) {\n if (predicate(value)) {\n truthy.push(value);\n } else {\n falsy.push(value);\n }\n }\n\n return [truthy, falsy];\n }\n\n /**\n * Groups elements by a key function into a Map.\n * This is a terminal operation that consumes the iterator.\n *\n * @template K The type of the grouping key\n * @param keyFn - Function to extract the grouping key from each element\n * @returns A Map where keys are the result of keyFn and values are arrays of elements\n * @example\n * ```typescript\n * iter(['alice', 'bob', 'charlie', 'dave'])\n * .groupBy(name => name.length);\n * // Map { 3 => ['bob'], 5 => ['alice'], 7 => ['charlie'], 4 => ['dave'] }\n * ```\n */\n groupBy<K>(keyFn: (value: T) => K): Map<K, T[]> {\n const groups = new Map<K, T[]>();\n\n for (const value of this) {\n const key = keyFn(value);\n if (!groups.has(key)) {\n groups.set(key, []);\n }\n groups.get(key)!.push(value);\n }\n\n return groups;\n }\n\n // Additional terminal operations\n /**\n * Reduces the iterator to a single value using an accumulator function.\n * This is a terminal operation that consumes the iterator.\n *\n * @template U The type of the accumulated value\n * @param fn - Function to combine the accumulator with each element\n * @param initial - The initial value for the accumulator\n * @returns The final accumulated value\n * @example\n * ```typescript\n * iter([1, 2, 3, 4]).reduce((acc, x) => acc + x, 0); // 10\n * iter(['a', 'b', 'c']).reduce((acc, x) => acc + x, ''); // 'abc'\n * ```\n */\n reduce<U>(fn: (accumulator: U, value: T) => U, initial: U): U {\n let accumulator = initial;\n for (const value of this) {\n accumulator = fn(accumulator, value);\n }\n return accumulator;\n }\n\n /**\n * Finds the first element that matches the predicate.\n * This is a terminal operation that may consume part of the iterator.\n *\n * @param predicate - Function to test each element\n * @returns The first matching element, or undefined if none found\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).find(x => x > 3); // 4\n * iter([1, 2, 3]).find(x => x > 10); // undefined\n * ```\n */\n find(predicate: (value: T) => boolean): T | undefined {\n for (const value of this) {\n if (predicate(value)) {\n return value;\n }\n }\n return undefined;\n }\n\n /**\n * Finds the index of the first element that matches the predicate.\n * This is a terminal operation that may consume part of the iterator.\n *\n * @param predicate - Function to test each element\n * @returns The index of the first matching element, or -1 if none found\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).findIndex(x => x > 3); // 3\n * iter([1, 2, 3]).findIndex(x => x > 10); // -1\n * ```\n */\n findIndex(predicate: (value: T) => boolean): number {\n let index = 0;\n for (const value of this) {\n if (predicate(value)) {\n return index;\n }\n index++;\n }\n return -1;\n }\n\n /**\n * Tests whether at least one element matches the predicate.\n * This is a terminal operation that may consume part of the iterator.\n *\n * @param predicate - Function to test each element\n * @returns true if any element matches, false otherwise\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).some(x => x > 3); // true\n * iter([1, 2, 3]).some(x => x > 10); // false\n * ```\n */\n some(predicate: (value: T) => boolean): boolean {\n for (const value of this) {\n if (predicate(value)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Tests whether all elements match the predicate.\n * This is a terminal operation that may consume part or all of the iterator.\n *\n * @param predicate - Function to test each element\n * @returns true if all elements match, false otherwise\n * @example\n * ```typescript\n * iter([2, 4, 6]).every(x => x % 2 === 0); // true\n * iter([1, 2, 3]).every(x => x % 2 === 0); // false\n * ```\n */\n every(predicate: (value: T) => boolean): boolean {\n for (const value of this) {\n if (!predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Executes a function for each element in the iterator.\n * This is a terminal operation that consumes the entire iterator.\n *\n * @param fn - Function to execute for each element\n * @example\n * ```typescript\n * iter([1, 2, 3]).forEach(x => console.log(x));\n * // Logs: 1, 2, 3\n * ```\n */\n forEach(fn: (value: T) => void): void {\n for (const value of this) {\n fn(value);\n }\n }\n\n /**\n * Gets the first element from the iterator.\n * This is a terminal operation that consumes the first element.\n *\n * @param defaultValue - Optional default value to return if iterator is empty\n * @returns The first element, the default value, or undefined if empty and no default\n * @example\n * ```typescript\n * iter([1, 2, 3]).first(); // 1\n * iter([]).first(); // undefined\n * iter([]).first(0); // 0\n * ```\n */\n first(defaultValue?: T): T | undefined {\n const result = this.source.next();\n return result.done ? defaultValue : result.value;\n }\n\n /**\n * Gets the last element from the iterator.\n * This is a terminal operation that consumes the entire iterator.\n *\n * @param defaultValue - Optional default value to return if iterator is empty\n * @returns The last element, the default value, or undefined if empty and no default\n * @example\n * ```typescript\n * iter([1, 2, 3]).last(); // 3\n * iter([]).last(); // undefined\n * iter([]).last(0); // 0\n * ```\n */\n last(defaultValue?: T): T | undefined {\n let lastValue: T | undefined = defaultValue;\n let hasValue = false;\n for (const value of this) {\n lastValue = value;\n hasValue = true;\n }\n return hasValue ? lastValue : defaultValue;\n }\n\n /**\n * Gets the element at the specified index.\n * This is a terminal operation that may consume part of the iterator.\n *\n * @param index - Zero-based index of the element to retrieve\n * @returns The element at the index, or undefined if index is out of bounds\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).nth(2); // 3\n * iter([1, 2, 3]).nth(10); // undefined\n * iter([1, 2, 3]).nth(-1); // undefined\n * ```\n */\n nth(index: number): T | undefined {\n if (index < 0) {\n return undefined;\n }\n let currentIndex = 0;\n for (const value of this) {\n if (currentIndex === index) {\n return value;\n }\n currentIndex++;\n }\n return undefined;\n }\n\n /**\n * Checks if the iterator is empty.\n * This is a terminal operation that may consume the first element.\n *\n * @returns true if the iterator has no elements, false otherwise\n * @example\n * ```typescript\n * iter([]).isEmpty(); // true\n * iter([1, 2, 3]).isEmpty(); // false\n * ```\n */\n isEmpty(): boolean {\n const result = this.source.next();\n return result.done === true;\n }\n\n /**\n * Checks if the iterator includes a specific value.\n * Uses strict equality (===) for comparison.\n * This is a terminal operation that may consume part or all of the iterator.\n *\n * @param searchValue - The value to search for\n * @returns true if the value is found, false otherwise\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5]).includes(3); // true\n * iter([1, 2, 3]).includes(10); // false\n * iter(['a', 'b', 'c']).includes('b'); // true\n * ```\n */\n includes(searchValue: T): boolean {\n for (const value of this) {\n if (value === searchValue) {\n return true;\n }\n }\n return false;\n }\n\n // Alias methods for compatibility\n /**\n * Alias for stdDev() method for compatibility.\n * Calculates the standard deviation of all numeric elements.\n */\n stddev(this: iterflow<number>): number | undefined {\n return this.stdDev();\n }\n\n /**\n * Alias for drop() method for compatibility.\n * Skips the first `count` elements from the iterator.\n */\n skip(count: number): iterflow<T> {\n return this.drop(count);\n }\n\n /**\n * Interleaves elements from this iterator with elements from other iterables.\n * Takes one element from each iterable in round-robin fashion.\n *\n * @param others - Variable number of iterables to interleave with\n * @returns A new iterflow with elements from all iterables interleaved\n * @example\n * ```typescript\n * iter([1, 2, 3]).interleave([4, 5, 6]).toArray(); // [1, 4, 2, 5, 3, 6]\n * ```\n */\n interleave(...others: Iterable<T>[]): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n const allIterables = [self, ...others];\n if (allIterables.length === 0) return;\n\n const iterators = allIterables.map((it) => it[Symbol.iterator]());\n const active = new Set(iterators);\n\n while (active.size > 0) {\n for (const iterator of iterators) {\n if (!active.has(iterator)) continue;\n\n const result = iterator.next();\n if (result.done) {\n active.delete(iterator);\n } else {\n yield result.value;\n }\n }\n }\n },\n });\n }\n\n /**\n * Merges this iterator with other sorted iterables into a single sorted iterator.\n * Assumes all input iterables are already sorted in ascending order.\n *\n * @param others - Variable number of sorted iterables to merge with\n * @returns A new iterflow with all elements merged in sorted order\n * @example\n * ```typescript\n * iter([1, 3, 5]).merge([2, 4, 6]).toArray(); // [1, 2, 3, 4, 5, 6]\n * ```\n */\n merge(...others: Iterable<T>[]): iterflow<T> {\n const self = this;\n return new iterflow({\n *[Symbol.iterator]() {\n const allIterables = [self, ...others];\n if (allIterables.length === 0) return;\n\n // Default comparator for numbers/strings\n const compareFn = (a: T, b: T) => {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n };\n\n // Initialize all iterators with their first value\n const heap: Array<{\n value: T;\n iterator: Iterator<T>;\n index: number;\n }> = [];\n\n for (let i = 0; i < allIterables.length; i++) {\n const iterator = allIterables[i]![Symbol.iterator]();\n const result = iterator.next();\n if (!result.done) {\n heap.push({ value: result.value, iterator, index: i });\n }\n }\n\n // Helper to maintain min-heap property\n const bubbleDown = (index: number) => {\n const length = heap.length;\n while (true) {\n let smallest = index;\n const leftChild = 2 * index + 1;\n const rightChild = 2 * index + 2;\n\n if (\n leftChild < length &&\n compareFn(heap[leftChild]!.value, heap[smallest]!.value) < 0\n ) {\n smallest = leftChild;\n }\n\n if (\n rightChild < length &&\n compareFn(heap[rightChild]!.value, heap[smallest]!.value) < 0\n ) {\n smallest = rightChild;\n }\n\n if (smallest === index) break;\n\n // Swap elements\n const temp = heap[index]!;\n heap[index] = heap[smallest]!;\n heap[smallest] = temp;\n index = smallest;\n }\n };\n\n // Build initial heap\n for (let i = Math.floor(heap.length / 2) - 1; i >= 0; i--) {\n bubbleDown(i);\n }\n\n // Main merge loop\n while (heap.length > 0) {\n // Get minimum element\n const min = heap[0]!;\n yield min.value;\n\n // Get next value from the same iterator\n const nextResult = min.iterator.next();\n if (nextResult.done) {\n // Remove this iterator from heap\n heap[0] = heap[heap.length - 1]!;\n heap.pop();\n if (heap.length > 0) {\n bubbleDown(0);\n }\n } else {\n // Update with new value and bubble down\n heap[0]!.value = nextResult.value;\n bubbleDown(0);\n }\n }\n },\n });\n }\n}\n","import { validateRange, validatePositiveInteger, validateNonZero } from \"./validation.js\";\n\n/**\n * A fluent interface wrapper for working with async iterators and async iterables.\n * Provides chainable methods for transforming, filtering, and analyzing async data streams.\n *\n * @template T The type of elements in the async iterator\n * @example\n * ```typescript\n * const result = await new Asynciterflow(asyncIterable)\n * .filter(async x => x % 2 === 0)\n * .map(async x => x * 2)\n * .toArray(); // [4, 8]\n * ```\n */\nexport class Asynciterflow<T> implements AsyncIterable<T> {\n private source: AsyncIterator<T>;\n\n /**\n * Creates a new async iterflow instance from an async iterable or async iterator.\n *\n * @param source - The source async iterable or async iterator to wrap\n * @example\n * ```typescript\n * const flow1 = new Asynciterflow(asyncIterable);\n * const flow2 = new Asynciterflow(asyncIterator);\n * ```\n */\n constructor(source: AsyncIterable<T> | AsyncIterator<T>) {\n this.source =\n Symbol.asyncIterator in source ? source[Symbol.asyncIterator]() : source;\n }\n\n // Async Iterator protocol\n /**\n * Returns the async iterator for this iterflow instance.\n * This allows iterflow to be used in for await...of loops.\n *\n * @returns The underlying async iterator\n */\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return this.source;\n }\n\n /**\n * Retrieves the next value from the async iterator.\n *\n * @returns A promise of an IteratorResult containing the next value or indicating completion\n */\n next(): Promise<IteratorResult<T>> {\n return this.source.next();\n }\n\n // Transformation operations\n /**\n * Transforms each element using the provided async or sync function.\n *\n * @template U The type of the transformed elements\n * @param fn - Async or sync function to transform each element\n * @returns A new async iterflow with transformed elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3]).map(async x => x * 2).toArray(); // [2, 4, 6]\n * ```\n */\n map<U>(fn: (value: T) => U | Promise<U>): Asynciterflow<U> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n for await (const value of self) {\n yield await fn(value);\n }\n },\n });\n }\n\n /**\n * Filters elements based on an async or sync predicate function.\n * Only elements for which the predicate returns true are included.\n *\n * @param predicate - Async or sync function to test each element\n * @returns A new async iterflow with only elements that pass the predicate\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4]).filter(async x => x % 2 === 0).toArray(); // [2, 4]\n * ```\n */\n filter(\n predicate: (value: T) => boolean | Promise<boolean>,\n ): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n for await (const value of self) {\n if (await predicate(value)) {\n yield value;\n }\n }\n },\n });\n }\n\n /**\n * Takes only the first `limit` elements from the async iterator.\n *\n * @param limit - Maximum number of elements to take\n * @returns A new async iterflow with at most `limit` elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).take(3).toArray(); // [1, 2, 3]\n * ```\n */\n take(limit: number): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n let count = 0;\n for await (const value of self) {\n if (count >= limit) break;\n yield value;\n count++;\n }\n },\n });\n }\n\n /**\n * Skips the first `count` elements from the async iterator.\n *\n * @param count - Number of elements to skip\n * @returns A new async iterflow without the first `count` elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).drop(2).toArray(); // [3, 4, 5]\n * ```\n */\n drop(count: number): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n let dropped = 0;\n for await (const value of self) {\n if (dropped < count) {\n dropped++;\n continue;\n }\n yield value;\n }\n },\n });\n }\n\n /**\n * Maps each element to an async iterable and flattens the results.\n *\n * @template U The type of elements in the resulting iterator\n * @param fn - Async or sync function that maps each element to an async iterable\n * @returns A new async iterflow with all mapped iterables flattened\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3]).flatMap(async x => [x, x * 2]).toArray(); // [1, 2, 2, 4, 3, 6]\n * ```\n */\n flatMap<U>(\n fn: (\n value: T,\n ) =>\n | AsyncIterable<U>\n | Iterable<U>\n | Promise<AsyncIterable<U> | Iterable<U>>,\n ): Asynciterflow<U> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n for await (const value of self) {\n const result = await fn(value);\n if (Symbol.asyncIterator in result) {\n yield* result;\n } else {\n yield* result;\n }\n }\n },\n });\n }\n\n /**\n * Concatenates multiple async iterators sequentially.\n *\n * @param iterables - Additional async iterables to concatenate\n * @returns A new async iterflow with all elements from all iterables\n * @example\n * ```typescript\n * await asyncIter([1, 2]).concat([3, 4], [5, 6]).toArray();\n * // [1, 2, 3, 4, 5, 6]\n * ```\n */\n concat(\n ...iterables: Array<AsyncIterable<T> | Iterable<T>>\n ): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n yield* self;\n for (const iterable of iterables) {\n if (Symbol.asyncIterator in iterable) {\n yield* iterable;\n } else {\n yield* iterable;\n }\n }\n },\n });\n }\n\n /**\n * Inserts a separator element between each item.\n *\n * @param separator - The element to insert between items\n * @returns A new async iterflow with separators interspersed\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3]).intersperse(0).toArray();\n * // [1, 0, 2, 0, 3]\n * ```\n */\n intersperse(separator: T): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n let isFirst = true;\n for await (const value of self) {\n if (!isFirst) {\n yield separator;\n }\n yield value;\n isFirst = false;\n }\n },\n });\n }\n\n /**\n * Like reduce, but emits all intermediate accumulator values.\n *\n * @template U The type of the accumulated value\n * @param fn - Async or sync function to combine the accumulator with each element\n * @param initial - The initial value for the accumulator\n * @returns A new async iterflow of intermediate accumulator values\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4]).scan((acc, x) => acc + x, 0).toArray();\n * // [0, 1, 3, 6, 10]\n * ```\n */\n scan<U>(\n fn: (accumulator: U, value: T) => U | Promise<U>,\n initial: U,\n ): Asynciterflow<U> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n let accumulator = initial;\n yield accumulator;\n for await (const value of self) {\n accumulator = await fn(accumulator, value);\n yield accumulator;\n }\n },\n });\n }\n\n /**\n * Adds index as tuple with each element [index, value].\n *\n * @returns A new async iterflow of tuples containing [index, value]\n * @example\n * ```typescript\n * await asyncIter(['a', 'b', 'c']).enumerate().toArray();\n * // [[0, 'a'], [1, 'b'], [2, 'c']]\n * ```\n */\n enumerate(): Asynciterflow<[number, T]> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n let index = 0;\n for await (const value of self) {\n yield [index, value];\n index++;\n }\n },\n });\n }\n\n /**\n * Reverses the async iterator order.\n * Warning: This operation buffers all elements in memory.\n *\n * @returns A new async iterflow with elements in reverse order\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).reverse().toArray();\n * // [5, 4, 3, 2, 1]\n * ```\n */\n reverse(): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const buffer = await self.toArray();\n for (let i = buffer.length - 1; i >= 0; i--) {\n yield buffer[i]!;\n }\n },\n });\n }\n\n /**\n * Sorts elements using default comparison.\n * Warning: This operation buffers all elements in memory.\n *\n * @param this - async iterflow instance constrained to numbers or strings\n * @returns A new async iterflow with elements sorted\n * @example\n * ```typescript\n * await asyncIter([3, 1, 4, 1, 5]).sort().toArray();\n * // [1, 1, 3, 4, 5]\n * ```\n */\n sort(this: Asynciterflow<number | string>): Asynciterflow<number | string> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const buffer = await self.toArray();\n buffer.sort((a, b) => {\n if (typeof a === \"number\" && typeof b === \"number\") {\n return a - b;\n }\n return String(a).localeCompare(String(b));\n });\n yield* buffer;\n },\n });\n }\n\n /**\n * Sorts elements using a custom comparison function.\n * Warning: This operation buffers all elements in memory.\n *\n * @param compareFn - Function that compares two elements\n * @returns A new async iterflow with elements sorted\n * @example\n * ```typescript\n * await asyncIter([3, 1, 4, 1, 5]).sortBy((a, b) => a - b).toArray();\n * // [1, 1, 3, 4, 5]\n * ```\n */\n sortBy(compareFn: (a: T, b: T) => number): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const buffer = await self.toArray();\n buffer.sort(compareFn);\n yield* buffer;\n },\n });\n }\n\n // Terminal operations\n /**\n * Collects all elements into an array.\n * This is a terminal operation that consumes the async iterator.\n *\n * @returns A promise of an array containing all elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3]).map(async x => x * 2).toArray(); // [2, 4, 6]\n * ```\n */\n async toArray(): Promise<T[]> {\n const result: T[] = [];\n for await (const value of this) {\n result.push(value);\n }\n return result;\n }\n\n /**\n * Counts the total number of elements in the async iterator.\n * This is a terminal operation that consumes the async iterator.\n *\n * @returns A promise of the total count of elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).count(); // 5\n * ```\n */\n async count(): Promise<number> {\n let count = 0;\n for await (const _ of this) {\n count++;\n }\n return count;\n }\n\n /**\n * Executes a function for each element.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param fn - Async or sync function to execute for each element\n * @returns A promise that resolves when all elements have been processed\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3]).forEach(async x => console.log(x));\n * ```\n */\n async forEach(fn: (value: T) => void | Promise<void>): Promise<void> {\n for await (const value of this) {\n await fn(value);\n }\n }\n\n // Statistical operations\n /**\n * Calculates the sum of all numeric elements.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @returns A promise of the sum of all elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).sum(); // 15\n * ```\n */\n async sum(this: Asynciterflow<number>): Promise<number> {\n let total = 0;\n for await (const value of this) {\n total += value;\n }\n return total;\n }\n\n /**\n * Calculates the arithmetic mean (average) of all numeric elements.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @returns A promise of the mean value, or undefined if empty\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).mean(); // 3\n * ```\n */\n async mean(this: Asynciterflow<number>): Promise<number | undefined> {\n let total = 0;\n let count = 0;\n for await (const value of this) {\n total += value;\n count++;\n }\n return count === 0 ? undefined : total / count;\n }\n\n /**\n * Finds the minimum value among all numeric elements.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @returns A promise of the minimum value, or undefined if empty\n * @example\n * ```typescript\n * await asyncIter([3, 1, 4, 1, 5]).min(); // 1\n * ```\n */\n async min(this: Asynciterflow<number>): Promise<number | undefined> {\n let minimum: number | undefined = undefined;\n for await (const value of this) {\n if (minimum === undefined || value < minimum) {\n minimum = value;\n }\n }\n return minimum;\n }\n\n /**\n * Finds the maximum value among all numeric elements.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @returns A promise of the maximum value, or undefined if empty\n * @example\n * ```typescript\n * await asyncIter([3, 1, 4, 1, 5]).max(); // 5\n * ```\n */\n async max(this: Asynciterflow<number>): Promise<number | undefined> {\n let maximum: number | undefined = undefined;\n for await (const value of this) {\n if (maximum === undefined || value > maximum) {\n maximum = value;\n }\n }\n return maximum;\n }\n\n /**\n * Calculates the median value of all numeric elements.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @returns A promise of the median value, or undefined if empty\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).median(); // 3\n * ```\n */\n async median(this: Asynciterflow<number>): Promise<number | undefined> {\n const values = await this.toArray();\n if (values.length === 0) return undefined;\n\n values.sort((a, b) => a - b);\n const mid = Math.floor(values.length / 2);\n\n if (values.length % 2 === 0) {\n return (values[mid - 1]! + values[mid]!) / 2;\n } else {\n return values[mid]!;\n }\n }\n\n /**\n * Calculates the variance of all numeric elements.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @returns A promise of the variance, or undefined if empty\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).variance(); // 2\n * ```\n */\n async variance(this: Asynciterflow<number>): Promise<number | undefined> {\n const values = await this.toArray();\n if (values.length === 0) return undefined;\n\n const mean = values.reduce((sum, val) => sum + val, 0) / values.length;\n\n // Optimize: calculate sum of squared differences in single pass without intermediate array\n let sumSquaredDiffs = 0;\n for (let i = 0; i < values.length; i++) {\n const diff = values[i]! - mean;\n sumSquaredDiffs += diff * diff;\n }\n\n return sumSquaredDiffs / values.length;\n }\n\n /**\n * Calculates the standard deviation of all numeric elements.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @returns A promise of the standard deviation, or undefined if empty\n * @example\n * ```typescript\n * await asyncIter([2, 4, 4, 4, 5, 5, 7, 9]).stdDev(); // ~2\n * ```\n */\n async stdDev(this: Asynciterflow<number>): Promise<number | undefined> {\n const variance = await this.variance();\n return variance === undefined ? undefined : Math.sqrt(variance);\n }\n\n /**\n * Calculates the specified percentile of all numeric elements.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @param p - The percentile to calculate (0-100)\n * @returns A promise of the percentile value, or undefined if empty\n * @throws {Error} If p is not between 0 and 100\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).percentile(50); // 3\n * ```\n */\n async percentile(\n this: Asynciterflow<number>,\n p: number,\n ): Promise<number | undefined> {\n validateRange(p, 0, 100, \"percentile\", \"percentile\");\n\n const values = await this.toArray();\n if (values.length === 0) return undefined;\n\n values.sort((a, b) => a - b);\n\n if (p === 0) return values[0]!;\n if (p === 100) return values[values.length - 1]!\n\n const index = (p / 100) * (values.length - 1);\n const lower = Math.floor(index);\n const upper = Math.ceil(index);\n\n if (lower === upper) {\n return values[lower]!;\n }\n\n const weight = index - lower;\n return values[lower]! * (1 - weight) + values[upper]! * weight;\n }\n\n /**\n * Finds the most frequent value(s) in the dataset.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @returns A promise of an array of the most frequent value(s), or undefined if empty\n * @example\n * ```typescript\n * await asyncIter([1, 2, 2, 3, 3, 3]).mode(); // [3]\n * ```\n */\n async mode(this: Asynciterflow<number>): Promise<number[] | undefined> {\n const values = await this.toArray();\n if (values.length === 0) return undefined;\n\n const frequency = new Map<number, number>();\n let maxFreq = 0;\n\n for (const value of values) {\n const count = (frequency.get(value) || 0) + 1;\n frequency.set(value, count);\n maxFreq = Math.max(maxFreq, count);\n }\n\n const modes: number[] = [];\n for (const [value, freq] of frequency) {\n if (freq === maxFreq) {\n modes.push(value);\n }\n }\n\n return modes.sort((a, b) => a - b);\n }\n\n /**\n * Calculates the quartiles (Q1, Q2, Q3) of all numeric elements.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @returns A promise of an object with Q1, Q2, and Q3 values, or undefined if empty\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5, 6, 7, 8, 9]).quartiles();\n * // { Q1: 3, Q2: 5, Q3: 7 }\n * ```\n */\n async quartiles(\n this: Asynciterflow<number>,\n ): Promise<{ Q1: number; Q2: number; Q3: number } | undefined> {\n const values = await this.toArray();\n if (values.length === 0) return undefined;\n\n values.sort((a, b) => a - b);\n\n const calculatePercentile = (p: number): number => {\n if (p === 0) return values[0]!;\n if (p === 100) return values[values.length - 1]!;\n\n const index = (p / 100) * (values.length - 1);\n const lower = Math.floor(index);\n const upper = Math.ceil(index);\n\n if (lower === upper) {\n return values[lower]!;\n }\n\n const weight = index - lower;\n return values[lower]! * (1 - weight) + values[upper]! * weight;\n };\n\n return {\n Q1: calculatePercentile(25),\n Q2: calculatePercentile(50),\n Q3: calculatePercentile(75),\n };\n }\n\n /**\n * Calculates the span (range from minimum to maximum value).\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @returns A promise of the span (max - min), or undefined if empty\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).span(); // 4\n * ```\n */\n async span(this: Asynciterflow<number>): Promise<number | undefined> {\n let minimum: number | undefined = undefined;\n let maximum: number | undefined = undefined;\n\n for await (const value of this) {\n if (minimum === undefined || value < minimum) {\n minimum = value;\n }\n if (maximum === undefined || value > maximum) {\n maximum = value;\n }\n }\n\n return minimum === undefined || maximum === undefined\n ? undefined\n : maximum - minimum;\n }\n\n /**\n * Calculates the product of all numeric elements.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @returns A promise of the product of all elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).product(); // 120\n * ```\n */\n async product(this: Asynciterflow<number>): Promise<number> {\n let result = 1;\n for await (const value of this) {\n result *= value;\n }\n return result;\n }\n\n /**\n * Calculates the covariance between two numeric sequences.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @param other - An async iterable of numbers to compare with\n * @returns A promise of the covariance, or undefined if sequences are empty or have different lengths\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).covariance([2, 4, 6, 8, 10]); // 4\n * ```\n */\n async covariance(\n this: Asynciterflow<number>,\n other: AsyncIterable<number> | Iterable<number>,\n ): Promise<number | undefined> {\n const values1 = await this.toArray();\n const values2: number[] = [];\n\n if (Symbol.asyncIterator in other) {\n for await (const value of other) {\n values2.push(value);\n }\n } else {\n for (const value of other) {\n values2.push(value);\n }\n }\n\n if (\n values1.length === 0 ||\n values2.length === 0 ||\n values1.length !== values2.length\n ) {\n return undefined;\n }\n\n const mean1 = values1.reduce((sum, val) => sum + val, 0) / values1.length;\n const mean2 = values2.reduce((sum, val) => sum + val, 0) / values2.length;\n\n let covariance = 0;\n for (let i = 0; i < values1.length; i++) {\n covariance += (values1[i]! - mean1) * (values2[i]! - mean2);\n }\n\n return covariance / values1.length;\n }\n\n /**\n * Calculates the Pearson correlation coefficient between two numeric sequences.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param this - async iterflow instance constrained to numbers\n * @param other - An async iterable of numbers to compare with\n * @returns A promise of the correlation coefficient, or undefined if sequences are empty or have different lengths\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).correlation([2, 4, 6, 8, 10]); // 1\n * ```\n */\n async correlation(\n this: Asynciterflow<number>,\n other: AsyncIterable<number> | Iterable<number>,\n ): Promise<number | undefined> {\n const values1 = await this.toArray();\n const values2: number[] = [];\n\n if (Symbol.asyncIterator in other) {\n for await (const value of other) {\n values2.push(value);\n }\n } else {\n for (const value of other) {\n values2.push(value);\n }\n }\n\n if (\n values1.length === 0 ||\n values2.length === 0 ||\n values1.length !== values2.length\n ) {\n return undefined;\n }\n\n const mean1 = values1.reduce((sum, val) => sum + val, 0) / values1.length;\n const mean2 = values2.reduce((sum, val) => sum + val, 0) / values2.length;\n\n let covariance = 0;\n let variance1 = 0;\n let variance2 = 0;\n\n for (let i = 0; i < values1.length; i++) {\n const diff1 = values1[i]! - mean1;\n const diff2 = values2[i]! - mean2;\n covariance += diff1 * diff2;\n variance1 += diff1 * diff1;\n variance2 += diff2 * diff2;\n }\n\n const stdDev1 = Math.sqrt(variance1 / values1.length);\n const stdDev2 = Math.sqrt(variance2 / values2.length);\n\n if (stdDev1 === 0 || stdDev2 === 0) {\n return undefined;\n }\n\n return covariance / (values1.length * stdDev1 * stdDev2);\n }\n\n // Windowing operations\n /**\n * Creates a sliding window of the specified size over the elements.\n *\n * @param size - The size of each window\n * @returns A new async iterflow of arrays, each containing `size` consecutive elements\n * @throws {Error} If size is less than 1\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).window(3).toArray();\n * // [[1, 2, 3], [2, 3, 4], [3, 4, 5]]\n * ```\n */\n window(size: number): Asynciterflow<T[]> {\n validatePositiveInteger(size, \"size\", \"window\");\n\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n // Use circular buffer to avoid O(n) shift() operations\n const buffer: T[] = new Array(size);\n let count = 0;\n let index = 0;\n\n for await (const value of self) {\n buffer[index] = value;\n count++;\n index = (index + 1) % size;\n\n if (count >= size) {\n // Build window array in correct order from circular buffer\n const window = new Array(size);\n for (let i = 0; i < size; i++) {\n window[i] = buffer[(index + i) % size];\n }\n yield window;\n }\n }\n },\n });\n }\n\n /**\n * Splits elements into chunks of the specified size.\n *\n * @param size - The size of each chunk\n * @returns A new async iterflow of arrays, each containing up to `size` elements\n * @throws {Error} If size is less than 1\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).chunk(2).toArray();\n * // [[1, 2], [3, 4], [5]]\n * ```\n */\n chunk(size: number): Asynciterflow<T[]> {\n validatePositiveInteger(size, \"size\", \"chunk\");\n\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n // Preallocate buffer to avoid dynamic resizing\n let buffer: T[] = new Array(size);\n let bufferIndex = 0;\n\n for await (const value of self) {\n buffer[bufferIndex++] = value;\n\n if (bufferIndex === size) {\n yield buffer;\n buffer = new Array(size);\n bufferIndex = 0;\n }\n }\n\n if (bufferIndex > 0) {\n // Slice to remove unused preallocated slots\n yield buffer.slice(0, bufferIndex);\n }\n },\n });\n }\n\n /**\n * Creates pairs of consecutive elements.\n *\n * @returns A new async iterflow of tuples, each containing two consecutive elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4]).pairwise().toArray();\n * // [[1, 2], [2, 3], [3, 4]]\n * ```\n */\n pairwise(): Asynciterflow<[T, T]> {\n return this.window(2).map((arr) => [arr[0]!, arr[1]!] as [T, T]);\n }\n\n // Set operations\n /**\n * Removes duplicate elements, keeping only the first occurrence.\n *\n * @returns A new async iterflow with duplicate elements removed\n * @example\n * ```typescript\n * await asyncIter([1, 2, 2, 3, 1, 4]).distinct().toArray();\n * // [1, 2, 3, 4]\n * ```\n */\n distinct(): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const seen = new Set<T>();\n\n for await (const value of self) {\n if (!seen.has(value)) {\n seen.add(value);\n yield value;\n }\n }\n },\n });\n }\n\n /**\n * Removes duplicate elements based on a key function.\n *\n * @template K The type of the key used for comparison\n * @param keyFn - Async or sync function to extract the comparison key\n * @returns A new async iterflow with duplicate elements (by key) removed\n * @example\n * ```typescript\n * const users = [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}, {id: 1, name: 'Charlie'}];\n * await asyncIter(users).distinctBy(async u => u.id).toArray();\n * // [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}]\n * ```\n */\n distinctBy<K>(keyFn: (value: T) => K | Promise<K>): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const seenKeys = new Set<K>();\n\n for await (const value of self) {\n const key = await keyFn(value);\n if (!seenKeys.has(key)) {\n seenKeys.add(key);\n yield value;\n }\n }\n },\n });\n }\n\n // Utility operations\n /**\n * Executes a side-effect function on each element without modifying the stream.\n *\n * @param fn - Async or sync function to execute for each element\n * @returns A new async iterflow with the same elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3])\n * .tap(async x => console.log('Processing:', x))\n * .map(async x => x * 2)\n * .toArray(); // logs each value, returns [2, 4, 6]\n * ```\n */\n tap(fn: (value: T) => void | Promise<void>): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n for await (const value of self) {\n await fn(value);\n yield value;\n }\n },\n });\n }\n\n /**\n * Takes elements while the predicate returns true, then stops.\n *\n * @param predicate - Async or sync function to test each element\n * @returns A new async iterflow with elements up to the first failing predicate\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 1, 2]).takeWhile(async x => x < 4).toArray();\n * // [1, 2, 3]\n * ```\n */\n takeWhile(\n predicate: (value: T) => boolean | Promise<boolean>,\n ): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n for await (const value of self) {\n if (!(await predicate(value))) break;\n yield value;\n }\n },\n });\n }\n\n /**\n * Skips elements while the predicate returns true, then yields all remaining.\n *\n * @param predicate - Async or sync function to test each element\n * @returns A new async iterflow starting from the first element that fails the predicate\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 1, 2]).dropWhile(async x => x < 3).toArray();\n * // [3, 4, 1, 2]\n * ```\n */\n dropWhile(\n predicate: (value: T) => boolean | Promise<boolean>,\n ): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n let dropping = true;\n for await (const value of self) {\n if (dropping && (await predicate(value))) {\n continue;\n }\n dropping = false;\n yield value;\n }\n },\n });\n }\n\n // Grouping operations (terminal)\n /**\n * Splits elements into two arrays based on a predicate.\n * This is a terminal operation that consumes the async iterator.\n *\n * @param predicate - Async or sync function to test each element\n * @returns A promise of a tuple of two arrays\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).partition(async x => x % 2 === 0);\n * // [[2, 4], [1, 3, 5]]\n * ```\n */\n async partition(\n predicate: (value: T) => boolean | Promise<boolean>,\n ): Promise<[T[], T[]]> {\n const truthy: T[] = [];\n const falsy: T[] = [];\n\n for await (const value of this) {\n if (await predicate(value)) {\n truthy.push(value);\n } else {\n falsy.push(value);\n }\n }\n\n return [truthy, falsy];\n }\n\n /**\n * Groups elements by a key function into a Map.\n * This is a terminal operation that consumes the async iterator.\n *\n * @template K The type of the grouping key\n * @param keyFn - Async or sync function to extract the grouping key\n * @returns A promise of a Map where keys are the result of keyFn and values are arrays of elements\n * @example\n * ```typescript\n * await asyncIter(['alice', 'bob', 'charlie', 'dave'])\n * .groupBy(async name => name.length);\n * // Map { 3 => ['bob'], 5 => ['alice'], 7 => ['charlie'], 4 => ['dave'] }\n * ```\n */\n async groupBy<K>(keyFn: (value: T) => K | Promise<K>): Promise<Map<K, T[]>> {\n const groups = new Map<K, T[]>();\n\n for await (const value of this) {\n const key = await keyFn(value);\n if (!groups.has(key)) {\n groups.set(key, []);\n }\n groups.get(key)!.push(value);\n }\n\n return groups;\n }\n\n // Additional terminal operations\n /**\n * Reduces the async iterator to a single value using an accumulator function.\n * This is a terminal operation that consumes the async iterator.\n *\n * @template U The type of the accumulated value\n * @param fn - Async or sync function to combine the accumulator with each element\n * @param initial - The initial value for the accumulator\n * @returns A promise of the final accumulated value\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4]).reduce(async (acc, x) => acc + x, 0); // 10\n * ```\n */\n async reduce<U>(\n fn: (accumulator: U, value: T) => U | Promise<U>,\n initial: U,\n ): Promise<U> {\n let accumulator = initial;\n for await (const value of this) {\n accumulator = await fn(accumulator, value);\n }\n return accumulator;\n }\n\n /**\n * Finds the first element that matches the predicate.\n * This is a terminal operation that may consume part of the async iterator.\n *\n * @param predicate - Async or sync function to test each element\n * @returns A promise of the first matching element, or undefined if none found\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).find(async x => x > 3); // 4\n * ```\n */\n async find(\n predicate: (value: T) => boolean | Promise<boolean>,\n ): Promise<T | undefined> {\n for await (const value of this) {\n if (await predicate(value)) {\n return value;\n }\n }\n return undefined;\n }\n\n /**\n * Finds the index of the first element that matches the predicate.\n * This is a terminal operation that may consume part of the async iterator.\n *\n * @param predicate - Async or sync function to test each element\n * @returns A promise of the index of the first matching element, or -1 if none found\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).findIndex(async x => x > 3); // 3\n * ```\n */\n async findIndex(\n predicate: (value: T) => boolean | Promise<boolean>,\n ): Promise<number> {\n let index = 0;\n for await (const value of this) {\n if (await predicate(value)) {\n return index;\n }\n index++;\n }\n return -1;\n }\n\n /**\n * Tests whether at least one element matches the predicate.\n * This is a terminal operation that may consume part of the async iterator.\n *\n * @param predicate - Async or sync function to test each element\n * @returns A promise of true if any element matches, false otherwise\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).some(async x => x > 3); // true\n * ```\n */\n async some(\n predicate: (value: T) => boolean | Promise<boolean>,\n ): Promise<boolean> {\n for await (const value of this) {\n if (await predicate(value)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Tests whether all elements match the predicate.\n * This is a terminal operation that may consume part or all of the async iterator.\n *\n * @param predicate - Async or sync function to test each element\n * @returns A promise of true if all elements match, false otherwise\n * @example\n * ```typescript\n * await asyncIter([2, 4, 6]).every(async x => x % 2 === 0); // true\n * ```\n */\n async every(\n predicate: (value: T) => boolean | Promise<boolean>,\n ): Promise<boolean> {\n for await (const value of this) {\n if (!(await predicate(value))) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Gets the first element from the async iterator.\n * This is a terminal operation that consumes the first element.\n *\n * @param defaultValue - Optional default value to return if iterator is empty\n * @returns A promise of the first element, the default value, or undefined if empty and no default\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3]).first(); // 1\n * ```\n */\n async first(defaultValue?: T): Promise<T | undefined> {\n const result = await this.source.next();\n return result.done ? defaultValue : result.value;\n }\n\n /**\n * Gets the last element from the async iterator.\n * This is a terminal operation that consumes the entire async iterator.\n *\n * @param defaultValue - Optional default value to return if iterator is empty\n * @returns A promise of the last element, the default value, or undefined if empty and no default\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3]).last(); // 3\n * ```\n */\n async last(defaultValue?: T): Promise<T | undefined> {\n let lastValue: T | undefined = defaultValue;\n let hasValue = false;\n for await (const value of this) {\n lastValue = value;\n hasValue = true;\n }\n return hasValue ? lastValue : defaultValue;\n }\n\n /**\n * Gets the element at the specified index.\n * This is a terminal operation that may consume part of the async iterator.\n *\n * @param index - Zero-based index of the element to retrieve\n * @returns A promise of the element at the index, or undefined if index is out of bounds\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).nth(2); // 3\n * ```\n */\n async nth(index: number): Promise<T | undefined> {\n if (index < 0) {\n return undefined;\n }\n let currentIndex = 0;\n for await (const value of this) {\n if (currentIndex === index) {\n return value;\n }\n currentIndex++;\n }\n return undefined;\n }\n\n /**\n * Checks if the async iterator is empty.\n * This is a terminal operation that may consume the first element.\n *\n * @returns A promise of true if the iterator has no elements, false otherwise\n * @example\n * ```typescript\n * await asyncIter([]).isEmpty(); // true\n * ```\n */\n async isEmpty(): Promise<boolean> {\n const result = await this.source.next();\n return result.done === true;\n }\n\n /**\n * Checks if the async iterator includes a specific value.\n * This is a terminal operation that may consume part or all of the async iterator.\n *\n * @param searchValue - The value to search for\n * @returns A promise of true if the value is found, false otherwise\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).includes(3); // true\n * ```\n */\n async includes(searchValue: T): Promise<boolean> {\n for await (const value of this) {\n if (value === searchValue) {\n return true;\n }\n }\n return false;\n }\n\n // Concurrent/Parallel processing operations\n /**\n * Maps elements in parallel with a concurrency limit.\n * Processes multiple elements simultaneously while respecting the concurrency limit.\n *\n * @template U The type of the transformed elements\n * @param fn - Async function to transform each element\n * @param concurrency - Maximum number of concurrent operations (default: 10)\n * @returns A new async iterflow with transformed elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5])\n * .mapParallel(async x => {\n * await sleep(100);\n * return x * 2;\n * }, 3)\n * .toArray(); // Processes 3 items at a time\n * ```\n */\n mapParallel<U>(\n fn: (value: T) => Promise<U>,\n concurrency = 10,\n ): Asynciterflow<U> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const promises: Array<Promise<{ index: number; value: U }>> = [];\n const results: Map<number, U> = new Map();\n let nextIndex = 0;\n let completedIndex = 0;\n\n for await (const value of self) {\n const currentIndex = nextIndex++;\n const promise = fn(value).then((result) => ({\n index: currentIndex,\n value: result,\n }));\n\n promises.push(promise);\n\n if (promises.length >= concurrency) {\n const completed = await Promise.race(promises);\n results.set(completed.index, completed.value);\n promises.splice(\n promises.findIndex((p) =>\n p.then((r) => r.index === completed.index),\n ),\n 1,\n );\n\n while (results.has(completedIndex)) {\n yield results.get(completedIndex)!;\n results.delete(completedIndex);\n completedIndex++;\n }\n }\n }\n\n // Process remaining promises\n while (promises.length > 0) {\n const completed = await Promise.race(promises);\n results.set(completed.index, completed.value);\n promises.splice(\n promises.findIndex((p) =>\n p.then((r) => r.index === completed.index),\n ),\n 1,\n );\n\n while (results.has(completedIndex)) {\n yield results.get(completedIndex)!;\n results.delete(completedIndex);\n completedIndex++;\n }\n }\n },\n });\n }\n\n /**\n * Filters elements in parallel with a concurrency limit.\n *\n * @param predicate - Async function to test each element\n * @param concurrency - Maximum number of concurrent operations (default: 10)\n * @returns A new async iterflow with only elements that pass the predicate\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5])\n * .filterParallel(async x => {\n * await sleep(100);\n * return x % 2 === 0;\n * }, 3)\n * .toArray(); // [2, 4]\n * ```\n */\n filterParallel(\n predicate: (value: T) => Promise<boolean>,\n concurrency = 10,\n ): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const promises: Array<\n Promise<{ index: number; value: T; keep: boolean }>\n > = [];\n const results: Map<number, { value: T; keep: boolean }> = new Map();\n let nextIndex = 0;\n let completedIndex = 0;\n\n for await (const value of self) {\n const currentIndex = nextIndex++;\n const promise = predicate(value).then((keep) => ({\n index: currentIndex,\n value,\n keep,\n }));\n\n promises.push(promise);\n\n if (promises.length >= concurrency) {\n const completed = await Promise.race(promises);\n results.set(completed.index, {\n value: completed.value,\n keep: completed.keep,\n });\n promises.splice(\n promises.findIndex((p) =>\n p.then((r) => r.index === completed.index),\n ),\n 1,\n );\n\n while (results.has(completedIndex)) {\n const result = results.get(completedIndex)!;\n if (result.keep) {\n yield result.value;\n }\n results.delete(completedIndex);\n completedIndex++;\n }\n }\n }\n\n // Process remaining promises\n while (promises.length > 0) {\n const completed = await Promise.race(promises);\n results.set(completed.index, {\n value: completed.value,\n keep: completed.keep,\n });\n promises.splice(\n promises.findIndex((p) =>\n p.then((r) => r.index === completed.index),\n ),\n 1,\n );\n\n while (results.has(completedIndex)) {\n const result = results.get(completedIndex)!;\n if (result.keep) {\n yield result.value;\n }\n results.delete(completedIndex);\n completedIndex++;\n }\n }\n },\n });\n }\n\n /**\n * FlatMaps elements in parallel with a concurrency limit.\n *\n * @template U The type of elements in the resulting iterator\n * @param fn - Async function that maps each element to an async iterable\n * @param concurrency - Maximum number of concurrent operations (default: 10)\n * @returns A new async iterflow with all mapped iterables flattened\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3])\n * .flatMapParallel(async x => [x, x * 2], 2)\n * .toArray(); // [1, 2, 2, 4, 3, 6]\n * ```\n */\n flatMapParallel<U>(\n fn: (value: T) => Promise<AsyncIterable<U> | Iterable<U>>,\n concurrency = 10,\n ): Asynciterflow<U> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const promises: Array<\n Promise<{ index: number; values: AsyncIterable<U> | Iterable<U> }>\n > = [];\n const results: Map<number, AsyncIterable<U> | Iterable<U>> = new Map();\n let nextIndex = 0;\n let completedIndex = 0;\n\n for await (const value of self) {\n const currentIndex = nextIndex++;\n const promise = fn(value).then((values) => ({\n index: currentIndex,\n values,\n }));\n\n promises.push(promise);\n\n if (promises.length >= concurrency) {\n const completed = await Promise.race(promises);\n results.set(completed.index, completed.values);\n promises.splice(\n promises.findIndex((p) =>\n p.then((r) => r.index === completed.index),\n ),\n 1,\n );\n\n while (results.has(completedIndex)) {\n const result = results.get(completedIndex)!;\n if (Symbol.asyncIterator in result) {\n yield* result;\n } else {\n yield* result;\n }\n results.delete(completedIndex);\n completedIndex++;\n }\n }\n }\n\n // Process remaining promises\n while (promises.length > 0) {\n const completed = await Promise.race(promises);\n results.set(completed.index, completed.values);\n promises.splice(\n promises.findIndex((p) =>\n p.then((r) => r.index === completed.index),\n ),\n 1,\n );\n\n while (results.has(completedIndex)) {\n const result = results.get(completedIndex)!;\n if (Symbol.asyncIterator in result) {\n yield* result;\n } else {\n yield* result;\n }\n results.delete(completedIndex);\n completedIndex++;\n }\n }\n },\n });\n }\n\n // Backpressure handling\n /**\n * Buffers elements up to a specified size.\n *\n * @param size - Maximum buffer size\n * @returns A new async iterflow with buffered elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).buffer(2).toArray();\n * // [[1, 2], [3, 4], [5]]\n * ```\n */\n buffer(size: number): Asynciterflow<T[]> {\n return this.chunk(size);\n }\n\n /**\n * Throttles the stream to emit at most one value per time interval.\n *\n * @param intervalMs - Minimum time between emissions in milliseconds\n * @returns A new async iterflow with throttled elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).throttle(100).toArray();\n * // Emits one value every 100ms\n * ```\n */\n throttle(intervalMs: number): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n let lastEmitTime = 0;\n\n for await (const value of self) {\n const now = Date.now();\n \n if (now - lastEmitTime >= intervalMs) {\n lastEmitTime = now;\n yield value;\n } else {\n const delay = intervalMs - (now - lastEmitTime);\n await new Promise((resolve) => setTimeout(resolve, delay));\n lastEmitTime = Date.now();\n yield value;\n }\n }\n },\n });\n }\n\n /**\n * Debounces the stream, only emitting values after a period of silence.\n *\n * @param waitMs - Time to wait for silence in milliseconds\n * @returns A new async iterflow with debounced elements\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3, 4, 5]).debounce(100).toArray();\n * // Only emits values after 100ms of no new values\n * ```\n */\n debounce(waitMs: number): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const buffer: T[] = [];\n let lastValue: T | undefined;\n let hasValue = false;\n\n for await (const value of self) {\n hasValue = true;\n lastValue = value;\n buffer.push(value);\n\n // Wait for the debounce period\n await new Promise((resolve) => setTimeout(resolve, waitMs));\n\n // If this is still the last value after waiting, emit it\n if (lastValue === value && buffer[buffer.length - 1] === value) {\n yield value;\n buffer.length = 0;\n }\n }\n\n // Emit the last value if it hasn't been emitted yet\n if (hasValue && buffer.length > 0 && lastValue !== undefined) {\n yield lastValue;\n }\n },\n });\n }\n\n // Error handling\n /**\n * Catches errors and continues with a fallback value or stream.\n *\n * @param handler - Function to handle errors and return a fallback value or async iterable\n * @returns A new async iterflow with error handling\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3])\n * .map(async x => {\n * if (x === 2) throw new Error('Error!');\n * return x;\n * })\n * .catchError(async (error) => [-1])\n * .toArray(); // [1, -1, 3]\n * ```\n */\n catchError(\n handler: (\n error: unknown,\n ) =>\n | T\n | AsyncIterable<T>\n | Iterable<T>\n | Promise<T | AsyncIterable<T> | Iterable<T>>,\n ): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n try {\n for await (const value of self) {\n yield value;\n }\n } catch (error) {\n const fallback = await handler(error);\n if (\n typeof fallback === \"object\" &&\n fallback !== null &&\n (Symbol.asyncIterator in fallback || Symbol.iterator in fallback)\n ) {\n if (Symbol.asyncIterator in fallback) {\n yield* fallback as AsyncIterable<T>;\n } else {\n yield* fallback as Iterable<T>;\n }\n } else {\n yield fallback as T;\n }\n }\n },\n });\n }\n\n /**\n * Retries failed operations a specified number of times.\n *\n * @param maxRetries - Maximum number of retry attempts\n * @param delayMs - Optional delay between retries in milliseconds\n * @returns A new async iterflow with retry logic\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3])\n * .map(async x => {\n * if (Math.random() > 0.5) throw new Error('Random error');\n * return x;\n * })\n * .retry(3, 100)\n * .toArray(); // Retries up to 3 times with 100ms delay\n * ```\n */\n retry(maxRetries: number, delayMs = 0): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const iterator = self[Symbol.asyncIterator]();\n let retryCount = 0;\n\n while (true) {\n try {\n const result = await iterator.next();\n if (result.done) break;\n yield result.value;\n retryCount = 0; // Reset retry count on success\n } catch (error) {\n if (retryCount < maxRetries) {\n retryCount++;\n if (delayMs > 0) {\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n // Don't re-throw, continue to next iteration for retry\n } else {\n throw error;\n }\n }\n }\n },\n });\n }\n\n /**\n * Handles errors for each element individually.\n *\n * @param handler - Async or sync function to handle errors for each element\n * @returns A new async iterflow with error handling\n * @example\n * ```typescript\n * await asyncIter([1, 2, 3])\n * .map(async x => {\n * if (x === 2) throw new Error('Error!');\n * return x;\n * })\n * .onError(async (error, value) => console.error('Error:', error))\n * .toArray(); // [1, 3] (2 is skipped)\n * ```\n */\n onError(\n handler: (error: unknown, value?: T) => void | Promise<void>,\n ): Asynciterflow<T> {\n const self = this;\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n for await (const value of self) {\n try {\n yield value;\n } catch (error) {\n await handler(error, value);\n // Continue to next element\n }\n }\n },\n });\n }\n}\n\n/**\n * Creates an async iterflow instance from an async iterable or iterable.\n * This is the main entry point for working with async iterables in a fluent API style.\n *\n * @template T The type of elements in the iterable\n * @param source - The async iterable or iterable to wrap\n * @returns A new async iterflow instance\n * @example\n * ```typescript\n * await asyncIter(asyncIterable)\n * .filter(async x => x % 2 === 0)\n * .map(async x => x * 2)\n * .toArray(); // [4, 8]\n * ```\n */\nexport function asyncIter<T>(\n source: AsyncIterable<T> | Iterable<T>,\n): Asynciterflow<T> {\n if (Symbol.asyncIterator in source) {\n return new Asynciterflow(source);\n }\n // Convert sync iterable to async iterable\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n yield* source as Iterable<T>;\n },\n });\n}\n\n// Static helper methods namespace\nexport namespace asyncIter {\n /**\n * Combines two async iterables into an async iterator of tuples.\n * Stops when the shorter iterable is exhausted.\n *\n * @template T The type of elements in the first iterable\n * @template U The type of elements in the second iterable\n * @param iter1 - The first async iterable\n * @param iter2 - The second async iterable\n * @returns A new async iterflow of tuples pairing elements from both iterables\n * @example\n * ```typescript\n * await asyncIter.zip(asyncIter1, asyncIter2).toArray();\n * // [[1, 'a'], [2, 'b'], [3, 'c']]\n * ```\n */\n export function zip<T, U>(\n iter1: AsyncIterable<T> | Iterable<T>,\n iter2: AsyncIterable<U> | Iterable<U>,\n ): Asynciterflow<[T, U]> {\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const it1 =\n Symbol.asyncIterator in iter1\n ? iter1[Symbol.asyncIterator]()\n : (async function* () {\n yield* iter1 as Iterable<T>;\n })();\n const it2 =\n Symbol.asyncIterator in iter2\n ? iter2[Symbol.asyncIterator]()\n : (async function* () {\n yield* iter2 as Iterable<U>;\n })();\n\n while (true) {\n const result1 = await it1.next();\n const result2 = await it2.next();\n\n if (result1.done || result2.done) {\n break;\n }\n\n yield [result1.value, result2.value];\n }\n },\n });\n }\n\n /**\n * Combines two async iterables using a combining function.\n * Stops when the shorter iterable is exhausted.\n *\n * @template T The type of elements in the first iterable\n * @template U The type of elements in the second iterable\n * @template R The type of the result\n * @param iter1 - The first async iterable\n * @param iter2 - The second async iterable\n * @param fn - Async or sync function to combine elements\n * @returns A new async iterflow with combined results\n * @example\n * ```typescript\n * await asyncIter.zipWith(asyncIter1, asyncIter2, async (a, b) => a + b).toArray();\n * // [11, 22, 33]\n * ```\n */\n export function zipWith<T, U, R>(\n iter1: AsyncIterable<T> | Iterable<T>,\n iter2: AsyncIterable<U> | Iterable<U>,\n fn: (a: T, b: U) => R | Promise<R>,\n ): Asynciterflow<R> {\n return zip(iter1, iter2).map(async ([a, b]) => await fn(a, b));\n }\n\n /**\n * Generates an async sequence of numbers.\n *\n * @param stop - The end value (exclusive)\n * @returns A new async iterflow of numbers\n * @example\n * ```typescript\n * await asyncIter.range(5).toArray(); // [0, 1, 2, 3, 4]\n * ```\n */\n export function range(stop: number): Asynciterflow<number>;\n export function range(start: number, stop: number): Asynciterflow<number>;\n export function range(\n start: number,\n stop: number,\n step: number,\n ): Asynciterflow<number>;\n export function range(\n startOrStop: number,\n stop?: number,\n step = 1,\n ): Asynciterflow<number> {\n const actualStart = stop === undefined ? 0 : startOrStop;\n const actualStop = stop === undefined ? startOrStop : stop;\n\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n if (step === 0) {\n validateNonZero(step, \"step\", \"range\");\n }\n\n if (step > 0) {\n for (let i = actualStart; i < actualStop; i += step) {\n yield i;\n }\n } else {\n for (let i = actualStart; i > actualStop; i += step) {\n yield i;\n }\n }\n },\n });\n }\n\n /**\n * Repeats a value a specified number of times, or infinitely.\n *\n * @template T The type of the value to repeat\n * @param value - The value to repeat\n * @param times - Optional number of times to repeat (infinite if omitted)\n * @returns A new async iterflow repeating the value\n * @example\n * ```typescript\n * await asyncIter.repeat('x', 3).toArray(); // ['x', 'x', 'x']\n * ```\n */\n export function repeat<T>(value: T, times?: number): Asynciterflow<T> {\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n if (times === undefined) {\n while (true) {\n yield value;\n }\n } else {\n for (let i = 0; i < times; i++) {\n yield value;\n }\n }\n },\n });\n }\n\n /**\n * Alternates elements from multiple async iterables in a round-robin fashion.\n *\n * @template T The type of elements in all iterables\n * @param iterables - Variable number of async iterables to interleave\n * @returns A new async iterflow with elements from all iterables interleaved\n * @example\n * ```typescript\n * await asyncIter.interleave(asyncIter1, asyncIter2).toArray();\n * // [1, 4, 2, 5, 3, 6]\n * ```\n */\n export function interleave<T>(\n ...iterables: Array<AsyncIterable<T> | Iterable<T>>\n ): Asynciterflow<T> {\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n if (iterables.length === 0) return;\n\n const iterators = iterables.map((it) =>\n Symbol.asyncIterator in it\n ? it[Symbol.asyncIterator]()\n : (async function* () {\n yield* it as Iterable<T>;\n })(),\n );\n const active = new Set(iterators);\n\n while (active.size > 0) {\n for (const iterator of iterators) {\n if (!active.has(iterator)) continue;\n\n const result = await iterator.next();\n if (result.done) {\n active.delete(iterator);\n } else {\n yield result.value;\n }\n }\n }\n },\n });\n }\n\n /**\n * Merges multiple sorted async iterables into a single sorted async iterator.\n *\n * @template T The type of elements in all iterables\n * @param iterables - Variable number of sorted async iterables to merge\n * @returns A new async iterflow with all elements merged in sorted order\n * @example\n * ```typescript\n * await asyncIter.merge(asyncIter1, asyncIter2).toArray();\n * // [1, 2, 3, 4, 5, 6]\n * ```\n */\n export function merge<T>(\n ...iterables: Array<AsyncIterable<T> | Iterable<T>>\n ): Asynciterflow<T>;\n export function merge<T>(\n compareFn: (a: T, b: T) => number,\n ...iterables: Array<AsyncIterable<T> | Iterable<T>>\n ): Asynciterflow<T>;\n export function merge<T>(\n ...args: (AsyncIterable<T> | Iterable<T> | ((a: T, b: T) => number))[]\n ): Asynciterflow<T> {\n let compareFn: (a: T, b: T) => number;\n let iterables: Array<AsyncIterable<T> | Iterable<T>>;\n\n // Check if first argument is a function (comparator)\n if (typeof args[0] === \"function\") {\n compareFn = args[0] as (a: T, b: T) => number;\n iterables = args.slice(1) as Array<AsyncIterable<T> | Iterable<T>>;\n } else {\n // Default comparator for numbers/strings\n compareFn = (a: T, b: T) => {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n };\n iterables = args as Array<AsyncIterable<T> | Iterable<T>>;\n }\n\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n if (iterables.length === 0) return;\n\n // Initialize all iterators with their first value\n const heap: Array<{\n value: T;\n iterator: AsyncIterator<T>;\n index: number;\n }> = [];\n\n for (let i = 0; i < iterables.length; i++) {\n const iterable = iterables[i]!;\n const iterator =\n Symbol.asyncIterator in iterable\n ? iterable[Symbol.asyncIterator]()\n : (async function* () {\n yield* iterable as Iterable<T>;\n })();\n\n const result = await iterator.next();\n if (!result.done) {\n heap.push({ value: result.value, iterator, index: i });\n }\n }\n\n // Helper to maintain min-heap property\n const bubbleDown = (index: number) => {\n const length = heap.length;\n while (true) {\n let smallest = index;\n const leftChild = 2 * index + 1;\n const rightChild = 2 * index + 2;\n\n if (\n leftChild < length &&\n compareFn(heap[leftChild]!.value, heap[smallest]!.value) < 0\n ) {\n smallest = leftChild;\n }\n\n if (\n rightChild < length &&\n compareFn(heap[rightChild]!.value, heap[smallest]!.value) < 0\n ) {\n smallest = rightChild;\n }\n\n if (smallest === index) break;\n\n [heap[index], heap[smallest]] = [heap[smallest]!, heap[index]!];\n index = smallest;\n }\n };\n\n // Build initial heap\n for (let i = Math.floor(heap.length / 2) - 1; i >= 0; i--) {\n bubbleDown(i);\n }\n\n // Extract minimum and refill from same iterator\n while (heap.length > 0) {\n const { value, iterator } = heap[0]!;\n yield value;\n\n const result = await iterator.next();\n if (result.done) {\n // Remove this iterator from heap\n heap[0] = heap[heap.length - 1]!;\n heap.pop();\n if (heap.length > 0) {\n bubbleDown(0);\n }\n } else {\n // Replace with next value from same iterator\n heap[0]!.value = result.value;\n bubbleDown(0);\n }\n }\n },\n });\n }\n\n /**\n * Chains multiple async iterables sequentially, one after another.\n *\n * @template T The type of elements in all iterables\n * @param iterables - Variable number of async iterables to chain\n * @returns A new async iterflow with all elements chained sequentially\n * @example\n * ```typescript\n * await asyncIter.chain(asyncIter1, asyncIter2).toArray();\n * // [1, 2, 3, 4, 5, 6]\n * ```\n */\n export function chain<T>(\n ...iterables: Array<AsyncIterable<T> | Iterable<T>>\n ): Asynciterflow<T> {\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n for (const iterable of iterables) {\n if (Symbol.asyncIterator in iterable) {\n yield* iterable;\n } else {\n yield* iterable as Iterable<T>;\n }\n }\n },\n });\n }\n\n /**\n * Creates an async iterator from a generator function.\n *\n * @template T The type of elements to generate\n * @param fn - Async generator function\n * @returns A new async iterflow\n * @example\n * ```typescript\n * const fibonacci = asyncIter.fromGenerator(async function* () {\n * let [a, b] = [0, 1];\n * while (true) {\n * yield a;\n * [a, b] = [b, a + b];\n * }\n * });\n * await fibonacci.take(10).toArray(); // [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]\n * ```\n */\n export function fromGenerator<T>(\n fn: () => AsyncGenerator<T>,\n ): Asynciterflow<T> {\n return new Asynciterflow(fn());\n }\n\n /**\n * Creates an async iterator from a promise.\n *\n * @template T The type of the resolved value\n * @param promise - Promise to convert to async iterator\n * @returns A new async iterflow\n * @example\n * ```typescript\n * await asyncIter.fromPromise(fetch('/api/data').then(r => r.json())).toArray();\n * ```\n */\n export function fromPromise<T>(promise: Promise<T>): Asynciterflow<T> {\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n yield await promise;\n },\n });\n }\n\n /**\n * Creates an async iterator from an array of promises, yielding results as they resolve.\n *\n * @template T The type of the resolved values\n * @param promises - Array of promises\n * @returns A new async iterflow\n * @example\n * ```typescript\n * const promises = [fetch('/api/1'), fetch('/api/2'), fetch('/api/3')];\n * await asyncIter.fromPromises(promises).map(r => r.json()).toArray();\n * ```\n */\n export function fromPromises<T>(promises: Promise<T>[]): Asynciterflow<T> {\n return new Asynciterflow({\n async *[Symbol.asyncIterator]() {\n const results: Map<number, T> = new Map();\n const indexed = promises.map((p, i) => p.then((v) => ({ i, v })));\n\n // Wait for all promises and store results\n await Promise.all(\n indexed.map(async (p) => {\n const result = await p;\n results.set(result.i, result.v);\n })\n );\n\n // Yield in original order\n for (let i = 0; i < promises.length; i++) {\n yield results.get(i)!;\n }\n },\n });\n }\n}\n","/**\n * Debug mode and operation tracing utilities for iterflow\n * @module debug\n */\n\n/**\n * Trace entry representing a single operation execution\n */\nexport interface TraceEntry {\n operation: string;\n timestamp: number;\n input?: unknown;\n output?: unknown;\n error?: Error;\n duration?: number;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Debug configuration options\n */\nexport interface DebugConfig {\n enabled: boolean;\n traceOperations: boolean;\n traceInput: boolean;\n traceOutput: boolean;\n logToConsole: boolean;\n maxTraceEntries?: number;\n}\n\n/**\n * Global debug state\n */\nclass DebugState {\n private config: DebugConfig = {\n enabled: false,\n traceOperations: false,\n traceInput: false,\n traceOutput: false,\n logToConsole: false,\n maxTraceEntries: 1000,\n };\n\n private traces: TraceEntry[] = [];\n\n /**\n * Enable debug mode with optional configuration\n */\n enable(config?: Partial<DebugConfig>): void {\n this.config = {\n ...this.config,\n enabled: true,\n traceOperations: true,\n ...config,\n };\n\n if (this.config.logToConsole) {\n console.log(\"[iterflow Debug] Debug mode enabled\", this.config);\n }\n }\n\n /**\n * Disable debug mode\n */\n disable(): void {\n this.config.enabled = false;\n this.config.traceOperations = false;\n\n if (this.config.logToConsole) {\n console.log(\"[iterflow Debug] Debug mode disabled\");\n }\n }\n\n /**\n * Check if debug mode is enabled\n */\n isEnabled(): boolean {\n return this.config.enabled;\n }\n\n /**\n * Get current configuration\n */\n getConfig(): Readonly<DebugConfig> {\n return { ...this.config };\n }\n\n /**\n * Add a trace entry\n */\n trace(entry: TraceEntry): void {\n if (!this.config.traceOperations) {\n return;\n }\n\n // Limit trace entries to prevent memory issues\n if (this.traces.length >= (this.config.maxTraceEntries || 1000)) {\n this.traces.shift(); // Remove oldest entry\n }\n\n this.traces.push(entry);\n\n if (this.config.logToConsole) {\n this.logTrace(entry);\n }\n }\n\n /**\n * Get all trace entries\n */\n getTraces(): readonly TraceEntry[] {\n return [...this.traces];\n }\n\n /**\n * Clear all traces\n */\n clearTraces(): void {\n this.traces = [];\n\n if (this.config.logToConsole) {\n console.log(\"[iterflow Debug] Traces cleared\");\n }\n }\n\n /**\n * Get traces for a specific operation\n */\n getTracesForOperation(operation: string): TraceEntry[] {\n return this.traces.filter((t) => t.operation === operation);\n }\n\n /**\n * Get summary statistics for traces\n */\n getTraceSummary(): Record<\n string,\n { count: number; avgDuration: number; errors: number }\n > {\n const summary: Record<\n string,\n { count: number; totalDuration: number; errors: number }\n > = {};\n\n for (const trace of this.traces) {\n if (!summary[trace.operation]) {\n summary[trace.operation] = { count: 0, totalDuration: 0, errors: 0 };\n }\n\n const operationSummary = summary[trace.operation]!;\n operationSummary.count++;\n\n if (trace.duration !== undefined) {\n operationSummary.totalDuration += trace.duration;\n }\n\n if (trace.error) {\n operationSummary.errors++;\n }\n }\n\n // Convert to final format with average duration\n const result: Record<\n string,\n { count: number; avgDuration: number; errors: number }\n > = {};\n\n for (const [op, stats] of Object.entries(summary)) {\n result[op] = {\n count: stats.count,\n avgDuration: stats.count > 0 ? stats.totalDuration / stats.count : 0,\n errors: stats.errors,\n };\n }\n\n return result;\n }\n\n /**\n * Log a trace entry to console\n */\n private logTrace(entry: TraceEntry): void {\n const timestamp = new Date(entry.timestamp).toISOString();\n const duration =\n entry.duration !== undefined ? `${entry.duration.toFixed(2)}ms` : \"N/A\";\n\n if (entry.error) {\n console.error(\n `[iterflow Debug] ${timestamp} | ${entry.operation} | ERROR | ${duration}`,\n entry.error,\n );\n } else {\n console.log(\n `[iterflow Debug] ${timestamp} | ${entry.operation} | ${duration}`,\n );\n\n if (this.config.traceInput && entry.input !== undefined) {\n console.log(\" Input:\", entry.input);\n }\n\n if (this.config.traceOutput && entry.output !== undefined) {\n console.log(\" Output:\", entry.output);\n }\n\n if (entry.metadata) {\n console.log(\" Metadata:\", entry.metadata);\n }\n }\n }\n}\n\n// Global debug instance\nconst debugState = new DebugState();\n\n/**\n * Enable debug mode\n */\nexport function enableDebug(config?: Partial<DebugConfig>): void {\n debugState.enable(config);\n}\n\n/**\n * Disable debug mode\n */\nexport function disableDebug(): void {\n debugState.disable();\n}\n\n/**\n * Check if debug mode is enabled\n */\nexport function isDebugEnabled(): boolean {\n return debugState.isEnabled();\n}\n\n/**\n * Get debug configuration\n */\nexport function getDebugConfig(): Readonly<DebugConfig> {\n return debugState.getConfig();\n}\n\n/**\n * Add a trace entry\n */\nexport function addTrace(entry: TraceEntry): void {\n debugState.trace(entry);\n}\n\n/**\n * Get all trace entries\n */\nexport function getTraces(): readonly TraceEntry[] {\n return debugState.getTraces();\n}\n\n/**\n * Clear all traces\n */\nexport function clearTraces(): void {\n debugState.clearTraces();\n}\n\n/**\n * Get traces for a specific operation\n */\nexport function getTracesForOperation(operation: string): TraceEntry[] {\n return debugState.getTracesForOperation(operation);\n}\n\n/**\n * Get trace summary statistics\n */\nexport function getTraceSummary(): Record<\n string,\n { count: number; avgDuration: number; errors: number }\n> {\n return debugState.getTraceSummary();\n}\n\n/**\n * Wrapper function to trace operation execution\n */\nexport function traceOperation<T>(\n operation: string,\n fn: () => T,\n metadata?: Record<string, unknown>,\n): T {\n if (!debugState.isEnabled()) {\n return fn();\n }\n\n const startTime = performance.now();\n const timestamp = Date.now();\n\n try {\n const result = fn();\n const duration = performance.now() - startTime;\n\n debugState.trace({\n operation,\n timestamp,\n duration,\n output: debugState.getConfig().traceOutput ? result : undefined,\n metadata,\n });\n\n return result;\n } catch (error) {\n const duration = performance.now() - startTime;\n\n debugState.trace({\n operation,\n timestamp,\n duration,\n error: error as Error,\n metadata,\n });\n\n throw error;\n }\n}\n\n/**\n * Async version of traceOperation\n */\nexport async function traceOperationAsync<T>(\n operation: string,\n fn: () => Promise<T>,\n metadata?: Record<string, unknown>,\n): Promise<T> {\n if (!debugState.isEnabled()) {\n return fn();\n }\n\n const startTime = performance.now();\n const timestamp = Date.now();\n\n try {\n const result = await fn();\n const duration = performance.now() - startTime;\n\n debugState.trace({\n operation,\n timestamp,\n duration,\n output: debugState.getConfig().traceOutput ? result : undefined,\n metadata,\n });\n\n return result;\n } catch (error) {\n const duration = performance.now() - startTime;\n\n debugState.trace({\n operation,\n timestamp,\n duration,\n error: error as Error,\n metadata,\n });\n\n throw error;\n }\n}\n","/**\n * Error recovery utilities for iterflow\n * @module recovery\n */\n\nimport { OperationError } from \"./errors.js\";\n\n/**\n * Error handler function type\n */\nexport type ErrorHandler<T, R = T> = (\n error: Error,\n element?: T,\n index?: number,\n) => R;\n\n/**\n * Options for retry behavior\n */\nexport interface RetryOptions {\n maxAttempts?: number;\n delay?: number;\n backoff?: boolean;\n onRetry?: (attempt: number, error: Error) => void;\n}\n\n/**\n * Wraps a function with error recovery\n */\nexport function withErrorRecovery<T, R>(\n fn: (value: T, index?: number) => R,\n errorHandler: ErrorHandler<T, R>,\n): (value: T, index?: number) => R {\n return (value: T, index?: number): R => {\n try {\n return fn(value, index);\n } catch (error) {\n return errorHandler(error as Error, value, index);\n }\n };\n}\n\n/**\n * Wraps a function with retry logic\n */\nexport function withRetry<T extends any[], R>(\n fn: (...args: T) => R,\n options: RetryOptions = {},\n): (...args: T) => R {\n const { maxAttempts = 3, delay = 0, backoff = false, onRetry } = options;\n\n return (...args: T): R => {\n let lastError: Error;\n let currentDelay = delay;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return fn(...args);\n } catch (error) {\n lastError = error as Error;\n\n if (attempt < maxAttempts) {\n if (onRetry) {\n onRetry(attempt, lastError);\n }\n\n if (currentDelay > 0) {\n // Synchronous delay (note: this blocks, use with caution)\n const start = Date.now();\n while (Date.now() - start < currentDelay) {\n // busy wait\n }\n }\n\n if (backoff) {\n currentDelay *= 2;\n }\n }\n }\n }\n\n throw new OperationError(\n `Operation failed after ${maxAttempts} attempts`,\n \"retry\",\n lastError!,\n );\n };\n}\n\n/**\n * Async version of withRetry\n */\nexport function withRetryAsync<T extends any[], R>(\n fn: (...args: T) => Promise<R>,\n options: RetryOptions = {},\n): (...args: T) => Promise<R> {\n const { maxAttempts = 3, delay = 0, backoff = false, onRetry } = options;\n\n return async (...args: T): Promise<R> => {\n let lastError: Error;\n let currentDelay = delay;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n return await fn(...args);\n } catch (error) {\n lastError = error as Error;\n\n if (attempt < maxAttempts) {\n if (onRetry) {\n onRetry(attempt, lastError);\n }\n\n if (currentDelay > 0) {\n await new Promise((resolve) => setTimeout(resolve, currentDelay));\n }\n\n if (backoff) {\n currentDelay *= 2;\n }\n }\n }\n }\n\n throw new OperationError(\n `Operation failed after ${maxAttempts} attempts`,\n \"retry\",\n lastError!,\n );\n };\n}\n\n/**\n * Returns a default value if an error occurs\n */\nexport function withDefault<T, R>(\n fn: (value: T) => R,\n defaultValue: R,\n): (value: T) => R {\n return (value: T): R => {\n try {\n return fn(value);\n } catch {\n return defaultValue;\n }\n };\n}\n\n/**\n * Returns undefined if an error occurs (swallows errors)\n */\nexport function tryOr<T, R>(fn: (value: T) => R, fallback: R): (value: T) => R {\n return (value: T): R => {\n try {\n return fn(value);\n } catch {\n return fallback;\n }\n };\n}\n\n/**\n * Executes a function and returns [result, error] tuple\n */\nexport function tryCatch<T, R>(\n fn: (value: T) => R,\n value: T,\n): [R | undefined, Error | undefined] {\n try {\n return [fn(value), undefined];\n } catch (error) {\n return [undefined, error as Error];\n }\n}\n\n/**\n * Async version of tryCatch\n */\nexport async function tryCatchAsync<T, R>(\n fn: (value: T) => Promise<R>,\n value: T,\n): Promise<[R | undefined, Error | undefined]> {\n try {\n return [await fn(value), undefined];\n } catch (error) {\n return [undefined, error as Error];\n }\n}\n\n/**\n * Result type for safe operations\n */\nexport type Result<T, E = Error> =\n | { success: true; value: T }\n | { success: false; error: E };\n\n/**\n * Wraps a function to return a Result type\n */\nexport function toResult<T, R>(fn: (value: T) => R): (value: T) => Result<R> {\n return (value: T): Result<R> => {\n try {\n return { success: true, value: fn(value) };\n } catch (error) {\n return { success: false, error: error as Error };\n }\n };\n}\n\n/**\n * Async version of toResult\n */\nexport function toResultAsync<T, R>(\n fn: (value: T) => Promise<R>,\n): (value: T) => Promise<Result<R>> {\n return async (value: T): Promise<Result<R>> => {\n try {\n return { success: true, value: await fn(value) };\n } catch (error) {\n return { success: false, error: error as Error };\n }\n };\n}\n\n/**\n * Guards a predicate function to return false on error instead of throwing\n */\nexport function safePredicate<T>(\n predicate: (value: T, index?: number) => boolean,\n defaultValue = false,\n): (value: T, index?: number) => boolean {\n return (value: T, index?: number): boolean => {\n try {\n return predicate(value, index);\n } catch {\n return defaultValue;\n }\n };\n}\n\n/**\n * Guards a comparator function to handle errors gracefully\n */\nexport function safeComparator<T>(\n comparator: (a: T, b: T) => number,\n defaultComparison = 0,\n): (a: T, b: T) => number {\n return (a: T, b: T): number => {\n try {\n return comparator(a, b);\n } catch {\n return defaultComparison;\n }\n };\n}\n\n/**\n * Creates an error boundary that catches and logs errors\n */\nexport function errorBoundary<T extends any[], R>(\n fn: (...args: T) => R,\n options: {\n onError?: (error: Error, args: T) => void;\n rethrow?: boolean;\n defaultValue?: R;\n } = {},\n): (...args: T) => R | undefined {\n const { onError, rethrow = true, defaultValue } = options;\n\n return (...args: T): R | undefined => {\n try {\n return fn(...args);\n } catch (error) {\n if (onError) {\n onError(error as Error, args);\n }\n\n if (rethrow) {\n throw error;\n }\n\n return defaultValue;\n }\n };\n}\n","/**\n * Deprecation warnings system for iterflow\n *\n * This module provides utilities for marking APIs as deprecated and emitting\n * warnings to help users migrate away from deprecated functionality.\n *\n * @module deprecation\n */\n\n/**\n * Configuration options for deprecation warnings\n */\nexport interface DeprecationConfig {\n /** Whether to show deprecation warnings (default: true in development, false in production) */\n enabled: boolean;\n /** Whether to show stack traces with warnings (default: false) */\n showStackTrace: boolean;\n /** Custom handler for deprecation warnings */\n handler?: (warning: DeprecationWarning) => void;\n}\n\n/**\n * Information about a deprecated API\n */\nexport interface DeprecationWarning {\n /** The deprecated feature name */\n feature: string;\n /** Version when it was deprecated */\n since: string;\n /** Version when it will be removed (if known) */\n removeIn?: string;\n /** Alternative to use instead */\n alternative?: string;\n /** Additional message with migration guidance */\n message?: string;\n /** Stack trace (if enabled) */\n stack?: string;\n}\n\n/**\n * Global deprecation configuration\n */\nlet config: DeprecationConfig = {\n enabled:\n typeof process !== \"undefined\" && process.env.NODE_ENV !== \"production\",\n showStackTrace: false,\n};\n\n/**\n * Set of features that have already shown a warning (to avoid duplicate warnings)\n */\nconst warnedFeatures = new Set<string>();\n\n/**\n * Configure the deprecation warning system\n *\n * @param options - Configuration options to update\n * @example\n * ```typescript\n * // Disable all deprecation warnings\n * configureDeprecation({ enabled: false });\n *\n * // Enable stack traces\n * configureDeprecation({ showStackTrace: true });\n *\n * // Use custom handler\n * configureDeprecation({\n * handler: (warning) => {\n * logger.warn(`Deprecated: ${warning.feature}`, warning);\n * }\n * });\n * ```\n */\nexport function configureDeprecation(\n options: Partial<DeprecationConfig>,\n): void {\n config = { ...config, ...options };\n}\n\n/**\n * Get current deprecation configuration\n *\n * @returns Current deprecation configuration\n */\nexport function getDeprecationConfig(): Readonly<DeprecationConfig> {\n return { ...config };\n}\n\n/**\n * Clear the set of warned features (mainly for testing)\n */\nexport function clearDeprecationWarnings(): void {\n warnedFeatures.clear();\n}\n\n/**\n * Emit a deprecation warning (internal implementation)\n *\n * @param warning - The deprecation warning to emit\n */\nfunction emitWarning(warning: DeprecationWarning): void {\n if (!config.enabled) return;\n\n // Only warn once per feature\n if (warnedFeatures.has(warning.feature)) return;\n warnedFeatures.add(warning.feature);\n\n // Use custom handler if provided\n if (config.handler) {\n config.handler(warning);\n return;\n }\n\n // Build warning message\n let message = `[iterflow] DEPRECATED: ${warning.feature} has been deprecated since v${warning.since}`;\n\n if (warning.removeIn) {\n message += ` and will be removed in v${warning.removeIn}`;\n }\n\n if (warning.alternative) {\n message += `\\nPlease use ${warning.alternative} instead.`;\n }\n\n if (warning.message) {\n message += `\\n${warning.message}`;\n }\n\n // Emit the warning\n if (typeof process !== \"undefined\" && process.emitWarning) {\n // Node.js environment\n const options: any = {\n type: \"DeprecationWarning\",\n code: \"ITERFLOW_DEPRECATION\",\n detail: warning.message,\n };\n\n process.emitWarning(message, options);\n } else {\n // Browser or other environment\n console.warn(message);\n }\n\n // Show stack trace if enabled\n if (config.showStackTrace && warning.stack) {\n console.warn(\"Stack trace:\", warning.stack);\n }\n}\n\n/**\n * Mark a feature as deprecated and emit a warning when called\n *\n * @param options - Deprecation warning details\n * @example\n * ```typescript\n * // In your code\n * function oldMethod() {\n * deprecate({\n * feature: 'oldMethod()',\n * since: '0.9.0',\n * removeIn: '2.0.0',\n * alternative: 'newMethod()',\n * message: 'See migration guide: https://...'\n * });\n *\n * // ... implementation\n * }\n * ```\n */\nexport function deprecate(options: Omit<DeprecationWarning, \"stack\">): void {\n const warning: DeprecationWarning = {\n ...options,\n stack: config.showStackTrace ? new Error().stack : undefined,\n };\n\n emitWarning(warning);\n}\n\n/**\n * Decorator to mark a method or function as deprecated\n *\n * @param options - Deprecation warning details\n * @returns Decorator function\n * @example\n * ```typescript\n * class MyClass {\n * @deprecated({\n * feature: 'MyClass.oldMethod',\n * since: '0.9.0',\n * alternative: 'MyClass.newMethod'\n * })\n * oldMethod() {\n * // implementation\n * }\n * }\n * ```\n */\nexport function deprecated(\n options: Omit<DeprecationWarning, \"stack\" | \"feature\">,\n) {\n return function <T extends Function>(\n target: any,\n propertyKey: string,\n descriptor: TypedPropertyDescriptor<T>,\n ): TypedPropertyDescriptor<T> | void {\n const originalMethod = descriptor.value;\n\n if (!originalMethod) return;\n\n const className = target.constructor?.name || \"Object\";\n const feature = `${className}.${propertyKey}`;\n\n descriptor.value = function (this: any, ...args: any[]) {\n deprecate({ ...options, feature });\n return originalMethod.apply(this, args);\n } as any;\n\n return descriptor;\n };\n}\n\n/**\n * Create a wrapper function that marks the original function as deprecated\n *\n * @param fn - The function to wrap\n * @param options - Deprecation warning details\n * @returns Wrapped function that emits deprecation warning\n * @example\n * ```typescript\n * const oldFunction = deprecatedFunction(\n * (x: number) => x * 2,\n * {\n * feature: 'oldFunction',\n * since: '0.9.0',\n * alternative: 'newFunction'\n * }\n * );\n * ```\n */\nexport function deprecatedFunction<T extends (...args: any[]) => any>(\n fn: T,\n options: Omit<DeprecationWarning, \"stack\">,\n): T {\n return function (this: any, ...args: any[]) {\n deprecate(options);\n return fn.apply(this, args);\n } as T;\n}\n\n/**\n * Check if a feature has been marked as deprecated (for testing)\n *\n * @param feature - The feature name to check\n * @returns True if the feature has been warned about\n */\nexport function hasDeprecationWarning(feature: string): boolean {\n return warnedFeatures.has(feature);\n}\n","import { iterflow } from \"./iter-flow.js\";\nimport { validateNonZero } from \"./validation.js\";\n\n/**\n * Creates an iterflow instance from an iterable.\n * This is the main entry point for working with iterables in a fluent API style.\n *\n * @template T The type of elements in the iterable\n * @param source - The iterable to wrap\n * @returns A new iterflow instance\n * @example\n * ```typescript\n * iter([1, 2, 3, 4, 5])\n * .filter(x => x % 2 === 0)\n * .map(x => x * 2)\n * .toArray(); // [4, 8]\n * ```\n */\nexport function iter<T>(source: Iterable<T>): iterflow<T> {\n return new iterflow(source);\n}\n\n// Static helper methods namespace\nexport namespace iter {\n /**\n * Combines two iterables into an iterator of tuples.\n * Stops when the shorter iterable is exhausted.\n *\n * @template T The type of elements in the first iterable\n * @template U The type of elements in the second iterable\n * @param iter1 - The first iterable\n * @param iter2 - The second iterable\n * @returns A new iterflow of tuples pairing elements from both iterables\n * @example\n * ```typescript\n * iter.zip([1, 2, 3], ['a', 'b', 'c']).toArray();\n * // [[1, 'a'], [2, 'b'], [3, 'c']]\n * ```\n */\n export function zip<T, U>(\n iter1: Iterable<T>,\n iter2: Iterable<U>,\n ): iterflow<[T, U]> {\n return new iterflow({\n *[Symbol.iterator]() {\n const it1 = iter1[Symbol.iterator]();\n const it2 = iter2[Symbol.iterator]();\n\n while (true) {\n const result1 = it1.next();\n const result2 = it2.next();\n\n if (result1.done || result2.done) {\n break;\n }\n\n yield [result1.value, result2.value];\n }\n },\n });\n }\n\n /**\n * Combines two iterables using a combining function.\n * Stops when the shorter iterable is exhausted.\n *\n * @template T The type of elements in the first iterable\n * @template U The type of elements in the second iterable\n * @template R The type of the result\n * @param iter1 - The first iterable\n * @param iter2 - The second iterable\n * @param fn - Function to combine elements from both iterables\n * @returns A new iterflow with combined results\n * @example\n * ```typescript\n * iter.zipWith([1, 2, 3], [10, 20, 30], (a, b) => a + b).toArray();\n * // [11, 22, 33]\n * ```\n */\n export function zipWith<T, U, R>(\n iter1: Iterable<T>,\n iter2: Iterable<U>,\n fn: (a: T, b: U) => R,\n ): iterflow<R> {\n return zip(iter1, iter2).map(([a, b]) => fn(a, b));\n }\n\n /**\n * Generates a sequence of numbers.\n * Supports three call signatures:\n * - range(stop): generates [0, stop) with step 1\n * - range(start, stop): generates [start, stop) with step 1\n * - range(start, stop, step): generates [start, stop) with custom step\n *\n * @param stop - The end value (exclusive) when called with one argument\n * @returns A new iterflow of numbers\n * @throws {Error} If step is zero\n * @example\n * ```typescript\n * iter.range(5).toArray(); // [0, 1, 2, 3, 4]\n * iter.range(2, 5).toArray(); // [2, 3, 4]\n * iter.range(0, 10, 2).toArray(); // [0, 2, 4, 6, 8]\n * iter.range(5, 0, -1).toArray(); // [5, 4, 3, 2, 1]\n * ```\n */\n export function range(stop: number): iterflow<number>;\n /**\n * Generates a sequence of numbers from start to stop (exclusive).\n *\n * @param start - The starting value (inclusive)\n * @param stop - The end value (exclusive)\n * @returns A new iterflow of numbers\n */\n export function range(start: number, stop: number): iterflow<number>;\n /**\n * Generates a sequence of numbers from start to stop (exclusive) with a custom step.\n *\n * @param start - The starting value (inclusive)\n * @param stop - The end value (exclusive)\n * @param step - The increment between values\n * @returns A new iterflow of numbers\n */\n export function range(\n start: number,\n stop: number,\n step: number,\n ): iterflow<number>;\n export function range(\n startOrStop: number,\n stop?: number,\n step = 1,\n ): iterflow<number> {\n const actualStart = stop === undefined ? 0 : startOrStop;\n const actualStop = stop === undefined ? startOrStop : stop;\n\n return new iterflow({\n *[Symbol.iterator]() {\n validateNonZero(step, \"step\", \"range\");\n\n if (step > 0) {\n for (let i = actualStart; i < actualStop; i += step) {\n yield i;\n }\n } else {\n for (let i = actualStart; i > actualStop; i += step) {\n yield i;\n }\n }\n },\n });\n }\n\n /**\n * Repeats a value a specified number of times, or infinitely.\n * If times is not specified, creates an infinite iterator.\n *\n * @template T The type of the value to repeat\n * @param value - The value to repeat\n * @param times - Optional number of times to repeat (infinite if omitted)\n * @returns A new iterflow repeating the value\n * @example\n * ```typescript\n * iter.repeat('x', 3).toArray(); // ['x', 'x', 'x']\n * iter.repeat(0, 5).toArray(); // [0, 0, 0, 0, 0]\n * iter.repeat(1).take(3).toArray(); // [1, 1, 1] (infinite, limited by take)\n * ```\n */\n export function repeat<T>(value: T, times?: number): iterflow<T> {\n return new iterflow({\n *[Symbol.iterator]() {\n if (times === undefined) {\n while (true) {\n yield value;\n }\n } else {\n for (let i = 0; i < times; i++) {\n yield value;\n }\n }\n },\n });\n }\n\n /**\n * Alternates elements from multiple iterables in a round-robin fashion.\n * Continues until all iterables are exhausted.\n *\n * @template T The type of elements in all iterables\n * @param iterables - Variable number of iterables to interleave\n * @returns A new iterflow with elements from all iterables interleaved\n * @example\n * ```typescript\n * iter.interleave([1, 2, 3], [4, 5, 6]).toArray();\n * // [1, 4, 2, 5, 3, 6]\n * iter.interleave([1, 2], [3, 4, 5], [6]).toArray();\n * // [1, 3, 6, 2, 4, 5]\n * ```\n */\n export function interleave<T>(...iterables: Iterable<T>[]): iterflow<T> {\n return new iterflow({\n *[Symbol.iterator]() {\n if (iterables.length === 0) return;\n\n const iterators = iterables.map((it) => it[Symbol.iterator]());\n const active = new Set(iterators);\n\n while (active.size > 0) {\n for (const iterator of iterators) {\n if (!active.has(iterator)) continue;\n\n const result = iterator.next();\n if (result.done) {\n active.delete(iterator);\n } else {\n yield result.value;\n }\n }\n }\n },\n });\n }\n\n /**\n * Merges multiple sorted iterables into a single sorted iterator.\n * Assumes input iterables are already sorted in ascending order.\n * Uses a custom comparator if provided, otherwise uses default < comparison.\n *\n * @template T The type of elements in all iterables\n * @param iterables - Variable number of sorted iterables to merge\n * @param compareFn - Optional comparison function (returns negative if a < b, positive if a > b, 0 if equal)\n * @returns A new iterflow with all elements merged in sorted order\n * @example\n * ```typescript\n * iter.merge([1, 3, 5], [2, 4, 6]).toArray();\n * // [1, 2, 3, 4, 5, 6]\n * iter.merge([1, 5, 9], [2, 6, 10], [3, 7, 11]).toArray();\n * // [1, 2, 3, 5, 6, 7, 9, 10, 11]\n * ```\n */\n export function merge<T>(...iterables: Iterable<T>[]): iterflow<T>;\n export function merge<T>(\n compareFn: (a: T, b: T) => number,\n ...iterables: Iterable<T>[]\n ): iterflow<T>;\n export function merge<T>(\n ...args: (Iterable<T> | ((a: T, b: T) => number))[]\n ): iterflow<T> {\n let compareFn: (a: T, b: T) => number;\n let iterables: Iterable<T>[];\n\n // Check if first argument is a function (comparator)\n if (typeof args[0] === \"function\") {\n compareFn = args[0] as (a: T, b: T) => number;\n iterables = args.slice(1) as Iterable<T>[];\n } else {\n // Default comparator for numbers/strings\n compareFn = (a: T, b: T) => {\n if (a < b) return -1;\n if (a > b) return 1;\n return 0;\n };\n iterables = args as Iterable<T>[];\n }\n\n return new iterflow({\n *[Symbol.iterator]() {\n if (iterables.length === 0) return;\n\n // Initialize all iterators with their first value\n const heap: Array<{\n value: T;\n iterator: Iterator<T>;\n index: number;\n }> = [];\n\n for (let i = 0; i < iterables.length; i++) {\n const iterator = iterables[i]![Symbol.iterator]();\n const result = iterator.next();\n if (!result.done) {\n heap.push({ value: result.value, iterator, index: i });\n }\n }\n\n // Helper to maintain min-heap property\n const bubbleDown = (index: number) => {\n const length = heap.length;\n while (true) {\n let smallest = index;\n const leftChild = 2 * index + 1;\n const rightChild = 2 * index + 2;\n\n if (\n leftChild < length &&\n compareFn(heap[leftChild]!.value, heap[smallest]!.value) < 0\n ) {\n smallest = leftChild;\n }\n\n if (\n rightChild < length &&\n compareFn(heap[rightChild]!.value, heap[smallest]!.value) < 0\n ) {\n smallest = rightChild;\n }\n\n if (smallest === index) break;\n\n [heap[index], heap[smallest]] = [heap[smallest]!, heap[index]!];\n index = smallest;\n }\n };\n\n // Build initial heap\n for (let i = Math.floor(heap.length / 2) - 1; i >= 0; i--) {\n bubbleDown(i);\n }\n\n // Extract minimum and refill from same iterator\n while (heap.length > 0) {\n const { value, iterator } = heap[0]!;\n yield value;\n\n const result = iterator.next();\n if (result.done) {\n // Remove this iterator from heap\n heap[0] = heap[heap.length - 1]!;\n heap.pop();\n if (heap.length > 0) {\n bubbleDown(0);\n }\n } else {\n // Replace with next value from same iterator\n heap[0]!.value = result.value;\n bubbleDown(0);\n }\n }\n },\n });\n }\n\n /**\n * Chains multiple iterables sequentially, one after another.\n * Yields all elements from the first iterable, then all from the second, etc.\n *\n * @template T The type of elements in all iterables\n * @param iterables - Variable number of iterables to chain\n * @returns A new iterflow with all elements chained sequentially\n * @example\n * ```typescript\n * iter.chain([1, 2], [3, 4], [5, 6]).toArray();\n * // [1, 2, 3, 4, 5, 6]\n * iter.chain([1], [2, 3], [], [4, 5, 6]).toArray();\n * // [1, 2, 3, 4, 5, 6]\n * ```\n */\n export function chain<T>(...iterables: Iterable<T>[]): iterflow<T> {\n return new iterflow({\n *[Symbol.iterator]() {\n for (const iterable of iterables) {\n yield* iterable;\n }\n },\n });\n }\n}\n\n// Export the sync class\nexport { iterflow } from \"./iter-flow.js\";\n\n// Export async functionality\nexport { Asynciterflow, asyncIter } from \"./async-iter-flow.js\";\n\n// Export error handling\nexport {\n iterflowError,\n ValidationError,\n OperationError,\n EmptySequenceError,\n IndexOutOfBoundsError,\n TypeConversionError,\n} from \"./errors.js\";\n\n// Export validation utilities\nexport {\n validatePositiveInteger,\n validateNonNegativeInteger,\n validateRange,\n validateFiniteNumber,\n validateNonZero,\n validateFunction,\n validateIterable,\n validateComparator,\n validateNonEmpty,\n toNumber,\n toInteger,\n validateIndex,\n} from \"./validation.js\";\n\n// Export debug utilities\nexport {\n enableDebug,\n disableDebug,\n isDebugEnabled,\n getDebugConfig,\n addTrace,\n getTraces,\n clearTraces,\n getTracesForOperation,\n getTraceSummary,\n traceOperation,\n traceOperationAsync,\n} from \"./debug.js\";\nexport type { TraceEntry, DebugConfig } from \"./debug.js\";\n\n// Export error recovery utilities\nexport {\n withErrorRecovery,\n withRetry,\n withRetryAsync,\n withDefault,\n tryOr,\n tryCatch,\n tryCatchAsync,\n toResult,\n toResultAsync,\n safePredicate,\n safeComparator,\n errorBoundary,\n} from \"./recovery.js\";\nexport type { ErrorHandler, RetryOptions, Result } from \"./recovery.js\";\n\n// Export deprecation utilities\nexport {\n configureDeprecation,\n getDeprecationConfig,\n clearDeprecationWarnings,\n deprecate,\n deprecated,\n deprecatedFunction,\n hasDeprecationWarning,\n} from \"./deprecation.js\";\nexport type { DeprecationConfig, DeprecationWarning } from \"./deprecation.js\";\n"]}