UNPKG

@lzptec/concurrency

Version:

A Lightweight concurrency manager

1 lines 18.4 kB
{"version":3,"sources":["../src/batch.ts"],"names":["validateOptions","options","_options","_isRunning","_queue","_promise","_Batch_static","loop_fn","_Batch_instances","run_fn","Batch","SharedBase","__privateAdd","Queue","taskOptions","validateTask","task","forEach","__privateMethod","__spreadProps","__spreadValues","results","map","mapSettled","validatePredicate","filter","some","find","every","group","args","resolve","reject","callback","__privateGet","loop","input","iterator","validateAndProcessInput","done","batchSize","count","i","res","__privateSet","batchInterval","_a","data","interrupt","job","err"],"mappings":"qHAMA,SAASA,CAAAA,CAAgBC,EAA6B,CAClD,GAAI,CAAC,MAAO,CAAA,SAAA,CAAUA,EAAQ,SAAS,CAAA,EAAKA,EAAQ,SAAY,CAAA,CAAA,CAC5D,MAAM,IAAI,KAAA,CAAM,kEAAkE,CAGtF,CAAA,GAAI,OAAOA,CAAQ,CAAA,aAAA,EAAkB,SAAU,CAC3C,GAAI,MAAMA,CAAQ,CAAA,aAAa,EAC3B,MAAM,IAAI,MAAM,oCAAoC,CAAA,CAGxD,GAAIA,CAAQ,CAAA,aAAA,CAAgB,EACxB,MAAM,IAAI,MAAM,sDAAsD,CAE9E,CACJ,CApBA,IAAAC,EAAAC,CAAAC,CAAAA,CAAAA,CAAAC,EAAAC,CAAAC,CAAAA,CAAAA,CAAAC,EAAAC,CAsBaC,CAAAA,CAAAA,CAAN,cAAoBC,mBAA+B,CAqOtD,YAAYV,CAA6B,CAAA,CACrC,OAtODW,CAAAA,mBAAAA,CAAA,KAAAJ,CAEHI,CAAAA,CAAAA,mBAAAA,CAAA,KAAAV,CACAU,CAAAA,CAAAA,mBAAAA,CAAA,KAAAT,CAAsB,CAAA,KAAA,CAAA,CACtBS,oBAAA,IAAAR,CAAAA,CAAAA,CAAqC,IAAIS,mBACzCD,CAAAA,CAAAA,mBAAAA,CAAA,KAAAP,CAAW,CAAA,OAAA,CAAQ,SAkOf,CAAA,CAAA,IAAA,CAAK,QAAUJ,EACnB,CAzLA,aAAa,OAAWa,CAAAA,CAAAA,CAAsD,CAC1EC,mBAAaD,CAAAA,CAAAA,CAAY,IAAI,CAE7B,CAAA,GAAM,CAAE,IAAAE,CAAAA,CAAK,EAAIC,mBAAQH,CAAAA,CAAAA,CAAY,IAAI,CAEzC,CAAA,MAAMI,oBAAA,IACFZ,CAAAA,CAAAA,CAAAC,GADE,IACIY,CAAAA,IAAAA,CAAAA,mBAAAA,CAAAC,oBAAA,EACCN,CAAAA,CAAAA,CAAAA,CADD,CAEF,IAAAE,CAAAA,CACJ,IACR,CAYA,aAAa,IAAUF,CAAmD,CAAA,CACtEC,oBAAaD,CAAY,CAAA,IAAI,EAE7B,GAAM,CAAE,KAAAE,CAAM,CAAA,OAAA,CAAAK,CAAQ,CAAIC,CAAAA,mBAAAA,CAAIR,EAAY,IAAI,CAAA,CAE9C,aAAMI,mBAAA,CAAA,IAAA,CACFZ,EAAAC,CADE,CAAA,CAAA,IAAA,CAAA,IAAA,CACIY,oBAAAC,mBAAA,CAAA,EAAA,CACCN,GADD,CAEF,IAAA,CAAAE,CACJ,CAEGK,CAAAA,CAAAA,CAAAA,CACX,CAaA,aAAa,UAAA,CAAiBP,EAAyE,CACnGC,mBAAAA,CAAaD,EAAY,IAAI,CAAA,CAE7B,GAAM,CAAE,IAAA,CAAAE,EAAM,OAAAK,CAAAA,CAAQ,EAAIE,mBAAWT,CAAAA,CAAAA,CAAY,IAAI,CAErD,CAAA,OAAA,MAAMI,oBAAA,IACDZ,CAAAA,CAAAA,CAAAC,GADC,IACKY,CAAAA,IAAAA,CAAAA,mBAAAA,CAAAC,oBAAA,EACAN,CAAAA,CAAAA,CAAAA,CADA,CAEH,IAAAE,CAAAA,CACJ,CAEGK,CAAAA,CAAAA,CAAAA,CACX,CAWA,aAAa,OAAUP,CAAqD,CAAA,CACxEU,oBAAkBV,CAAY,CAAA,SAAS,EAEvC,GAAM,CAAE,KAAAE,CAAM,CAAA,OAAA,CAAAK,CAAQ,CAAII,CAAAA,mBAAAA,CAAOX,EAAY,SAAS,CAAA,CAEtD,aAAMI,mBAAA,CAAA,IAAA,CACDZ,EAAAC,CADC,CAAA,CAAA,IAAA,CAAA,IAAA,CACKY,oBAAAC,mBAAA,CAAA,EAAA,CACAN,GADA,CAEH,IAAA,CAAAE,CACJ,CAEGK,CAAAA,CAAAA,CAAAA,CACX,CAWA,aAAa,IAAA,CAAQP,EAAyD,CAC1EU,mBAAAA,CAAkBV,EAAY,SAAS,CAAA,CAEvC,GAAM,CAAE,IAAA,CAAAE,EAAM,OAAAK,CAAAA,CAAQ,EAAIK,mBAAKZ,CAAAA,CAAAA,CAAY,SAAS,CAEpD,CAAA,OAAA,MAAMI,oBAAA,IACDZ,CAAAA,CAAAA,CAAAC,GADC,IACKY,CAAAA,IAAAA,CAAAA,mBAAAA,CAAAC,oBAAA,EACAN,CAAAA,CAAAA,CAAAA,CADA,CAEH,IAAAE,CAAAA,CACJ,IAEGK,CAAQ,CAAA,CAAC,CACpB,CAWA,aAAa,KAAQP,CAA+D,CAAA,CAChFU,oBAAkBV,CAAY,CAAA,SAAS,EAEvC,GAAM,CAAE,KAAAE,CAAM,CAAA,OAAA,CAAAK,CAAQ,CAAIM,CAAAA,mBAAAA,CAAKb,EAAY,SAAS,CAAA,CAEpD,aAAMI,mBAAA,CAAA,IAAA,CACDZ,CAAAC,CAAAA,CAAAA,CAAAA,CADC,IACKY,CAAAA,IAAAA,CAAAA,mBAAAA,CAAAC,oBAAA,EACAN,CAAAA,CAAAA,CAAAA,CADA,CAEH,IAAAE,CAAAA,CACJ,IAEGK,CAAQ,CAAA,CAAC,CACpB,CAWA,aAAa,MAASP,CAAyD,CAAA,CAC3EU,oBAAkBV,CAAY,CAAA,SAAS,EAEvC,GAAM,CAAE,KAAAE,CAAM,CAAA,OAAA,CAAAK,CAAQ,CAAIO,CAAAA,mBAAAA,CAAMd,EAAY,SAAS,CAAA,CAErD,aAAMI,mBAAA,CAAA,IAAA,CACDZ,EAAAC,CADC,CAAA,CAAA,IAAA,CAAA,IAAA,CACKY,oBAAAC,mBAAA,CAAA,EAAA,CACAN,GADA,CAEH,IAAA,CAAAE,CACJ,CAEGK,CAAAA,CAAAA,CAAAA,CAAAA,CAAQ,CAAC,CACpB,CAaA,aAAa,KAASP,CAAAA,CAAAA,CAAsE,CACxFC,mBAAaD,CAAAA,CAAAA,CAAY,IAAI,CAE7B,CAAA,GAAM,CAAE,IAAAE,CAAAA,CAAAA,CAAM,QAAAK,CAAQ,CAAA,CAAIQ,oBAAMf,CAAY,CAAA,IAAI,EAEhD,OAAMI,MAAAA,mBAAAA,CAAA,KACDZ,CAAAC,CAAAA,CAAAA,CAAAA,CADC,UACKY,mBAAAC,CAAAA,mBAAAA,CAAA,GACAN,CADA,CAAA,CAAA,CAEH,KAAAE,CACJ,CAAA,CAAA,CAAA,CAEG,OAAO,WAAYK,CAAAA,CAAAA,CAAQ,CAAC,CAAC,CACxC,CA8CS,GAAUL,CAAAA,CAAAA,CAAAA,GAA6Bc,EAAuB,CAUnE,OATY,IAAI,OAAA,CAAW,CAACC,CAAAA,CAASC,IAAW,CAC5C,IAAMC,EAAW,IAAMC,mBAAAA,CAAA,KAAK7B,CACvB,CAAA,CAAA,IAAA,CAAK,IAAMW,CAAK,CAAA,GAAGc,CAAI,CAAC,CAAA,CACxB,KAAKC,CAAO,CAAA,CACZ,MAAMC,CAAM,CAAA,CAEjBE,oBAAA,IAAK9B,CAAAA,CAAAA,CAAAA,CAAO,QAAQ6B,CAAQ,CAAA,CAC5BC,oBAAA,IAAK7B,CAAAA,CAAAA,CAAAA,CAAS,KAAK,IAAMa,mBAAAA,CAAA,KAAKV,CAAAC,CAAAA,CAAAA,CAAAA,CAAL,UAAW,EACxC,CAAC,CAEL,CAEA,MAAgB0B,mBAAI,CAAQC,CAAAA,CAAAA,CAAiBpB,EAAiC,CAC1E,IAAMqB,EAAWC,mBAAwBF,CAAAA,CAAK,EAE1CG,CAAO,CAAA,KAAA,CACL,CAAE,SAAAC,CAAAA,CAAU,EAAIN,mBAAA,CAAA,IAAA,CAAKhC,GAE3B,MAAM,IAAI,QAAc,CAAC6B,CAAAA,CAASC,IAAW,CACzC,IAAIS,EAAQD,CACZ,CAAA,IAAA,IAASE,EAAI,CAAGA,CAAAA,CAAAA,CAAIF,EAAWE,CAC3B,EAAA,CAAA,OAAA,CACK,QAAQL,CAAS,CAAA,IAAA,EAAM,CACvB,CAAA,IAAA,CAAK,MAAMM,CAAO,EAAA,CACf,KAAO,CAACJ,CAAAA,EAAQ,CAACI,CAAI,CAAA,IAAA,EACjB,MAAM,IAAA,CAAK,GAAI3B,CAAAA,CAAAA,CAAM,MAAM2B,CAAI,CAAA,KAAK,EACpCA,CAAM,CAAA,MAAMN,EAAS,IAAK,GAElC,CAAC,CACA,CAAA,IAAA,CAAK,IAAO,EAAEI,CAAAA,GAAU,EAAKV,CAAQ,EAAA,CAAI,MAAS,CAClD,CAAA,KAAA,CAAM,IAAM,CAAEQ,CAAAA,CAAO,KAAMP,CAAO,GAAG,CAAC,EAEnD,CAAC,EACL,CAEA,IAAa,QAAQ/B,CAA6B,CAAA,CAC9CD,EAAgBC,CAAO,CAAA,CACvB2C,oBAAA,IAAK1C,CAAAA,CAAAA,CAAWkB,wCAAA,EAAKc,CAAAA,mBAAAA,CAAA,KAAKhC,CAAaD,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAC3C,CAEA,IAAa,OAAA,EAAU,CACnB,OAAOmB,mBAAAA,CAAA,GAAKc,mBAAA,CAAA,IAAA,CAAKhC,GACrB,CAEJ,EAxTIA,EAAA,IACAC,OAAAA,CAAAA,CAAAA,CAAA,YACAC,CAAA,CAAA,IAAA,OAAA,CACAC,EAAA,IALGC,OAAAA,CAAAA,CAAAA,CAAA,YAOUC,CAAW,CAAA,eAACO,EAAqC,CAC1Dd,CAAAA,CAAgBc,CAAW,CAC3B,CAAA,IAAMuB,EAAWC,mBAAwBxB,CAAAA,CAAAA,CAAY,KAAK,CACpD,CAAA,CAAE,UAAA0B,CAAW,CAAA,aAAA,CAAAK,EAAe,IAAA7B,CAAAA,CAAK,EAAIF,CACvCyB,CAAAA,CAAAA,CAAO,KAEX,CAAA,KAAO,CAACA,CAAAA,EACJ,MAAM,IAAI,OAAA,CAAc,CAACR,CAASC,CAAAA,CAAAA,GAAW,CACzC,IAAIS,CAAAA,CAAQD,EACZ,IAASE,IAAAA,CAAAA,CAAI,EAAGA,CAAIF,CAAAA,CAAAA,CAAWE,KAC1B,SAAY,CAvCjC,IAAAI,CAwCwB,CAAA,IAAMC,EAAO,MAAMV,CAAAA,CAAS,MAE5B,CAAA,GADAE,EAAOA,CAAQ,EAAA,CAAC,CAACQ,CAAK,CAAA,IAAA,CAClBR,EAAM,OAEK,MAAMvB,EAAK,MAAM+B,CAAAA,CAAK,KAAK,CAC3BC,GAAAA,mBAAAA,GACXT,EAAO,IACPO,CAAAA,CAAAA,CAAAA,CAAAT,EAAS,MAAT,GAAA,IAAA,EAAAS,EAAA,IAAAT,CAAAA,CAAAA,CAAAA,EAER,IACK,CAAA,IAAA,CAAK,IAAO,EAAEI,CAAAA,GAAU,EAAKV,CAAQ,EAAA,CAAI,MAAS,CAClD,CAAA,KAAA,CAAMC,CAAM,EAEzB,CAAC,EAEG,OAAOa,CAAAA,EAAkB,UACzB,MAAM,IAAI,QAAed,CAAY,EAAA,UAAA,CAAWA,EAASc,CAAa,CAAC,EAEnF,CApCGrC,CAAAA,CAAAA,CAAA,YA0OGC,CAAI,CAAA,gBAAG,CACT,GAAIyB,mBAAAA,CAAA,KAAK/B,CAAY,CAAA,CAAA,OACrByC,oBAAA,IAAKzC,CAAAA,CAAAA,CAAa,IAElB,CAAA,CAAA,GAAM,CAAE,SAAA,CAAAqC,EAAW,aAAAK,CAAAA,CAAc,EAAIX,mBAAA,CAAA,IAAA,CAAKhC,GAE1C,KAAOgC,mBAAAA,CAAA,KAAK9B,CAAO,CAAA,CAAA,MAAA,EACf,MAAM,IAAI,OAAA,CAAc,CAAC2B,CAASC,CAAAA,CAAAA,GAAW,CACzC,IAAIS,CAAAA,CAAQD,EACZ,IAAS,IAAA,CAAA,CAAI,EAAG,CAAIA,CAAAA,CAAAA,CAAW,IAC3BN,mBAAA,CAAA,IAAA,CAAK7B,GAAS,IAAK,CAAA,SAAY,CAC3B,GAAI,CACA,IAAM4C,CAAMf,CAAAA,mBAAAA,CAAA,KAAK9B,CAAO,CAAA,CAAA,OAAA,GACxB,GAAI,CAAC6C,EAAI,CACD,EAAER,IAAU,CAAGV,EAAAA,CAAAA,GACnB,MACJ,CAEA,MAAMkB,CAAI,EAAA,CACN,EAAER,CAAU,GAAA,CAAA,EAAGV,IACvB,CAAA,MAASmB,EAAK,CACVlB,CAAAA,CAAOkB,CAAG,EACd,CACJ,CAAC,EAET,CAAC,EAEG,OAAOL,CAAAA,EAAkB,UACzB,MAAM,IAAI,QAAed,CAAY,EAAA,UAAA,CAAWA,EAASc,CAAa,CAAC,EAI/ED,mBAAA,CAAA,IAAA,CAAKzC,EAAa,KACtB,EAAA,CAAA,CA3QGS,oBAAMF,CAANJ,CAAAA,CAAAA,CAAAA,CA4TP,MAAO,CAAA,MAAA,CAAOI,CAAK,CAAA","file":"chunk-4D3KJGYB.cjs","sourcesContent":["import type { BatchCommonOptions, BatchPredicateOptions, BatchTaskOptions } from './base/options.js';\nimport { Queue } from './base/queue.js';\nimport { SharedBase } from './base/shared-base.js';\nimport { every, filter, find, forEach, group, interrupt, loop, map, mapSettled, some, validateAndProcessInput, validatePredicate, validateTask } from './base/shared.js';\nimport type { Group, Input, RunnableTask, Task } from './base/types.js';\n\nfunction validateOptions(options: BatchCommonOptions) {\n if (!Number.isInteger(options.batchSize) || options.batchSize < 0) {\n throw new Error('Parameter `batchSize` must be a positive integer greater than 0!');\n }\n\n if (typeof options.batchInterval === 'number') {\n if (isNaN(options.batchInterval)) {\n throw new Error('Parameter `batchInterval` invalid!');\n }\n\n if (options.batchInterval < 0) {\n throw new Error('Parameter `batchInterval` must be a positive number!');\n }\n }\n}\n\nexport class Batch extends SharedBase<BatchCommonOptions> {\n\n #options: BatchCommonOptions = undefined!;\n #isRunning: boolean = false;\n #queue: Queue<() => Promise<void>> = new Queue();\n #promise = Promise.resolve();\n\n static async #loop<A, B>(taskOptions: BatchTaskOptions<A, B>) {\n validateOptions(taskOptions);\n const iterator = validateAndProcessInput(taskOptions.input);\n const { batchSize, batchInterval, task } = taskOptions;\n let done = false;\n\n while (!done) {\n await new Promise<void>((resolve, reject) => {\n let count = batchSize;\n for (let i = 0; i < batchSize; i++) {\n (async () => {\n const data = await iterator.next();\n done = done || !!data.done;\n if (done) return;\n\n const result = await task(await data.value);\n if (result === interrupt) {\n done = true;\n iterator.return?.();\n }\n })()\n .then(() => (--count === 0) ? resolve() : undefined)\n .catch(reject);\n }\n });\n\n if (typeof batchInterval === 'number')\n await new Promise<void>((resolve) => setTimeout(resolve, batchInterval));\n }\n }\n\n /**\n * Performs the specified `task` for each element in the `input`.\n * \n * It runs in batches with size defined by `batchSize`.\n *\n * @template A Input Type.\n * @param {BatchTaskOptions<A, any>} taskOptions Task Options.\n * @returns {Promise<void>}\n */\n static async forEach<A>(taskOptions: BatchTaskOptions<A, any>): Promise<void> {\n validateTask(taskOptions.task);\n\n const { task } = forEach(taskOptions.task);\n\n await this.\n #loop({\n ...taskOptions,\n task\n });\n }\n\n /**\n * Performs the specified `task` function on each element in the `input`, and returns an array that contains the results.\n * \n * It runs in batches with size defined by `batchSize`.\n * \n * @template A Input Type.\n * @template B Output Type.\n * @param {BatchTaskOptions<A, B>} taskOptions Task Options.\n * @returns {Promise<B[]>}\n */\n static async map<A, B>(taskOptions: BatchTaskOptions<A, B>): Promise<B[]> {\n validateTask(taskOptions.task);\n\n const { task, results } = map(taskOptions.task);\n\n await this.\n #loop({\n ...taskOptions,\n task\n });\n\n return results;\n }\n\n /**\n * Performs the specified `task` function on each element in the `input`, \n * and creates a Promise that is resolved with an array of results when all of the tasks are resolve or reject.\n * \n * It runs in batches with size defined by `batchSize`.\n * \n * @template A Input Type.\n * @template B Output Type.\n * @param {BatchTaskOptions<A, B>} taskOptions Task Options.\n * @returns {Promise<PromiseSettledResult<B>[]>}\n */\n static async mapSettled<A, B>(taskOptions: BatchTaskOptions<A, B>): Promise<PromiseSettledResult<B>[]> {\n validateTask(taskOptions.task);\n\n const { task, results } = mapSettled(taskOptions.task);\n\n await this\n .#loop({\n ...taskOptions,\n task\n });\n\n return results;\n }\n\n /**\n * Returns the elements that meet the condition specified in the `predicate` function.\n * \n * It runs in batches with size defined by `batchSize`.\n *\n * @template A Input Type.\n * @param {BatchPredicateOptions<A>} taskOptions Task Options.\n * @returns {Promise<A[]>}\n */\n static async filter<A>(taskOptions: BatchPredicateOptions<A>): Promise<A[]> {\n validatePredicate(taskOptions.predicate);\n\n const { task, results } = filter(taskOptions.predicate);\n\n await this\n .#loop({\n ...taskOptions,\n task\n });\n\n return results;\n }\n\n /**\n * Determines whether the specified `predicate` function returns true for any element of `input`.\n * \n * It runs in batches with size defined by `batchSize`.\n * \n * @template A Input Type.\n * @param {BatchPredicateOptions<A>} taskOptions Task Options.\n * @returns {Promise<boolean>}\n */\n static async some<A>(taskOptions: BatchPredicateOptions<A>): Promise<boolean> {\n validatePredicate(taskOptions.predicate);\n\n const { task, results } = some(taskOptions.predicate);\n\n await this\n .#loop({\n ...taskOptions,\n task\n });\n\n return results[0];\n }\n\n /**\n * Returns the `input` value of the first `predicate` that resolves to true, and undefined otherwise.\n * \n * It runs in batches with size defined by `batchSize`.\n * \n * @template A Input Type.\n * @param {BatchPredicateOptions<A>} taskOptions Task Options.\n * @returns {Promise<A | undefined>}\n */\n static async find<A>(taskOptions: BatchPredicateOptions<A>): Promise<A | undefined> {\n validatePredicate(taskOptions.predicate);\n\n const { task, results } = find(taskOptions.predicate);\n\n await this\n .#loop({\n ...taskOptions,\n task\n });\n\n return results[0];\n }\n\n /**\n * Determines whether all the elements of `input` satisfy the specified `predicate`.\n * \n * It runs in batches with size defined by `batchSize`.\n * \n * @template A Input Type.\n * @param {BatchPredicateOptions<A>} taskOptions Task Options.\n * @returns {Promise<boolean>}\n */\n static async every<A>(taskOptions: BatchPredicateOptions<A>): Promise<boolean> {\n validatePredicate(taskOptions.predicate);\n\n const { task, results } = every(taskOptions.predicate);\n\n await this\n .#loop({\n ...taskOptions,\n task\n });\n\n return results[0];\n }\n\n /**\n * This method groups the elements of the `input` according to the string values returned by a provided `task`.\n * \n * The returned object has separate properties for each group, containing arrays with the elements in the group.\n * \n * It runs in batches with size defined by `batchSize`.\n * \n * @template A Input Type.\n * @param {BatchTaskOptions<A>} taskOptions Task Options.\n * @returns {Promise<Group<A>>}\n */\n static async group<A>(taskOptions: BatchTaskOptions<A, string | symbol>): Promise<Group<A>> {\n validateTask(taskOptions.task);\n\n const { task, results } = group(taskOptions.task);\n\n await this\n .#loop({\n ...taskOptions,\n task\n });\n\n return Object.fromEntries(results[0]);\n }\n\n /**\n * \n * @param {BatchCommonOptions} options \n */\n constructor(options: BatchCommonOptions) {\n super();\n this.options = options;\n }\n\n async #run() {\n if (this.#isRunning) return;\n this.#isRunning = true;\n\n const { batchSize, batchInterval } = this.#options;\n\n while (this.#queue.length) {\n await new Promise<void>((resolve, reject) => {\n let count = batchSize;\n for (let i = 0; i < batchSize; i++) {\n this.#promise.then(async () => {\n try {\n const job = this.#queue.dequeue();\n if (!job){\n if (--count === 0) resolve();\n return;\n }\n\n await job();\n if (--count === 0) resolve();\n } catch (err) {\n reject(err);\n }\n });\n }\n });\n\n if (typeof batchInterval === 'number') {\n await new Promise<void>((resolve) => setTimeout(resolve, batchInterval));\n }\n }\n\n this.#isRunning = false;\n }\n\n override run<A, B>(task: RunnableTask<A, B>, ...args: A[]): Promise<B> {\n const job = new Promise<B>((resolve, reject) => {\n const callback = () => this.#promise\n .then(() => task(...args))\n .then(resolve)\n .catch(reject);\n\n this.#queue.enqueue(callback);\n this.#promise.then(() => this.#run());\n });\n return job;\n }\n\n override async [loop]<A, B>(input: Input<A>, task: Task<A, B>): Promise<void> {\n const iterator = validateAndProcessInput(input);\n\n let done = false;\n const { batchSize } = this.#options;\n\n await new Promise<void>((resolve, reject) => {\n let count = batchSize;\n for (let i = 0; i < batchSize; i++) {\n Promise\n .resolve(iterator.next())\n .then(async res => {\n while (!done && !res.done) {\n await this.run(task, await res.value);\n res = await iterator.next();\n }\n })\n .then(() => (--count === 0) ? resolve() : undefined)\n .catch(() => { done = true; reject(); });\n }\n });\n }\n\n override set options(options: BatchCommonOptions) {\n validateOptions(options);\n this.#options = { ...this.#options, ...options };\n }\n\n override get options() {\n return { ...this.#options };\n }\n\n}\n\nObject.freeze(Batch);\n"]}