UNPKG

kawkab-frontend

Version:

Kawkab frontend is a frontend library for the Kawkab framework

58 lines (57 loc) 2.14 kB
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]; }