122 lines
3.2 KiB
TypeScript
122 lines
3.2 KiB
TypeScript
import houdini from 'houdini/vite'
|
|
import { sveltekit } from '@sveltejs/kit/vite'
|
|
import { defineConfig } from 'vite'
|
|
import * as fs from 'fs';
|
|
import { resolve } from 'path';
|
|
|
|
// Utility function to get all .svelte or .ts files from a directory recursively
|
|
function getRecursiveFiles(dir, extension) {
|
|
const dirents = fs.readdirSync(dir, { withFileTypes: true });
|
|
const files = Array.from(dirents).flatMap((dirent) => {
|
|
const res = resolve(dir, dirent.name);
|
|
if (dirent.isDirectory()) {
|
|
return getRecursiveFiles(res, extension);
|
|
} else if (res.endsWith(extension)) {
|
|
return [res];
|
|
} else {
|
|
return [];
|
|
}
|
|
});
|
|
return files;
|
|
}
|
|
|
|
export default defineConfig({
|
|
plugins: [
|
|
houdini(),
|
|
sveltekit(),
|
|
{
|
|
name: 'components-resolver',
|
|
resolveId(source) {
|
|
if (source === 'virtual:components-list') return source;
|
|
return null;
|
|
},
|
|
load(id) {
|
|
if (id === 'virtual:components-list') {
|
|
const componentsDir = resolve(__dirname, 'src/lib/components');
|
|
const componentsFiles = getRecursiveFiles(componentsDir, '.svelte');
|
|
|
|
const components = componentsFiles.map(file =>
|
|
file
|
|
.replace(componentsDir, '')
|
|
.replace(/\.svelte$/, '')
|
|
.replace(/\\/g, '/') // Fix Windows path separators
|
|
.slice(1) // Remove leading "/"
|
|
);
|
|
|
|
return `export default ${JSON.stringify(components)};`;
|
|
}
|
|
return null;
|
|
},
|
|
handleHotUpdate({ file, server }) { // Add handleHotUpdate to watch for file changes
|
|
if (file.startsWith(resolve(__dirname, 'src/lib/components'))) {
|
|
server.ws.send({
|
|
type: 'full-reload',
|
|
path: '*',
|
|
});
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: 'services-resolver',
|
|
resolveId(source) {
|
|
if (source === 'virtual:services-list') return source;
|
|
return null;
|
|
},
|
|
load(id) {
|
|
if (id === 'virtual:services-list') {
|
|
const servicesDir = resolve(__dirname, 'src/lib/services');
|
|
const serviceFiles = getRecursiveFiles(servicesDir, '.ts');
|
|
|
|
const services = serviceFiles.map(file =>
|
|
file
|
|
.replace(servicesDir, '')
|
|
.replace(/\.ts$/, '')
|
|
.replace(/\\/g, '/') // Fix Windows path separators
|
|
.slice(1) // Remove leading "/"
|
|
);
|
|
|
|
return `export default ${JSON.stringify(services)};`;
|
|
}
|
|
return null;
|
|
},
|
|
handleHotUpdate({ file, server }) { // Add handleHotUpdate to watch for file changes
|
|
if (file.startsWith(resolve(__dirname, 'src/lib/services'))) {
|
|
server.ws.send({
|
|
type: 'full-reload',
|
|
path: '*',
|
|
});
|
|
}
|
|
},
|
|
},
|
|
{
|
|
name: 'data-sources-resolver',
|
|
resolveId(source) {
|
|
if (source === 'virtual:data-sources-list') return source;
|
|
return null;
|
|
},
|
|
load(id) {
|
|
if (id === 'virtual:data-sources-list') {
|
|
const dataDir = resolve(__dirname, 'src/lib/data');
|
|
const dataFiles = getRecursiveFiles(dataDir, '.ts'); // Use the same function as before
|
|
|
|
const dataSources = dataFiles.map(file =>
|
|
file
|
|
.replace(dataDir, '')
|
|
.replace(/\.ts$/, '')
|
|
.replace(/\\/g, '/') // Fix Windows path separators
|
|
.slice(1) // Remove leading "/"
|
|
);
|
|
|
|
return `export default ${JSON.stringify(dataSources)};`;
|
|
}
|
|
return null;
|
|
}
|
|
}
|
|
],
|
|
test: {
|
|
include: ['src/**/*.{test,spec}.{js,ts}']
|
|
}
|
|
});
|
|
|
|
|