class ModuleHotContext {
acceptCallbacks = [];
constructor(moduleId, devRuntime) {
this.moduleId = moduleId;
this.devRuntime = devRuntime;
}
accept(...args) {
if (args.length === 1) {
const [cb] = (args);
const acceptingPath = this.moduleId;
this.acceptCallbacks.push({
deps: [acceptingPath],
fn: cb,
});
} else {
throw new Error('Invalid arguments for `import.meta.hot.accept`');
}
}
}
class DefaultDevRuntime extends DevRuntime {
moduleHotContexts = new Map();
moduleHotContextsToBeUpdated = new Map();
createModuleHotContext(moduleId) {
const hotContext = new ModuleHotContext(moduleId, this);
if (this.moduleHotContexts.has(moduleId)) {
this.moduleHotContextsToBeUpdated.set(moduleId, hotContext);
} else {
this.moduleHotContexts.set(moduleId, hotContext);
}
return hotContext;
}
applyUpdates(boundaries) {
for (let moduleId of boundaries) {
const hotContext = this.moduleHotContexts.get(moduleId);
if (hotContext) {
const acceptCallbacks = hotContext.acceptCallbacks;
acceptCallbacks.filter((cb) => {
cb.fn(this.modules[moduleId].exports);
});
}
}
this.moduleHotContextsToBeUpdated.forEach((hotContext, moduleId) => {
this.moduleHotContexts.set(moduleId, hotContext);
});
this.moduleHotContextsToBeUpdated.clear();
}
}
( (globalThis)).__rolldown_runtime__ ??=
new DefaultDevRuntime();
function loadScript(url) {
var script = document.createElement('script');
script.src = url;
script.type = 'module';
script.onerror = function() {
console.error('Failed to load script: ' + url);
};
document.body.appendChild(script);
}
console.debug('HMR runtime loaded', '$ADDR');
const addr = new URL('ws://$ADDR');
addr.searchParams.set('from', 'hmr-runtime');
const socket = new WebSocket(addr);
socket.onmessage = function(event) {
const data = JSON.parse(event.data);
console.debug('Received message:', data);
if (data.type === 'update') {
if (typeof process === 'object') {
import(data.path);
console.debug(`[hmr]: Importing HMR patch: ${data.path}`);
} else {
console.debug(`[hmr]: Loading HMR patch: ${data.path}`);
loadScript(data.url);
}
}
};