UNPKG

sicua

Version:

A tool for analyzing project structure and dependencies

138 lines (137 loc) 5.48 kB
"use strict"; 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;