msw-mock-gen
Version:
A Vite plugin that automatically generates MSW (Mock Service Worker) handlers from your API calls by watching TypeScript/JavaScript files and parsing URL patterns. Supports Vite 2+ and Node.js 12+ for maximum compatibility.
55 lines (54 loc) • 2.5 kB
JavaScript
import { existsSync, unlinkSync } from "fs";
import { join } from "path";
/**
* Deletes a file if it exists
* @param filePath - Path to the file to delete
* @param log - Logging function
*/
export const deleteFileIfExists = (filePath, log) => {
if (existsSync(filePath)) {
try {
unlinkSync(filePath);
log(`MSW Mock Gen: Deleted ${filePath}`);
}
catch (error) {
console.error(`MSW Mock Gen: Error deleting file ${filePath}:`, error);
}
}
};
/**
* Sterilizes all output directories by deleting old generated files
* @param root - Project root directory
* @param configs - Array of configurations
* @param mergeHandlers - Whether merging is enabled
* @param topLevelOutputFolder - Top-level output folder for merged handlers
* @param topLevelOutputFileName - Top-level output file name for merged handlers
* @param log - Logging function
*/
export const sterilize = (root, configs, mergeHandlers, topLevelOutputFolder, topLevelOutputFileName, log) => {
const startTime = Date.now();
log("MSW Mock Gen: Sterilizing output directories...");
// Delete files from each config's output folder (but preserve .cache when merging)
for (const config of configs) {
const { outputFolder = "src/data/queries/mocks", outputFileName = "mswHandlers.generated", } = config;
const outputPath = join(root, outputFolder);
// Only delete files if we're not merging (when merging, files go to .cache)
if (!mergeHandlers) {
// Delete individual generated files
deleteFileIfExists(join(outputPath, "queryHandlers.generated.ts"), log);
deleteFileIfExists(join(outputPath, "mutationHandlers.generated.ts"), log);
deleteFileIfExists(join(outputPath, `${outputFileName}.ts`), log);
}
}
// Delete merged handler files if merging is enabled
if (mergeHandlers) {
const topLevelOutputPath = join(root, topLevelOutputFolder);
// Delete merged generated files (but preserve .cache directory)
deleteFileIfExists(join(topLevelOutputPath, "queryHandlers.generated.ts"), log);
deleteFileIfExists(join(topLevelOutputPath, "mutationHandlers.generated.ts"), log);
deleteFileIfExists(join(topLevelOutputPath, `${topLevelOutputFileName}.ts`), log);
}
const endTime = Date.now();
const duration = endTime - startTime;
log(`MSW Mock Gen: Sterilization complete (${duration}ms)`);
};