sicua
Version:
A tool for analyzing project structure and dependencies
138 lines (137 loc) • 5.48 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.RiskAnalysisUtils = void 0;
const typescript_1 = __importDefault(require("typescript"));
class RiskAnalysisUtils {
static isFileSystemOperation(node) {
if (typescript_1.default.isCallExpression(node)) {
const text = node.expression.getText();
return (text.includes("readFile") ||
text.includes("writeFile") ||
text.includes("fs.") ||
text.includes("File") ||
text.includes("createReadStream") ||
text.includes("createWriteStream"));
}
return false;
}
static isNetworkRequest(node) {
if (typescript_1.default.isCallExpression(node)) {
const text = node.expression.getText().toLowerCase();
return (text.includes("fetch") ||
text.includes("axios") ||
text.includes("http") ||
text.includes("request") ||
text.includes("api.") ||
text.includes("get(") ||
text.includes("post(") ||
text.includes("put(") ||
text.includes("delete("));
}
return false;
}
static isDataParsing(node) {
if (typescript_1.default.isCallExpression(node)) {
const text = node.expression.getText();
return (text.includes("JSON.parse") ||
text.includes("JSON.stringify") ||
text.includes("parse") ||
text.includes("deserialize") ||
text.includes("decode"));
}
return false;
}
static isExternalAPICall(node) {
if (typescript_1.default.isCallExpression(node)) {
// Look for common API client patterns
const text = node.expression.getText().toLowerCase();
return (text.includes("api.") ||
text.includes("client.") ||
text.includes("service.") ||
text.includes("graphql") ||
text.includes("rest"));
}
return false;
}
static isDatabaseOperation(node) {
if (typescript_1.default.isCallExpression(node)) {
const text = node.expression.getText().toLowerCase();
return (text.includes("query") ||
text.includes("transaction") ||
text.includes("db.") ||
text.includes("database") ||
text.includes("prisma.") ||
text.includes("sequelize") ||
text.includes("mongoose"));
}
return false;
}
static isStateUpdate(node) {
if (typescript_1.default.isCallExpression(node)) {
const text = node.expression.getText();
return (text.startsWith("set") || // useState setters
text.includes("dispatch") || // Redux dispatch
text.includes("update") || // General state updates
text.includes("mutate") // SWR/React Query
);
}
return false;
}
static isComplexCalculation(node) {
let complexity = 0;
let hasCalculations = false;
const visit = (node) => {
// Check for mathematical operations
if (typescript_1.default.isBinaryExpression(node)) {
switch (node.operatorToken.kind) {
case typescript_1.default.SyntaxKind.PlusToken:
case typescript_1.default.SyntaxKind.MinusToken:
case typescript_1.default.SyntaxKind.AsteriskToken:
case typescript_1.default.SyntaxKind.SlashToken:
case typescript_1.default.SyntaxKind.PercentToken:
hasCalculations = true;
complexity++;
break;
}
}
// Check for Math object usage
if (typescript_1.default.isPropertyAccessExpression(node) &&
node.expression.getText() === "Math") {
hasCalculations = true;
complexity++;
}
typescript_1.default.forEachChild(node, visit);
};
visit(node);
return hasCalculations && complexity > 2;
}
static isThirdPartyLibraryCall(node) {
if (typescript_1.default.isCallExpression(node)) {
const text = node.expression.getText();
// Add common third-party libraries that might throw
return (text.includes("lodash.") ||
text.includes("moment") ||
text.includes("dayjs") ||
text.includes("yup") ||
text.includes("zod") ||
text.includes("validator"));
}
return false;
}
static isDataTransformation(node) {
if (typescript_1.default.isCallExpression(node)) {
const text = node.expression.getText().toLowerCase();
return (text.includes("map") ||
text.includes("reduce") ||
text.includes("filter") ||
text.includes("transform") ||
text.includes("convert") ||
text.includes("format"));
}
return false;
}
}
exports.RiskAnalysisUtils = RiskAnalysisUtils;