@query-key-gen/generator
Version:
Generated for [Vite](https://vitejs.dev)
50 lines (42 loc) • 1.75 kB
text/typescript
import { Plugin } from 'vite';
import path from 'path';
import { Programmer } from '@query-key-gen/generator-common';
import { QueryKeyGenerator } from './core';
import { ConfigOptions, configSchema, defaultConfig } from './types/config';
export default function QueryKeyPlugin(_config?: Omit<ConfigOptions, 'path'>): Plugin {
const config = configSchema.parse({
...defaultConfig,
..._config,
ignoreFiles: [...defaultConfig.ignoreFiles, ...(_config?.ignoreFiles ?? [])]
}) as Required<ConfigOptions>;
const rootDir = process.cwd(); // 프로젝트 루트 경로
const ignoreFiles = config.ignoreFiles;
const program = new Programmer(config);
const generator = new QueryKeyGenerator(program, config);
return {
name: '@query-key-gen/generator',
enforce: 'post',
configureServer(server) {
const listener = (absolutePath = '') => {
const filePath = path.relative(rootDir, absolutePath);
const outputPath = path.relative(rootDir, config.output);
if (!filePath.startsWith('src') || filePath.startsWith(outputPath)) return;
if (
ignoreFiles.some(item => {
const ignorePath = path.relative(process.cwd(), item);
return filePath.includes(ignorePath);
})
) {
return;
}
generator.execute();
};
server.watcher.on('add', listener);
server.watcher.on('change', listener);
server.watcher.on('unlink', listener);
},
buildStart() {
generator.execute();
}
};
}