UNPKG

react-smart-effect

Version:

Enhanced React useEffect and useLayoutEffect hooks with smart dependency tracking, debugging tools, and automatic optimization

86 lines (85 loc) 3.01 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.vitePluginSmartEffect = vitePluginSmartEffect; exports.createViteConfig = createViteConfig; const core_1 = require("@babel/core"); const babel_1 = __importDefault(require("./babel")); /** * Vite plugin for analyzing useSmartEffect dependencies */ function vitePluginSmartEffect(options = {}) { const { autoFix = false, warnOnly = true, include = /\.(tsx?|jsx?)$/, exclude = /node_modules/ } = options; return { name: 'vite-plugin-react-smart-effect', enforce: 'pre', async transform(code, id) { // Check if file should be processed if (!shouldTransform(id, include, exclude)) { return null; } try { const result = await (0, core_1.transformAsync)(code, { filename: id, plugins: [ [babel_1.default, { autoFix, warnOnly }] ], parserOpts: { sourceType: 'module', allowImportExportEverywhere: true, plugins: [ 'jsx', 'typescript', 'decorators-legacy', 'classProperties' ] } }); return (result === null || result === void 0 ? void 0 : result.code) ? { code: result.code, map: result.map } : null; } catch (error) { if (warnOnly) { console.warn(`[vite-plugin-react-smart-effect] ${id}: ${error}`); return null; } throw error; } } }; } function shouldTransform(id, include, exclude) { const normalizedId = id.replace(/\\/g, '/'); // Check exclude patterns if (exclude) { const excludePatterns = Array.isArray(exclude) ? exclude : [exclude]; for (const pattern of excludePatterns) { if (pattern instanceof RegExp ? pattern.test(normalizedId) : normalizedId.includes(pattern)) { return false; } } } // Check include patterns if (include) { const includePatterns = Array.isArray(include) ? include : [include]; for (const pattern of includePatterns) { if (pattern instanceof RegExp ? pattern.test(normalizedId) : normalizedId.includes(pattern)) { return true; } } return false; } return true; } // Export configuration helper function createViteConfig(options = {}) { return { plugins: [ vitePluginSmartEffect(options) ] }; }