UNPKG

sicua

Version:

A tool for analyzing project structure and dependencies

126 lines (125 loc) 4.43 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ErrorPatternUtils = void 0; const typescript_1 = __importDefault(require("typescript")); const ASTUtils_1 = require("../ast/ASTUtils"); class ErrorPatternUtils { static isErrorRelatedName(name) { const patterns = ["error", "err", "exception", "fail", "invalid", "fault"]; return patterns.some((p) => name.toLowerCase().includes(p)); } static isErrorLoggingCall(text) { const loggingPatterns = [ "console.error", "logger.error", "logError", "reportError", "captureException", "trackError", "monitor", ]; return loggingPatterns.some((pattern) => text.includes(pattern)); } static isLikelyErrorBoundary(node) { const tagName = typescript_1.default.isJsxElement(node) ? node.openingElement.tagName.getText() : node.tagName.getText(); // Check component name patterns const errorBoundaryPatterns = [ "ErrorBoundary", "ErrorHandler", "ErrorWrapper", "ErrorContainer", "ErrorFallback", "ErrorBorder", ]; if (errorBoundaryPatterns.some((pattern) => tagName.includes(pattern))) { return true; } // Check for error boundary related props const props = this.extractJsxProps(node); const errorBoundaryProps = [ "fallback", "FallbackComponent", "onError", "handleError", "errorComponent", "renderError", "catchError", ]; if (errorBoundaryProps.some((prop) => prop in props)) { return true; } return false; } static extractJsxProps(node) { try { const props = {}; const attributes = typescript_1.default.isJsxElement(node) ? node.openingElement.attributes : node.attributes; attributes.properties.forEach((prop) => { try { if (typescript_1.default.isJsxAttribute(prop) && prop.name) { const name = ASTUtils_1.ASTUtils.safeGetNodeText(prop.name); const initializer = prop.initializer; if (initializer) { props[name] = typescript_1.default.isJsxExpression(initializer) ? ASTUtils_1.ASTUtils.safeGetNodeText(initializer.expression) : ASTUtils_1.ASTUtils.safeGetNodeText(initializer); } else { props[name] = true; } } } catch (error) { console.warn("Error processing JSX prop:", error); } }); return props; } catch { return {}; } } static isErrorStateSetter(name) { return name.startsWith("set") && this.isErrorRelatedName(name.slice(3)); } static getStateNameFromSetter(setter) { return setter.slice(3).replace(/^[A-Z]/, (c) => c.toLowerCase()); } static isFallbackElement(node) { const tagName = typescript_1.default.isJsxElement(node) ? node.openingElement.tagName.getText() : node.tagName.getText(); // Check element name patterns const fallbackPatterns = [ "Error", "Fallback", "ErrorMessage", "ErrorState", "ErrorDisplay", ]; if (fallbackPatterns.some((pattern) => tagName.includes(pattern))) { return true; } // Check props that suggest error UI const props = this.extractJsxProps(node); const errorRelatedProps = [ "error", "isError", "hasError", "onRetry", "errorMessage", ]; if (errorRelatedProps.some((prop) => prop in props)) { return true; } return false; } } exports.ErrorPatternUtils = ErrorPatternUtils;