{"version":3,"sources":["../src/index.ts","../src/internals.ts","../src/api/cancelAllIdleTasks.ts","../src/api/cancelIdleTask.ts","../src/api/configureIdleTask.ts","../src/api/getIdleTaskStatus.ts","../src/api/forceRunIdleTask.ts","../src/api/setIdleTask.ts","../src/api/waitForIdleTask.ts","../src/api/getResultFromIdleTask.ts"],"sourcesContent":["import cancelAllIdleTasks from './api/cancelAllIdleTasks';\nimport cancelIdleTask from './api/cancelIdleTask';\nimport configureIdleTask, { ConfigureOptions } from './api/configureIdleTask';\nimport forceRunIdleTask from './api/forceRunIdleTask';\nimport getIdleTaskStatus, { IdleTaskStatus } from './api/getIdleTaskStatus';\nimport getResultFromIdleTask, {\n  GetResultFromIdleTaskOptions,\n} from './api/getResultFromIdleTask';\nimport setIdleTask, {\n  SetIdleTaskOptions,\n  IdleTaskKey,\n} from './api/setIdleTask';\nimport waitForIdleTask, {\n  WaitForIdleTaskOptions,\n  WaitForIdleTaskTimeoutError,\n} from './api/waitForIdleTask';\n\nexport {\n  cancelAllIdleTasks,\n  cancelIdleTask,\n  configureIdleTask,\n  ConfigureOptions,\n  forceRunIdleTask,\n  getResultFromIdleTask,\n  GetResultFromIdleTaskOptions,\n  getIdleTaskStatus,\n  IdleTaskStatus,\n  waitForIdleTask,\n  WaitForIdleTaskTimeoutError,\n  WaitForIdleTaskOptions,\n  setIdleTask,\n  SetIdleTaskOptions,\n  IdleTaskKey,\n};\n","import type { ConfigureOptions } from './api/configureIdleTask';\nimport type { IdleTaskKey } from './api/setIdleTask';\nimport type { WaitForIdleTaskOptions } from './api/waitForIdleTask';\n\nexport const rIC =\n  typeof requestIdleCallback !== 'undefined'\n    ? requestIdleCallback\n    : (cb: IdleRequestCallback): ReturnType<typeof setTimeout> => {\n        const start = Date.now();\n        return setTimeout(() => {\n          cb({\n            didTimeout: false,\n            timeRemaining: () => Math.max(0, 50 - (Date.now() - start)),\n          });\n        }, 1);\n      };\n\nexport const cIC =\n  typeof cancelIdleCallback !== 'undefined' ? cancelIdleCallback : clearTimeout;\n\nexport type IdleTaskFunction = () => any;\n\ntype PromiseResolveReject = Parameters<\n  ConstructorParameters<typeof Promise>[0]\n>;\n\nexport interface IdleTask extends IdleTaskFunction {\n  readonly id: number;\n  readonly name: string;\n  readonly resolve?: PromiseResolveReject[0];\n  readonly reject?: PromiseResolveReject[1];\n  readonly revalidateWhenExecuted?: boolean;\n}\n\nexport type ConfigurableWaitForIdleTaskOptions = Pick<\n  WaitForIdleTaskOptions,\n  'timeout' | 'timeoutStrategy'\n>;\n\nexport const executeTask = (task: IdleTask): void => {\n  const { resolve, reject, revalidateWhenExecuted } = task;\n  // reregister a task before executing the task because it may contain `cancelIdleTask` .\n  if (revalidateWhenExecuted) {\n    idleTaskState.tasks.push(task);\n  }\n  if (!resolve || !reject) {\n    task();\n    return;\n  }\n  try {\n    resolve(task());\n  } catch (e) {\n    reject(e);\n  }\n};\n\nexport const resolveTaskResultWhenCancel = (tasks: IdleTask[]): void => {\n  for (const task of tasks) {\n    task.resolve?.(undefined);\n  }\n};\n\nexport const getResultFromCache = (key: IdleTaskKey, isDeleteCache = false) => {\n  const result = idleTaskState.idleTaskResultMap.get(key);\n  if (isDeleteCache) {\n    idleTaskState.idleTaskResultMap.delete(key);\n  }\n  return result;\n};\n\nexport const defaultWaitForIdleTaskOptions: WaitForIdleTaskOptions = {\n  timeoutStrategy: 'forceRun',\n} as const;\n\nconst taskGlobalOptions: ConfigureOptions = {\n  debug: false,\n  timeoutStrategy: 'forceRun',\n} as const;\n\ninterface IdleTaskState {\n  tasks: IdleTask[];\n  requestIdleCallbackId: ReturnType<typeof rIC>;\n  taskGlobalOptions: ConfigureOptions;\n  idleTaskResultMap: WeakMap<IdleTaskKey, Promise<any>>;\n  readonly idleTaskRevalidateIntervalMap: Map<\n    number,\n    ReturnType<typeof setInterval>\n  >;\n}\n\nexport const idleTaskState: IdleTaskState = {\n  tasks: [],\n  requestIdleCallbackId: Number.NaN,\n  taskGlobalOptions,\n  idleTaskResultMap: new WeakMap(),\n  idleTaskRevalidateIntervalMap: new Map(),\n};\n\nexport const removeIdleTaskFromQueue = (taskId: number) => {\n  idleTaskState.tasks = idleTaskState.tasks.filter(task => task.id !== taskId);\n  return idleTaskState.tasks;\n};\n\nexport const findIdleTasksFromQueue = (taskId: number) =>\n  idleTaskState.tasks.filter(task => task.id === taskId);\n","import {\n  cIC,\n  idleTaskState as its,\n  resolveTaskResultWhenCancel,\n} from '../internals';\n\nconst cancelAllIdleTasks = (): void => {\n  // delete all revalidateInterval\n  Array.from(its.idleTaskRevalidateIntervalMap.values()).forEach(clearInterval);\n  its.idleTaskRevalidateIntervalMap.clear();\n  resolveTaskResultWhenCancel(its.tasks);\n  its.tasks.length = 0;\n  // WeakMap has no clear method\n  its.idleTaskResultMap = new WeakMap();\n  its.requestIdleCallbackId && cIC(its.requestIdleCallbackId as any); // TypeScript Error because requestIdleCallbackId is number | NodeJS.Timeout.\n};\n\nexport default cancelAllIdleTasks;\n","import {\n  findIdleTasksFromQueue,\n  idleTaskState as its,\n  removeIdleTaskFromQueue,\n  resolveTaskResultWhenCancel,\n} from '../internals';\nimport type { IdleTaskKey } from './setIdleTask';\n\nconst cancelIdleTask = (key: IdleTaskKey): void => {\n  const targetTaskId = key.id;\n  // delete revalidateInterval\n  const revalidateIntervalId =\n    its.idleTaskRevalidateIntervalMap.get(targetTaskId);\n  if (revalidateIntervalId) {\n    clearInterval(revalidateIntervalId);\n    its.idleTaskRevalidateIntervalMap.delete(targetTaskId);\n  }\n  const tasks = findIdleTasksFromQueue(targetTaskId);\n  resolveTaskResultWhenCancel(tasks);\n  its.idleTaskResultMap.delete(key);\n  removeIdleTaskFromQueue(targetTaskId);\n};\n\nexport default cancelIdleTask;\n","import {\n  type ConfigurableWaitForIdleTaskOptions,\n  idleTaskState as its,\n} from '../internals';\n\nexport type ConfigureOptions = {\n  readonly interval?: number;\n  readonly debug?: boolean;\n} & ConfigurableWaitForIdleTaskOptions;\n\nconst configureIdleTask = (options: ConfigureOptions): void => {\n  its.taskGlobalOptions = options;\n};\n\nexport default configureIdleTask;\n","import { getResultFromCache, idleTaskState as its } from '../internals';\nimport type { IdleTaskKey } from './setIdleTask';\n\nexport type IdleTaskStatus = 'ready' | 'executed' | 'unknown';\n\nconst getIdleTaskStatus = (key: IdleTaskKey): IdleTaskStatus => {\n  if (its.tasks.some(task => task.id === key.id)) {\n    return 'ready';\n  }\n  // We can't know JavaScript Promise states like fulfilled.\n  // 'unknown' means that the task was canceled or its result was deleted.\n  if (!getResultFromCache(key)) {\n    return 'unknown';\n  }\n  // WARNING: 'executed' means that the task was executed, not completed.\n  return 'executed';\n};\n\nexport default getIdleTaskStatus;\n","import {\n  executeTask,\n  findIdleTasksFromQueue,\n  getResultFromCache,\n  idleTaskState as its,\n  removeIdleTaskFromQueue,\n} from '../internals';\nimport getIdleTaskStatus from './getIdleTaskStatus';\nimport type { IdleTaskKey } from './setIdleTask';\n\nconst forceRunIdleTask = async (key: IdleTaskKey): Promise<any> => {\n  const cacheResult = getResultFromCache(key);\n  if (getIdleTaskStatus(key) !== 'ready') {\n    return cacheResult;\n  }\n  const targetTaskId = key.id;\n  const tasks = findIdleTasksFromQueue(targetTaskId);\n  const latestEnqueuedTask = tasks[tasks.length - 1];\n  executeTask(latestEnqueuedTask);\n  const result = getResultFromCache(key);\n  if (latestEnqueuedTask.revalidateWhenExecuted) {\n    const latestEnqueuedTaskIndex = its.tasks.length - 1;\n    its.tasks = its.tasks.filter(\n      (task, index) =>\n        index === latestEnqueuedTaskIndex || task.id !== targetTaskId\n    );\n  } else {\n    removeIdleTaskFromQueue(targetTaskId);\n  }\n  return result;\n};\n\nexport default forceRunIdleTask;\n","import {\n  type IdleTask,\n  type IdleTaskFunction,\n  executeTask,\n  idleTaskState as its,\n  rIC,\n  removeIdleTaskFromQueue,\n} from '../internals';\n\nexport interface IdleTaskKey {\n  readonly id: number;\n}\n\nexport interface SetIdleTaskOptions {\n  readonly priority?: 'low' | 'high';\n  readonly revalidateInterval?: number;\n  readonly revalidateWhenExecuted?: boolean;\n  readonly taskName?: string;\n  readonly overwriteTask?: IdleTaskKey;\n}\n\nconst createTimeRemainingDidTimeout = (): (() => boolean) => {\n  const start = performance.now();\n  return () => performance.now() - start < 50;\n};\n\ntype LogLevel = 'info' | 'warn';\n\nconst logIdleTask = (message: string, level: LogLevel = 'info'): void => {\n  console[level](\n    '%cidle-task',\n    'background:#717171;color:white;padding:2px 3px;border-radius:2px;font-size:0.8em;',\n    message\n  );\n};\n\nconst logCallRequestIdleCallback = (\n  reason: 'timeout' | 'idle',\n  timeRemaining: number\n) => {\n  logIdleTask(\n    `Call requestIdleCallback, reason: ${reason}, timeRemaining: ${timeRemaining} ms`\n  );\n};\n\nconst getTimeRemainingAndLog = (\n  deadline: IdleDeadline\n): readonly [() => boolean, () => void] => {\n  const { didTimeout } = deadline;\n  if (didTimeout) {\n    return [\n      createTimeRemainingDidTimeout(),\n      () => logCallRequestIdleCallback('timeout', 50),\n    ];\n  }\n  return [\n    () => deadline.timeRemaining() > 0,\n    () =>\n      logCallRequestIdleCallback(\n        'idle',\n        normalizeTime(deadline.timeRemaining())\n      ),\n  ];\n};\n\nconst normalizeTime = (time: number): number => Math.ceil(time * 100) / 100;\n\nconst runIdleTasks = (deadline: IdleDeadline): void => {\n  const [isTimeRemaining, log] = getTimeRemainingAndLog(deadline);\n  const shouldOutputLog =\n    its.taskGlobalOptions.debug && typeof self !== 'undefined';\n  shouldOutputLog && log();\n  while (isTimeRemaining() && its.tasks.length > 0) {\n    const task = its.tasks.shift() as IdleTask;\n    if (shouldOutputLog) {\n      const start = performance.now();\n      executeTask(task);\n      const executionTime = normalizeTime(performance.now() - start);\n      logIdleTask(\n        `Run task, name: ${task.name || 'anonymous'}(id: ${\n          task.id\n        }), executionTime: ${executionTime} ms`,\n        executionTime > 50 ? 'warn' : 'info'\n      );\n    } else {\n      executeTask(task);\n    }\n  }\n  if (its.tasks.length > 0) {\n    scheduleIdleTask();\n    return;\n  }\n  its.requestIdleCallbackId = Number.NaN;\n};\n\nconst scheduleIdleTask = () => {\n  its.requestIdleCallbackId = rIC(runIdleTasks, {\n    timeout: its.taskGlobalOptions.interval,\n  });\n};\n\nlet id = 0;\nconst defaultSetIdleTaskOptions: SetIdleTaskOptions = {\n  priority: 'low',\n  revalidateWhenExecuted: false,\n} as const;\n\nconst setIdleTask = (\n  task: IdleTaskFunction,\n  options: SetIdleTaskOptions = defaultSetIdleTaskOptions\n): IdleTaskKey => {\n  const { overwriteTask } = options;\n  const idleTaskKey = overwriteTask ?? Object.freeze({ id: ++id });\n  if (overwriteTask) {\n    removeIdleTaskFromQueue(idleTaskKey.id);\n  }\n  let resolve: any;\n  let reject: any;\n  its.idleTaskResultMap.set(\n    idleTaskKey,\n    new Promise((res, rej) => {\n      resolve = res;\n      reject = rej;\n    })\n  );\n  const idleTaskId = idleTaskKey.id;\n  const { revalidateInterval } = options;\n  const idleTask = Object.defineProperties(() => task(), {\n    id: {\n      value: idleTaskId,\n    },\n    name: {\n      value: options.taskName || task.name,\n    },\n    resolve: {\n      value: resolve,\n    },\n    reject: {\n      value: reject,\n    },\n    revalidateWhenExecuted: {\n      value: options.revalidateWhenExecuted,\n    },\n  }) as IdleTask;\n  if (revalidateInterval !== undefined) {\n    its.idleTaskRevalidateIntervalMap.set(\n      idleTaskId,\n      setInterval(() => {\n        // Low Priority\n        its.tasks.push(idleTask);\n        its.requestIdleCallbackId || scheduleIdleTask();\n      }, revalidateInterval)\n    );\n  }\n  options.priority === 'high'\n    ? its.tasks.unshift(idleTask)\n    : its.tasks.push(idleTask);\n  if (its.requestIdleCallbackId) {\n    return idleTaskKey;\n  }\n  scheduleIdleTask();\n  return idleTaskKey;\n};\n\nexport default setIdleTask;\n","import {\n  defaultWaitForIdleTaskOptions,\n  getResultFromCache,\n  idleTaskState as its,\n} from '../internals';\nimport forceRunIdleTask from './forceRunIdleTask';\nimport type { IdleTaskKey } from './setIdleTask';\n\ntype IdleTaskTimeoutStrategy = 'error' | 'forceRun';\n\nexport interface WaitForIdleTaskOptions {\n  readonly timeout?: number;\n  readonly timeoutStrategy?: IdleTaskTimeoutStrategy;\n}\n\nexport class WaitForIdleTaskTimeoutError extends Error {\n  constructor() {\n    super('waitForIdleTask timeout.');\n    this.name = 'WaitForIdleTaskTimeoutError';\n  }\n}\n\nconst waitForIdleTask = async (\n  key: IdleTaskKey,\n  options?: WaitForIdleTaskOptions\n): Promise<any> => {\n  const { timeout: globalTimeout, timeoutStrategy: globalTimeoutStrategy } =\n    its.taskGlobalOptions;\n  const mergedDefaultOptions = {\n    ...defaultWaitForIdleTaskOptions,\n    timeout: globalTimeout,\n    timeoutStrategy: globalTimeoutStrategy,\n  };\n  const waitForIdleTaskOptions = options\n    ? { ...mergedDefaultOptions, ...options }\n    : mergedDefaultOptions;\n  const { timeoutStrategy, timeout } = waitForIdleTaskOptions;\n  const isForceRun = timeoutStrategy === 'forceRun';\n  const result = getResultFromCache(key, !isForceRun);\n  if (timeout === undefined && globalTimeout === undefined) {\n    return result;\n  }\n  let isTimeout = false;\n  const timeoutPromise = new Promise(resolve => {\n    setTimeout(() => {\n      isTimeout = true;\n      resolve(undefined);\n    }, timeout ?? globalTimeout);\n  });\n  const racedResult = await Promise.race([result, timeoutPromise]);\n  if (isTimeout) {\n    if (isForceRun) {\n      return forceRunIdleTask(key);\n    }\n    throw new WaitForIdleTaskTimeoutError();\n  }\n  return racedResult;\n};\n\nexport default waitForIdleTask;\n","import type {\n  ConfigurableWaitForIdleTaskOptions,\n  IdleTaskFunction,\n} from '../internals';\nimport setIdleTask, { type SetIdleTaskOptions } from './setIdleTask';\nimport waitForIdleTask from './waitForIdleTask';\n\nexport type GetResultFromIdleTaskOptions = Pick<\n  SetIdleTaskOptions,\n  'priority' | 'taskName'\n> &\n  ConfigurableWaitForIdleTaskOptions;\n\nconst getResultFromIdleTask = (\n  task: IdleTaskFunction,\n  options?: GetResultFromIdleTaskOptions\n): ReturnType<typeof waitForIdleTask> =>\n  waitForIdleTask(\n    setIdleTask(task, {\n      priority: options?.priority,\n      taskName: options?.taskName,\n    }),\n    {\n      timeout: options?.timeout,\n      timeoutStrategy: options?.timeoutStrategy,\n    }\n  );\n\nexport default getResultFromIdleTask;\n"],"mappings":"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","names":[]}