UNPKG

@git.zone/tsdoc

Version:

A comprehensive TypeScript documentation tool that leverages AI to generate and enhance project documentation, including dynamic README creation, API docs via TypeDoc, and smart commit message generation.

97 lines (95 loc) 7.38 kB
import * as plugins from '../plugins.js'; export class ProjectContext { static async fromDir(dirArg) { } constructor(projectDirArg) { this.tokenCount = 0; this.contextString = ''; this.projectDir = projectDirArg; } async gatherFiles() { const smartfilePackageJSON = await plugins.smartfile.SmartFile.fromFilePath(plugins.path.join(this.projectDir, 'package.json'), this.projectDir); const smartfilesReadme = await plugins.smartfile.SmartFile.fromFilePath(plugins.path.join(this.projectDir, 'readme.md'), this.projectDir); const smartfilesReadmeHints = await plugins.smartfile.SmartFile.fromFilePath(plugins.path.join(this.projectDir, 'readme.hints.md'), this.projectDir); const smartfilesNpmextraJSON = await plugins.smartfile.SmartFile.fromFilePath(plugins.path.join(this.projectDir, 'npmextra.json'), this.projectDir); const smartfilesMod = await plugins.smartfile.fs.fileTreeToObject(this.projectDir, 'ts*/**/*.ts'); const smartfilesTest = await plugins.smartfile.fs.fileTreeToObject(this.projectDir, 'test/**/*.ts'); return { smartfilePackageJSON, smartfilesReadme, smartfilesReadmeHints, smartfilesNpmextraJSON, smartfilesMod, smartfilesTest, }; } async convertFilesToContext(filesArg) { filesArg.map((fileArg) => { // console.log(` -> ${fileArg.relative}`); }); return filesArg .map((smartfile) => { return ` ====== START OF FILE ${smartfile.relative} ====== ${smartfile.contents.toString()} ====== END OF FILE ${smartfile.relative} ====== `; }) .join('\n'); } /** * Calculate the token count for a string using the GPT tokenizer * @param text The text to count tokens for * @param model The model to use for token counting (default: gpt-3.5-turbo) * @returns The number of tokens in the text */ countTokens(text, model = 'gpt-3.5-turbo') { try { // Use the gpt-tokenizer library to count tokens const tokens = plugins.gptTokenizer.encode(text); return tokens.length; } catch (error) { console.error('Error counting tokens:', error); // Provide a rough estimate (4 chars per token) if tokenization fails return Math.ceil(text.length / 4); } } async buildContext(dirArg) { const files = await this.gatherFiles(); let context = await this.convertFilesToContext([ files.smartfilePackageJSON, files.smartfilesReadme, files.smartfilesReadmeHints, files.smartfilesNpmextraJSON, ...files.smartfilesMod, ...files.smartfilesTest, ]); // Count tokens in the context this.contextString = context; this.tokenCount = this.countTokens(context); // console.log(context); return context; } /** * Get the token count for the current context * @returns The number of tokens in the context */ getTokenCount() { return this.tokenCount; } /** * Get both the context string and its token count * @returns An object containing the context string and token count */ getContextWithTokenCount() { return { context: this.contextString, tokenCount: this.tokenCount }; } async update() { const result = await this.buildContext(this.projectDir); return result; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdGNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9haWRvY3NfY2xhc3Nlcy9wcm9qZWN0Y29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGVBQWUsQ0FBQztBQUV6QyxNQUFNLE9BQU8sY0FBYztJQUNsQixNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFjLElBQUcsQ0FBQztJQU85QyxZQUFZLGFBQXFCO1FBSHpCLGVBQVUsR0FBVyxDQUFDLENBQUM7UUFDdkIsa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFHakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUM7SUFDbEMsQ0FBQztJQUVNLEtBQUssQ0FBQyxXQUFXO1FBQ3RCLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQ3pFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLEVBQ2xELElBQUksQ0FBQyxVQUFVLENBQ2hCLENBQUM7UUFDRixNQUFNLGdCQUFnQixHQUFHLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUNyRSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxFQUMvQyxJQUFJLENBQUMsVUFBVSxDQUNoQixDQUFDO1FBRUYsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FDMUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxFQUNyRCxJQUFJLENBQUMsVUFBVSxDQUNoQixDQUFDO1FBQ0YsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLE9BQU8sQ0FBQyxT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