UNPKG

@prefresh/snowpack

Version:

[![npm version](https://badgen.net/npm/v/@prefresh/snowpack)](https://www.npmjs.com/package/@prefresh/snowpack)

58 lines (47 loc) 1.73 kB
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(); } }); } ` }; } }; }