stack-base-iterator
Advanced tools
@@ -16,3 +16,3 @@ import LinkedList from './LinkedList.js'; | ||
| isDone(): boolean; | ||
| push(fn: StackFunction<T> | StackFunction<T>[]): void; | ||
| push(fn: StackFunction<T>, ...rest: StackFunction<T>[]): void; | ||
| next(...[value]: [] | [TNext]): Promise<IteratorResult<T, TReturn>>; | ||
@@ -19,0 +19,0 @@ forEach(fn: EachFunction<T>, options?: ForEachOptions | ProcessCallback<T>, callback?: EachDoneCallback): undefined | Promise<boolean>; |
@@ -16,3 +16,3 @@ import LinkedList from './LinkedList.js'; | ||
| isDone(): boolean; | ||
| push(fn: StackFunction<T> | StackFunction<T>[]): void; | ||
| push(fn: StackFunction<T>, ...rest: StackFunction<T>[]): void; | ||
| next(...[value]: [] | [TNext]): Promise<IteratorResult<T, TReturn>>; | ||
@@ -19,0 +19,0 @@ forEach(fn: EachFunction<T>, options?: ForEachOptions | ProcessCallback<T>, callback?: EachDoneCallback): undefined | Promise<boolean>; |
@@ -108,5 +108,2 @@ "use strict"; | ||
| } | ||
| var isArray = Array.isArray || function(x) { | ||
| return Object.prototype.toString.call(x) === '[object Array]'; | ||
| }; | ||
| var StackBaseIterator = /*#__PURE__*/ function() { | ||
@@ -133,5 +130,11 @@ "use strict"; | ||
| _proto.push = function push(fn) { | ||
| var _this = this; | ||
| for(var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){ | ||
| rest[_key - 1] = arguments[_key]; | ||
| } | ||
| if (this.done) return console.log('Attempting to push on a done iterator'); | ||
| if (isArray(fn)) Array.prototype.push.apply(this.stack, fn); | ||
| else this.stack.push(fn); | ||
| this.stack.push(fn); | ||
| !rest.length || rest.forEach(function(x) { | ||
| return _this.stack.push(x); | ||
| }); | ||
| (0, _drainStack.default)(this); | ||
@@ -138,0 +141,0 @@ }; |
@@ -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 LinkedList from './LinkedList.js';\n\nimport createProcesor from './createProcessor.js';\nimport drainStack from './drainStack.js';\nimport processOrQueue from './processOrQueue.js';\n\nimport type { AbstractIterator, EachDoneCallback, EachFunction, ForEachOptions, NextCallback, ProcessCallback, Processor, ProcessorOptions, StackFunction, StackOptions } from './types.js';\n\nconst isArray = Array.isArray || ((x) => Object.prototype.toString.call(x) === '[object Array]');\n\nexport type * from './types.js';\nexport { default as LinkedList } from './LinkedList.js';\nexport default class StackBaseIterator<T, TReturn = unknown, TNext = unknown> implements AsyncIterator<T, TReturn, TNext> {\n protected done: boolean;\n protected stack: LinkedList<StackFunction<T>>;\n protected processors: LinkedList<Processor>;\n protected queued: LinkedList<ProcessCallback<T>>;\n protected processing: LinkedList<ProcessCallback<T>>;\n\n protected options: StackOptions;\n protected entries: LinkedList<T>;\n protected destroyed: 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 = new LinkedList<StackFunction<T>>();\n this.processors = new LinkedList<Processor>();\n this.queued = new LinkedList<ProcessCallback<T>>();\n this.processing = new LinkedList<ProcessCallback<T>>();\n this.entries = new LinkedList<T>();\n }\n\n isDone() {\n return this.done;\n }\n\n push(fn: StackFunction<T> | StackFunction<T>[]) {\n if (this.done) return console.log('Attempting to push on a done iterator');\n\n if (isArray(fn)) Array.prototype.push.apply(this.stack, fn);\n else this.stack.push(fn as StackFunction<T>);\n\n drainStack<T>(this as unknown as AbstractIterator<T>);\n }\n\n next(...[value]: [] | [TNext]): Promise<IteratorResult<T, TReturn>> {\n const callback = value as NextCallback<T>;\n if (typeof callback === 'function') {\n processOrQueue(\n this as unknown as AbstractIterator<T>,\n once((err?: Error, value?: T | null) => {\n err ? callback(err) : callback(null, value);\n }) as ProcessCallback<T>\n );\n return;\n }\n\n return new Promise((resolve, reject) => {\n processOrQueue(\n this as unknown as AbstractIterator<T>,\n once((err, value: T) => {\n err ? reject(err) : resolve({ value, done: value === null } as IteratorResult<T, TReturn>);\n }) as ProcessCallback<T>\n );\n });\n }\n\n forEach(fn: EachFunction<T>, options?: ForEachOptions | ProcessCallback<T>, callback?: EachDoneCallback): undefined | Promise<boolean> {\n if (typeof fn !== 'function') throw new Error('Missing each function');\n if (typeof options === 'function') {\n callback = options as EachDoneCallback;\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) this.processors.removeValue(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) =>\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, null);\n while (this.queued.length > 0) err ? this.queued.pop()(err) : this.queued.pop()(null, null);\n while (this.stack.length > 0) 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() {\n return self.next().then((value) => {\n return Promise.resolve(value);\n });\n },\n destroy() {\n self.destroy();\n return Promise.resolve();\n },\n };\n };\n}\n"],"names":["LinkedList","StackBaseIterator","isArray","Array","x","Object","prototype","toString","call","options","error","defaultError","err","done","stack","processors","queued","processing","entries","isDone","push","fn","console","log","apply","drainStack","next","value","callback","processOrQueue","once","Promise","resolve","reject","forEach","Error","processorOptions","each","callbacks","concurrency","limit","Infinity","total","counter","stop","length","processor","createProcesor","bind","destroyed","removeValue","end","pop","destroy","Symbol","asyncIterator","self","then"],"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 LinkedList from './LinkedList.js';\n\nimport createProcesor from './createProcessor.js';\nimport drainStack from './drainStack.js';\nimport processOrQueue from './processOrQueue.js';\n\nimport type { AbstractIterator, EachDoneCallback, EachFunction, ForEachOptions, NextCallback, ProcessCallback, Processor, ProcessorOptions, StackFunction, StackOptions } from './types.js';\n\nexport type * from './types.js';\nexport { default as LinkedList } from './LinkedList.js';\nexport default class StackBaseIterator<T, TReturn = unknown, TNext = unknown> implements AsyncIterator<T, TReturn, TNext> {\n protected done: boolean;\n protected stack: LinkedList<StackFunction<T>>;\n protected processors: LinkedList<Processor>;\n protected queued: LinkedList<ProcessCallback<T>>;\n protected processing: LinkedList<ProcessCallback<T>>;\n\n protected options: StackOptions;\n protected entries: LinkedList<T>;\n protected destroyed: 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 = new LinkedList<StackFunction<T>>();\n this.processors = new LinkedList<Processor>();\n this.queued = new LinkedList<ProcessCallback<T>>();\n this.processing = new LinkedList<ProcessCallback<T>>();\n this.entries = new LinkedList<T>();\n }\n\n isDone() {\n return this.done;\n }\n\n push(fn: StackFunction<T>, ...rest: StackFunction<T>[]) {\n if (this.done) return console.log('Attempting to push on a done iterator');\n this.stack.push(fn);\n !rest.length || rest.forEach((x) => this.stack.push(x));\n drainStack<T>(this as unknown as AbstractIterator<T>);\n }\n\n next(...[value]: [] | [TNext]): Promise<IteratorResult<T, TReturn>> {\n const callback = value as NextCallback<T>;\n if (typeof callback === 'function') {\n processOrQueue(\n this as unknown as AbstractIterator<T>,\n once((err?: Error, value?: T | null) => {\n err ? callback(err) : callback(null, value);\n }) as ProcessCallback<T>\n );\n return;\n }\n\n return new Promise((resolve, reject) => {\n processOrQueue(\n this as unknown as AbstractIterator<T>,\n once((err, value: T) => {\n err ? reject(err) : resolve({ value, done: value === null } as IteratorResult<T, TReturn>);\n }) as ProcessCallback<T>\n );\n });\n }\n\n forEach(fn: EachFunction<T>, options?: ForEachOptions | ProcessCallback<T>, callback?: EachDoneCallback): undefined | Promise<boolean> {\n if (typeof fn !== 'function') throw new Error('Missing each function');\n if (typeof options === 'function') {\n callback = options as EachDoneCallback;\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) this.processors.removeValue(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) =>\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, null);\n while (this.queued.length > 0) err ? this.queued.pop()(err) : this.queued.pop()(null, null);\n while (this.stack.length > 0) 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() {\n return self.next().then((value) => {\n return Promise.resolve(value);\n });\n },\n destroy() {\n self.destroy();\n return Promise.resolve();\n },\n };\n };\n}\n"],"names":["LinkedList","StackBaseIterator","options","error","defaultError","err","done","stack","processors","queued","processing","entries","isDone","push","fn","rest","console","log","length","forEach","x","drainStack","next","value","callback","processOrQueue","once","Promise","resolve","reject","Error","processorOptions","each","callbacks","concurrency","limit","Infinity","total","counter","stop","processor","createProcesor","bind","destroyed","removeValue","end","pop","destroy","Symbol","asyncIterator","prototype","self","then"],"mappings":";;;;;;;;;;;QAUoBA;eAAAA,mBAAU;;;eACTC;;;iEAXJ;iEACM;sEAEI;iEACJ;qEACI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMZ,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,IAAI,GAAG;QACZ,IAAI,CAACC,KAAK,GAAG,IAAIP,mBAAU;QAC3B,IAAI,CAACQ,UAAU,GAAG,IAAIR,mBAAU;QAChC,IAAI,CAACS,MAAM,GAAG,IAAIT,mBAAU;QAC5B,IAAI,CAACU,UAAU,GAAG,IAAIV,mBAAU;QAChC,IAAI,CAACW,OAAO,GAAG,IAAIX,mBAAU;;iBAxBZC;IA2BnBW,OAAAA,MAEC,GAFDA,SAAAA;QACE,OAAO,IAAI,CAACN,IAAI;IAClB;IAEAO,OAAAA,IAKC,GALDA,SAAAA,KAAKC,EAAoB;;QAAE,IAAA,IAAA,OAAA,UAAA,QAAA,AAAGC,OAAH,UAAA,OAAA,IAAA,OAAA,QAAA,OAAA,GAAA,OAAA,MAAA;YAAGA,KAAH,OAAA,KAAA,SAAA,CAAA,KAA2B;;QACpD,IAAI,IAAI,CAACT,IAAI,EAAE,OAAOU,QAAQC,GAAG,CAAC;QAClC,IAAI,CAACV,KAAK,CAACM,IAAI,CAACC;QAChB,CAACC,KAAKG,MAAM,IAAIH,KAAKI,OAAO,CAAC,SAACC;mBAAM,MAAKb,KAAK,CAACM,IAAI,CAACO;;QACpDC,IAAAA,mBAAU,EAAI,IAAI;IACpB;IAEAC,OAAAA,IAoBC,GApBDA,SAAAA;;QAAK,IAAA,IAAA,OAAA,UAAA,QAAA,OAAA,UAAA,OAAA,OAAA,GAAA,OAAA,MAAA;YAAA,KAAA,QAAA,SAAA,CAAA,KAAwB;;YAAxB,yBAAA,UAAIC,QAAJ;QACH,IAAMC,WAAWD;QACjB,IAAI,OAAOC,aAAa,YAAY;YAClCC,IAAAA,uBAAc,EACZ,IAAI,EACJC,IAAAA,mBAAI,EAAC,SAACrB,KAAakB;gBACjBlB,MAAMmB,SAASnB,OAAOmB,SAAS,MAAMD;YACvC;YAEF;QACF;QAEA,OAAO,IAAII,QAAQ,SAACC,SAASC;YAC3BJ,IAAAA,uBAAc,SAEZC,IAAAA,mBAAI,EAAC,SAACrB,KAAKkB;gBACTlB,MAAMwB,OAAOxB,OAAOuB,QAAQ;oBAAEL,OAAAA;oBAAOjB,MAAMiB,UAAU;gBAAK;YAC5D;QAEJ;IACF;IAEAJ,OAAAA,OAgDC,GAhDDA,SAAAA,QAAQL,EAAmB,EAAEZ,OAA6C,EAAEsB,QAA2B;;QACrG,IAAI,OAAOV,OAAO,YAAY,MAAM,IAAIgB,MAAM;QAC9C,IAAI,OAAO5B,YAAY,YAAY;YACjCsB,WAAWtB;YACXA,UAAU,CAAC;QACb;QAEA,IAAI,OAAOsB,aAAa,YAAY;YAClC,IAAI,IAAI,CAAClB,IAAI,EAAE;gBACbkB,SAAS,MAAM;gBACf;YACF;YACAtB,UAAUA,WAAW,CAAC;YACtB,IAAM6B,mBAAwC;gBAC5CC,MAAMlB;gBACNmB,WAAW/B,QAAQ+B,SAAS,IAAI;gBAChCC,aAAahC,QAAQgC,WAAW,IAAI;gBACpCC,OAAOjC,QAAQiC,KAAK,IAAIC;gBACxBjC,OACED,QAAQC,KAAK,IACb,SAASC;oBACP,OAAO,MAAM,2BAA2B;gBAC1C;gBACFiC,OAAO;gBACPC,SAAS;gBACTC,MAAM;oBACJ,OAAO,MAAKjC,IAAI,IAAI,MAAKG,MAAM,CAACS,MAAM,IAAI,MAAKX,KAAK,CAACW,MAAM;gBAC7D;YACF;YAEA,IAAIsB,YAAYC,IAAAA,wBAAc,EAAI,IAAI,CAACnB,IAAI,CAACoB,IAAI,CAAC,IAAI,GAAGX,kBAAkB,SAAC1B;gBACzE,IAAI,CAAC,MAAKsC,SAAS,EAAE,MAAKnC,UAAU,CAACoC,WAAW,CAACJ;gBACjDA,YAAY;gBACZtC,UAAU;gBACV,IAAMI,OAAO,CAAC,MAAKC,KAAK,CAACW,MAAM;gBAC/B,IAAI,AAACb,CAAAA,OAAOC,IAAG,KAAM,CAAC,MAAKA,IAAI,EAAE,MAAKuC,GAAG,CAACxC;gBAC1C,OAAOmB,SAASnB,KAAK,MAAKC,IAAI,IAAIA;YACpC;YACA,IAAI,CAACE,UAAU,CAACK,IAAI,CAAC2B;YACrBA;YACA;QACF;QAEA,OAAO,IAAIb,QAAQ,SAACC,SAASC;mBAC3B,MAAKV,OAAO,CAACL,IAAIZ,SAAS,SAACG,KAAaC;gBACtCD,MAAMwB,OAAOxB,OAAOuB,QAAQtB;YAC9B;;IAEJ;IAEAuC,OAAAA,GAOC,GAPDA,SAAAA,IAAIxC,GAAW;QACb,IAAI,IAAI,CAACC,IAAI,EAAE;QACf,IAAI,CAACA,IAAI,GAAG;QACZ,MAAO,IAAI,CAACE,UAAU,CAACU,MAAM,GAAG,EAAG,IAAI,CAACV,UAAU,CAACsC,GAAG,GAAGzC,OAAO;QAChE,MAAO,IAAI,CAACK,UAAU,CAACQ,MAAM,GAAG,EAAGb,MAAM,IAAI,CAACK,UAAU,CAACoC,GAAG,GAAGzC,OAAO,IAAI,CAACK,UAAU,CAACoC,GAAG,GAAG,MAAM;QAClG,MAAO,IAAI,CAACrC,MAAM,CAACS,MAAM,GAAG,EAAGb,MAAM,IAAI,CAACI,MAAM,CAACqC,GAAG,GAAGzC,OAAO,IAAI,CAACI,MAAM,CAACqC,GAAG,GAAG,MAAM;QACtF,MAAO,IAAI,CAACvC,KAAK,CAACW,MAAM,GAAG,EAAG,IAAI,CAACX,KAAK,CAACuC,GAAG;IAC9C;IAEAC,OAAAA,OAIC,GAJDA,SAAAA,QAAQ1C,GAAW;QACjB,IAAI,IAAI,CAACsC,SAAS,EAAE,MAAM,IAAIb,MAAM;QACpC,IAAI,CAACa,SAAS,GAAG;QACjB,IAAI,CAACE,GAAG,CAACxC;IACX;WA3HmBJ;;AA8HrB,IAAI,OAAO+C,WAAW,eAAeA,OAAOC,aAAa,EAAE;IACzDhD,kBAAkBiD,SAAS,CAACF,OAAOC,aAAa,CAAC,GAAG,SAASA;QAC3D,IAAME,OAAO,IAAI;QACjB,OAAO;YACL7B,MAAAA,SAAAA;gBACE,OAAO6B,KAAK7B,IAAI,GAAG8B,IAAI,CAAC,SAAC7B;oBACvB,OAAOI,QAAQC,OAAO,CAACL;gBACzB;YACF;YACAwB,SAAAA,SAAAA;gBACEI,KAAKJ,OAAO;gBACZ,OAAOpB,QAAQC,OAAO;YACxB;QACF;IACF;AACF"} |
@@ -16,3 +16,3 @@ import LinkedList from './LinkedList.js'; | ||
| isDone(): boolean; | ||
| push(fn: StackFunction<T> | StackFunction<T>[]): void; | ||
| push(fn: StackFunction<T>, ...rest: StackFunction<T>[]): void; | ||
| next(...[value]: [] | [TNext]): Promise<IteratorResult<T, TReturn>>; | ||
@@ -19,0 +19,0 @@ forEach(fn: EachFunction<T>, options?: ForEachOptions | ProcessCallback<T>, callback?: EachDoneCallback): undefined | Promise<boolean>; |
@@ -6,3 +6,2 @@ import once from 'call-once-fn'; | ||
| import processOrQueue from './processOrQueue.js'; | ||
| const isArray = Array.isArray || ((x)=>Object.prototype.toString.call(x) === '[object Array]'); | ||
| export { default as LinkedList } from './LinkedList.js'; | ||
@@ -13,6 +12,6 @@ let StackBaseIterator = class StackBaseIterator { | ||
| } | ||
| push(fn) { | ||
| push(fn, ...rest) { | ||
| if (this.done) return console.log('Attempting to push on a done iterator'); | ||
| if (isArray(fn)) Array.prototype.push.apply(this.stack, fn); | ||
| else this.stack.push(fn); | ||
| this.stack.push(fn); | ||
| !rest.length || rest.forEach((x)=>this.stack.push(x)); | ||
| drainStack(this); | ||
@@ -19,0 +18,0 @@ } |
@@ -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 LinkedList from './LinkedList.js';\n\nimport createProcesor from './createProcessor.js';\nimport drainStack from './drainStack.js';\nimport processOrQueue from './processOrQueue.js';\n\nimport type { AbstractIterator, EachDoneCallback, EachFunction, ForEachOptions, NextCallback, ProcessCallback, Processor, ProcessorOptions, StackFunction, StackOptions } from './types.js';\n\nconst isArray = Array.isArray || ((x) => Object.prototype.toString.call(x) === '[object Array]');\n\nexport type * from './types.js';\nexport { default as LinkedList } from './LinkedList.js';\nexport default class StackBaseIterator<T, TReturn = unknown, TNext = unknown> implements AsyncIterator<T, TReturn, TNext> {\n protected done: boolean;\n protected stack: LinkedList<StackFunction<T>>;\n protected processors: LinkedList<Processor>;\n protected queued: LinkedList<ProcessCallback<T>>;\n protected processing: LinkedList<ProcessCallback<T>>;\n\n protected options: StackOptions;\n protected entries: LinkedList<T>;\n protected destroyed: 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 = new LinkedList<StackFunction<T>>();\n this.processors = new LinkedList<Processor>();\n this.queued = new LinkedList<ProcessCallback<T>>();\n this.processing = new LinkedList<ProcessCallback<T>>();\n this.entries = new LinkedList<T>();\n }\n\n isDone() {\n return this.done;\n }\n\n push(fn: StackFunction<T> | StackFunction<T>[]) {\n if (this.done) return console.log('Attempting to push on a done iterator');\n\n if (isArray(fn)) Array.prototype.push.apply(this.stack, fn);\n else this.stack.push(fn as StackFunction<T>);\n\n drainStack<T>(this as unknown as AbstractIterator<T>);\n }\n\n next(...[value]: [] | [TNext]): Promise<IteratorResult<T, TReturn>> {\n const callback = value as NextCallback<T>;\n if (typeof callback === 'function') {\n processOrQueue(\n this as unknown as AbstractIterator<T>,\n once((err?: Error, value?: T | null) => {\n err ? callback(err) : callback(null, value);\n }) as ProcessCallback<T>\n );\n return;\n }\n\n return new Promise((resolve, reject) => {\n processOrQueue(\n this as unknown as AbstractIterator<T>,\n once((err, value: T) => {\n err ? reject(err) : resolve({ value, done: value === null } as IteratorResult<T, TReturn>);\n }) as ProcessCallback<T>\n );\n });\n }\n\n forEach(fn: EachFunction<T>, options?: ForEachOptions | ProcessCallback<T>, callback?: EachDoneCallback): undefined | Promise<boolean> {\n if (typeof fn !== 'function') throw new Error('Missing each function');\n if (typeof options === 'function') {\n callback = options as EachDoneCallback;\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) this.processors.removeValue(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) =>\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, null);\n while (this.queued.length > 0) err ? this.queued.pop()(err) : this.queued.pop()(null, null);\n while (this.stack.length > 0) 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() {\n return self.next().then((value) => {\n return Promise.resolve(value);\n });\n },\n destroy() {\n self.destroy();\n return Promise.resolve();\n },\n };\n };\n}\n"],"names":["once","LinkedList","createProcesor","drainStack","processOrQueue","isArray","Array","x","Object","prototype","toString","call","default","StackBaseIterator","isDone","done","push","fn","console","log","apply","stack","next","value","callback","err","Promise","resolve","reject","forEach","options","Error","processorOptions","each","callbacks","concurrency","limit","Infinity","error","defaultError","total","counter","stop","queued","length","processor","bind","destroyed","processors","removeValue","end","pop","processing","destroy","entries","Symbol","asyncIterator","self","then"],"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 LinkedList from './LinkedList.js';\n\nimport createProcesor from './createProcessor.js';\nimport drainStack from './drainStack.js';\nimport processOrQueue from './processOrQueue.js';\n\nimport type { AbstractIterator, EachDoneCallback, EachFunction, ForEachOptions, NextCallback, ProcessCallback, Processor, ProcessorOptions, StackFunction, StackOptions } from './types.js';\n\nexport type * from './types.js';\nexport { default as LinkedList } from './LinkedList.js';\nexport default class StackBaseIterator<T, TReturn = unknown, TNext = unknown> implements AsyncIterator<T, TReturn, TNext> {\n protected done: boolean;\n protected stack: LinkedList<StackFunction<T>>;\n protected processors: LinkedList<Processor>;\n protected queued: LinkedList<ProcessCallback<T>>;\n protected processing: LinkedList<ProcessCallback<T>>;\n\n protected options: StackOptions;\n protected entries: LinkedList<T>;\n protected destroyed: 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 = new LinkedList<StackFunction<T>>();\n this.processors = new LinkedList<Processor>();\n this.queued = new LinkedList<ProcessCallback<T>>();\n this.processing = new LinkedList<ProcessCallback<T>>();\n this.entries = new LinkedList<T>();\n }\n\n isDone() {\n return this.done;\n }\n\n push(fn: StackFunction<T>, ...rest: StackFunction<T>[]) {\n if (this.done) return console.log('Attempting to push on a done iterator');\n this.stack.push(fn);\n !rest.length || rest.forEach((x) => this.stack.push(x));\n drainStack<T>(this as unknown as AbstractIterator<T>);\n }\n\n next(...[value]: [] | [TNext]): Promise<IteratorResult<T, TReturn>> {\n const callback = value as NextCallback<T>;\n if (typeof callback === 'function') {\n processOrQueue(\n this as unknown as AbstractIterator<T>,\n once((err?: Error, value?: T | null) => {\n err ? callback(err) : callback(null, value);\n }) as ProcessCallback<T>\n );\n return;\n }\n\n return new Promise((resolve, reject) => {\n processOrQueue(\n this as unknown as AbstractIterator<T>,\n once((err, value: T) => {\n err ? reject(err) : resolve({ value, done: value === null } as IteratorResult<T, TReturn>);\n }) as ProcessCallback<T>\n );\n });\n }\n\n forEach(fn: EachFunction<T>, options?: ForEachOptions | ProcessCallback<T>, callback?: EachDoneCallback): undefined | Promise<boolean> {\n if (typeof fn !== 'function') throw new Error('Missing each function');\n if (typeof options === 'function') {\n callback = options as EachDoneCallback;\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) this.processors.removeValue(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) =>\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, null);\n while (this.queued.length > 0) err ? this.queued.pop()(err) : this.queued.pop()(null, null);\n while (this.stack.length > 0) 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() {\n return self.next().then((value) => {\n return Promise.resolve(value);\n });\n },\n destroy() {\n self.destroy();\n return Promise.resolve();\n },\n };\n };\n}\n"],"names":["once","LinkedList","createProcesor","drainStack","processOrQueue","default","StackBaseIterator","isDone","done","push","fn","rest","console","log","stack","length","forEach","x","next","value","callback","err","Promise","resolve","reject","options","Error","processorOptions","each","callbacks","concurrency","limit","Infinity","error","defaultError","total","counter","stop","queued","processor","bind","destroyed","processors","removeValue","end","pop","processing","destroy","entries","Symbol","asyncIterator","prototype","self","then"],"mappings":"AAAA,OAAOA,UAAU,eAAe;AAChC,OAAOC,gBAAgB,kBAAkB;AAEzC,OAAOC,oBAAoB,uBAAuB;AAClD,OAAOC,gBAAgB,kBAAkB;AACzC,OAAOC,oBAAoB,sBAAsB;AAKjD,SAASC,WAAWJ,UAAU,QAAQ,kBAAkB;AACzC,IAAA,AAAMK,oBAAN,MAAMA;IA2BnBC,SAAS;QACP,OAAO,IAAI,CAACC,IAAI;IAClB;IAEAC,KAAKC,EAAoB,EAAE,GAAGC,IAAwB,EAAE;QACtD,IAAI,IAAI,CAACH,IAAI,EAAE,OAAOI,QAAQC,GAAG,CAAC;QAClC,IAAI,CAACC,KAAK,CAACL,IAAI,CAACC;QAChB,CAACC,KAAKI,MAAM,IAAIJ,KAAKK,OAAO,CAAC,CAACC,IAAM,IAAI,CAACH,KAAK,CAACL,IAAI,CAACQ;QACpDd,WAAc,IAAI;IACpB;IAEAe,KAAK,GAAG,CAACC,MAAM,AAAc,EAAuC;QAClE,MAAMC,WAAWD;QACjB,IAAI,OAAOC,aAAa,YAAY;YAClChB,eACE,IAAI,EACJJ,KAAK,CAACqB,KAAaF;gBACjBE,MAAMD,SAASC,OAAOD,SAAS,MAAMD;YACvC;YAEF;QACF;QAEA,OAAO,IAAIG,QAAQ,CAACC,SAASC;YAC3BpB,eACE,IAAI,EACJJ,KAAK,CAACqB,KAAKF;gBACTE,MAAMG,OAAOH,OAAOE,QAAQ;oBAAEJ;oBAAOX,MAAMW,UAAU;gBAAK;YAC5D;QAEJ;IACF;IAEAH,QAAQN,EAAmB,EAAEe,OAA6C,EAAEL,QAA2B,EAAgC;QACrI,IAAI,OAAOV,OAAO,YAAY,MAAM,IAAIgB,MAAM;QAC9C,IAAI,OAAOD,YAAY,YAAY;YACjCL,WAAWK;YACXA,UAAU,CAAC;QACb;QAEA,IAAI,OAAOL,aAAa,YAAY;YAClC,IAAI,IAAI,CAACZ,IAAI,EAAE;gBACbY,SAAS,MAAM;gBACf;YACF;YACAK,UAAUA,WAAW,CAAC;YACtB,MAAME,mBAAwC;gBAC5CC,MAAMlB;gBACNmB,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,CAAC7B,IAAI,IAAI,IAAI,CAAC8B,MAAM,CAACvB,MAAM,IAAI,IAAI,CAACD,KAAK,CAACC,MAAM;gBAC7D;YACF;YAEA,IAAIwB,YAAYrC,eAAkB,IAAI,CAACgB,IAAI,CAACsB,IAAI,CAAC,IAAI,GAAGb,kBAAkB,CAACN;gBACzE,IAAI,CAAC,IAAI,CAACoB,SAAS,EAAE,IAAI,CAACC,UAAU,CAACC,WAAW,CAACJ;gBACjDA,YAAY;gBACZd,UAAU;gBACV,MAAMjB,OAAO,CAAC,IAAI,CAACM,KAAK,CAACC,MAAM;gBAC/B,IAAI,AAACM,CAAAA,OAAOb,IAAG,KAAM,CAAC,IAAI,CAACA,IAAI,EAAE,IAAI,CAACoC,GAAG,CAACvB;gBAC1C,OAAOD,SAASC,KAAK,IAAI,CAACb,IAAI,IAAIA;YACpC;YACA,IAAI,CAACkC,UAAU,CAACjC,IAAI,CAAC8B;YACrBA;YACA;QACF;QAEA,OAAO,IAAIjB,QAAQ,CAACC,SAASC,SAC3B,IAAI,CAACR,OAAO,CAACN,IAAIe,SAAS,CAACJ,KAAab;gBACtCa,MAAMG,OAAOH,OAAOE,QAAQf;YAC9B;IAEJ;IAEAoC,IAAIvB,GAAW,EAAE;QACf,IAAI,IAAI,CAACb,IAAI,EAAE;QACf,IAAI,CAACA,IAAI,GAAG;QACZ,MAAO,IAAI,CAACkC,UAAU,CAAC3B,MAAM,GAAG,EAAG,IAAI,CAAC2B,UAAU,CAACG,GAAG,GAAGxB,OAAO;QAChE,MAAO,IAAI,CAACyB,UAAU,CAAC/B,MAAM,GAAG,EAAGM,MAAM,IAAI,CAACyB,UAAU,CAACD,GAAG,GAAGxB,OAAO,IAAI,CAACyB,UAAU,CAACD,GAAG,GAAG,MAAM;QAClG,MAAO,IAAI,CAACP,MAAM,CAACvB,MAAM,GAAG,EAAGM,MAAM,IAAI,CAACiB,MAAM,CAACO,GAAG,GAAGxB,OAAO,IAAI,CAACiB,MAAM,CAACO,GAAG,GAAG,MAAM;QACtF,MAAO,IAAI,CAAC/B,KAAK,CAACC,MAAM,GAAG,EAAG,IAAI,CAACD,KAAK,CAAC+B,GAAG;IAC9C;IAEAE,QAAQ1B,GAAW,EAAE;QACnB,IAAI,IAAI,CAACoB,SAAS,EAAE,MAAM,IAAIf,MAAM;QACpC,IAAI,CAACe,SAAS,GAAG;QACjB,IAAI,CAACG,GAAG,CAACvB;IACX;IAhHA,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,CAACb,IAAI,GAAG;QACZ,IAAI,CAACM,KAAK,GAAG,IAAIb;QACjB,IAAI,CAACyC,UAAU,GAAG,IAAIzC;QACtB,IAAI,CAACqC,MAAM,GAAG,IAAIrC;QAClB,IAAI,CAAC6C,UAAU,GAAG,IAAI7C;QACtB,IAAI,CAAC+C,OAAO,GAAG,IAAI/C;IACrB;AAmGF;AA5HA,SAAqBK,+BA4HpB;AAED,IAAI,OAAO2C,WAAW,eAAeA,OAAOC,aAAa,EAAE;IACzD5C,kBAAkB6C,SAAS,CAACF,OAAOC,aAAa,CAAC,GAAG,SAASA;QAC3D,MAAME,OAAO,IAAI;QACjB,OAAO;YACLlC;gBACE,OAAOkC,KAAKlC,IAAI,GAAGmC,IAAI,CAAC,CAAClC;oBACvB,OAAOG,QAAQC,OAAO,CAACJ;gBACzB;YACF;YACA4B;gBACEK,KAAKL,OAAO;gBACZ,OAAOzB,QAAQC,OAAO;YACxB;QACF;IACF;AACF"} |
+1
-1
| { | ||
| "name": "stack-base-iterator", | ||
| "version": "1.2.23", | ||
| "version": "1.2.24", | ||
| "description": "Base iterator for values retrieved using a stack of async functions returning values", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
869
0.23%80604
-0.45%