@clerk/shared
Version:
Internal package utils used by the Clerk SDKs
1 lines • 6.02 kB
Source Map (JSON)
{"version":3,"file":"workerTimers--tNpEYVw.mjs","names":["pollerWorkerSource"],"sources":["../../src/workerTimers/workerTimers.built.ts","../../src/workerTimers/createWorkerTimers.ts"],"sourcesContent":["/**\n *\n * This is the minified string output of transforming workerTimers.worker.ts\n * Once the tsdown docs are complete, we will write a similar plugin as the one below:\n *\n * (this was the previous esbuild plugin we were using)\n * export const WebWorkerMinifyPlugin: Plugin = {\n * name: 'WebWorkerMinifyPlugin',\n * setup(build) {\n * build.onLoad({ filter: /\\.worker\\.ts/ }, async args => {\n * console.log('aaaaaaaaaaaaa');\n * const f = await readFile(args.path);\n * const js = await esbuild.transform(f, { loader: 'ts', minify: true });\n * return { loader: 'text', contents: js.code };\n * });\n * },\n * };\n *\n */\nexport 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';\n","import { noop } from '../utils/noop';\nimport pollerWorkerSource from './workerTimers.built';\nimport type {\n WorkerClearTimeout,\n WorkerSetTimeout,\n WorkerTimeoutCallback,\n WorkerTimerEvent,\n WorkerTimerId,\n WorkerTimerResponseEvent,\n} from './workerTimers.types';\n\nconst createWebWorker = (source: string, opts: ConstructorParameters<typeof Worker>[1] = {}): Worker | null => {\n if (typeof Worker === 'undefined') {\n return null;\n }\n\n try {\n const blob = new Blob([source], { type: 'application/javascript; charset=utf-8' });\n const workerScript = globalThis.URL.createObjectURL(blob);\n return new Worker(workerScript, opts);\n } catch {\n console.warn('Clerk: Cannot create worker from blob. Consider adding worker-src blob:; to your CSP');\n return null;\n }\n};\n\nconst fallbackTimers = () => {\n const setTimeout = globalThis.setTimeout.bind(globalThis) as WorkerSetTimeout;\n const setInterval = globalThis.setInterval.bind(globalThis) as WorkerSetTimeout;\n const clearTimeout = globalThis.clearTimeout.bind(globalThis) as WorkerClearTimeout;\n const clearInterval = globalThis.clearInterval.bind(globalThis) as WorkerClearTimeout;\n return { setTimeout, setInterval, clearTimeout, clearInterval, cleanup: noop };\n};\n\nexport const createWorkerTimers = () => {\n let id = 0;\n const generateId = () => id++;\n const callbacks = new Map<WorkerTimerId, WorkerTimeoutCallback>();\n const post = (w: Worker | null, p: WorkerTimerEvent) => w?.postMessage(p);\n const handleMessage = (e: MessageEvent<WorkerTimerResponseEvent>) => {\n callbacks.get(e.data.id)?.();\n };\n\n let worker = createWebWorker(pollerWorkerSource, { name: 'clerk-timers' });\n worker?.addEventListener('message', handleMessage);\n\n if (!worker) {\n return fallbackTimers();\n }\n\n const init = () => {\n if (!worker) {\n worker = createWebWorker(pollerWorkerSource, { name: 'clerk-timers' });\n worker?.addEventListener('message', handleMessage);\n }\n };\n\n const cleanup = () => {\n if (worker) {\n worker.terminate();\n worker = null;\n callbacks.clear();\n }\n };\n\n const setTimeout: WorkerSetTimeout = (cb, ms) => {\n init();\n const id = generateId();\n callbacks.set(id, () => {\n cb();\n callbacks.delete(id);\n });\n post(worker, { type: 'setTimeout', id, ms });\n return id;\n };\n\n const setInterval: WorkerSetTimeout = (cb, ms) => {\n init();\n const id = generateId();\n callbacks.set(id, cb);\n post(worker, { type: 'setInterval', id, ms });\n return id;\n };\n\n const clearTimeout: WorkerClearTimeout = id => {\n init();\n callbacks.delete(id);\n post(worker, { type: 'clearTimeout', id });\n };\n\n const clearInterval: WorkerClearTimeout = id => {\n init();\n callbacks.delete(id);\n post(worker, { type: 'clearInterval', id });\n };\n\n return { setTimeout, setInterval, clearTimeout, clearInterval, cleanup };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAmBA,iCAAe;;;;ACRf,MAAM,mBAAmB,QAAgB,OAAgD,CAAC,MAAqB;CAC7G,IAAI,OAAO,WAAW,aACpB,OAAO;CAGT,IAAI;EACF,MAAM,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,MAAM,wCAAwC,CAAC;EACjF,MAAM,eAAe,WAAW,IAAI,gBAAgB,IAAI;EACxD,OAAO,IAAI,OAAO,cAAc,IAAI;CACtC,QAAQ;EACN,QAAQ,KAAK,sFAAsF;EACnG,OAAO;CACT;AACF;AAEA,MAAM,uBAAuB;CAK3B,OAAO;EAAE,YAJU,WAAW,WAAW,KAAK,UAI5B;EAAG,aAHD,WAAW,YAAY,KAAK,UAGjB;EAAG,cAFb,WAAW,aAAa,KAAK,UAEL;EAAG,eAD1B,WAAW,cAAc,KAAK,UACQ;EAAG,SAAS;CAAK;AAC/E;AAEA,MAAa,2BAA2B;CACtC,IAAI,KAAK;CACT,MAAM,mBAAmB;CACzB,MAAM,4BAAY,IAAI,IAA0C;CAChE,MAAM,QAAQ,GAAkB,MAAwB,GAAG,YAAY,CAAC;CACxE,MAAM,iBAAiB,MAA8C;EACnE,UAAU,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG;CAC7B;CAEA,IAAI,SAAS,gBAAgBA,4BAAoB,EAAE,MAAM,eAAe,CAAC;CACzE,QAAQ,iBAAiB,WAAW,aAAa;CAEjD,IAAI,CAAC,QACH,OAAO,eAAe;CAGxB,MAAM,aAAa;EACjB,IAAI,CAAC,QAAQ;GACX,SAAS,gBAAgBA,4BAAoB,EAAE,MAAM,eAAe,CAAC;GACrE,QAAQ,iBAAiB,WAAW,aAAa;EACnD;CACF;CAEA,MAAM,gBAAgB;EACpB,IAAI,QAAQ;GACV,OAAO,UAAU;GACjB,SAAS;GACT,UAAU,MAAM;EAClB;CACF;CAEA,MAAM,cAAgC,IAAI,OAAO;EAC/C,KAAK;EACL,MAAM,KAAK,WAAW;EACtB,UAAU,IAAI,UAAU;GACtB,GAAG;GACH,UAAU,OAAO,EAAE;EACrB,CAAC;EACD,KAAK,QAAQ;GAAE,MAAM;GAAc;GAAI;EAAG,CAAC;EAC3C,OAAO;CACT;CAEA,MAAM,eAAiC,IAAI,OAAO;EAChD,KAAK;EACL,MAAM,KAAK,WAAW;EACtB,UAAU,IAAI,IAAI,EAAE;EACpB,KAAK,QAAQ;GAAE,MAAM;GAAe;GAAI;EAAG,CAAC;EAC5C,OAAO;CACT;CAEA,MAAM,gBAAmC,OAAM;EAC7C,KAAK;EACL,UAAU,OAAO,EAAE;EACnB,KAAK,QAAQ;GAAE,MAAM;GAAgB;EAAG,CAAC;CAC3C;CAEA,MAAM,iBAAoC,OAAM;EAC9C,KAAK;EACL,UAAU,OAAO,EAAE;EACnB,KAAK,QAAQ;GAAE,MAAM;GAAiB;EAAG,CAAC;CAC5C;CAEA,OAAO;EAAE;EAAY;EAAa;EAAc;EAAe;CAAQ;AACzE"}