sicua
Version:
A tool for analyzing project structure and dependencies
126 lines (125 loc) • 4.43 kB
JavaScript
;
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;