stack-base-iterator
Advanced tools
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/stack-base-iterator/src/index.ts"],"sourcesContent":["import once from 'call-once-fn';\nimport FIFO from 'fifo';\n\nimport createProcesor from './createProcessor.js';\nimport drainStack from './drainStack.js';\nimport fifoRemove from './fifoRemove.js';\nimport processOrQueue from './processOrQueue.js';\n\nimport type { Callback, DefaultFunction, EachFunction, ForEachOptions, ProcessorOptions, StackOptions } from './types.js';\n\nexport type * from './types.js';\nexport default class StackBaseIterator<T> implements AsyncIterator<T> {\n protected options: StackOptions;\n protected stack: unknown[];\n protected queued: DefaultFunction[];\n protected processors: DefaultFunction[];\n protected entries: unknown[];\n protected links: unknown[];\n protected processing: DefaultFunction[];\n protected destroyed: boolean;\n protected done: 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.queued = FIFO() as unknown as DefaultFunction[];\n this.processors = FIFO() as unknown as DefaultFunction[];\n this.stack = FIFO() as unknown as unknown[];\n this.entries = FIFO() as unknown as unknown[];\n this.links = FIFO() as unknown as unknown[];\n this.processing = FIFO() as unknown as DefaultFunction[];\n }\n\n isDone() {\n return this.done;\n }\n\n push(item) {\n if (this.done) return console.log('Attempting to push on a done iterator');\n this.stack.push(item);\n drainStack(this);\n }\n\n next(...[value]: [] | [unknown]): Promise<IteratorResult<T, unknown>> {\n const callback = value as Callback;\n if (typeof callback === 'function') return processOrQueue(this, once(callback));\n\n return new Promise((resolve, reject) => {\n this.next((err, result) => (err ? reject(err) : resolve(result)));\n });\n }\n\n forEach(fn: EachFunction<T>, options?: ForEachOptions | Callback, callback?: Callback): undefined | Promise<unknown> {\n if (typeof fn !== 'function') throw new Error('Missing each function');\n if (typeof options === 'function') {\n callback = options as Callback;\n options = {};\n }\n\n if (typeof callback === 'function') {\n if (this.done) {\n callback(null, true);\n return;\n }\n options = options || {};\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 stop: () => {\n return this.done || this.queued.length >= this.stack.length;\n },\n };\n\n let processor = createProcesor<T>(this.next.bind(this), processorOptions, (err) => {\n if (!this.destroyed) fifoRemove(this.processors, processor);\n processor = null;\n options = null;\n const done = !this.stack.length;\n if ((err || done) && !this.done) this.end(err);\n return callback(err, this.done || done);\n });\n this.processors.push(processor);\n processor();\n return;\n }\n\n return new Promise((resolve, reject) => this.forEach(fn, options, (err, done) => (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) this.processors.pop()(err || true);\n while (this.processing.length) err ? this.processing.pop()(err) : this.processing.pop()(null, null);\n while (this.queued.length) err ? this.queued.pop()(err) : this.queued.pop()(null, null);\n while (this.stack.length) this.stack.pop();\n }\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\nif (typeof Symbol !== 'undefined' && Symbol.asyncIterator) {\n StackBaseIterator.prototype[Symbol.asyncIterator] = function asyncIterator() {\n const self = this;\n return {\n next: function next() {\n return self.next().then(function nextCallback(value) {\n return Promise.resolve({ value: value, done: value === null });\n });\n },\n destroy: function destroy() {\n self.destroy();\n return Promise.resolve();\n },\n };\n };\n}\n"],"names":["once","FIFO","createProcesor","drainStack","fifoRemove","processOrQueue","StackBaseIterator","isDone","done","push","item","console","log","stack","next","value","callback","Promise","resolve","reject","err","result","forEach","fn","options","Error","processorOptions","each","callbacks","concurrency","limit","Infinity","error","defaultError","total","counter","stop","queued","length","processor","bind","destroyed","processors","end","pop","processing","destroy","constructor","entries","links","Symbol","asyncIterator","prototype","self","then","nextCallback"],"mappings":"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"} | ||
| {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/stack-base-iterator/src/index.ts"],"sourcesContent":["import once from 'call-once-fn';\nimport FIFO from 'fifo';\n\nimport createProcesor from './createProcessor.js';\nimport drainStack from './drainStack.js';\nimport fifoRemove from './fifoRemove.js';\nimport processOrQueue from './processOrQueue.js';\n\nimport type { Callback, DefaultFunction, EachFunction, ForEachOptions, ProcessorOptions, StackOptions } from './types.js';\n\nexport type * from './types.js';\nexport default class StackBaseIterator<T> implements AsyncIterator<T> {\n protected options: StackOptions;\n protected stack: unknown[];\n protected queued: DefaultFunction[];\n protected processors: DefaultFunction[];\n protected entries: unknown[];\n protected links: unknown[];\n protected processing: DefaultFunction[];\n protected destroyed: boolean;\n protected done: 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.queued = FIFO() as unknown as DefaultFunction[];\n this.processors = FIFO() as unknown as DefaultFunction[];\n this.stack = FIFO() as unknown as unknown[];\n this.entries = FIFO() as unknown as unknown[];\n this.links = FIFO() as unknown as unknown[];\n this.processing = FIFO() as unknown as DefaultFunction[];\n }\n\n isDone() {\n return this.done;\n }\n\n push(item) {\n if (this.done) return console.log('Attempting to push on a done iterator');\n this.stack.push(item);\n drainStack(this);\n }\n\n next(...[value]: [] | [unknown]): Promise<IteratorResult<T, unknown>> {\n const callback = value as Callback;\n if (typeof callback === 'function') return processOrQueue(this, once(callback));\n\n return new Promise((resolve, reject) => {\n this.next((err, result) => (err ? reject(err) : resolve(result)));\n });\n }\n\n forEach(fn: EachFunction<T>, options?: ForEachOptions | Callback, callback?: Callback): undefined | Promise<unknown> {\n if (typeof fn !== 'function') throw new Error('Missing each function');\n if (typeof options === 'function') {\n callback = options as Callback;\n options = {};\n }\n\n if (typeof callback === 'function') {\n if (this.done) {\n callback(null, true);\n return;\n }\n options = options || {};\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 stop: () => {\n return this.done || this.queued.length >= this.stack.length;\n },\n };\n\n let processor = createProcesor<T>(this.next.bind(this), processorOptions, (err) => {\n if (!this.destroyed) fifoRemove(this.processors, processor);\n processor = null;\n options = null;\n const done = !this.stack.length;\n if ((err || done) && !this.done) this.end(err);\n return callback(err, this.done || done);\n });\n this.processors.push(processor);\n processor();\n return;\n }\n\n return new Promise((resolve, reject) => this.forEach(fn, options, (err, done) => (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) this.processors.pop()(err || true);\n while (this.processing.length) err ? this.processing.pop()(err) : this.processing.pop()(null, null);\n while (this.queued.length) err ? this.queued.pop()(err) : this.queued.pop()(null, null);\n while (this.stack.length) this.stack.pop();\n }\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\nif (typeof Symbol !== 'undefined' && Symbol.asyncIterator) {\n StackBaseIterator.prototype[Symbol.asyncIterator] = function asyncIterator() {\n const self = this;\n return {\n next: function next() {\n return self.next().then(function nextCallback(value) {\n return Promise.resolve({ value: value, done: value === null });\n });\n },\n destroy: function destroy() {\n self.destroy();\n return Promise.resolve();\n },\n };\n };\n}\n"],"names":["once","FIFO","createProcesor","drainStack","fifoRemove","processOrQueue","StackBaseIterator","isDone","done","push","item","console","log","stack","next","value","callback","Promise","resolve","reject","err","result","forEach","fn","options","Error","processorOptions","each","callbacks","concurrency","limit","Infinity","error","defaultError","total","counter","stop","queued","length","processor","bind","destroyed","processors","end","pop","processing","destroy","entries","links","Symbol","asyncIterator","prototype","self","then","nextCallback"],"mappings":"AAAA,OAAOA,UAAU,eAAe;AAChC,OAAOC,UAAU,OAAO;AAExB,OAAOC,oBAAoB,uBAAuB;AAClD,OAAOC,gBAAgB,kBAAkB;AACzC,OAAOC,gBAAgB,kBAAkB;AACzC,OAAOC,oBAAoB,sBAAsB;AAKlC,IAAA,AAAMC,oBAAN,MAAMA;IA2BnBC,SAAS;QACP,OAAO,IAAI,CAACC,IAAI;IAClB;IAEAC,KAAKC,IAAI,EAAE;QACT,IAAI,IAAI,CAACF,IAAI,EAAE,OAAOG,QAAQC,GAAG,CAAC;QAClC,IAAI,CAACC,KAAK,CAACJ,IAAI,CAACC;QAChBP,WAAW,IAAI;IACjB;IAEAW,KAAK,GAAG,CAACC,MAAM,AAAgB,EAAuC;QACpE,MAAMC,WAAWD;QACjB,IAAI,OAAOC,aAAa,YAAY,OAAOX,eAAe,IAAI,EAAEL,KAAKgB;QAErE,OAAO,IAAIC,QAAQ,CAACC,SAASC;YAC3B,IAAI,CAACL,IAAI,CAAC,CAACM,KAAKC,SAAYD,MAAMD,OAAOC,OAAOF,QAAQG;QAC1D;IACF;IAEAC,QAAQC,EAAmB,EAAEC,OAAmC,EAAER,QAAmB,EAAgC;QACnH,IAAI,OAAOO,OAAO,YAAY,MAAM,IAAIE,MAAM;QAC9C,IAAI,OAAOD,YAAY,YAAY;YACjCR,WAAWQ;YACXA,UAAU,CAAC;QACb;QAEA,IAAI,OAAOR,aAAa,YAAY;YAClC,IAAI,IAAI,CAACR,IAAI,EAAE;gBACbQ,SAAS,MAAM;gBACf;YACF;YACAQ,UAAUA,WAAW,CAAC;YACtB,MAAME,mBAAwC;gBAC5CC,MAAMJ;gBACNK,WAAWJ,QAAQI,SAAS,IAAI;gBAChCC,aAAaL,QAAQK,WAAW,IAAI;gBACpCC,OAAON,QAAQM,KAAK,IAAIC;gBACxBC,OACER,QAAQQ,KAAK,IACb,SAASC;oBACP,OAAO,MAAM,2BAA2B;gBAC1C;gBACFC,OAAO;gBACPC,SAAS;gBACTC,MAAM;oBACJ,OAAO,IAAI,CAAC5B,IAAI,IAAI,IAAI,CAAC6B,MAAM,CAACC,MAAM,IAAI,IAAI,CAACzB,KAAK,CAACyB,MAAM;gBAC7D;YACF;YAEA,IAAIC,YAAYrC,eAAkB,IAAI,CAACY,IAAI,CAAC0B,IAAI,CAAC,IAAI,GAAGd,kBAAkB,CAACN;gBACzE,IAAI,CAAC,IAAI,CAACqB,SAAS,EAAErC,WAAW,IAAI,CAACsC,UAAU,EAAEH;gBACjDA,YAAY;gBACZf,UAAU;gBACV,MAAMhB,OAAO,CAAC,IAAI,CAACK,KAAK,CAACyB,MAAM;gBAC/B,IAAI,AAAClB,CAAAA,OAAOZ,IAAG,KAAM,CAAC,IAAI,CAACA,IAAI,EAAE,IAAI,CAACmC,GAAG,CAACvB;gBAC1C,OAAOJ,SAASI,KAAK,IAAI,CAACZ,IAAI,IAAIA;YACpC;YACA,IAAI,CAACkC,UAAU,CAACjC,IAAI,CAAC8B;YACrBA;YACA;QACF;QAEA,OAAO,IAAItB,QAAQ,CAACC,SAASC,SAAW,IAAI,CAACG,OAAO,CAACC,IAAIC,SAAS,CAACJ,KAAKZ,OAAUY,MAAMD,OAAOC,OAAOF,QAAQV;IAChH;IAEAmC,IAAIvB,GAAW,EAAE;QACf,IAAI,IAAI,CAACZ,IAAI,EAAE;QACf,IAAI,CAACA,IAAI,GAAG;QACZ,MAAO,IAAI,CAACkC,UAAU,CAACJ,MAAM,CAAE,IAAI,CAACI,UAAU,CAACE,GAAG,GAAGxB,OAAO;QAC5D,MAAO,IAAI,CAACyB,UAAU,CAACP,MAAM,CAAElB,MAAM,IAAI,CAACyB,UAAU,CAACD,GAAG,GAAGxB,OAAO,IAAI,CAACyB,UAAU,CAACD,GAAG,GAAG,MAAM;QAC9F,MAAO,IAAI,CAACP,MAAM,CAACC,MAAM,CAAElB,MAAM,IAAI,CAACiB,MAAM,CAACO,GAAG,GAAGxB,OAAO,IAAI,CAACiB,MAAM,CAACO,GAAG,GAAG,MAAM;QAClF,MAAO,IAAI,CAAC/B,KAAK,CAACyB,MAAM,CAAE,IAAI,CAACzB,KAAK,CAAC+B,GAAG;IAC1C;IAEAE,QAAQ1B,GAAW,EAAE;QACnB,IAAI,IAAI,CAACqB,SAAS,EAAE,MAAM,IAAIhB,MAAM;QACpC,IAAI,CAACgB,SAAS,GAAG;QACjB,IAAI,CAACE,GAAG,CAACvB;IACX;IA9FA,YAAYI,UAAwB,CAAC,CAAC,CAAE;QACtC,IAAI,CAACA,OAAO,GAAG;YAAE,GAAGA,OAAO;QAAC;QAC5B,IAAI,CAACA,OAAO,CAACQ,KAAK,GAChBR,QAAQQ,KAAK,IACb,SAASC,aAAab,GAAG;YACvB,OAAO,CAAC,CAACA,KAAK,iBAAiB;QACjC;QAEF,IAAI,CAACiB,MAAM,GAAGpC;QACd,IAAI,CAACyC,UAAU,GAAGzC;QAClB,IAAI,CAACY,KAAK,GAAGZ;QACb,IAAI,CAAC8C,OAAO,GAAG9C;QACf,IAAI,CAAC+C,KAAK,GAAG/C;QACb,IAAI,CAAC4C,UAAU,GAAG5C;IACpB;AAiFF;AA1GA,SAAqBK,+BA0GpB;AAED,IAAI,OAAO2C,WAAW,eAAeA,OAAOC,aAAa,EAAE;IACzD5C,kBAAkB6C,SAAS,CAACF,OAAOC,aAAa,CAAC,GAAG,SAASA;QAC3D,MAAME,OAAO,IAAI;QACjB,OAAO;YACLtC,MAAM,SAASA;gBACb,OAAOsC,KAAKtC,IAAI,GAAGuC,IAAI,CAAC,SAASC,aAAavC,KAAK;oBACjD,OAAOE,QAAQC,OAAO,CAAC;wBAAEH,OAAOA;wBAAOP,MAAMO,UAAU;oBAAK;gBAC9D;YACF;YACA+B,SAAS,SAASA;gBAChBM,KAAKN,OAAO;gBACZ,OAAO7B,QAAQC,OAAO;YACxB;QACF;IACF;AACF"} |
+3
-3
| { | ||
| "name": "stack-base-iterator", | ||
| "version": "1.2.11", | ||
| "version": "1.2.12", | ||
| "description": "Base iterator for values retrieved using a stack of async functions returning values", | ||
@@ -41,4 +41,4 @@ "keywords": [ | ||
| "asap": "^2.0.6", | ||
| "async-compat": "^1.6.11", | ||
| "call-once-fn": "^1.0.17", | ||
| "async-compat": "^1.6.13", | ||
| "call-once-fn": "^1.0.18", | ||
| "fifo": "^2.4.1" | ||
@@ -45,0 +45,0 @@ }, |
67613
-0.03%Updated
Updated