Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

stack-base-iterator

Package Overview
Dependencies
Maintainers
1
Versions
89
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

stack-base-iterator - npm Package Compare versions

Comparing version
3.0.3
to
3.0.4
+1
-1
dist/cjs/index.js

@@ -155,3 +155,3 @@ "use strict";

return _this.forEach(fn, options, function(err, done) {
err ? reject(err) : resolve(done);
return err ? reject(err) : resolve(done);
});

@@ -158,0 +158,0 @@ });

@@ -1,1 +0,1 @@

{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/stack-base-iterator/src/index.ts"],"sourcesContent":["import compat from 'async-compat';\nimport nextCallback from 'iterator-next-callback';\nimport { createProcessor } from 'maximize-iterator';\nimport Pinkie from 'pinkie-promise';\nimport LinkedList from './LinkedList.ts';\nimport { defer } from './lib/defer.ts';\n\nimport type { EachDoneCallback, EachFunction, ForEachOptions, ProcessCallback, Processor, ProcessorOptions, StackOptions, ValueCallback } from './types.ts';\n\nexport type StackFunction<T, TReturn = unknown, TNext = unknown> = (iterator: StackBaseIterator<T, TReturn, TNext>, callback: ValueCallback<T>) => void;\n\nconst root = typeof window === 'undefined' ? global : window;\n\n// biome-ignore lint/suspicious/noShadowRestrictedNames: Legacy\nconst Symbol: SymbolConstructor = typeof root.Symbol === 'undefined' ? ({ asyncIterator: undefined } as unknown as SymbolConstructor) : root.Symbol;\n\nexport { default as LinkedList } from './LinkedList.ts';\nexport type * from './types.ts';\nexport default class StackBaseIterator<T, TReturn = unknown, TNext = unknown> implements AsyncIterableIterator<T, TReturn, TNext> {\n protected done: boolean;\n protected stack: StackFunction<T, TReturn, TNext>[];\n protected queued: ProcessCallback<T>[];\n protected processors: LinkedList<Processor>;\n protected processing: LinkedList<ProcessCallback<T>>;\n\n protected options: StackOptions;\n protected destroyed: boolean;\n private flushing: boolean;\n private pending: number;\n private endScheduled: boolean;\n\n constructor(options: StackOptions = {}) {\n this.options = { ...options };\n this.options.error =\n options.error ||\n function defaultError(err) {\n return !!err; // fail on errors\n };\n\n this.done = false;\n this.stack = [] as StackFunction<T, TReturn, TNext>[];\n this.queued = [] as ProcessCallback<T>[];\n this.processors = new LinkedList<Processor>();\n this.processing = new LinkedList<ProcessCallback<T>>();\n this.flushing = false;\n this.pending = 0;\n this.endScheduled = false;\n }\n\n isDone() {\n return this.done;\n }\n\n push(fn: StackFunction<T, TReturn, TNext>, ...rest: StackFunction<T, TReturn, TNext>[]) {\n if (this.done) return console.log('Attempting to push on a done iterator');\n this.stack.push(fn);\n !rest.length ||\n rest.forEach((x) => {\n this.stack.push(x);\n });\n this._pump();\n }\n\n next(): Promise<IteratorResult<T, TReturn>> {\n return new Pinkie((resolve, reject) => {\n this._processOrQueue((err, result: IteratorResult<T, TReturn>) => {\n err ? reject(err) : resolve(result);\n });\n });\n }\n\n [Symbol.asyncIterator](): AsyncIterableIterator<T, TReturn, TNext> {\n return this;\n }\n\n forEach(fn: EachFunction<T>, callback: EachDoneCallback): void;\n forEach(fn: EachFunction<T>, options: ForEachOptions, callback: EachDoneCallback): void;\n forEach(fn: EachFunction<T>, options?: ForEachOptions): Promise<boolean>;\n forEach(fn: EachFunction<T>, options?: ForEachOptions | EachDoneCallback, callback?: EachDoneCallback): void | Promise<boolean> {\n if (typeof fn !== 'function') throw new Error('Missing each function');\n callback = typeof options === 'function' ? options : callback;\n options = typeof options === 'function' ? {} : ((options || {}) as ForEachOptions);\n\n if (typeof callback === 'function') {\n if (this.done) return callback(null, true);\n const processorOptions: ProcessorOptions<T> = {\n each: fn,\n callbacks: options.callbacks || false,\n concurrency: options.concurrency || 1,\n limit: options.limit || Infinity,\n error:\n options.error ||\n function defaultError() {\n return true; // default is exit on error\n },\n total: 0,\n counter: 0,\n canProcess: () => {\n return !this.done && this.stack.length > 0 && this.queued.length < this.stack.length;\n },\n };\n\n let callbackFired = false;\n let processor = createProcessor<T>(nextCallback<T, TReturn, TNext>(this), processorOptions, (err) => {\n // Guard against double callback (can happen if end() is called while microtask is pending)\n if (callbackFired) return;\n callbackFired = true;\n\n // Defer completion decision AND processor removal to give deferred work a chance to push\n // Processor must stay in list so _pump() can signal it to process new items\n defer(() => {\n if (!this.destroyed) this.processors.remove(processor);\n processor = null;\n const done = !this.stack.length && this.pending === 0;\n if ((err || done) && !this.done) this.end(err);\n callback(err, this.done || done);\n });\n });\n this.processors.push(processor);\n this._pump();\n return;\n }\n\n return new Promise((resolve, reject) =>\n this.forEach(fn, options, (err?: Error, done?: boolean) => {\n err ? reject(err) : resolve(done);\n })\n );\n }\n\n end(err?: Error) {\n if (this.done) return;\n this.done = true;\n while (this.processors.length > 0) this.processors.pop()(err || true);\n while (this.processing.length > 0) err ? this.processing.pop()(err) : this.processing.pop()(null, { done: true, value: null });\n while (this.queued.length > 0) err ? this.queued.pop()(err) : this.queued.pop()(null, { done: true, value: null });\n while (this.stack.length > 0) this.stack.pop();\n }\n destroy(err?: Error) {\n if (this.destroyed) throw new Error('Already destroyed');\n this.destroyed = true;\n this.end(err);\n }\n\n private _pump() {\n // Flush loop pattern: if already flushing, the outer loop will handle new work\n // This prevents stack overflow by avoiding recursion entirely\n if (this.flushing) return;\n this.flushing = true;\n\n if (!this.done && this.processors.length > 0 && this.stack.length > 0 && this.stack.length > this.queued.length) this.processors.last()(false); // try to queue more\n while (this.stack.length > 0 && this.queued.length > 0) {\n this._processOrQueue(this.queued.pop());\n if (!this.done && this.processors.length > 0 && this.stack.length > 0 && this.stack.length > this.queued.length) this.processors.last()(false); // try to queue more\n }\n\n this.flushing = false;\n }\n\n private _scheduleEndCheck() {\n // Defer end check to give other deferred work a chance to push\n if (this.endScheduled || this.done) return;\n this.endScheduled = true;\n\n defer(() => {\n this.endScheduled = false;\n // Re-check ALL conditions after deferral\n if (this.stack.length === 0 && this.processing.length === 0 && this.pending === 0 && !this.done) {\n this.end();\n }\n });\n }\n\n private _processOrQueue(callback: ProcessCallback<T>): void {\n if (this.done) return callback(null, { done: true, value: null });\n\n // nothing to process so queue\n if (this.stack.length === 0) {\n this.queued.push(callback);\n return;\n }\n\n // process next\n const next = this.stack.pop();\n this.processing.push(callback);\n this.pending++;\n let callbackFired = false;\n next(this, (err?: Error, result?: IteratorResult<T, TReturn> | undefined): void => {\n // Guard against callback being called multiple times (buggy iterators)\n if (callbackFired) {\n console.warn('stack-base-iterator: callback called multiple times - this indicates a bug in the iterator implementation');\n return;\n }\n callbackFired = true;\n\n this.pending--;\n this.processing.remove(callback);\n\n // done\n if (this.done)\n return callback(null, {\n done: true,\n value: null,\n });\n\n // skip error\n if (err && compat.defaultValue(this.options.error(err), true)) err = null;\n\n // handle callback\n if (err) callback(err);\n // queue again\n else if (!result) {\n this.queued.push(callback);\n defer(() => this._pump()); // Deferred to start new call stack\n }\n // return the result\n else callback(null, result);\n\n // Only schedule end check when we might actually be done\n // This prevents premature end checks from earlier items\n if (this.stack.length === 0 && this.processing.length === 0 && this.pending === 0) {\n this._scheduleEndCheck();\n }\n });\n }\n}\n"],"names":["LinkedList","StackBaseIterator","root","window","global","Symbol","asyncIterator","undefined","options","error","defaultError","err","done","stack","queued","processors","processing","flushing","pending","endScheduled","isDone","push","fn","rest","console","log","length","forEach","x","_pump","next","Pinkie","resolve","reject","_processOrQueue","result","callback","Error","processorOptions","each","callbacks","concurrency","limit","Infinity","total","counter","canProcess","callbackFired","processor","createProcessor","nextCallback","defer","destroyed","remove","end","Promise","pop","value","destroy","last","_scheduleEndCheck","warn","compat","defaultValue"],"mappings":"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"}
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/stack-base-iterator/src/index.ts"],"sourcesContent":["import compat from 'async-compat';\nimport nextCallback from 'iterator-next-callback';\nimport { createProcessor } from 'maximize-iterator';\nimport Pinkie from 'pinkie-promise';\nimport LinkedList from './LinkedList.ts';\nimport { defer } from './lib/defer.ts';\n\nimport type { EachDoneCallback, EachFunction, ForEachOptions, ProcessCallback, Processor, ProcessorOptions, StackOptions, ValueCallback } from './types.ts';\n\nexport type StackFunction<T, TReturn = unknown, TNext = unknown> = (iterator: StackBaseIterator<T, TReturn, TNext>, callback: ValueCallback<T>) => void;\n\nconst root = typeof window === 'undefined' ? global : window;\n\n// biome-ignore lint/suspicious/noShadowRestrictedNames: Legacy\nconst Symbol: SymbolConstructor = typeof root.Symbol === 'undefined' ? ({ asyncIterator: undefined } as unknown as SymbolConstructor) : root.Symbol;\n\nexport { default as LinkedList } from './LinkedList.ts';\nexport type * from './types.ts';\nexport default class StackBaseIterator<T, TReturn = unknown, TNext = unknown> implements AsyncIterableIterator<T, TReturn, TNext> {\n protected done: boolean;\n protected stack: StackFunction<T, TReturn, TNext>[];\n protected queued: ProcessCallback<T>[];\n protected processors: LinkedList<Processor>;\n protected processing: LinkedList<ProcessCallback<T>>;\n\n protected options: StackOptions;\n protected destroyed: boolean;\n private flushing: boolean;\n private pending: number;\n private endScheduled: boolean;\n\n constructor(options: StackOptions = {}) {\n this.options = { ...options };\n this.options.error =\n options.error ||\n function defaultError(err) {\n return !!err; // fail on errors\n };\n\n this.done = false;\n this.stack = [] as StackFunction<T, TReturn, TNext>[];\n this.queued = [] as ProcessCallback<T>[];\n this.processors = new LinkedList<Processor>();\n this.processing = new LinkedList<ProcessCallback<T>>();\n this.flushing = false;\n this.pending = 0;\n this.endScheduled = false;\n }\n\n isDone() {\n return this.done;\n }\n\n push(fn: StackFunction<T, TReturn, TNext>, ...rest: StackFunction<T, TReturn, TNext>[]) {\n if (this.done) return console.log('Attempting to push on a done iterator');\n this.stack.push(fn);\n !rest.length ||\n rest.forEach((x) => {\n this.stack.push(x);\n });\n this._pump();\n }\n\n next(): Promise<IteratorResult<T, TReturn>> {\n return new Pinkie((resolve, reject) => {\n this._processOrQueue((err, result: IteratorResult<T, TReturn>) => {\n err ? reject(err) : resolve(result);\n });\n });\n }\n\n [Symbol.asyncIterator](): AsyncIterableIterator<T, TReturn, TNext> {\n return this;\n }\n\n forEach(fn: EachFunction<T>, callback: EachDoneCallback): void;\n forEach(fn: EachFunction<T>, options: ForEachOptions, callback: EachDoneCallback): void;\n forEach(fn: EachFunction<T>, options?: ForEachOptions): Promise<boolean>;\n forEach(fn: EachFunction<T>, options?: ForEachOptions | EachDoneCallback, callback?: EachDoneCallback): void | Promise<boolean> {\n if (typeof fn !== 'function') throw new Error('Missing each function');\n callback = typeof options === 'function' ? options : callback;\n options = typeof options === 'function' ? {} : ((options || {}) as ForEachOptions);\n\n if (typeof callback === 'function') {\n if (this.done) return callback(null, true);\n const processorOptions: ProcessorOptions<T> = {\n each: fn,\n callbacks: options.callbacks || false,\n concurrency: options.concurrency || 1,\n limit: options.limit || Infinity,\n error:\n options.error ||\n function defaultError() {\n return true; // default is exit on error\n },\n total: 0,\n counter: 0,\n canProcess: () => {\n return !this.done && this.stack.length > 0 && this.queued.length < this.stack.length;\n },\n };\n\n let callbackFired = false;\n let processor = createProcessor<T>(nextCallback<T, TReturn, TNext>(this), processorOptions, (err) => {\n // Guard against double callback (can happen if end() is called while microtask is pending)\n if (callbackFired) return;\n callbackFired = true;\n\n // Defer completion decision AND processor removal to give deferred work a chance to push\n // Processor must stay in list so _pump() can signal it to process new items\n defer(() => {\n if (!this.destroyed) this.processors.remove(processor);\n processor = null;\n const done = !this.stack.length && this.pending === 0;\n if ((err || done) && !this.done) this.end(err);\n callback(err, this.done || done);\n });\n });\n this.processors.push(processor);\n this._pump();\n return;\n }\n\n return new Promise((resolve, reject) => this.forEach(fn, options, (err?: Error, done?: boolean) => (err ? reject(err) : resolve(done))));\n }\n\n end(err?: Error) {\n if (this.done) return;\n this.done = true;\n while (this.processors.length > 0) this.processors.pop()(err || true);\n while (this.processing.length > 0) err ? this.processing.pop()(err) : this.processing.pop()(null, { done: true, value: null });\n while (this.queued.length > 0) err ? this.queued.pop()(err) : this.queued.pop()(null, { done: true, value: null });\n while (this.stack.length > 0) this.stack.pop();\n }\n destroy(err?: Error) {\n if (this.destroyed) throw new Error('Already destroyed');\n this.destroyed = true;\n this.end(err);\n }\n\n private _pump() {\n // Flush loop pattern: if already flushing, the outer loop will handle new work\n // This prevents stack overflow by avoiding recursion entirely\n if (this.flushing) return;\n this.flushing = true;\n\n if (!this.done && this.processors.length > 0 && this.stack.length > 0 && this.stack.length > this.queued.length) this.processors.last()(false); // try to queue more\n while (this.stack.length > 0 && this.queued.length > 0) {\n this._processOrQueue(this.queued.pop());\n if (!this.done && this.processors.length > 0 && this.stack.length > 0 && this.stack.length > this.queued.length) this.processors.last()(false); // try to queue more\n }\n\n this.flushing = false;\n }\n\n private _scheduleEndCheck() {\n // Defer end check to give other deferred work a chance to push\n if (this.endScheduled || this.done) return;\n this.endScheduled = true;\n\n defer(() => {\n this.endScheduled = false;\n // Re-check ALL conditions after deferral\n if (this.stack.length === 0 && this.processing.length === 0 && this.pending === 0 && !this.done) {\n this.end();\n }\n });\n }\n\n private _processOrQueue(callback: ProcessCallback<T>): void {\n if (this.done) return callback(null, { done: true, value: null });\n\n // nothing to process so queue\n if (this.stack.length === 0) {\n this.queued.push(callback);\n return;\n }\n\n // process next\n const next = this.stack.pop();\n this.processing.push(callback);\n this.pending++;\n let callbackFired = false;\n next(this, (err?: Error, result?: IteratorResult<T, TReturn> | undefined): void => {\n // Guard against callback being called multiple times (buggy iterators)\n if (callbackFired) {\n console.warn('stack-base-iterator: callback called multiple times - this indicates a bug in the iterator implementation');\n return;\n }\n callbackFired = true;\n\n this.pending--;\n this.processing.remove(callback);\n\n // done\n if (this.done)\n return callback(null, {\n done: true,\n value: null,\n });\n\n // skip error\n if (err && compat.defaultValue(this.options.error(err), true)) err = null;\n\n // handle callback\n if (err) callback(err);\n // queue again\n else if (!result) {\n this.queued.push(callback);\n defer(() => this._pump()); // Deferred to start new call stack\n }\n // return the result\n else callback(null, result);\n\n // Only schedule end check when we might actually be done\n // This prevents premature end checks from earlier items\n if (this.stack.length === 0 && this.processing.length === 0 && this.pending === 0) {\n this._scheduleEndCheck();\n }\n });\n }\n}\n"],"names":["LinkedList","StackBaseIterator","root","window","global","Symbol","asyncIterator","undefined","options","error","defaultError","err","done","stack","queued","processors","processing","flushing","pending","endScheduled","isDone","push","fn","rest","console","log","length","forEach","x","_pump","next","Pinkie","resolve","reject","_processOrQueue","result","callback","Error","processorOptions","each","callbacks","concurrency","limit","Infinity","total","counter","canProcess","callbackFired","processor","createProcessor","nextCallback","defer","destroyed","remove","end","Promise","pop","value","destroy","last","_scheduleEndCheck","warn","compat","defaultValue"],"mappings":"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"}

@@ -74,5 +74,3 @@ import compat from 'async-compat';

}
return new Promise((resolve, reject)=>this.forEach(fn, options, (err, done)=>{
err ? reject(err) : resolve(done);
}));
return new Promise((resolve, reject)=>this.forEach(fn, options, (err, done)=>err ? reject(err) : resolve(done)));
}

