UNPKG

@alloc/html-bundle

Version:

Bundle your HTML assets with Esbuild and LightningCSS. Custom plugins, HMR platform, and more.

58 lines 2.06 kB
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