UNPKG

@traversets/code-extractor

Version:

The TypeScript Code Extractor and Analyzer can be handy for RAG (Retrieval-Augmented Generation) systems for codebases. It provides a detailed and structured representation of the codebase that can be converted into embeddings, enabling more effective adv

148 lines 6.35 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); const ts = __importStar(require("typescript")); const typescript_code_mapper_service_1 = require("./typescript-code-mapper.service"); jest.mock("glob"); describe("TypeScriptCodeMapper", () => { let codeMapper; let mockProgram; let mockTypeChecker; let mockSourceFile; let originalCwd = process.cwd; beforeEach(() => { jest.spyOn(process, "cwd").mockReturnValue(originalCwd()); codeMapper = new typescript_code_mapper_service_1.TypeScriptCodeMapper(); mockProgram = { getSourceFile: jest.fn(), getRootFileNames: jest.fn(), getTypeChecker: jest.fn().mockReturnValue({ getTypeAtLocation: jest.fn(), typeToString: jest.fn(), getSignatureFromDeclaration: jest.fn(), getReturnTypeOfSignature: jest.fn(), }), }; mockTypeChecker = mockProgram.getTypeChecker(); mockSourceFile = { fileName: "test.ts", text: "class TestClass {}", }; jest.spyOn(codeMapper, "getProgram").mockReturnValue(mockProgram); jest.spyOn(codeMapper, "getSourceFile").mockReturnValue(mockSourceFile); jest.spyOn(codeMapper, "getTypeChecker").mockReturnValue(mockTypeChecker); jest.spyOn(codeMapper, "getRootFileNames").mockReturnValue(["test.ts"]); }); afterEach(() => { jest.clearAllMocks(); }); describe("extractClassMetaData", () => { it("Should extract class metadata correctly", () => { const mockClass = { name: { getText: jest.fn().mockReturnValue("TestClass") }, members: [], }; const result = codeMapper.extractClassMetaData(mockClass, mockSourceFile); expect(result.isSuccess).toBe(true); expect(result.getValue().name).toBe("TestClass"); }); it("Should extract class metadata with various members correctly", () => { const mockMembers = [ { kind: ts.SyntaxKind.MethodDeclaration, name: { getText: jest.fn().mockReturnValue("testMethod") }, parameters: [], type: { getText: jest.fn().mockReturnValue("void") }, }, { kind: ts.SyntaxKind.PropertyDeclaration, name: { getText: jest.fn().mockReturnValue("testProperty") }, type: { getText: jest.fn().mockReturnValue("string") }, }, { kind: ts.SyntaxKind.GetAccessor, name: { getText: jest.fn().mockReturnValue("testGetter") }, type: { getText: jest.fn().mockReturnValue("number") }, parameters: [], }, { kind: ts.SyntaxKind.SetAccessor, name: { getText: jest.fn().mockReturnValue("testSetter") }, parameters: [ { name: { getText: jest.fn().mockReturnValue("value") }, type: { getText: jest.fn().mockReturnValue("string") }, }, ], }, ]; const mockClass = { name: { getText: jest.fn().mockReturnValue("TestClass") }, members: mockMembers, }; jest.spyOn(codeMapper, "getFunctionDetails").mockReturnValue({ getValue: () => ({ name: "testMethod", parameters: [], returnType: "void", content: "test content", }), }); jest .spyOn(codeMapper, "extractPropertyParameters") .mockReturnValue({ getValue: () => ({ name: "testProperty", type: "string", }), }); jest .spyOn(codeMapper, "getAccessorDetails") .mockImplementation((node, sourceFile, kind) => ({ name: kind === "get" ? "testGetter" : "testSetter", content: "test content", parameters: kind === "set" ? [{ name: "value", type: "string" }] : [], returnType: kind === "get" ? "number" : "void", })); const result = codeMapper.extractClassMetaData(mockClass, mockSourceFile); expect(result.isSuccess).toBe(true); const classInfo = result.getValue(); expect(classInfo.name).toBe("TestClass"); expect(classInfo.functions).toHaveLength(3); // method, getter, setter expect(classInfo.properties).toHaveLength(1); }); }); }); //# sourceMappingURL=typescript-code-mapper.service.spec.js.map