{"version":3,"sources":["../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"],"names":["rIC","cb","start","cIC","executeTask","task","resolve","reject","revalidateWhenExecuted","idleTaskState","e","resolveTaskResultWhenCancel","tasks","getResultFromCache","key","isDeleteCache","result","defaultWaitForIdleTaskOptions","taskGlobalOptions","removeIdleTaskFromQueue","taskId","findIdleTasksFromQueue","cancelAllIdleTasks","cancelAllIdleTasks_default","cancelIdleTask","targetTaskId","revalidateIntervalId","cancelIdleTask_default","configureIdleTask","options","configureIdleTask_default","getIdleTaskStatus","getIdleTaskStatus_default","forceRunIdleTask","cacheResult","latestEnqueuedTask","latestEnqueuedTaskIndex","index","forceRunIdleTask_default","createTimeRemainingDidTimeout","logIdleTask","message","level","logCallRequestIdleCallback","reason","timeRemaining","getTimeRemainingAndLog","deadline","didTimeout","normalizeTime","time","runIdleTasks","isTimeRemaining","log","shouldOutputLog","executionTime","scheduleIdleTask","id","defaultSetIdleTaskOptions","setIdleTask","overwriteTask","idleTaskKey","res","rej","idleTaskId","revalidateInterval","idleTask","setIdleTask_default","WaitForIdleTaskTimeoutError","waitForIdleTask","globalTimeout","globalTimeoutStrategy","mergedDefaultOptions","waitForIdleTaskOptions","timeoutStrategy","timeout","isForceRun","isTimeout","timeoutPromise","racedResult","waitForIdleTask_default","getResultFromIdleTask","getResultFromIdleTask_default"],"mappings":"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","file":"index.mjs","sourcesContent":["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"]}