83 lines
2.1 KiB
Plaintext
83 lines
2.1 KiB
Plaintext
import { EventEmitter } from "node:events";
|
|
import path from "node:path";
|
|
function createViteLoader(viteServer) {
|
|
const events = new EventEmitter();
|
|
let isTsconfigUpdated = false;
|
|
function isTsconfigUpdate(filePath) {
|
|
const result = path.basename(filePath) === "tsconfig.json";
|
|
if (result)
|
|
isTsconfigUpdated = true;
|
|
return result;
|
|
}
|
|
viteServer.watcher.on("add", (...args) => {
|
|
if (!isTsconfigUpdate(args[0])) {
|
|
events.emit("file-add", args);
|
|
}
|
|
});
|
|
viteServer.watcher.on("unlink", (...args) => {
|
|
if (!isTsconfigUpdate(args[0])) {
|
|
events.emit("file-unlink", args);
|
|
}
|
|
});
|
|
viteServer.watcher.on("change", (...args) => {
|
|
if (!isTsconfigUpdate(args[0])) {
|
|
events.emit("file-change", args);
|
|
}
|
|
});
|
|
const _wsSend = viteServer.ws.send;
|
|
viteServer.ws.send = function(...args) {
|
|
if (isTsconfigUpdated) {
|
|
isTsconfigUpdated = false;
|
|
return;
|
|
}
|
|
const msg = args[0];
|
|
if (msg?.type === "error") {
|
|
events.emit("hmr-error", msg);
|
|
}
|
|
_wsSend.apply(this, args);
|
|
};
|
|
return {
|
|
import(src) {
|
|
return viteServer.ssrLoadModule(src);
|
|
},
|
|
async resolveId(spec, parent) {
|
|
const ret = await viteServer.pluginContainer.resolveId(spec, parent);
|
|
return ret?.id;
|
|
},
|
|
getModuleById(id) {
|
|
return viteServer.moduleGraph.getModuleById(id);
|
|
},
|
|
getModulesByFile(file) {
|
|
return viteServer.moduleGraph.getModulesByFile(file);
|
|
},
|
|
getModuleInfo(id) {
|
|
return viteServer.pluginContainer.getModuleInfo(id);
|
|
},
|
|
eachModule(cb) {
|
|
return viteServer.moduleGraph.idToModuleMap.forEach(cb);
|
|
},
|
|
invalidateModule(mod) {
|
|
viteServer.moduleGraph.invalidateModule(mod);
|
|
},
|
|
fixStacktrace(err) {
|
|
return viteServer.ssrFixStacktrace(err);
|
|
},
|
|
clientReload() {
|
|
viteServer.ws.send({
|
|
type: "full-reload",
|
|
path: "*"
|
|
});
|
|
},
|
|
webSocketSend(msg) {
|
|
return viteServer.ws.send(msg);
|
|
},
|
|
isHttps() {
|
|
return !!viteServer.config.server.https;
|
|
},
|
|
events
|
|
};
|
|
}
|
|
export {
|
|
createViteLoader
|
|
};
|