kawkab-frontend
Version:
Kawkab frontend is a frontend library for the Kawkab framework
58 lines (57 loc) • 2.14 kB
JavaScript
import fs from 'fs';
import path from 'path';
import { customMessages, printWelcomeMessage, printStatusMessage } from './customMessages';
export function kawkabVitePlugins() {
const depsWatcher = {
name: 'watch-vite-deps-metadata',
apply: 'serve',
configureServer(server) {
const targetFile = path.resolve(process.cwd(), 'node_modules/.vite/deps/_metadata.json');
let prevMtimeMs = null;
const startWatching = () => {
fs.watchFile(targetFile, { interval: 500 }, (curr) => {
if (prevMtimeMs === null) {
prevMtimeMs = curr.mtimeMs;
return;
}
if (curr.mtimeMs !== prevMtimeMs) {
prevMtimeMs = curr.mtimeMs;
server.restart();
}
});
};
const waitForFile = setInterval(() => {
fs.stat(targetFile, (err, stats) => {
if (!err && stats.isFile()) {
clearInterval(waitForFile);
prevMtimeMs = stats.mtimeMs;
startWatching();
}
});
}, 1000);
}
};
const messagesPlugin = {
name: 'custom-messages',
configResolved() {
printStatusMessage('INFO', customMessages.vite.configLoaded());
},
configureServer(server) {
server.httpServer?.on('listening', () => {
setTimeout(() => {
const address = server.httpServer?.address();
if (address && typeof address === 'object') {
printWelcomeMessage('Kawkab', address.port);
}
}, 200);
});
},
buildStart() {
printStatusMessage('BUILD', customMessages.vite.buildStart());
},
buildEnd() {
printStatusMessage('SUCCESS', customMessages.vite.buildEnd());
}
};
return [depsWatcher, messagesPlugin];
}