UNPKG

lisn.js

Version:

Simply handle user gestures and actions. Includes widgets.

1 lines 5.02 kB
{"version":3,"file":"tasks.cjs","names":["MH","_interopRequireWildcard","require","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","scheduleHighPriorityTask","task","scheduler","postTask","priority","channel","MessageChannel","port1","onmessage","close","port2","postMessage","exports","getDebouncedHandler","debounceWindow","handler","timer","lastArgs","args","setTimer","waitForDelay","delay","newPromise","resolve"],"sources":["../../../src/ts/utils/tasks.ts"],"sourcesContent":["/**\n * @module Utils\n */\n\nimport * as MH from \"@lisn/globals/minification-helpers\";\n\n/**\n * @category Tasks\n */\nexport type SchedulerPostTaskOptions = {\n delay?: number;\n priority?: TaskPriority;\n signal?: AbortSignal;\n};\n\n/**\n * @category Tasks\n */\nexport type Scheduler = {\n postTask<T, P extends readonly unknown[] | []>(\n callback: (...params: P) => T,\n options?: SchedulerPostTaskOptions,\n ...args: P\n ): Promise<T>;\n};\n\n/**\n * @category Tasks\n */\nexport type TaskPriority = \"user-blocking\" | \"user-visible\" | \"background\";\n\n/* eslint-disable-next-line no-var */\ndeclare var scheduler: Scheduler;\n\n/**\n * Schedules a task with high priority to be executed as soon as possible.\n *\n * It uses {@link https://developer.mozilla.org/en-US/docs/Web/API/Scheduler/postTask | Scheduler:postTask}\n * if available, otherwise falls back to\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel | MessageChannel}.\n *\n * @category Tasks\n */\nexport const scheduleHighPriorityTask = (task: () => void) => {\n if (typeof scheduler !== \"undefined\") {\n scheduler.postTask(task, {\n priority: \"user-blocking\",\n });\n } else {\n // Fallback to MessageChannel\n const channel = new MessageChannel();\n channel.port1.onmessage = () => {\n channel.port1.close();\n task();\n };\n channel.port2.postMessage(\"\");\n }\n};\n\n/**\n * Returns a wrapper around the given handler that is debounced by the given\n * debounce window.\n *\n * @category Tasks\n */\nexport const getDebouncedHandler = <Args extends unknown[]>(\n debounceWindow: number,\n handler: (...args: Args) => void,\n) => {\n if (!debounceWindow) {\n return handler;\n }\n\n let timer: ReturnType<typeof setTimeout> | null = null;\n let lastArgs: Args;\n\n return (...args: Args) => {\n lastArgs = args;\n\n if (timer === null) {\n timer = MH.setTimer(async () => {\n await handler(...lastArgs);\n timer = null;\n }, debounceWindow);\n }\n };\n};\n\n/**\n * Returns a promise that resolves at least the given number of delay (in\n * milliseconds) later. Uses `setTimeout`.\n *\n * @category Tasks\n */\nexport const waitForDelay = (delay?: number) =>\n MH.newPromise<void>((resolve) => {\n MH.setTimer(resolve, delay);\n });\n"],"mappings":"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","ignoreList":[]}