@@ -79,0 +77,0 @@ end(err) {

@@ -1,1 +0,1 @@

{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/stack-base-iterator/src/index.ts"],"sourcesContent":["import compat from 'async-compat';\nimport nextCallback from 'iterator-next-callback';\nimport { createProcessor } from 'maximize-iterator';\nimport Pinkie from 'pinkie-promise';\nimport LinkedList from './LinkedList.ts';\nimport { defer } from './lib/defer.ts';\n\nimport type { EachDoneCallback, EachFunction, ForEachOptions, ProcessCallback, Processor, ProcessorOptions, StackOptions, ValueCallback } from './types.ts';\n\nexport type StackFunction<T, TReturn = unknown, TNext = unknown> = (iterator: StackBaseIterator<T, TReturn, TNext>, callback: ValueCallback<T>) => void;\n\nconst root = typeof window === 'undefined' ? global : window;\n\n// biome-ignore lint/suspicious/noShadowRestrictedNames: Legacy\nconst Symbol: SymbolConstructor = typeof root.Symbol === 'undefined' ? ({ asyncIterator: undefined } as unknown as SymbolConstructor) : root.Symbol;\n\nexport { default as LinkedList } from './LinkedList.ts';\nexport type * from './types.ts';\nexport default class StackBaseIterator<T, TReturn = unknown, TNext = unknown> implements AsyncIterableIterator<T, TReturn, TNext> {\n protected done: boolean;\n protected stack: StackFunction<T, TReturn, TNext>[];\n protected queued: ProcessCallback<T>[];\n protected processors: LinkedList<Processor>;\n protected processing: LinkedList<ProcessCallback<T>>;\n\n protected options: StackOptions;\n protected destroyed: boolean;\n private flushing: boolean;\n private pending: number;\n private endScheduled: boolean;\n\n constructor(options: StackOptions = {}) {\n this.options = { ...options };\n this.options.error =\n options.error ||\n function defaultError(err) {\n return !!err; // fail on errors\n };\n\n this.done = false;\n this.stack = [] as StackFunction<T, TReturn, TNext>[];\n this.queued = [] as ProcessCallback<T>[];\n this.processors = new LinkedList<Processor>();\n this.processing = new LinkedList<ProcessCallback<T>>();\n this.flushing = false;\n this.pending = 0;\n this.endScheduled = false;\n }\n\n isDone() {\n return this.done;\n }\n\n push(fn: StackFunction<T, TReturn, TNext>, ...rest: StackFunction<T, TReturn, TNext>[]) {\n if (this.done) return console.log('Attempting to push on a done iterator');\n this.stack.push(fn);\n !rest.length ||\n rest.forEach((x) => {\n this.stack.push(x);\n });\n this._pump();\n }\n\n next(): Promise<IteratorResult<T, TReturn>> {\n return new Pinkie((resolve, reject) => {\n this._processOrQueue((err, result: IteratorResult<T, TReturn>) => {\n err ? reject(err) : resolve(result);\n });\n });\n }\n\n [Symbol.asyncIterator](): AsyncIterableIterator<T, TReturn, TNext> {\n return this;\n }\n\n forEach(fn: EachFunction<T>, callback: EachDoneCallback): void;\n forEach(fn: EachFunction<T>, options: ForEachOptions, callback: EachDoneCallback): void;\n forEach(fn: EachFunction<T>, options?: ForEachOptions): Promise<boolean>;\n forEach(fn: EachFunction<T>, options?: ForEachOptions | EachDoneCallback, callback?: EachDoneCallback): void | Promise<boolean> {\n if (typeof fn !== 'function') throw new Error('Missing each function');\n callback = typeof options === 'function' ? options : callback;\n options = typeof options === 'function' ? {} : ((options || {}) as ForEachOptions);\n\n if (typeof callback === 'function') {\n if (this.done) return callback(null, true);\n const processorOptions: ProcessorOptions<T> = {\n each: fn,\n callbacks: options.callbacks || false,\n concurrency: options.concurrency || 1,\n limit: options.limit || Infinity,\n error:\n options.error ||\n function defaultError() {\n return true; // default is exit on error\n },\n total: 0,\n counter: 0,\n canProcess: () => {\n return !this.done && this.stack.length > 0 && this.queued.length < this.stack.length;\n },\n };\n\n let callbackFired = false;\n let processor = createProcessor<T>(nextCallback<T, TReturn, TNext>(this), processorOptions, (err) => {\n // Guard against double callback (can happen if end() is called while microtask is pending)\n if (callbackFired) return;\n callbackFired = true;\n\n // Defer completion decision AND processor removal to give deferred work a chance to push\n // Processor must stay in list so _pump() can signal it to process new items\n defer(() => {\n if (!this.destroyed) this.processors.remove(processor);\n processor = null;\n const done = !this.stack.length && this.pending === 0;\n if ((err || done) && !this.done) this.end(err);\n callback(err, this.done || done);\n });\n });\n this.processors.push(processor);\n this._pump();\n return;\n }\n\n return new Promise((resolve, reject) =>\n this.forEach(fn, options, (err?: Error, done?: boolean) => {\n err ? reject(err) : resolve(done);\n })\n );\n }\n\n end(err?: Error) {\n if (this.done) return;\n this.done = true;\n while (this.processors.length > 0) this.processors.pop()(err || true);\n while (this.processing.length > 0) err ? this.processing.pop()(err) : this.processing.pop()(null, { done: true, value: null });\n while (this.queued.length > 0) err ? this.queued.pop()(err) : this.queued.pop()(null, { done: true, value: null });\n while (this.stack.length > 0) this.stack.pop();\n }\n destroy(err?: Error) {\n if (this.destroyed) throw new Error('Already destroyed');\n this.destroyed = true;\n this.end(err);\n }\n\n private _pump() {\n // Flush loop pattern: if already flushing, the outer loop will handle new work\n // This prevents stack overflow by avoiding recursion entirely\n if (this.flushing) return;\n this.flushing = true;\n\n if (!this.done && this.processors.length > 0 && this.stack.length > 0 && this.stack.length > this.queued.length) this.processors.last()(false); // try to queue more\n while (this.stack.length > 0 && this.queued.length > 0) {\n this._processOrQueue(this.queued.pop());\n if (!this.done && this.processors.length > 0 && this.stack.length > 0 && this.stack.length > this.queued.length) this.processors.last()(false); // try to queue more\n }\n\n this.flushing = false;\n }\n\n private _scheduleEndCheck() {\n // Defer end check to give other deferred work a chance to push\n if (this.endScheduled || this.done) return;\n this.endScheduled = true;\n\n defer(() => {\n this.endScheduled = false;\n // Re-check ALL conditions after deferral\n if (this.stack.length === 0 && this.processing.length === 0 && this.pending === 0 && !this.done) {\n this.end();\n }\n });\n }\n\n private _processOrQueue(callback: ProcessCallback<T>): void {\n if (this.done) return callback(null, { done: true, value: null });\n\n // nothing to process so queue\n if (this.stack.length === 0) {\n this.queued.push(callback);\n return;\n }\n\n // process next\n const next = this.stack.pop();\n this.processing.push(callback);\n this.pending++;\n let callbackFired = false;\n next(this, (err?: Error, result?: IteratorResult<T, TReturn> | undefined): void => {\n // Guard against callback being called multiple times (buggy iterators)\n if (callbackFired) {\n console.warn('stack-base-iterator: callback called multiple times - this indicates a bug in the iterator implementation');\n return;\n }\n callbackFired = true;\n\n this.pending--;\n this.processing.remove(callback);\n\n // done\n if (this.done)\n return callback(null, {\n done: true,\n value: null,\n });\n\n // skip error\n if (err && compat.defaultValue(this.options.error(err), true)) err = null;\n\n // handle callback\n if (err) callback(err);\n // queue again\n else if (!result) {\n this.queued.push(callback);\n defer(() => this._pump()); // Deferred to start new call stack\n }\n // return the result\n else callback(null, result);\n\n // Only schedule end check when we might actually be done\n // This prevents premature end checks from earlier items\n if (this.stack.length === 0 && this.processing.length === 0 && this.pending === 0) {\n this._scheduleEndCheck();\n }\n });\n }\n}\n"],"names":["compat","nextCallback","createProcessor","Pinkie","LinkedList","defer","root","window","global","Symbol","asyncIterator","undefined","default","StackBaseIterator","isDone","done","push","fn","rest","console","log","stack","length","forEach","x","_pump","next","resolve","reject","_processOrQueue","err","result","options","callback","Error","processorOptions","each","callbacks","concurrency","limit","Infinity","error","defaultError","total","counter","canProcess","queued","callbackFired","processor","destroyed","processors","remove","pending","end","Promise","pop","processing","value","destroy","flushing","last","_scheduleEndCheck","endScheduled","warn","defaultValue"],"mappings":"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"}
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/stack-base-iterator/src/index.ts"],"sourcesContent":["import compat from 'async-compat';\nimport nextCallback from 'iterator-next-callback';\nimport { createProcessor } from 'maximize-iterator';\nimport Pinkie from 'pinkie-promise';\nimport LinkedList from './LinkedList.ts';\nimport { defer } from './lib/defer.ts';\n\nimport type { EachDoneCallback, EachFunction, ForEachOptions, ProcessCallback, Processor, ProcessorOptions, StackOptions, ValueCallback } from './types.ts';\n\nexport type StackFunction<T, TReturn = unknown, TNext = unknown> = (iterator: StackBaseIterator<T, TReturn, TNext>, callback: ValueCallback<T>) => void;\n\nconst root = typeof window === 'undefined' ? global : window;\n\n// biome-ignore lint/suspicious/noShadowRestrictedNames: Legacy\nconst Symbol: SymbolConstructor = typeof root.Symbol === 'undefined' ? ({ asyncIterator: undefined } as unknown as SymbolConstructor) : root.Symbol;\n\nexport { default as LinkedList } from './LinkedList.ts';\nexport type * from './types.ts';\nexport default class StackBaseIterator<T, TReturn = unknown, TNext = unknown> implements AsyncIterableIterator<T, TReturn, TNext> {\n protected done: boolean;\n protected stack: StackFunction<T, TReturn, TNext>[];\n protected queued: ProcessCallback<T>[];\n protected processors: LinkedList<Processor>;\n protected processing: LinkedList<ProcessCallback<T>>;\n\n protected options: StackOptions;\n protected destroyed: boolean;\n private flushing: boolean;\n private pending: number;\n private endScheduled: boolean;\n\n constructor(options: StackOptions = {}) {\n this.options = { ...options };\n this.options.error =\n options.error ||\n function defaultError(err) {\n return !!err; // fail on errors\n };\n\n this.done = false;\n this.stack = [] as StackFunction<T, TReturn, TNext>[];\n this.queued = [] as ProcessCallback<T>[];\n this.processors = new LinkedList<Processor>();\n this.processing = new LinkedList<ProcessCallback<T>>();\n this.flushing = false;\n this.pending = 0;\n this.endScheduled = false;\n }\n\n isDone() {\n return this.done;\n }\n\n push(fn: StackFunction<T, TReturn, TNext>, ...rest: StackFunction<T, TReturn, TNext>[]) {\n if (this.done) return console.log('Attempting to push on a done iterator');\n this.stack.push(fn);\n !rest.length ||\n rest.forEach((x) => {\n this.stack.push(x);\n });\n this._pump();\n }\n\n next(): Promise<IteratorResult<T, TReturn>> {\n return new Pinkie((resolve, reject) => {\n this._processOrQueue((err, result: IteratorResult<T, TReturn>) => {\n err ? reject(err) : resolve(result);\n });\n });\n }\n\n [Symbol.asyncIterator](): AsyncIterableIterator<T, TReturn, TNext> {\n return this;\n }\n\n forEach(fn: EachFunction<T>, callback: EachDoneCallback): void;\n forEach(fn: EachFunction<T>, options: ForEachOptions, callback: EachDoneCallback): void;\n forEach(fn: EachFunction<T>, options?: ForEachOptions): Promise<boolean>;\n forEach(fn: EachFunction<T>, options?: ForEachOptions | EachDoneCallback, callback?: EachDoneCallback): void | Promise<boolean> {\n if (typeof fn !== 'function') throw new Error('Missing each function');\n callback = typeof options === 'function' ? options : callback;\n options = typeof options === 'function' ? {} : ((options || {}) as ForEachOptions);\n\n if (typeof callback === 'function') {\n if (this.done) return callback(null, true);\n const processorOptions: ProcessorOptions<T> = {\n each: fn,\n callbacks: options.callbacks || false,\n concurrency: options.concurrency || 1,\n limit: options.limit || Infinity,\n error:\n options.error ||\n function defaultError() {\n return true; // default is exit on error\n },\n total: 0,\n counter: 0,\n canProcess: () => {\n return !this.done && this.stack.length > 0 && this.queued.length < this.stack.length;\n },\n };\n\n let callbackFired = false;\n let processor = createProcessor<T>(nextCallback<T, TReturn, TNext>(this), processorOptions, (err) => {\n // Guard against double callback (can happen if end() is called while microtask is pending)\n if (callbackFired) return;\n callbackFired = true;\n\n // Defer completion decision AND processor removal to give deferred work a chance to push\n // Processor must stay in list so _pump() can signal it to process new items\n defer(() => {\n if (!this.destroyed) this.processors.remove(processor);\n processor = null;\n const done = !this.stack.length && this.pending === 0;\n if ((err || done) && !this.done) this.end(err);\n callback(err, this.done || done);\n });\n });\n this.processors.push(processor);\n this._pump();\n return;\n }\n\n return new Promise((resolve, reject) => this.forEach(fn, options, (err?: Error, done?: boolean) => (err ? reject(err) : resolve(done))));\n }\n\n end(err?: Error) {\n if (this.done) return;\n this.done = true;\n while (this.processors.length > 0) this.processors.pop()(err || true);\n while (this.processing.length > 0) err ? this.processing.pop()(err) : this.processing.pop()(null, { done: true, value: null });\n while (this.queued.length > 0) err ? this.queued.pop()(err) : this.queued.pop()(null, { done: true, value: null });\n while (this.stack.length > 0) this.stack.pop();\n }\n destroy(err?: Error) {\n if (this.destroyed) throw new Error('Already destroyed');\n this.destroyed = true;\n this.end(err);\n }\n\n private _pump() {\n // Flush loop pattern: if already flushing, the outer loop will handle new work\n // This prevents stack overflow by avoiding recursion entirely\n if (this.flushing) return;\n this.flushing = true;\n\n if (!this.done && this.processors.length > 0 && this.stack.length > 0 && this.stack.length > this.queued.length) this.processors.last()(false); // try to queue more\n while (this.stack.length > 0 && this.queued.length > 0) {\n this._processOrQueue(this.queued.pop());\n if (!this.done && this.processors.length > 0 && this.stack.length > 0 && this.stack.length > this.queued.length) this.processors.last()(false); // try to queue more\n }\n\n this.flushing = false;\n }\n\n private _scheduleEndCheck() {\n // Defer end check to give other deferred work a chance to push\n if (this.endScheduled || this.done) return;\n this.endScheduled = true;\n\n defer(() => {\n this.endScheduled = false;\n // Re-check ALL conditions after deferral\n if (this.stack.length === 0 && this.processing.length === 0 && this.pending === 0 && !this.done) {\n this.end();\n }\n });\n }\n\n private _processOrQueue(callback: ProcessCallback<T>): void {\n if (this.done) return callback(null, { done: true, value: null });\n\n // nothing to process so queue\n if (this.stack.length === 0) {\n this.queued.push(callback);\n return;\n }\n\n // process next\n const next = this.stack.pop();\n this.processing.push(callback);\n this.pending++;\n let callbackFired = false;\n next(this, (err?: Error, result?: IteratorResult<T, TReturn> | undefined): void => {\n // Guard against callback being called multiple times (buggy iterators)\n if (callbackFired) {\n console.warn('stack-base-iterator: callback called multiple times - this indicates a bug in the iterator implementation');\n return;\n }\n callbackFired = true;\n\n this.pending--;\n this.processing.remove(callback);\n\n // done\n if (this.done)\n return callback(null, {\n done: true,\n value: null,\n });\n\n // skip error\n if (err && compat.defaultValue(this.options.error(err), true)) err = null;\n\n // handle callback\n if (err) callback(err);\n // queue again\n else if (!result) {\n this.queued.push(callback);\n defer(() => this._pump()); // Deferred to start new call stack\n }\n // return the result\n else callback(null, result);\n\n // Only schedule end check when we might actually be done\n // This prevents premature end checks from earlier items\n if (this.stack.length === 0 && this.processing.length === 0 && this.pending === 0) {\n this._scheduleEndCheck();\n }\n });\n }\n}\n"],"names":["compat","nextCallback","createProcessor","Pinkie","LinkedList","defer","root","window","global","Symbol","asyncIterator","undefined","default","StackBaseIterator","isDone","done","push","fn","rest","console","log","stack","length","forEach","x","_pump","next","resolve","reject","_processOrQueue","err","result","options","callback","Error","processorOptions","each","callbacks","concurrency","limit","Infinity","error","defaultError","total","counter","canProcess","queued","callbackFired","processor","destroyed","processors","remove","pending","end","Promise","pop","processing","value","destroy","flushing","last","_scheduleEndCheck","endScheduled","warn","defaultValue"],"mappings":"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"}
{
"name": "stack-base-iterator",
"version": "3.0.3",
"version": "3.0.4",
"description": "Base iterator for values retrieved using a stack of async functions returning values",

@@ -5,0 +5,0 @@ "keywords": [