@prefresh/snowpack
Version:
[](https://www.npmjs.com/package/@prefresh/snowpack)
58 lines (47 loc) • 1.73 kB
JavaScript
const { isComponent, flush } = require('@prefresh/utils');
module.exports = function preactRefreshPlugin(config, pluginOptions) {
return {
knownEntrypoints: ['@prefresh/snowpack/runtime'],
async transform({ contents, urlPath, isDev }) {
if (!isDev || !urlPath.endsWith('.js') || config.devOptions.hmr === false)
return;
return {
result: `
${'import'} '@prefresh/snowpack/runtime';
const shouldPrefreshBind = ${isComponent.toString()}
const flushUpdates = ${flush.toString()}
const __module_exports__ = []
const prevRefreshReg = self.$RefreshReg$ || (() => {});
const prevRefreshSig = self.$RefreshSig$ || (() => {});
self.$RefreshSig$ = () => {
let status = 'begin';
let savedType;
return (type, key, forceReset, getCustomHooks) => {
if (!savedType) savedType = type;
status = self.__PREFRESH__.sign(type || savedType, key, forceReset, getCustomHooks, status);
return type;
};
};
self.$RefreshReg$ = (type, id) => {
__module_exports__.push(type.name);
self.__PREFRESH__.register(type, ${JSON.stringify(
urlPath
)} + " " + id);
};
${contents}
self.$RefreshSig$ = prevRefreshSig;
self.$RefreshReg$ = prevRefreshReg;
if (import.meta.hot && __module_exports__.some(shouldPrefreshBind)) {
import.meta.hot.accept(({ module }) => {
try {
flushUpdates();
} catch(e) {
import.meta.hot.invalidate();
}
});
}
`
};
}
};
}