mirror of
https://github.com/tuono-labs/tuono
synced 2026-07-25 21:02:45 -07:00
48 lines
997 B
TypeScript
48 lines
997 B
TypeScript
import { normalize } from 'node:path'
|
|
|
|
import type { Plugin } from 'vite'
|
|
|
|
import { routeGenerator } from './fs-routing/generator'
|
|
|
|
const ROUTES_DIRECTORY_PATH = './src/routes'
|
|
|
|
let lock = false
|
|
|
|
export function TuonoReactPlugin(): Plugin {
|
|
const generate = async (): Promise<void> => {
|
|
if (lock) return
|
|
lock = true
|
|
|
|
try {
|
|
await routeGenerator()
|
|
} catch (err) {
|
|
console.error(err)
|
|
} finally {
|
|
lock = false
|
|
}
|
|
}
|
|
|
|
const handleFile = async (file: string): Promise<void> => {
|
|
const filePath = normalize(file)
|
|
|
|
if (filePath.startsWith(ROUTES_DIRECTORY_PATH)) {
|
|
await generate()
|
|
}
|
|
}
|
|
|
|
return {
|
|
name: 'vite-plugin-tuono-react',
|
|
configResolved: async (): Promise<void> => {
|
|
await generate()
|
|
},
|
|
watchChange: async (
|
|
file: string,
|
|
context: { event: string },
|
|
): Promise<void> => {
|
|
if (['create', 'update', 'delete'].includes(context.event)) {
|
|
await handleFile(file)
|
|
}
|
|
},
|
|
}
|
|
}
|