cognitive-complexity-ts
Version:
This program analyses TypeScript and JavaScript code according to the [Cognitive Complexity metric](https://www.sonarsource.com/docs/CognitiveComplexity.pdf). It produces a JSON summary and a GUI for exploring the complexity of your codebase.
64 lines • 2.34 kB
JavaScript
import { isSortedContainerOutput, isSortedFileOutput } from "../domain/sortedOutput.js";
import { Store } from "../framework.js";
export class ComplexityModel {
constructor(view) {
this.view = view;
this.containers = new Store();
this.files = new Store();
this.folders = new Store();
}
updateContainer(container) {
this.containers.set(container);
}
updateFile(file) {
this.files.set(file);
}
updateFolder(folder) {
this.folders.set(folder);
}
overwriteComplexity(complexity) {
this.overwriteFolderContents(complexity);
}
overwriteContainer(containerOutput) {
const observableContainer = this.containers.set(containerOutput);
observableContainer.onChange((newContainer) => {
this.view.reChildContainer(newContainer);
this.view.reDepthContainer(newContainer);
});
for (const container of containerOutput.inner) {
this.overwriteContainer(container);
}
}
overwriteFile(fileOutput) {
const observableFile = this.files.set(fileOutput);
observableFile.onChange((newFile) => {
this.view.reChildFile(newFile);
this.view.reDepthFile(newFile);
});
for (const containerOutput of fileOutput.inner) {
this.overwriteContainer(containerOutput);
}
}
overwriteFolderContents(folderOutput) {
const observableFolder = this.folders.set(folderOutput);
observableFolder.onChange((newFolder) => {
this.view.reChildFolderContents(newFolder);
});
folderOutput.inner.forEach((folderEntry) => {
isSortedContainerOutput(folderEntry)
? this.overwriteContainer(folderEntry)
: isSortedFileOutput(folderEntry)
? this.overwriteFile(folderEntry)
: this.overwriteFolder(folderEntry);
});
}
overwriteFolder(folderOutput) {
this.overwriteFolderContents(folderOutput);
const observableFolder = this.folders.get(folderOutput.id);
observableFolder.onChange((newFolder) => {
this.view.reChildFolderContents(newFolder);
this.view.reDepthFolder(newFolder);
});
}
}
//# sourceMappingURL=ComplexityModel.js.map