@compodoc/compodoc
Version:
The missing documentation tool for your Angular application
168 lines (152 loc) • 5.74 kB
text/typescript
import * as _ from 'lodash';
import { COMPODOC_DEFAULTS } from '../utils/defaults';
import { ConfigurationInterface } from './interfaces/configuration.interface';
import { CoverageData } from './interfaces/coverageData.interface';
import { MainDataInterface } from './interfaces/main-data.interface';
import { PageInterface } from './interfaces/page.interface';
export class Configuration implements ConfigurationInterface {
private _pages: PageInterface[] = [];
private _mainData: MainDataInterface = {
output: COMPODOC_DEFAULTS.folder,
theme: COMPODOC_DEFAULTS.theme,
extTheme: '',
serve: false,
hostname: COMPODOC_DEFAULTS.hostname,
host: '',
port: COMPODOC_DEFAULTS.port,
open: false,
assetsFolder: '',
documentationMainName: COMPODOC_DEFAULTS.title,
documentationMainDescription: '',
base: COMPODOC_DEFAULTS.base,
hideGenerator: false,
hideDarkModeToggle: false,
hasFilesToCoverage: false,
modules: [],
readme: false,
changelog: '',
contributing: '',
license: '',
todo: '',
markdowns: [],
additionalPages: [],
pipes: [],
classes: [],
interfaces: [],
components: [],
controllers: [],
entities: [],
directives: [],
injectables: [],
interceptors: [],
guards: [],
miscellaneous: [],
routes: [],
tsconfig: '',
toggleMenuItems: COMPODOC_DEFAULTS.toggleMenuItems,
navTabConfig: [],
templates: '',
includes: '',
includesName: COMPODOC_DEFAULTS.additionalEntryName,
includesFolder: COMPODOC_DEFAULTS.additionalEntryPath,
disableSourceCode: COMPODOC_DEFAULTS.disableSourceCode,
disableDomTree: COMPODOC_DEFAULTS.disableDomTree,
disableTemplateTab: COMPODOC_DEFAULTS.disableTemplateTab,
disableStyleTab: COMPODOC_DEFAULTS.disableStyleTab,
disableGraph: COMPODOC_DEFAULTS.disableGraph,
disableMainGraph: COMPODOC_DEFAULTS.disableMainGraph,
disableCoverage: COMPODOC_DEFAULTS.disableCoverage,
disablePrivate: COMPODOC_DEFAULTS.disablePrivate,
disableInternal: COMPODOC_DEFAULTS.disableInternal,
disableProtected: COMPODOC_DEFAULTS.disableProtected,
disableLifeCycleHooks: COMPODOC_DEFAULTS.disableLifeCycleHooks,
disableRoutesGraph: COMPODOC_DEFAULTS.disableRoutesGraph,
disableSearch: false,
disableDependencies: COMPODOC_DEFAULTS.disableDependencies,
disableProperties: COMPODOC_DEFAULTS.disableProperties,
watch: false,
mainGraph: '',
coverageTest: false,
coverageTestThreshold: COMPODOC_DEFAULTS.defaultCoverageThreshold,
coverageTestThresholdFail: COMPODOC_DEFAULTS.coverageTestThresholdFail,
coverageTestPerFile: false,
coverageMinimumPerFile: COMPODOC_DEFAULTS.defaultCoverageMinimumPerFile,
unitTestCoverage: '',
unitTestData: undefined,
coverageTestShowOnlyFailed: COMPODOC_DEFAULTS.coverageTestShowOnlyFailed,
routesLength: 0,
angularVersion: '',
exportFormat: COMPODOC_DEFAULTS.exportFormat,
coverageData: {} as CoverageData,
customFavicon: '',
customLogo: '',
packageDependencies: [],
packagePeerDependencies: [],
packageProperties: {},
gaID: '',
gaSite: '',
angularProject: false,
angularJSProject: false,
language: COMPODOC_DEFAULTS.language,
maxSearchResults: 15
};
private static instance: Configuration;
private constructor() {}
public static getInstance() {
if (!Configuration.instance) {
Configuration.instance = new Configuration();
}
return Configuration.instance;
}
public addPage(page: PageInterface) {
let indexPage = _.findIndex(this._pages, { name: page.name });
if (indexPage === -1) {
this._pages.push(page);
}
}
public hasPage(name: string): boolean {
let indexPage = _.findIndex(this._pages, { name: name });
return indexPage !== -1;
}
public addAdditionalPage(page: PageInterface) {
this._mainData.additionalPages.push(page);
}
public getAdditionalPageById(id): PageInterface {
return this._mainData.additionalPages.find(page => page.id === id);
}
public resetPages() {
this._pages = [];
}
public resetAdditionalPages() {
this._mainData.additionalPages = [];
}
public resetRootMarkdownPages() {
let indexPage = _.findIndex(this._pages, { name: 'index' });
this._pages.splice(indexPage, 1);
indexPage = _.findIndex(this._pages, { name: 'changelog' });
this._pages.splice(indexPage, 1);
indexPage = _.findIndex(this._pages, { name: 'contributing' });
this._pages.splice(indexPage, 1);
indexPage = _.findIndex(this._pages, { name: 'license' });
this._pages.splice(indexPage, 1);
indexPage = _.findIndex(this._pages, { name: 'todo' });
this._pages.splice(indexPage, 1);
this._mainData.markdowns = [];
}
get pages(): PageInterface[] {
return this._pages;
}
set pages(pages: PageInterface[]) {
this._pages = [];
}
get markDownPages() {
return this._pages.filter(page => page.markdown);
}
get mainData(): MainDataInterface {
return this._mainData;
}
set mainData(data: MainDataInterface) {
(Object as any).assign(this._mainData, data);
}
}
export default Configuration.getInstance();