jevstrudel.git / packages / vite-plugin-bundle-audioworklet / vite-plugin-bundle-audioworklet.js
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;