@alloc/html-bundle
Version:
Bundle your HTML assets with Esbuild and LightningCSS. Custom plugins, HMR platform, and more.
58 lines • 2.06 kB
JavaScript
import { getAttribute } from '@web/parse5-utils';
import * as esbuild from 'esbuild';
import importGlobPlugin from 'esbuild-plugin-import-glob';
import metaUrlPlugin from 'esbuild-plugin-meta-url';
import { yellow } from 'kleur/colors';
import * as path from 'path';
import { baseRelative, findExternalScripts } from './utils.mjs';
export async function compileClientModule(file, config, format) {
const filePath = new URL(file, import.meta.url).pathname;
const result = await esbuild.build({
...config.esbuild,
write: false,
format: format ?? 'iife',
entryPoints: [filePath],
});
return result.outputFiles[0].text;
}
export function findRelativeScripts(document, file, config) {
const results = [];
for (const scriptNode of findExternalScripts(document)) {
const srcAttr = scriptNode.attrs.find(a => a.name === 'src');
if (srcAttr?.value.startsWith('./')) {
const srcPath = path.join(path.dirname(file), srcAttr.value);
console.log(yellow('⌁'), baseRelative(srcPath));
const outPath = config.getBuildPath(srcPath);
srcAttr.value = baseRelative(outPath);
results.push({
node: scriptNode,
srcAttr,
srcPath,
outPath,
isModule: getAttribute(scriptNode, 'type') === 'module',
});
}
}
return results;
}
export function buildRelativeScripts(scripts, config, flags = {}) {
return esbuild.build({
format: 'esm',
charset: 'utf8',
splitting: true,
sourcemap: flags.watch,
minify: !flags.watch,
...config.esbuild,
write: flags.write != false,
bundle: true,
entryPoints: scripts.map(script => script.srcPath),
outdir: config.build,
outbase: config.src,
plugins: [
metaUrlPlugin(),
importGlobPlugin(),
...(config.esbuild.plugins || []),
],
});
}
//# sourceMappingURL=esbuild.mjs.map