import * as plugins from '../plugins.js'; export class ProjectContext { public static async fromDir(dirArg: string) {} // INSTANCE public projectDir: string; constructor(projectDirArg: string) { this.projectDir = projectDirArg; } public 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, }; } public async convertFilesToContext(filesArg: plugins.smartfile.SmartFile[]) { return filesArg .map((smartfile) => { return ` ====== START OF FILE ${smartfile.relative} ====== ${smartfile.contents.toString()} ====== END OF FILE ${smartfile.relative} ====== `; }) .join('\n'); } private async buildContext(dirArg: string) { const files = await this.gatherFiles(); let context = await this.convertFilesToContext([ files.smartfilePackageJSON, files.smartfilesReadme, files.smartfilesReadmeHints, files.smartfilesNpmextraJSON, ...files.smartfilesMod, ...files.smartfilesTest, ]); return context; } public async update() { const result = await this.buildContext(this.projectDir); return result; } }