refurbish
Version:
rEFui HMR plugin for Rollup/Vite/Webpack/Rspack
35 lines (28 loc) • 907 B
JavaScript
const BEGIN = '/* ---- BEGIN REFUI HMR INJECT ---- */';
const END = '/* ---- END REFUI HMR INJECT ---- */';
export default function refuiHmrLoader(source) {
if (source.includes(BEGIN)) return source;
const { importSource = 'refui/hmr', importSourcePath } =
this.getOptions?.() || {};
let code = source.replace(
/\s*\/\*\s*\s+webpack\s*\*\/\s*import\.meta\.hot/g,
'import.meta.webpackHot'
);
if (this.resourcePath === importSourcePath) {
return code;
}
const snippet = `${BEGIN}
if (import.meta.webpackHot) {
import("${importSource}").then(m => m.setup({
data: import.meta.webpackHot.data,
current: import(${JSON.stringify(this.resourcePath)}),
accept() { import.meta.webpackHot.accept() },
dispose(cb) { import.meta.webpackHot.dispose(cb) },
invalidate(reason) { import.meta.webpackHot.decline(reason) }
}));
}
${END}
`;
code += `\n\n${snippet}`;
return code;
}