{
  "version": 3,
  "sources": ["../index.ts"],
  "sourcesContent": ["/**\n * @module @xmcl/task\n */\nexport class CancelledError extends Error {\n  constructor() {\n    super('Cancelled')\n    this.name = 'CancelledError'\n  }\n}\n\nexport enum TaskState {\n  Idle,\n  Running,\n  Cancelled,\n  Paused,\n  Succeed,\n  Failed,\n}\n\nexport interface Task<T = any> {\n  readonly id: number\n  readonly name: string\n  readonly param: Record<string, any>\n  readonly progress: number\n  readonly total: number\n  readonly from: string | undefined\n  readonly to: string | undefined\n\n  readonly path: string\n  readonly isCancelled: boolean\n  readonly isPaused: boolean\n  readonly isDone: boolean\n  readonly isRunning: boolean\n  readonly state: TaskState\n\n  readonly context: TaskContext | undefined\n  readonly parent: Task<any> | undefined\n\n  pause(): Promise<void>\n  resume(): Promise<void>\n  cancel(timeout?: number): Promise<void>\n  start(context?: TaskContext, parent?: Task<any>): void\n  wait(): Promise<T>\n  startAndWait(context?: TaskContext, parent?: Task<any>): Promise<T>\n\n  onChildUpdate(chunkSize: number): void\n\n  map<N>(transform: Transform<this, N>): Task<N extends Promise<infer R> ? R : N>\n\n  setName(name: string, param?: Record<string, any>): this\n}\n\nexport interface Transform<T, N> {\n  (this: T, value: T): N\n}\n\nexport interface TaskContext {\n  fork?(task: Task<any>): number\n  onStart?(task: Task<any>): void\n  onUpdate?(task: Task<any>, chunkSize: number): void\n  onFailed?(task: Task<any>, error: any): void\n  onSucceed?(task: Task<any>, result: any): void\n  onPaused?(task: Task<any>): void\n  onResumed?(task: Task<any>): void\n  onCancelled?(task: Task<any>): void\n}\n\nexport function createFork(): TaskContext['fork'] {\n  let id = 0\n  return () => id++\n}\n\nexport abstract class BaseTask<T> implements Task<T> {\n  protected _state: TaskState = TaskState.Idle\n  protected _promise: Promise<T>\n\n  protected resolve!: (value: T) => void\n  protected reject!: (err: any) => void\n\n  protected _from: string | undefined\n  protected _to: string | undefined\n  protected _progress = 0\n  protected _total = -1\n  protected _path = ''\n  protected _id = 0\n\n  parent: Task<any> | undefined\n  context: TaskContext = {}\n\n  name = ''\n  param: object = {}\n\n  protected resultOrError: T | any\n\n  constructor() {\n    this._promise = new Promise((resolve, reject) => {\n      this.resolve = resolve\n      this.reject = reject\n    })\n  }\n\n  setName(name: string, param?: object) {\n    this.name = name\n    this.param = param || this.param\n    return this\n  }\n\n  get(): T | void {\n    if (this.state === TaskState.Succeed) {\n      return this.resultOrError\n    } else if (this.state === TaskState.Failed) {\n      throw this.resultOrError\n    }\n  }\n\n  get id() { return this._id }\n  get path() { return this._path }\n  get progress() { return this._progress }\n  get total() { return this._total }\n  get to() { return this._to }\n  get from() { return this._from }\n  get state() { return this._state }\n\n  get isCancelled() { return this._state === TaskState.Cancelled }\n  get isPaused() { return this._state === TaskState.Paused }\n  get isDone() { return this._state === TaskState.Succeed }\n  get isRunning() { return this._state === TaskState.Running }\n\n  async pause() {\n    if (this._state !== TaskState.Running) { return }\n    await this.pauseTask().then(() => {\n      this._state = TaskState.Paused\n      this.context.onPaused?.(this)\n    })\n  }\n\n  async resume() {\n    if (this._state !== TaskState.Paused) { return }\n    this._state = TaskState.Running\n    await this.resumeTask().then(() => {\n      this.context.onResumed?.(this)\n    })\n  }\n\n  async cancel(timeout?: number) {\n    if (this.state !== TaskState.Running && this.state !== TaskState.Idle) { return }\n    this.reject(new CancelledError())\n    try {\n      if (timeout) {\n        await Promise.race([this.cancelTask(), new Promise((resolve) => setTimeout(resolve, timeout))])\n      } else {\n        await this.cancelTask()\n      }\n    } finally {\n      this._state = TaskState.Cancelled\n      this.context.onCancelled?.(this)\n    }\n  }\n\n  wait() {\n    return this._promise\n  }\n\n  start(context?: TaskContext, parent?: Task<any>) {\n    if (this._state === TaskState.Cancelled) {\n      throw new CancelledError()\n    }\n    if (this._state !== TaskState.Idle) {\n      return\n    }\n    if (context) {\n      Object.assign(this.context, context)\n    }\n    if (!this.context.fork) { this.context.fork = createFork() }\n    this.parent = parent\n    this._state = TaskState.Running\n    this._id = this.context.fork!(this)\n    this._path = parent ? `${parent.path}.${this.name}` : this.name\n    this.context.onStart?.(this)\n    this.runTask().then((value) => {\n      this.resolve(value)\n      this._state = TaskState.Succeed\n      this.resultOrError = value\n      this.context.onSucceed?.(this, value)\n    }, (error) => {\n      this.reject(error)\n      this.resultOrError = error\n      if (this.state !== TaskState.Cancelled) {\n        this._state = TaskState.Failed\n        this.context.onFailed?.(this, error)\n      }\n    })\n  }\n\n  startAndWait(context?: TaskContext, parent?: Task<any>) {\n    this.start(context, parent)\n    return this.wait()\n  }\n\n  protected update(chunkSize: number) {\n    this.context.onUpdate?.(this, chunkSize)\n    this.parent?.onChildUpdate(chunkSize)\n  }\n\n  onChildUpdate(chunkSize: number) { }\n\n  protected abstract runTask(): Promise<T>\n  protected abstract cancelTask(): Promise<void>\n  protected abstract pauseTask(): Promise<void>\n  protected abstract resumeTask(): Promise<void>\n\n  map<N>(transform: Transform<this, N>): Task<N extends Promise<infer R> ? R : N> {\n    const copy = Object.create(this)\n    const wait = copy.wait\n    copy.wait = function (this: typeof copy) {\n      // @ts-expect-error\n      return wait.bind(this)().then((r) => transform.bind(this)(r))\n    }\n    return copy\n  }\n}\n\nexport abstract class AbortableTask<T> extends BaseTask<T> {\n  protected _pausing: Promise<void> = Promise.resolve()\n  protected _unpause = () => { }\n  protected _onAborted = () => { }\n  protected _onResume = () => { }\n\n  protected abstract process(): Promise<T>\n  protected abstract abort(isCancelled: boolean): void\n  protected abstract isAbortedError(e: any): boolean\n\n  protected cancelTask(): Promise<void> {\n    this.abort(true)\n    return new Promise((resolve) => {\n      this._onAborted = resolve\n    })\n  }\n\n  protected pauseTask(): Promise<void> {\n    this._pausing = new Promise((resolve) => {\n      this._unpause = resolve\n    })\n    this.abort(false)\n    return new Promise((resolve) => {\n      this._onAborted = resolve\n    })\n  }\n\n  protected resumeTask(): Promise<void> {\n    this._unpause()\n    return new Promise((resolve) => {\n      this._onResume = resolve\n    })\n  }\n\n  protected async runTask() {\n    while (true) {\n      try {\n        if (this.state === TaskState.Cancelled) {\n          throw new CancelledError()\n        }\n        await this._pausing\n        // notify resume task method\n        this._onResume()\n        const result = await this.process()\n        return result\n      } catch (e) {\n        if (this.isAbortedError(e)) {\n          // notify pauseTask method\n          this._onAborted()\n          continue\n        }\n        if (this._state === TaskState.Cancelled) {\n          // notify cancelTask method\n          this._onAborted()\n        }\n        throw e\n      }\n    }\n  }\n}\n\nexport abstract class TaskGroup<T> extends BaseTask<T> {\n  protected children: Task<any>[] = []\n\n  onChildUpdate(chunkSize: number) {\n    let total = 0\n    let progress = 0\n    for (const task of this.children) {\n      progress += task.progress\n      total += task.total\n    }\n    this._total = total\n    this._progress = progress\n    this.update(chunkSize)\n  }\n\n  protected async cancelTask(): Promise<void> {\n    await Promise.all(this.children.map((task) => task.cancel()))\n  }\n\n  protected async pauseTask(): Promise<void> {\n    await Promise.all(this.children.map((task) => task.pause()))\n  }\n\n  protected async resumeTask(): Promise<void> {\n    await Promise.all(this.children.map((task) => task.resume()))\n  }\n\n  async all<T extends Task<any>>(tasks: Iterable<T>, { throwErrorImmediately, getErrorMessage }: { throwErrorImmediately?: boolean; getErrorMessage?: (errors: any[]) => string } = { throwErrorImmediately: true, getErrorMessage: (errors: any[]) => '' }): Promise<(T extends Task<infer R> ? R : never)[]> {\n    const errors: unknown[] = []\n    const promises: Promise<any | void>[] = []\n    for (const task of tasks) {\n      this.children.push(task)\n      const promise = task.startAndWait(this.context, this).catch((error) => {\n        if (throwErrorImmediately || error instanceof CancelledError) {\n          throw error\n        }\n        errors.push(error)\n      })\n      promises.push(promise)\n    }\n    try {\n      const result = await Promise.all(promises)\n      // if not throwErrorImmediately, we still need to check if other task failed\n      if (errors.length > 0) {\n        if (errors.length === 1) {\n          throw errors[0]\n        }\n        const flatten = [] as Error[]\n        const flatError = (e: any) => {\n          if (e instanceof AggregateError) {\n            for (const err of e.errors) {\n              flatError(err)\n            }\n          }\n          flatten.push(e)\n        }\n        for (const e of errors) {\n          flatError(e)\n        }\n        throw new AggregateError(flatten, getErrorMessage?.(errors))\n      }\n      return result\n    } catch (e) {\n      // if throwErrorImmediately\n      // force cancel all other tasks\n      if (throwErrorImmediately) {\n        for (const task of tasks) {\n          if (task.isRunning) {\n            task.cancel().catch((e) => {\n              errors.push(e)\n            })\n          }\n        }\n      }\n      throw e\n    }\n  }\n}\n\nexport type TaskExecutor<T> = (this: TaskRoutine<any>) => Promise<T> | T\nexport class TaskRoutine<T> extends TaskGroup<T> {\n  constructor(name: string, readonly executor: TaskExecutor<T>, param: object = {}) {\n    super()\n    this.setName(name, param)\n  }\n\n  concat<T>(task: TaskRoutine<T>): Promise<T> {\n    try {\n      const result = task.executor.bind(this)()\n      if (result instanceof Promise) {\n        return result\n      }\n      return Promise.resolve(result)\n    } catch (e) {\n      return Promise.reject(e)\n    }\n  }\n\n  /**\n     * Yield a new child task to this routine\n     */\n  yield<T>(task: Task<T>): Promise<T> {\n    if (this.state !== TaskState.Running) {\n      throw new Error('IllegalState')\n    }\n    this.children.push(task)\n    return task.startAndWait(this.context, this)\n  }\n\n  protected runTask(): Promise<T> {\n    try {\n      const result = this.executor.bind(this)()\n      if (result instanceof Promise) {\n        return result\n      }\n      return Promise.resolve(result)\n    } catch (e) {\n      return Promise.reject(e)\n    }\n  }\n}\n\nexport function task<T>(name: string, executor: TaskExecutor<T>, param: object = {}): TaskRoutine<T> {\n  return new TaskRoutine<T>(name, executor, param)\n}\n"],
  "mappings": "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",
  "names": ["TaskState", "task", "e"]
}
