2025-02-16 15:39:25 +01:00
|
|
|
import { normalize } from 'node:path'
|
2024-07-08 21:39:00 +02:00
|
|
|
|
|
|
|
|
import type { Plugin } from 'vite'
|
|
|
|
|
|
2025-04-28 20:54:40 +02:00
|
|
|
import { routeGenerator } from './fs-routing/generator'
|
2024-12-01 10:07:35 +01:00
|
|
|
|
2024-07-08 21:39:00 +02:00
|
|
|
const ROUTES_DIRECTORY_PATH = './src/routes'
|
|
|
|
|
|
|
|
|
|
let lock = false
|
|
|
|
|
|
2025-04-28 20:54:40 +02:00
|
|
|
export function TuonoReactPlugin(): Plugin {
|
2024-07-08 21:39:00 +02:00
|
|
|
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 {
|
2025-04-28 20:54:40 +02:00
|
|
|
name: 'vite-plugin-tuono-react',
|
2024-07-08 21:39:00 +02:00
|
|
|
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)
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
}
|