UNPKG

@clerk/shared

Version:

Internal package utils used by the Clerk SDKs

123 lines (120 loc) 3.64 kB
import { t as noop } from "./noop-LBsrDrTs.mjs"; //#region src/workerTimers/workerTimers.built.ts /** * * This is the minified string output of transforming workerTimers.worker.ts * Once the tsdown docs are complete, we will write a similar plugin as the one below: * * (this was the previous esbuild plugin we were using) * export const WebWorkerMinifyPlugin: Plugin = { * name: 'WebWorkerMinifyPlugin', * setup(build) { * build.onLoad({ filter: /\.worker\.ts/ }, async args => { * console.log('aaaaaaaaaaaaa'); * const f = await readFile(args.path); * const js = await esbuild.transform(f, { loader: 'ts', minify: true }); * return { loader: 'text', contents: js.code }; * }); * }, * }; * */ var workerTimers_built_default = "const respond=r=>{self.postMessage(r)},workerToTabIds={};self.addEventListener(\"message\",r=>{const e=r.data;switch(e.type){case\"setTimeout\":workerToTabIds[e.id]=setTimeout(()=>{respond({id:e.id}),delete workerToTabIds[e.id]},e.ms);break;case\"clearTimeout\":workerToTabIds[e.id]&&(clearTimeout(workerToTabIds[e.id]),delete workerToTabIds[e.id]);break;case\"setInterval\":workerToTabIds[e.id]=setInterval(()=>{respond({id:e.id})},e.ms);break;case\"clearInterval\":workerToTabIds[e.id]&&(clearInterval(workerToTabIds[e.id]),delete workerToTabIds[e.id]);break}});\n"; //#endregion //#region src/workerTimers/createWorkerTimers.ts const createWebWorker = (source, opts = {}) => { if (typeof Worker === "undefined") return null; try { const blob = new Blob([source], { type: "application/javascript; charset=utf-8" }); const workerScript = globalThis.URL.createObjectURL(blob); return new Worker(workerScript, opts); } catch { console.warn("Clerk: Cannot create worker from blob. Consider adding worker-src blob:; to your CSP"); return null; } }; const fallbackTimers = () => { return { setTimeout: globalThis.setTimeout.bind(globalThis), setInterval: globalThis.setInterval.bind(globalThis), clearTimeout: globalThis.clearTimeout.bind(globalThis), clearInterval: globalThis.clearInterval.bind(globalThis), cleanup: noop }; }; const createWorkerTimers = () => { let id = 0; const generateId = () => id++; const callbacks = /* @__PURE__ */ new Map(); const post = (w, p) => w?.postMessage(p); const handleMessage = (e) => { callbacks.get(e.data.id)?.(); }; let worker = createWebWorker(workerTimers_built_default, { name: "clerk-timers" }); worker?.addEventListener("message", handleMessage); if (!worker) return fallbackTimers(); const init = () => { if (!worker) { worker = createWebWorker(workerTimers_built_default, { name: "clerk-timers" }); worker?.addEventListener("message", handleMessage); } }; const cleanup = () => { if (worker) { worker.terminate(); worker = null; callbacks.clear(); } }; const setTimeout = (cb, ms) => { init(); const id = generateId(); callbacks.set(id, () => { cb(); callbacks.delete(id); }); post(worker, { type: "setTimeout", id, ms }); return id; }; const setInterval = (cb, ms) => { init(); const id = generateId(); callbacks.set(id, cb); post(worker, { type: "setInterval", id, ms }); return id; }; const clearTimeout = (id) => { init(); callbacks.delete(id); post(worker, { type: "clearTimeout", id }); }; const clearInterval = (id) => { init(); callbacks.delete(id); post(worker, { type: "clearInterval", id }); }; return { setTimeout, setInterval, clearTimeout, clearInterval, cleanup }; }; //#endregion export { createWorkerTimers as t }; //# sourceMappingURL=workerTimers--tNpEYVw.mjs.map