asyncTaskManager.js.map
4.43 KB
{"version":3,"sources":["../src/asyncTaskManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { CancellationToken } from \"builder-util-runtime\"\nimport { log } from \"./log\"\nimport { NestedError } from \"./promise\"\n\nexport class AsyncTaskManager {\n readonly tasks: Array<Promise<any>> = []\n private readonly errors: Array<Error> = []\n\n constructor(private readonly cancellationToken: CancellationToken) {\n }\n\n add(task: () => Promise<any>) {\n if (this.cancellationToken == null || !this.cancellationToken.cancelled) {\n this.addTask(task())\n }\n }\n\n addTask(promise: Promise<any>) {\n if (this.cancellationToken.cancelled) {\n log.debug({reason: \"cancelled\", stack: new Error().stack}, \"async task not added\")\n if (\"cancel\" in promise) {\n (promise as any).cancel()\n }\n return\n }\n\n this.tasks.push(promise\n .catch(it => {\n log.debug({error: it.message || it.toString()}, \"async task error\")\n this.errors.push(it)\n return Promise.resolve(null)\n }))\n }\n\n cancelTasks() {\n for (const task of this.tasks) {\n if (\"cancel\" in task) {\n (task as any).cancel()\n }\n }\n this.tasks.length = 0\n }\n\n async awaitTasks(): Promise<Array<any>> {\n if (this.cancellationToken.cancelled) {\n this.cancelTasks()\n return []\n }\n\n const checkErrors = () => {\n if (this.errors.length > 0) {\n this.cancelTasks()\n throwError(this.errors)\n return\n }\n }\n\n checkErrors()\n\n let result: Array<any> | null = null\n const tasks = this.tasks\n let list = tasks.slice()\n tasks.length = 0\n while (list.length > 0) {\n const subResult = await Promise.all(list)\n result = result == null ? subResult : result.concat(subResult)\n checkErrors()\n if (tasks.length === 0) {\n break\n }\n else {\n if (this.cancellationToken.cancelled) {\n this.cancelTasks()\n return []\n }\n\n list = tasks.slice()\n tasks.length = 0\n }\n }\n return result || []\n }\n}\n\nfunction throwError(errors: Array<Error>) {\n if (errors.length === 1) {\n throw errors[0]\n }\n else if (errors.length > 1) {\n throw new NestedError(errors, \"Cannot cleanup: \")\n }\n}"],"sourceRoot":""}