esbuild-plugin-modify-entrypoints
Version:
esbuild plugin to modify entrypoint contents
41 lines (40 loc) • 1.48 kB
JavaScript
import { readFile } from 'node:fs/promises';
export const PLUGIN_NAME = 'modify-entrypoints';
export const modifyEntrypointsPlugin = (...modifyFunctions) => ({
name: PLUGIN_NAME,
async setup(build) {
const functions = modifyFunctions.flat();
build.onResolve({ filter: /.*/ }, ({ path, resolveDir, kind }) => {
if (kind === 'entry-point') {
return {
path,
namespace: PLUGIN_NAME,
pluginData: {
resolveDir,
},
};
}
});
build.onLoad({ filter: /.*/, namespace: PLUGIN_NAME }, async ({ path, pluginData }) => {
const contents = await readFile(path, 'utf8');
return functions.reduce((results, fn) => {
const innerResults = fn({
contents: results.contents,
loader: results.loader,
path,
resolveDir: pluginData?.resolveDir,
options: build.initialOptions,
});
const loader = innerResults.loader ?? results.loader;
return {
...results,
...innerResults,
...(loader ? { loader } : {}),
resolveDir: pluginData?.resolveDir,
};
}, {
contents,
});
});
},
});