// craco.config.js const path = require("path"); require("dotenv").config(); // Check if we're in development/preview mode (not production build) // Craco sets NODE_ENV=development for start, NODE_ENV=production for build const isDevServer = process.env.NODE_ENV !== "production"; // Environment variable overrides const config = { enableHealthCheck: process.env.ENABLE_HEALTH_CHECK === "true", }; // Conditionally load health check modules only if enabled let WebpackHealthPlugin; let setupHealthEndpoints; let healthPluginInstance; if (config.enableHealthCheck) { WebpackHealthPlugin = require("./plugins/health-check/webpack-health-plugin"); setupHealthEndpoints = require("./plugins/health-check/health-endpoints"); healthPluginInstance = new WebpackHealthPlugin(); } let webpackConfig = { eslint: { configure: { extends: ["plugin:react-hooks/recommended"], rules: { "react-hooks/rules-of-hooks": "error", "react-hooks/exhaustive-deps": "warn", }, }, }, webpack: { alias: { '@': path.resolve(__dirname, 'src'), }, configure: (webpackConfig) => { // Add ignored patterns to reduce watched directories webpackConfig.watchOptions = { ...webpackConfig.watchOptions, ignored: [ '**/node_modules/**', '**/.git/**', '**/build/**', '**/dist/**', '**/coverage/**', '**/public/**', ], }; // Add health check plugin to webpack if enabled if (config.enableHealthCheck && healthPluginInstance) { webpackConfig.plugins.push(healthPluginInstance); } return webpackConfig; }, }, }; webpackConfig.devServer = (devServerConfig) => { // Add health check endpoints if enabled if (config.enableHealthCheck && setupHealthEndpoints && healthPluginInstance) { const originalSetupMiddlewares = devServerConfig.setupMiddlewares; devServerConfig.setupMiddlewares = (middlewares, devServer) => { // Call original setup if exists if (originalSetupMiddlewares) { middlewares = originalSetupMiddlewares(middlewares, devServer); } // Setup health endpoints setupHealthEndpoints(devServer, healthPluginInstance); return middlewares; }; } return devServerConfig; }; module.exports = webpackConfig;