forked from wesbos/hot-tips
-
Notifications
You must be signed in to change notification settings - Fork 0
/
vite.config.ts
56 lines (48 loc) · 1.57 KB
/
vite.config.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import { defineConfig } from 'vite';
import { directoryPlugin } from 'vite-plugin-list-directory-contents';
/* eslint-disable */
// import { directoryPlugin } from '../../../Sites/vite-plugin-list-directory-contents/plugin';
import { exec } from 'node:child_process';
import fg from 'fast-glob';
import { stat } from 'node:fs/promises';
async function run(cmd: string, waitForText?: string) {
return new Promise<void>((resolve) => {
const process = exec(cmd);
process.stdout
?.on('data', (data: string) => {
if (waitForText && data.includes(waitForText)) {
resolve();
}
})
.on('close', resolve);
});
}
type FileWithStats = {
file: string;
stats: Awaited<ReturnType<typeof stat>>;
}
async function getLastModifiedFile(fileGlob: string) {
const files: string[] = await fg([fileGlob, '!**/node_modules/**']);
const stats = await Promise.all(files.map((file) => stat(file)));
const filesWithStats: FileWithStats[] = files.map((file, index) => ({ file, stats: stats[index] })).sort((a, b) => b.stats.mtimeMs - a.stats.mtimeMs);
return filesWithStats.at(0);
}
process.env.BROWSER = 'Firefox Developer Edition';
export default defineConfig(async () => {
const [lastFile] = await Promise.all([
getLastModifiedFile('**/*.html'),
run('caddy stop').then(() => run('caddy start', 'Caddy is running')),
]);
return {
server: {
port: 7777,
host: 'localhost',
open: `https://tips.localhost/${lastFile?.file}`,
},
plugins: [
directoryPlugin({
baseDir: __dirname,
}),
],
};
});