1import { createLogger, build } from 'vite'; 2 3const end = '?audioworklet'; 4 5function bundleAudioWorkletPlugin() /* : PluginOption */ { 6 let viteConfig /* : UserConfig */; 7 8 return { 9 name: 'vite-plugin-bundle-audioworklet', 10 /* apply: 'build', */ 11 enforce: 'post', 12 13 config(config) { 14 viteConfig = config; 15 }, 16 17 async transform(_code, id) { 18 if (!id.endsWith(end)) { 19 return; 20 } 21 const entry = id.replace(end, ''); 22 const quietLogger = createLogger(); 23 quietLogger.info = () => undefined; 24 25 const output = await build({ 26 configFile: false, 27 clearScreen: false, 28 customLogger: quietLogger, 29 build: { 30 lib: { 31 entry, 32 name: '_', 33 formats: ['iife'], 34 }, 35 write: false, 36 }, 37 }); 38 if (!(output instanceof Array)) { 39 throw new Error('Expected output to be Array'); 40 } 41 const iife = output[0].output[0].code; 42 const encoded = Buffer.from(iife, 'utf8').toString('base64'); 43 return `export default "data:text/javascript;base64,${encoded}";`; 44 }, 45 }; 46} 47 48export default bundleAudioWorkletPlugin;