// vite-plugin-inline-worker-dev.ts import { Plugin } from 'vite' import fs from 'fs/promises' import { build, transform } from 'esbuild' export default function InlineWorkerDevPlugin(): Plugin { return { name: 'vite:inline-worker-dev', async load(id) { if (id.includes('?inlineWorker')) { const [cleanPath] = id.split('?') console.log('cleanPath', cleanPath) const code = await fs.readFile(cleanPath, 'utf-8') const result = await build({ entryPoints: [cleanPath], bundle: true, write: false, platform: 'browser', format: 'iife', target: 'esnext', }) const workerCode = result.outputFiles[0].text const workerBlobCode = ` const code = ${JSON.stringify(workerCode)}; export default function InlineWorker() { const blob = new Blob([code], { type: 'application/javascript' }); return new Worker(URL.createObjectURL(blob), { type: 'module' }); } ` return workerBlobCode } return null } } }