@router-cli/react-router-dev
Version:
File based routing cli for react-router-dom.
53 lines (42 loc) • 1.38 kB
text/typescript
import * as chokidar from 'chokidar'
import { RouterCliConfig } from '../schema'
import { Generator } from '../generator'
import { verboseLog } from '../utils/logging';
export async function watch(config: RouterCliConfig, verbose: boolean) {
let watcher = new chokidar.FSWatcher()
const generator = new Generator(config, verbose);
const generatorWatcher = async () => {
watcher.close()
console.log(`router-cli: Watching routes (${config.source})...`)
const log = (type: string, path: string) => {
if (verbose) verboseLog(`"${path}" ${type}. regenerating...`);
}
watcher = chokidar.watch(config.source)
watcher.on('ready', async () => {
const handle = async () => {
try {
await generator.generate();
} catch (err) {
console.error(err)
}
}
const checkPath = (path: string) => (path.endsWith('.page.tsx') || path.endsWith('_layout.tsx'));
handle();
watcher.on('add', (path) => {
if (checkPath(path)) {
log("created", path);
handle();
}
});
watcher.on('unlink', (path) => {
log("removed", path);
handle();
});
watcher.on('unlinkDir', (path) => {
log("removed", path);
handle();
});
})
}
generatorWatcher();
}