UNPKG

@clawject/di

Version:

<p align="center"> <a href="https://clawject.com/" target="_blank"><img src="https://clawject.com/img/logo.svg" align="center" alt="Clawject Logo" width="120" height="120" /></a> </p>

65 lines (64 loc) 2.21 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ProgramStorage = void 0; const createTSMorphProject_1 = require("./createTSMorphProject"); //TODO add tests for different version with unplugin class ProgramStorage { constructor(options) { this.options = options; this.fileNameToFileContent = new Map(); this.project = undefined; this.program = undefined; } async updateFile(fileName, content) { const project = await this.getProject(); this.fileNameToFileContent.set(fileName, content); if (project.getSourceFile(fileName)) { project.updateSourceFile(fileName, content); } else { project.createSourceFile(fileName, content); } } async deleteFile(fileName) { const project = await this.getProject(); this.fileNameToFileContent.delete(fileName); project.removeSourceFile(fileName); } getProject() { this.project = this.project ?? (0, createTSMorphProject_1.createTSMorphProject)({ tsConfigFilePath: this.options.tsconfig, skipAddingFilesFromTsConfig: true }); return this.project; } async getProgram() { return this.program ?? this.refreshProgram(); } async refreshProgram() { const oldProgram = this.program; const needsUpdate = !oldProgram || this.checkIfProgramNeedsUpdate(oldProgram); if (!needsUpdate) { return oldProgram; } const project = await this.getProject(); project.resolveSourceFileDependencies(); this.program = project.createProgram(); return this.program; } checkIfProgramNeedsUpdate(oldProgram) { let result = false; for (const [fileName, content] of this.fileNameToFileContent) { if (result) { break; } const oldSourceFile = oldProgram.getSourceFile(fileName); if (!oldSourceFile || oldSourceFile.text !== content) { result = true; break; } } return result; } } exports.ProgramStorage = ProgramStorage;