codesnap-analyzer
Version:
Create comprehensive snapshots of your codebase with token counting for LLMs
66 lines (65 loc) ⢠2.94 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const commander_1 = require("commander");
const index_1 = require("./index");
const path_1 = __importDefault(require("path"));
const fs_extra_1 = __importDefault(require("fs-extra"));
async function main() {
const program = new commander_1.Command();
program
.name("codesnap")
.description("Create a comprehensive snapshot of your codebase")
.argument("[directory]", "Directory to analyze", ".")
.option("-o, --output <path>", "Output file path")
.option("-e, --exclude <patterns...>", "Additional patterns to exclude")
.option("-i, --include <patterns...>", "Patterns to include")
.action(async (directory, options) => {
try {
// Resolve project directory
const projectDir = path_1.default.resolve(directory);
let projectName = path_1.default.basename(projectDir);
try {
const packageJsonPath = path_1.default.join(projectDir, "package.json");
if (fs_extra_1.default.existsSync(packageJsonPath)) {
const packageJson = JSON.parse(fs_extra_1.default.readFileSync(packageJsonPath, "utf-8"));
projectName = packageJson.name || projectName;
}
}
catch {
// Fallback to folder name if package.json doesn't exist
projectName = path_1.default.basename(projectDir);
}
// Sanitize project name for filenames
projectName = projectName.replace(/[^a-zA-Z0-9-_]/g, "_");
// Default output path if not specified
if (!options.output) {
const outputDir = path_1.default.join(projectDir, "codesnap");
await fs_extra_1.default.ensureDir(outputDir);
options.output = path_1.default.join(outputDir, `${projectName}.txt`);
}
console.log("šø Starting CodeSnap analysis...");
console.log(`š Project: ${projectName}`);
console.log(`š Directory: ${projectDir}`);
console.log(`š Output will be saved to: ${options.output}`);
// Perform analysis
const result = await (0, index_1.analyze)(projectDir, {
output: options.output,
exclude: options.exclude,
include: options.include,
});
console.log("\nā
Analysis completed successfully!");
console.log("š Summary:");
console.log(result.summary);
}
catch (error) {
console.error(`\nā Error: ${error.message}`);
process.exit(1);
}
});
program.parse();
}
main();
;