@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
JavaScript
;
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