stack-base-iterator
Advanced tools
@@ -1,1 +0,2 @@ | ||
| export default function createProcessor(next: any, options: any, callback: any): (doneOrErr?: any) => boolean; | ||
| import type { Callback, ProcessorOptions } from './types.js'; | ||
| export default function createProcessor(next: any, options: ProcessorOptions, callback: Callback): (doneOrErr?: any) => boolean; |
@@ -1,1 +0,2 @@ | ||
| export default function createProcessor(next: any, options: any, callback: any): (doneOrErr?: any) => boolean; | ||
| import type { Callback, ProcessorOptions } from './types.js'; | ||
| export default function createProcessor(next: any, options: ProcessorOptions, callback: Callback): (doneOrErr?: any) => boolean; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/stack-base-iterator/src/createProcessor.ts"],"sourcesContent":["import compat from 'async-compat';\n\nconst isError = (e) => e && e.stack && e.message;\n\nfunction processDone(err, options, callback) {\n // mark this iteration done\n options.err = options.err || err;\n options.done = true;\n\n // process done\n if (!options.done || options.counter > 0) return false;\n callback(options.err, options.done);\n return true;\n}\n\nfunction processResult(err, keep, options, callback) {\n options.counter--;\n\n // mark this iteration done\n if ((err && compat.defaultValue(options.error(err), false)) || (!err && !compat.defaultValue(keep, true))) {\n options.err = options.err || err;\n options.done = true;\n }\n\n // process done\n if (!options.done || options.counter > 0) return false;\n callback(options.err, options.done);\n return true;\n}\n\nexport default function createProcessor(next, options, callback) {\n let isProcessing = false;\n return function processor(doneOrErr?) {\n if (doneOrErr && processDone(isError(doneOrErr) ? doneOrErr : null, options, callback)) return;\n if (isProcessing) return;\n isProcessing = true;\n\n let counter = 0;\n while (options.counter < options.concurrency) {\n if (options.done || options.stop(counter++)) break;\n if (options.total >= options.limit) return processDone(null, options, callback);\n options.total++;\n options.counter++;\n\n next((err, value) => {\n if (err || value === null) {\n return !processResult(err, false, options, callback) && !isProcessing ? processor() : undefined;\n }\n compat.asyncFunction(options.each, options.callbacks, value, (err, keep) => (!processResult(err, keep, options, callback) && !isProcessing ? processor() : undefined));\n });\n }\n\n isProcessing = false;\n };\n}\n"],"names":["createProcessor","isError","e","stack","message","processDone","err","options","callback","done","counter","processResult","keep","compat","defaultValue","error","next","isProcessing","processor","doneOrErr","concurrency","stop","total","limit","value","undefined","asyncFunction","each","callbacks"],"mappings":";;;;+BA8BA;;;eAAwBA;;;kEA9BL;;;;;;AAEnB,IAAMC,UAAU,SAACC;WAAMA,KAAKA,EAAEC,KAAK,IAAID,EAAEE,OAAO;;AAEhD,SAASC,YAAYC,GAAG,EAAEC,OAAO,EAAEC,QAAQ;IACzC,2BAA2B;IAC3BD,QAAQD,GAAG,GAAGC,QAAQD,GAAG,IAAIA;IAC7BC,QAAQE,IAAI,GAAG;IAEf,eAAe;IACf,IAAI,CAACF,QAAQE,IAAI,IAAIF,QAAQG,OAAO,GAAG,GAAG,OAAO;IACjDF,SAASD,QAAQD,GAAG,EAAEC,QAAQE,IAAI;IAClC,OAAO;AACT;AAEA,SAASE,cAAcL,GAAG,EAAEM,IAAI,EAAEL,OAAO,EAAEC,QAAQ;IACjDD,QAAQG,OAAO;IAEf,2BAA2B;IAC3B,IAAI,AAACJ,OAAOO,oBAAM,CAACC,YAAY,CAACP,QAAQQ,KAAK,CAACT,MAAM,UAAY,CAACA,OAAO,CAACO,oBAAM,CAACC,YAAY,CAACF,MAAM,OAAQ;QACzGL,QAAQD,GAAG,GAAGC,QAAQD,GAAG,IAAIA;QAC7BC,QAAQE,IAAI,GAAG;IACjB;IAEA,eAAe;IACf,IAAI,CAACF,QAAQE,IAAI,IAAIF,QAAQG,OAAO,GAAG,GAAG,OAAO;IACjDF,SAASD,QAAQD,GAAG,EAAEC,QAAQE,IAAI;IAClC,OAAO;AACT;AAEe,SAAST,gBAAgBgB,IAAI,EAAET,OAAO,EAAEC,QAAQ;IAC7D,IAAIS,eAAe;IACnB,OAAO,SAASC,UAAUC,SAAU;QAClC,IAAIA,aAAad,YAAYJ,QAAQkB,aAAaA,YAAY,MAAMZ,SAASC,WAAW;QACxF,IAAIS,cAAc;QAClBA,eAAe;QAEf,IAAIP,UAAU;QACd,MAAOH,QAAQG,OAAO,GAAGH,QAAQa,WAAW,CAAE;YAC5C,IAAIb,QAAQE,IAAI,IAAIF,QAAQc,IAAI,CAACX,YAAY;YAC7C,IAAIH,QAAQe,KAAK,IAAIf,QAAQgB,KAAK,EAAE,OAAOlB,YAAY,MAAME,SAASC;YACtED,QAAQe,KAAK;YACbf,QAAQG,OAAO;YAEfM,KAAK,SAACV,KAAKkB;gBACT,IAAIlB,OAAOkB,UAAU,MAAM;oBACzB,OAAO,CAACb,cAAcL,KAAK,OAAOC,SAASC,aAAa,CAACS,eAAeC,cAAcO;gBACxF;gBACAZ,oBAAM,CAACa,aAAa,CAACnB,QAAQoB,IAAI,EAAEpB,QAAQqB,SAAS,EAAEJ,OAAO,SAAClB,KAAKM;2BAAU,CAACD,cAAcL,KAAKM,MAAML,SAASC,aAAa,CAACS,eAAeC,cAAcO;;YAC7J;QACF;QAEAR,eAAe;IACjB;AACF"} | ||
| {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/stack-base-iterator/src/createProcessor.ts"],"sourcesContent":["import compat from 'async-compat';\n\nimport type { Callback, ProcessorOptions } from './types.js';\n\nconst isError = (e) => e && e.stack && e.message;\n\nfunction processDone(err: Error, options: ProcessorOptions, callback: Callback) {\n // mark this iteration done\n options.err = options.err || err;\n options.done = true;\n\n // process done\n if (!options.done || options.counter > 0) return false;\n callback(options.err, options.done);\n return true;\n}\n\nfunction processResult(err, keep, options, callback) {\n options.counter--;\n\n // mark this iteration done\n if ((err && compat.defaultValue(options.error(err), false)) || (!err && !compat.defaultValue(keep, true))) {\n options.err = options.err || err;\n options.done = true;\n }\n\n // process done\n if (!options.done || options.counter > 0) return false;\n callback(options.err, options.done);\n return true;\n}\n\nexport default function createProcessor(next, options: ProcessorOptions, callback: Callback) {\n let isProcessing = false;\n return function processor(doneOrErr?) {\n if (doneOrErr && processDone(isError(doneOrErr) ? doneOrErr : null, options, callback)) return;\n if (isProcessing) return;\n isProcessing = true;\n\n let counter = 0;\n while (options.counter < options.concurrency) {\n if (options.done || options.stop(counter++)) break;\n if (options.total >= options.limit) return processDone(null, options, callback);\n options.total++;\n options.counter++;\n\n next((err, value) => {\n if (err || value === null) {\n return !processResult(err, false, options, callback) && !isProcessing ? processor() : undefined;\n }\n compat.asyncFunction(options.each, options.callbacks, value, (err, keep) => (!processResult(err, keep, options, callback) && !isProcessing ? processor() : undefined));\n });\n }\n\n isProcessing = false;\n };\n}\n"],"names":["createProcessor","isError","e","stack","message","processDone","err","options","callback","done","counter","processResult","keep","compat","defaultValue","error","next","isProcessing","processor","doneOrErr","concurrency","stop","total","limit","value","undefined","asyncFunction","each","callbacks"],"mappings":";;;;+BAgCA;;;eAAwBA;;;kEAhCL;;;;;;AAInB,IAAMC,UAAU,SAACC;WAAMA,KAAKA,EAAEC,KAAK,IAAID,EAAEE,OAAO;;AAEhD,SAASC,YAAYC,GAAU,EAAEC,OAAyB,EAAEC,QAAkB;IAC5E,2BAA2B;IAC3BD,QAAQD,GAAG,GAAGC,QAAQD,GAAG,IAAIA;IAC7BC,QAAQE,IAAI,GAAG;IAEf,eAAe;IACf,IAAI,CAACF,QAAQE,IAAI,IAAIF,QAAQG,OAAO,GAAG,GAAG,OAAO;IACjDF,SAASD,QAAQD,GAAG,EAAEC,QAAQE,IAAI;IAClC,OAAO;AACT;AAEA,SAASE,cAAcL,GAAG,EAAEM,IAAI,EAAEL,OAAO,EAAEC,QAAQ;IACjDD,QAAQG,OAAO;IAEf,2BAA2B;IAC3B,IAAI,AAACJ,OAAOO,oBAAM,CAACC,YAAY,CAACP,QAAQQ,KAAK,CAACT,MAAM,UAAY,CAACA,OAAO,CAACO,oBAAM,CAACC,YAAY,CAACF,MAAM,OAAQ;QACzGL,QAAQD,GAAG,GAAGC,QAAQD,GAAG,IAAIA;QAC7BC,QAAQE,IAAI,GAAG;IACjB;IAEA,eAAe;IACf,IAAI,CAACF,QAAQE,IAAI,IAAIF,QAAQG,OAAO,GAAG,GAAG,OAAO;IACjDF,SAASD,QAAQD,GAAG,EAAEC,QAAQE,IAAI;IAClC,OAAO;AACT;AAEe,SAAST,gBAAgBgB,IAAI,EAAET,OAAyB,EAAEC,QAAkB;IACzF,IAAIS,eAAe;IACnB,OAAO,SAASC,UAAUC,SAAU;QAClC,IAAIA,aAAad,YAAYJ,QAAQkB,aAAaA,YAAY,MAAMZ,SAASC,WAAW;QACxF,IAAIS,cAAc;QAClBA,eAAe;QAEf,IAAIP,UAAU;QACd,MAAOH,QAAQG,OAAO,GAAGH,QAAQa,WAAW,CAAE;YAC5C,IAAIb,QAAQE,IAAI,IAAIF,QAAQc,IAAI,CAACX,YAAY;YAC7C,IAAIH,QAAQe,KAAK,IAAIf,QAAQgB,KAAK,EAAE,OAAOlB,YAAY,MAAME,SAASC;YACtED,QAAQe,KAAK;YACbf,QAAQG,OAAO;YAEfM,KAAK,SAACV,KAAKkB;gBACT,IAAIlB,OAAOkB,UAAU,MAAM;oBACzB,OAAO,CAACb,cAAcL,KAAK,OAAOC,SAASC,aAAa,CAACS,eAAeC,cAAcO;gBACxF;gBACAZ,oBAAM,CAACa,aAAa,CAACnB,QAAQoB,IAAI,EAAEpB,QAAQqB,SAAS,EAAEJ,OAAO,SAAClB,KAAKM;2BAAU,CAACD,cAAcL,KAAKM,MAAML,SAASC,aAAa,CAACS,eAAeC,cAAcO;;YAC7J;QACF;QAEAR,eAAe;IACjB;AACF"} |
+12
-12
@@ -1,19 +0,19 @@ | ||
| import type { DefaultFunction, StackOptions } from './types.js'; | ||
| import type { Callback, EachFunction, ForEachOptions, StackOptions } from './types.js'; | ||
| export type * from './types.js'; | ||
| export default class StackBaseIterator implements AsyncIterator<unknown> { | ||
| options: StackOptions; | ||
| queued: DefaultFunction[]; | ||
| processors: DefaultFunction[]; | ||
| stack: unknown[]; | ||
| entries: unknown[]; | ||
| links: unknown[]; | ||
| processing: DefaultFunction[]; | ||
| destroyed: unknown; | ||
| done: unknown; | ||
| private options; | ||
| private queued; | ||
| private processors; | ||
| private stack; | ||
| private entries; | ||
| private links; | ||
| private processing; | ||
| private destroyed; | ||
| private done; | ||
| constructor(options?: StackOptions); | ||
| push(item: any): void; | ||
| next(callback: any): any; | ||
| forEach(fn: any, options: any, callback: any): any; | ||
| next(callback?: Callback): any; | ||
| forEach(fn: EachFunction, options: ForEachOptions | Callback, callback?: Callback): undefined | Promise<unknown>; | ||
| end(err?: Error): void; | ||
| destroy(err?: Error): void; | ||
| } |
+12
-12
@@ -1,19 +0,19 @@ | ||
| import type { DefaultFunction, StackOptions } from './types.js'; | ||
| import type { Callback, EachFunction, ForEachOptions, StackOptions } from './types.js'; | ||
| export type * from './types.js'; | ||
| export default class StackBaseIterator implements AsyncIterator<unknown> { | ||
| options: StackOptions; | ||
| queued: DefaultFunction[]; | ||
| processors: DefaultFunction[]; | ||
| stack: unknown[]; | ||
| entries: unknown[]; | ||
| links: unknown[]; | ||
| processing: DefaultFunction[]; | ||
| destroyed: unknown; | ||
| done: unknown; | ||
| private options; | ||
| private queued; | ||
| private processors; | ||
| private stack; | ||
| private entries; | ||
| private links; | ||
| private processing; | ||
| private destroyed; | ||
| private done; | ||
| constructor(options?: StackOptions); | ||
| push(item: any): void; | ||
| next(callback: any): any; | ||
| forEach(fn: any, options: any, callback: any): any; | ||
| next(callback?: Callback): any; | ||
| forEach(fn: EachFunction, options: ForEachOptions | Callback, callback?: Callback): undefined | Promise<unknown>; | ||
| end(err?: Error): void; | ||
| destroy(err?: Error): void; | ||
| } |
@@ -94,5 +94,8 @@ "use strict"; | ||
| if (typeof callback === 'function') { | ||
| if (this.done) return callback(null, true); | ||
| if (this.done) { | ||
| callback(null, true); | ||
| return; | ||
| } | ||
| options = options || {}; | ||
| options = { | ||
| var processorOptions = { | ||
| each: fn, | ||
@@ -111,3 +114,3 @@ callbacks: options.callbacks || false, | ||
| }; | ||
| var processor = (0, _createProcessor.default)(this.next.bind(this), options, function(err) { | ||
| var processor = (0, _createProcessor.default)(this.next.bind(this), processorOptions, function(err) { | ||
| if (!_this.destroyed) (0, _fifoRemove.default)(_this.processors, processor); | ||
@@ -114,0 +117,0 @@ processor = null; |
@@ -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 { DefaultFunction, StackOptions } from './types.js';\n\nexport type * from './types.js';\nexport default class StackBaseIterator implements AsyncIterator<unknown> {\n options: StackOptions;\n queued: DefaultFunction[];\n processors: DefaultFunction[];\n stack: unknown[];\n entries: unknown[];\n links: unknown[];\n processing: DefaultFunction[];\n destroyed: unknown;\n done: unknown;\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 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(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, options, callback) {\n if (typeof fn !== 'function') throw new Error('Missing each function');\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n\n if (typeof callback === 'function') {\n if (this.done) return callback(null, true);\n options = options || {};\n options = {\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(this.next.bind(this), options, (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":["StackBaseIterator","options","error","defaultError","err","queued","FIFO","processors","stack","entries","links","processing","push","item","done","console","log","drainStack","next","callback","processOrQueue","once","Promise","resolve","reject","result","forEach","fn","Error","each","callbacks","concurrency","limit","Infinity","total","counter","stop","length","processor","createProcesor","bind","destroyed","fifoRemove","end","pop","destroy","Symbol","asyncIterator","prototype","self","then","nextCallback","value"],"mappings":";;;;;;;eAWqBA;;;iEAXJ;2DACA;sEAEU;iEACJ;iEACA;qEACI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKZ,IAAA,AAAMA,kCAAN;;aAAMA;YAWPC,UAAAA,iEAAwB,CAAC;gCAXlBD;QAYjB,IAAI,CAACC,OAAO,GAAG,mBAAKA;QACpB,IAAI,CAACA,OAAO,CAACC,KAAK,GAChBD,QAAQC,KAAK,IACb,SAASC,aAAaC,GAAG;YACvB,OAAO,CAAC,CAACA,KAAK,iBAAiB;QACjC;QAEF,IAAI,CAACC,MAAM,GAAGC,IAAAA,aAAI;QAClB,IAAI,CAACC,UAAU,GAAGD,IAAAA,aAAI;QACtB,IAAI,CAACE,KAAK,GAAGF,IAAAA,aAAI;QACjB,IAAI,CAACG,OAAO,GAAGH,IAAAA,aAAI;QACnB,IAAI,CAACI,KAAK,GAAGJ,IAAAA,aAAI;QACjB,IAAI,CAACK,UAAU,GAAGL,IAAAA,aAAI;;iBAxBLN;IA2BnBY,OAAAA,IAIC,GAJDA,SAAAA,KAAKC,IAAI;QACP,IAAI,IAAI,CAACC,IAAI,EAAE,OAAOC,QAAQC,GAAG,CAAC;QAClC,IAAI,CAACR,KAAK,CAACI,IAAI,CAACC;QAChBI,IAAAA,mBAAU,EAAC,IAAI;IACjB;IAEAC,OAAAA,IAMC,GANDA,SAAAA,KAAKC,QAAQ;;QACX,IAAI,OAAOA,aAAa,YAAY,OAAOC,IAAAA,uBAAc,EAAC,IAAI,EAAEC,IAAAA,mBAAI,EAACF;QAErE,OAAO,IAAIG,QAAQ,SAACC,SAASC;YAC3B,MAAKN,IAAI,CAAC,SAACd,KAAKqB;uBAAYrB,MAAMoB,OAAOpB,OAAOmB,QAAQE;;QAC1D;IACF;IAEAC,OAAAA,OAyCC,GAzCDA,SAAAA,QAAQC,EAAE,EAAE1B,OAAO,EAAEkB,QAAQ;;QAC3B,IAAI,OAAOQ,OAAO,YAAY,MAAM,IAAIC,MAAM;QAC9C,IAAI,OAAO3B,YAAY,YAAY;YACjCkB,WAAWlB;YACXA,UAAU,CAAC;QACb;QAEA,IAAI,OAAOkB,aAAa,YAAY;YAClC,IAAI,IAAI,CAACL,IAAI,EAAE,OAAOK,SAAS,MAAM;YACrClB,UAAUA,WAAW,CAAC;YACtBA,UAAU;gBACR4B,MAAMF;gBACNG,WAAW7B,QAAQ6B,SAAS,IAAI;gBAChCC,aAAa9B,QAAQ8B,WAAW,IAAI;gBACpCC,OAAO/B,QAAQ+B,KAAK,IAAIC;gBACxB/B,OACED,QAAQC,KAAK,IACb,SAASC;oBACP,OAAO,MAAM,2BAA2B;gBAC1C;gBACF+B,OAAO;gBACPC,SAAS;gBACTC,MAAM;oBACJ,OAAO,MAAKtB,IAAI,IAAI,MAAKT,MAAM,CAACgC,MAAM,IAAI,MAAK7B,KAAK,CAAC6B,MAAM;gBAC7D;YACF;YAEA,IAAIC,YAAYC,IAAAA,wBAAc,EAAC,IAAI,CAACrB,IAAI,CAACsB,IAAI,CAAC,IAAI,GAAGvC,SAAS,SAACG;gBAC7D,IAAI,CAAC,MAAKqC,SAAS,EAAEC,IAAAA,mBAAU,EAAC,MAAKnC,UAAU,EAAE+B;gBACjDA,YAAY;gBACZrC,UAAU;gBACV,IAAMa,OAAO,CAAC,MAAKN,KAAK,CAAC6B,MAAM;gBAC/B,IAAI,AAACjC,CAAAA,OAAOU,IAAG,KAAM,CAAC,MAAKA,IAAI,EAAE,MAAK6B,GAAG,CAACvC;gBAC1C,OAAOe,SAASf,KAAK,MAAKU,IAAI,IAAIA;YACpC;YACA,IAAI,CAACP,UAAU,CAACK,IAAI,CAAC0B;YACrBA;YACA;QACF;QAEA,OAAO,IAAIhB,QAAQ,SAACC,SAASC;mBAAW,MAAKE,OAAO,CAACC,IAAI1B,SAAS,SAACG,KAAKU;uBAAUV,MAAMoB,OAAOpB,OAAOmB,QAAQT;;;IAChH;IAEA6B,OAAAA,GAOC,GAPDA,SAAAA,IAAIvC,GAAW;QACb,IAAI,IAAI,CAACU,IAAI,EAAE;QACf,IAAI,CAACA,IAAI,GAAG;QACZ,MAAO,IAAI,CAACP,UAAU,CAAC8B,MAAM,CAAE,IAAI,CAAC9B,UAAU,CAACqC,GAAG,GAAGxC,OAAO;QAC5D,MAAO,IAAI,CAACO,UAAU,CAAC0B,MAAM,CAAEjC,MAAM,IAAI,CAACO,UAAU,CAACiC,GAAG,GAAGxC,OAAO,IAAI,CAACO,UAAU,CAACiC,GAAG,GAAG,MAAM;QAC9F,MAAO,IAAI,CAACvC,MAAM,CAACgC,MAAM,CAAEjC,MAAM,IAAI,CAACC,MAAM,CAACuC,GAAG,GAAGxC,OAAO,IAAI,CAACC,MAAM,CAACuC,GAAG,GAAG,MAAM;QAClF,MAAO,IAAI,CAACpC,KAAK,CAAC6B,MAAM,CAAE,IAAI,CAAC7B,KAAK,CAACoC,GAAG;IAC1C;IAEAC,OAAAA,OAIC,GAJDA,SAAAA,QAAQzC,GAAW;QACjB,IAAI,IAAI,CAACqC,SAAS,EAAE,MAAM,IAAIb,MAAM;QACpC,IAAI,CAACa,SAAS,GAAG;QACjB,IAAI,CAACE,GAAG,CAACvC;IACX;WAjGmBJ;;AAoGrB,IAAI,OAAO8C,WAAW,eAAeA,OAAOC,aAAa,EAAE;IACzD/C,kBAAkBgD,SAAS,CAACF,OAAOC,aAAa,CAAC,GAAG,SAASA;QAC3D,IAAME,OAAO,IAAI;QACjB,OAAO;YACL/B,MAAM,SAASA;gBACb,OAAO+B,KAAK/B,IAAI,GAAGgC,IAAI,CAAC,SAASC,aAAaC,KAAK;oBACjD,OAAO9B,QAAQC,OAAO,CAAC;wBAAE6B,OAAOA;wBAAOtC,MAAMsC,UAAU;oBAAK;gBAC9D;YACF;YACAP,SAAS,SAASA;gBAChBI,KAAKJ,OAAO;gBACZ,OAAOvB,QAAQC,OAAO;YACxB;QACF;IACF;AACF"} | ||
| {"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 implements AsyncIterator<unknown> {\n private options: StackOptions;\n private queued: DefaultFunction[];\n private processors: DefaultFunction[];\n private stack: unknown[];\n private entries: unknown[];\n private links: unknown[];\n private processing: DefaultFunction[];\n private destroyed: unknown;\n private 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 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(callback?: 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, 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 = {\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(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":["StackBaseIterator","options","error","defaultError","err","queued","FIFO","processors","stack","entries","links","processing","push","item","done","console","log","drainStack","next","callback","processOrQueue","once","Promise","resolve","reject","result","forEach","fn","Error","processorOptions","each","callbacks","concurrency","limit","Infinity","total","counter","stop","length","processor","createProcesor","bind","destroyed","fifoRemove","end","pop","destroy","Symbol","asyncIterator","prototype","self","then","nextCallback","value"],"mappings":"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"} |
+17
-1
@@ -0,4 +1,20 @@ | ||
| export type DefaultFunction = (arg1?: unknown, arg2?: unknown) => void; | ||
| export type Callback = (error?: Error, value?: unknown) => void; | ||
| export type EachFunction = (value: unknown, callback?: Callback) => undefined | Promise<unknown>; | ||
| export interface StackOptions { | ||
| error?: (err: NodeJS.ErrnoException) => boolean; | ||
| } | ||
| export type DefaultFunction = (arg1?: unknown, arg2?: unknown) => void; | ||
| export interface ForEachOptions { | ||
| error?: (err: NodeJS.ErrnoException) => boolean; | ||
| callbacks?: boolean; | ||
| concurrency?: number; | ||
| limit?: number; | ||
| } | ||
| export interface ProcessorOptions extends ForEachOptions { | ||
| each: EachFunction; | ||
| counter: number; | ||
| total: number; | ||
| stop: (count?: number) => boolean; | ||
| done?: boolean; | ||
| err?: Error; | ||
| } |
+17
-1
@@ -0,4 +1,20 @@ | ||
| export type DefaultFunction = (arg1?: unknown, arg2?: unknown) => void; | ||
| export type Callback = (error?: Error, value?: unknown) => void; | ||
| export type EachFunction = (value: unknown, callback?: Callback) => undefined | Promise<unknown>; | ||
| export interface StackOptions { | ||
| error?: (err: NodeJS.ErrnoException) => boolean; | ||
| } | ||
| export type DefaultFunction = (arg1?: unknown, arg2?: unknown) => void; | ||
| export interface ForEachOptions { | ||
| error?: (err: NodeJS.ErrnoException) => boolean; | ||
| callbacks?: boolean; | ||
| concurrency?: number; | ||
| limit?: number; | ||
| } | ||
| export interface ProcessorOptions extends ForEachOptions { | ||
| each: EachFunction; | ||
| counter: number; | ||
| total: number; | ||
| stop: (count?: number) => boolean; | ||
| done?: boolean; | ||
| err?: Error; | ||
| } |
@@ -1,1 +0,2 @@ | ||
| export default function createProcessor(next: any, options: any, callback: any): (doneOrErr?: any) => boolean; | ||
| import type { Callback, ProcessorOptions } from './types.js'; | ||
| export default function createProcessor(next: any, options: ProcessorOptions, callback: Callback): (doneOrErr?: any) => boolean; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/stack-base-iterator/src/createProcessor.ts"],"sourcesContent":["import compat from 'async-compat';\n\nconst isError = (e) => e && e.stack && e.message;\n\nfunction processDone(err, options, callback) {\n // mark this iteration done\n options.err = options.err || err;\n options.done = true;\n\n // process done\n if (!options.done || options.counter > 0) return false;\n callback(options.err, options.done);\n return true;\n}\n\nfunction processResult(err, keep, options, callback) {\n options.counter--;\n\n // mark this iteration done\n if ((err && compat.defaultValue(options.error(err), false)) || (!err && !compat.defaultValue(keep, true))) {\n options.err = options.err || err;\n options.done = true;\n }\n\n // process done\n if (!options.done || options.counter > 0) return false;\n callback(options.err, options.done);\n return true;\n}\n\nexport default function createProcessor(next, options, callback) {\n let isProcessing = false;\n return function processor(doneOrErr?) {\n if (doneOrErr && processDone(isError(doneOrErr) ? doneOrErr : null, options, callback)) return;\n if (isProcessing) return;\n isProcessing = true;\n\n let counter = 0;\n while (options.counter < options.concurrency) {\n if (options.done || options.stop(counter++)) break;\n if (options.total >= options.limit) return processDone(null, options, callback);\n options.total++;\n options.counter++;\n\n next((err, value) => {\n if (err || value === null) {\n return !processResult(err, false, options, callback) && !isProcessing ? processor() : undefined;\n }\n compat.asyncFunction(options.each, options.callbacks, value, (err, keep) => (!processResult(err, keep, options, callback) && !isProcessing ? processor() : undefined));\n });\n }\n\n isProcessing = false;\n };\n}\n"],"names":["compat","isError","e","stack","message","processDone","err","options","callback","done","counter","processResult","keep","defaultValue","error","createProcessor","next","isProcessing","processor","doneOrErr","concurrency","stop","total","limit","value","undefined","asyncFunction","each","callbacks"],"mappings":"AAAA,OAAOA,YAAY,eAAe;AAElC,MAAMC,UAAU,CAACC,IAAMA,KAAKA,EAAEC,KAAK,IAAID,EAAEE,OAAO;AAEhD,SAASC,YAAYC,GAAG,EAAEC,OAAO,EAAEC,QAAQ;IACzC,2BAA2B;IAC3BD,QAAQD,GAAG,GAAGC,QAAQD,GAAG,IAAIA;IAC7BC,QAAQE,IAAI,GAAG;IAEf,eAAe;IACf,IAAI,CAACF,QAAQE,IAAI,IAAIF,QAAQG,OAAO,GAAG,GAAG,OAAO;IACjDF,SAASD,QAAQD,GAAG,EAAEC,QAAQE,IAAI;IAClC,OAAO;AACT;AAEA,SAASE,cAAcL,GAAG,EAAEM,IAAI,EAAEL,OAAO,EAAEC,QAAQ;IACjDD,QAAQG,OAAO;IAEf,2BAA2B;IAC3B,IAAI,AAACJ,OAAON,OAAOa,YAAY,CAACN,QAAQO,KAAK,CAACR,MAAM,UAAY,CAACA,OAAO,CAACN,OAAOa,YAAY,CAACD,MAAM,OAAQ;QACzGL,QAAQD,GAAG,GAAGC,QAAQD,GAAG,IAAIA;QAC7BC,QAAQE,IAAI,GAAG;IACjB;IAEA,eAAe;IACf,IAAI,CAACF,QAAQE,IAAI,IAAIF,QAAQG,OAAO,GAAG,GAAG,OAAO;IACjDF,SAASD,QAAQD,GAAG,EAAEC,QAAQE,IAAI;IAClC,OAAO;AACT;AAEA,eAAe,SAASM,gBAAgBC,IAAI,EAAET,OAAO,EAAEC,QAAQ;IAC7D,IAAIS,eAAe;IACnB,OAAO,SAASC,UAAUC,SAAU;QAClC,IAAIA,aAAad,YAAYJ,QAAQkB,aAAaA,YAAY,MAAMZ,SAASC,WAAW;QACxF,IAAIS,cAAc;QAClBA,eAAe;QAEf,IAAIP,UAAU;QACd,MAAOH,QAAQG,OAAO,GAAGH,QAAQa,WAAW,CAAE;YAC5C,IAAIb,QAAQE,IAAI,IAAIF,QAAQc,IAAI,CAACX,YAAY;YAC7C,IAAIH,QAAQe,KAAK,IAAIf,QAAQgB,KAAK,EAAE,OAAOlB,YAAY,MAAME,SAASC;YACtED,QAAQe,KAAK;YACbf,QAAQG,OAAO;YAEfM,KAAK,CAACV,KAAKkB;gBACT,IAAIlB,OAAOkB,UAAU,MAAM;oBACzB,OAAO,CAACb,cAAcL,KAAK,OAAOC,SAASC,aAAa,CAACS,eAAeC,cAAcO;gBACxF;gBACAzB,OAAO0B,aAAa,CAACnB,QAAQoB,IAAI,EAAEpB,QAAQqB,SAAS,EAAEJ,OAAO,CAAClB,KAAKM,OAAU,CAACD,cAAcL,KAAKM,MAAML,SAASC,aAAa,CAACS,eAAeC,cAAcO;YAC7J;QACF;QAEAR,eAAe;IACjB;AACF"} | ||
| {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/stack-base-iterator/src/createProcessor.ts"],"sourcesContent":["import compat from 'async-compat';\n\nimport type { Callback, ProcessorOptions } from './types.js';\n\nconst isError = (e) => e && e.stack && e.message;\n\nfunction processDone(err: Error, options: ProcessorOptions, callback: Callback) {\n // mark this iteration done\n options.err = options.err || err;\n options.done = true;\n\n // process done\n if (!options.done || options.counter > 0) return false;\n callback(options.err, options.done);\n return true;\n}\n\nfunction processResult(err, keep, options, callback) {\n options.counter--;\n\n // mark this iteration done\n if ((err && compat.defaultValue(options.error(err), false)) || (!err && !compat.defaultValue(keep, true))) {\n options.err = options.err || err;\n options.done = true;\n }\n\n // process done\n if (!options.done || options.counter > 0) return false;\n callback(options.err, options.done);\n return true;\n}\n\nexport default function createProcessor(next, options: ProcessorOptions, callback: Callback) {\n let isProcessing = false;\n return function processor(doneOrErr?) {\n if (doneOrErr && processDone(isError(doneOrErr) ? doneOrErr : null, options, callback)) return;\n if (isProcessing) return;\n isProcessing = true;\n\n let counter = 0;\n while (options.counter < options.concurrency) {\n if (options.done || options.stop(counter++)) break;\n if (options.total >= options.limit) return processDone(null, options, callback);\n options.total++;\n options.counter++;\n\n next((err, value) => {\n if (err || value === null) {\n return !processResult(err, false, options, callback) && !isProcessing ? processor() : undefined;\n }\n compat.asyncFunction(options.each, options.callbacks, value, (err, keep) => (!processResult(err, keep, options, callback) && !isProcessing ? processor() : undefined));\n });\n }\n\n isProcessing = false;\n };\n}\n"],"names":["compat","isError","e","stack","message","processDone","err","options","callback","done","counter","processResult","keep","defaultValue","error","createProcessor","next","isProcessing","processor","doneOrErr","concurrency","stop","total","limit","value","undefined","asyncFunction","each","callbacks"],"mappings":"AAAA,OAAOA,YAAY,eAAe;AAIlC,MAAMC,UAAU,CAACC,IAAMA,KAAKA,EAAEC,KAAK,IAAID,EAAEE,OAAO;AAEhD,SAASC,YAAYC,GAAU,EAAEC,OAAyB,EAAEC,QAAkB;IAC5E,2BAA2B;IAC3BD,QAAQD,GAAG,GAAGC,QAAQD,GAAG,IAAIA;IAC7BC,QAAQE,IAAI,GAAG;IAEf,eAAe;IACf,IAAI,CAACF,QAAQE,IAAI,IAAIF,QAAQG,OAAO,GAAG,GAAG,OAAO;IACjDF,SAASD,QAAQD,GAAG,EAAEC,QAAQE,IAAI;IAClC,OAAO;AACT;AAEA,SAASE,cAAcL,GAAG,EAAEM,IAAI,EAAEL,OAAO,EAAEC,QAAQ;IACjDD,QAAQG,OAAO;IAEf,2BAA2B;IAC3B,IAAI,AAACJ,OAAON,OAAOa,YAAY,CAACN,QAAQO,KAAK,CAACR,MAAM,UAAY,CAACA,OAAO,CAACN,OAAOa,YAAY,CAACD,MAAM,OAAQ;QACzGL,QAAQD,GAAG,GAAGC,QAAQD,GAAG,IAAIA;QAC7BC,QAAQE,IAAI,GAAG;IACjB;IAEA,eAAe;IACf,IAAI,CAACF,QAAQE,IAAI,IAAIF,QAAQG,OAAO,GAAG,GAAG,OAAO;IACjDF,SAASD,QAAQD,GAAG,EAAEC,QAAQE,IAAI;IAClC,OAAO;AACT;AAEA,eAAe,SAASM,gBAAgBC,IAAI,EAAET,OAAyB,EAAEC,QAAkB;IACzF,IAAIS,eAAe;IACnB,OAAO,SAASC,UAAUC,SAAU;QAClC,IAAIA,aAAad,YAAYJ,QAAQkB,aAAaA,YAAY,MAAMZ,SAASC,WAAW;QACxF,IAAIS,cAAc;QAClBA,eAAe;QAEf,IAAIP,UAAU;QACd,MAAOH,QAAQG,OAAO,GAAGH,QAAQa,WAAW,CAAE;YAC5C,IAAIb,QAAQE,IAAI,IAAIF,QAAQc,IAAI,CAACX,YAAY;YAC7C,IAAIH,QAAQe,KAAK,IAAIf,QAAQgB,KAAK,EAAE,OAAOlB,YAAY,MAAME,SAASC;YACtED,QAAQe,KAAK;YACbf,QAAQG,OAAO;YAEfM,KAAK,CAACV,KAAKkB;gBACT,IAAIlB,OAAOkB,UAAU,MAAM;oBACzB,OAAO,CAACb,cAAcL,KAAK,OAAOC,SAASC,aAAa,CAACS,eAAeC,cAAcO;gBACxF;gBACAzB,OAAO0B,aAAa,CAACnB,QAAQoB,IAAI,EAAEpB,QAAQqB,SAAS,EAAEJ,OAAO,CAAClB,KAAKM,OAAU,CAACD,cAAcL,KAAKM,MAAML,SAASC,aAAa,CAACS,eAAeC,cAAcO;YAC7J;QACF;QAEAR,eAAe;IACjB;AACF"} |
+12
-12
@@ -1,19 +0,19 @@ | ||
| import type { DefaultFunction, StackOptions } from './types.js'; | ||
| import type { Callback, EachFunction, ForEachOptions, StackOptions } from './types.js'; | ||
| export type * from './types.js'; | ||
| export default class StackBaseIterator implements AsyncIterator<unknown> { | ||
| options: StackOptions; | ||
| queued: DefaultFunction[]; | ||
| processors: DefaultFunction[]; | ||
| stack: unknown[]; | ||
| entries: unknown[]; | ||
| links: unknown[]; | ||
| processing: DefaultFunction[]; | ||
| destroyed: unknown; | ||
| done: unknown; | ||
| private options; | ||
| private queued; | ||
| private processors; | ||
| private stack; | ||
| private entries; | ||
| private links; | ||
| private processing; | ||
| private destroyed; | ||
| private done; | ||
| constructor(options?: StackOptions); | ||
| push(item: any): void; | ||
| next(callback: any): any; | ||
| forEach(fn: any, options: any, callback: any): any; | ||
| next(callback?: Callback): any; | ||
| forEach(fn: EachFunction, options: ForEachOptions | Callback, callback?: Callback): undefined | Promise<unknown>; | ||
| end(err?: Error): void; | ||
| destroy(err?: Error): void; | ||
| } |
@@ -26,5 +26,8 @@ import once from 'call-once-fn'; | ||
| if (typeof callback === 'function') { | ||
| if (this.done) return callback(null, true); | ||
| if (this.done) { | ||
| callback(null, true); | ||
| return; | ||
| } | ||
| options = options || {}; | ||
| options = { | ||
| const processorOptions = { | ||
| each: fn, | ||
@@ -43,3 +46,3 @@ callbacks: options.callbacks || false, | ||
| }; | ||
| let processor = createProcesor(this.next.bind(this), options, (err)=>{ | ||
| let processor = createProcesor(this.next.bind(this), processorOptions, (err)=>{ | ||
| if (!this.destroyed) fifoRemove(this.processors, processor); | ||
@@ -46,0 +49,0 @@ processor = null; |
@@ -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 { DefaultFunction, StackOptions } from './types.js';\n\nexport type * from './types.js';\nexport default class StackBaseIterator implements AsyncIterator<unknown> {\n options: StackOptions;\n queued: DefaultFunction[];\n processors: DefaultFunction[];\n stack: unknown[];\n entries: unknown[];\n links: unknown[];\n processing: DefaultFunction[];\n destroyed: unknown;\n done: unknown;\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 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(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, options, callback) {\n if (typeof fn !== 'function') throw new Error('Missing each function');\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n\n if (typeof callback === 'function') {\n if (this.done) return callback(null, true);\n options = options || {};\n options = {\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(this.next.bind(this), options, (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","push","item","done","console","log","stack","next","callback","Promise","resolve","reject","err","result","forEach","fn","options","Error","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","value"],"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 implements AsyncIterator<unknown> {\n private options: StackOptions;\n private queued: DefaultFunction[];\n private processors: DefaultFunction[];\n private stack: unknown[];\n private entries: unknown[];\n private links: unknown[];\n private processing: DefaultFunction[];\n private destroyed: unknown;\n private 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 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(callback?: 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, 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 = {\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(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","push","item","done","console","log","stack","next","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","value"],"mappings":"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"} |
+17
-1
@@ -0,4 +1,20 @@ | ||
| export type DefaultFunction = (arg1?: unknown, arg2?: unknown) => void; | ||
| export type Callback = (error?: Error, value?: unknown) => void; | ||
| export type EachFunction = (value: unknown, callback?: Callback) => undefined | Promise<unknown>; | ||
| export interface StackOptions { | ||
| error?: (err: NodeJS.ErrnoException) => boolean; | ||
| } | ||
| export type DefaultFunction = (arg1?: unknown, arg2?: unknown) => void; | ||
| export interface ForEachOptions { | ||
| error?: (err: NodeJS.ErrnoException) => boolean; | ||
| callbacks?: boolean; | ||
| concurrency?: number; | ||
| limit?: number; | ||
| } | ||
| export interface ProcessorOptions extends ForEachOptions { | ||
| each: EachFunction; | ||
| counter: number; | ||
| total: number; | ||
| stop: (count?: number) => boolean; | ||
| done?: boolean; | ||
| err?: Error; | ||
| } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/stack-base-iterator/src/types.ts"],"sourcesContent":["export interface StackOptions {\n error?: (err: NodeJS.ErrnoException) => boolean;\n}\n\nexport type DefaultFunction = (arg1?: unknown, arg2?: unknown) => void;\n"],"names":[],"mappings":"AAIA,WAAuE"} | ||
| {"version":3,"sources":["/Users/kevin/Dev/OpenSource/iterators/stack-base-iterator/src/types.ts"],"sourcesContent":["export type DefaultFunction = (arg1?: unknown, arg2?: unknown) => void;\nexport type Callback = (error?: Error, value?: unknown) => void;\nexport type EachFunction = (value: unknown, callback?: Callback) => undefined | Promise<unknown>;\n\nexport interface StackOptions {\n error?: (err: NodeJS.ErrnoException) => boolean;\n}\n\nexport interface ForEachOptions {\n error?: (err: NodeJS.ErrnoException) => boolean;\n callbacks?: boolean;\n concurrency?: number;\n limit?: number;\n}\n\nexport interface ProcessorOptions extends ForEachOptions {\n each: EachFunction;\n counter: number;\n total: number;\n stop: (count?: number) => boolean;\n done?: boolean;\n err?: Error;\n}\n"],"names":[],"mappings":"AAeA,WAOC"} |
+1
-1
| { | ||
| "name": "stack-base-iterator", | ||
| "version": "1.2.3", | ||
| "version": "1.2.4", | ||
| "description": "Base iterator for values retrieved using a stack of async functions returning values", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
63579
5.95%604
7.09%