htmelt
Version:
Bundle your HTML assets with Esbuild and LightningCSS. Custom plugins, HMR platform, and more.
46 lines (45 loc) • 1.35 kB
JavaScript
// src/plugins/alias.mts
var aliasPlugin = (config) => {
config.esbuild.plugins.push({
name: "alias",
setup(build) {
build.onResolve({ filter: /^@?[a-z0-9]/i }, async (args) => {
let id = args.path;
let suffix = "";
const suffixStart = id.indexOf("?");
if (suffixStart !== -1) {
suffix = id.slice(suffixStart);
id = id.slice(0, suffixStart);
}
const parts = id.split("/");
for (let i = 0; i < parts.length; i++) {
const aliasedId = parts.slice(0, parts.length - i).join("/");
const alias = config.alias[aliasedId];
if (alias) {
if (typeof alias === "string") {
const resolvedId = [alias].concat(parts.slice(parts.length - i)).join("/");
return build.resolve(resolvedId + suffix, {
kind: args.kind,
importer: args.importer,
resolveDir: args.resolveDir,
pluginData: args.pluginData
});
}
if (i === 0) {
return {
path: aliasedId,
namespace: "virtual",
pluginData: alias,
suffix
};
}
return null;
}
}
});
}
});
};
export {
aliasPlugin
};