import type { SpeedyPlugin } from '@speedy-js/speedy-types'; const pluginName = 'speedy:babel-output-plugin'; export const es5OutputPlugin = (): SpeedyPlugin => { return { name: pluginName, apply(compiler) { compiler.hooks.processAsset.tapPromise({ name: pluginName }, async (chunk) => { if (chunk.fileName.endsWith('.js') && chunk.type === 'chunk') { const result = await require('@babel/core').transformAsync(chunk.contents.toString(), { filename: chunk.fileName, presets: [ [ require('@babel/preset-env'), { modules: false, }, ], ], sourceType: 'module', sourceMaps: Boolean(compiler.config.sourceMap), compact: false, babelrc: false, configFile: false, }); return { ...chunk, contents: result!.code!, map: result.map, }; } return chunk; }); }, }; };