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
JavaScript
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)
]
};
}
;