1 | import * as _ from 'lodash';
|
2 |
|
3 | import { COMPODOC_DEFAULTS } from '../utils/defaults';
|
4 |
|
5 | import { ConfigurationInterface } from './interfaces/configuration.interface';
|
6 | import { CoverageData } from './interfaces/coverageData.interface';
|
7 | import { MainDataInterface } from './interfaces/main-data.interface';
|
8 | import { PageInterface } from './interfaces/page.interface';
|
9 |
|
10 | export class Configuration implements ConfigurationInterface {
|
11 | private _pages: PageInterface[] = [];
|
12 | private _mainData: MainDataInterface = {
|
13 | output: COMPODOC_DEFAULTS.folder,
|
14 | theme: COMPODOC_DEFAULTS.theme,
|
15 | extTheme: '',
|
16 | serve: false,
|
17 | hostname: COMPODOC_DEFAULTS.hostname,
|
18 | host: '',
|
19 | port: COMPODOC_DEFAULTS.port,
|
20 | open: false,
|
21 | assetsFolder: '',
|
22 | documentationMainName: COMPODOC_DEFAULTS.title,
|
23 | documentationMainDescription: '',
|
24 | base: COMPODOC_DEFAULTS.base,
|
25 | hideGenerator: false,
|
26 | hideDarkModeToggle: false,
|
27 | hasFilesToCoverage: false,
|
28 | modules: [],
|
29 | readme: false,
|
30 | changelog: '',
|
31 | contributing: '',
|
32 | license: '',
|
33 | todo: '',
|
34 | markdowns: [],
|
35 | additionalPages: [],
|
36 | pipes: [],
|
37 | classes: [],
|
38 | interfaces: [],
|
39 | components: [],
|
40 | controllers: [],
|
41 | entities: [],
|
42 | directives: [],
|
43 | injectables: [],
|
44 | interceptors: [],
|
45 | guards: [],
|
46 | miscellaneous: [],
|
47 | routes: [],
|
48 | tsconfig: '',
|
49 | toggleMenuItems: COMPODOC_DEFAULTS.toggleMenuItems,
|
50 | navTabConfig: [],
|
51 | templates: '',
|
52 | includes: '',
|
53 | includesName: COMPODOC_DEFAULTS.additionalEntryName,
|
54 | includesFolder: COMPODOC_DEFAULTS.additionalEntryPath,
|
55 | disableSourceCode: COMPODOC_DEFAULTS.disableSourceCode,
|
56 | disableDomTree: COMPODOC_DEFAULTS.disableDomTree,
|
57 | disableTemplateTab: COMPODOC_DEFAULTS.disableTemplateTab,
|
58 | disableStyleTab: COMPODOC_DEFAULTS.disableStyleTab,
|
59 | disableGraph: COMPODOC_DEFAULTS.disableGraph,
|
60 | disableMainGraph: COMPODOC_DEFAULTS.disableMainGraph,
|
61 | disableCoverage: COMPODOC_DEFAULTS.disableCoverage,
|
62 | disablePrivate: COMPODOC_DEFAULTS.disablePrivate,
|
63 | disableInternal: COMPODOC_DEFAULTS.disableInternal,
|
64 | disableProtected: COMPODOC_DEFAULTS.disableProtected,
|
65 | disableLifeCycleHooks: COMPODOC_DEFAULTS.disableLifeCycleHooks,
|
66 | disableRoutesGraph: COMPODOC_DEFAULTS.disableRoutesGraph,
|
67 | disableSearch: false,
|
68 | disableDependencies: COMPODOC_DEFAULTS.disableDependencies,
|
69 | disableProperties: COMPODOC_DEFAULTS.disableProperties,
|
70 | watch: false,
|
71 | mainGraph: '',
|
72 | coverageTest: false,
|
73 | coverageTestThreshold: COMPODOC_DEFAULTS.defaultCoverageThreshold,
|
74 | coverageTestThresholdFail: COMPODOC_DEFAULTS.coverageTestThresholdFail,
|
75 | coverageTestPerFile: false,
|
76 | coverageMinimumPerFile: COMPODOC_DEFAULTS.defaultCoverageMinimumPerFile,
|
77 | unitTestCoverage: '',
|
78 | unitTestData: undefined,
|
79 | coverageTestShowOnlyFailed: COMPODOC_DEFAULTS.coverageTestShowOnlyFailed,
|
80 | routesLength: 0,
|
81 | angularVersion: '',
|
82 | exportFormat: COMPODOC_DEFAULTS.exportFormat,
|
83 | coverageData: {} as CoverageData,
|
84 | customFavicon: '',
|
85 | customLogo: '',
|
86 | packageDependencies: [],
|
87 | packagePeerDependencies: [],
|
88 | packageProperties: {},
|
89 | gaID: '',
|
90 | gaSite: '',
|
91 | angularProject: false,
|
92 | angularJSProject: false,
|
93 | language: COMPODOC_DEFAULTS.language,
|
94 | maxSearchResults: 15
|
95 | };
|
96 |
|
97 | private static instance: Configuration;
|
98 | private constructor() {}
|
99 | public static getInstance() {
|
100 | if (!Configuration.instance) {
|
101 | Configuration.instance = new Configuration();
|
102 | }
|
103 | return Configuration.instance;
|
104 | }
|
105 |
|
106 | public addPage(page: PageInterface) {
|
107 | let indexPage = _.findIndex(this._pages, { name: page.name });
|
108 | if (indexPage === -1) {
|
109 | this._pages.push(page);
|
110 | }
|
111 | }
|
112 |
|
113 | public hasPage(name: string): boolean {
|
114 | let indexPage = _.findIndex(this._pages, { name: name });
|
115 | return indexPage !== -1;
|
116 | }
|
117 |
|
118 | public addAdditionalPage(page: PageInterface) {
|
119 | this._mainData.additionalPages.push(page);
|
120 | }
|
121 |
|
122 | public getAdditionalPageById(id): PageInterface {
|
123 | return this._mainData.additionalPages.find(page => page.id === id);
|
124 | }
|
125 |
|
126 | public resetPages() {
|
127 | this._pages = [];
|
128 | }
|
129 |
|
130 | public resetAdditionalPages() {
|
131 | this._mainData.additionalPages = [];
|
132 | }
|
133 |
|
134 | public resetRootMarkdownPages() {
|
135 | let indexPage = _.findIndex(this._pages, { name: 'index' });
|
136 | this._pages.splice(indexPage, 1);
|
137 | indexPage = _.findIndex(this._pages, { name: 'changelog' });
|
138 | this._pages.splice(indexPage, 1);
|
139 | indexPage = _.findIndex(this._pages, { name: 'contributing' });
|
140 | this._pages.splice(indexPage, 1);
|
141 | indexPage = _.findIndex(this._pages, { name: 'license' });
|
142 | this._pages.splice(indexPage, 1);
|
143 | indexPage = _.findIndex(this._pages, { name: 'todo' });
|
144 | this._pages.splice(indexPage, 1);
|
145 | this._mainData.markdowns = [];
|
146 | }
|
147 |
|
148 | get pages(): PageInterface[] {
|
149 | return this._pages;
|
150 | }
|
151 | set pages(pages: PageInterface[]) {
|
152 | this._pages = [];
|
153 | }
|
154 |
|
155 | get markDownPages() {
|
156 | return this._pages.filter(page => page.markdown);
|
157 | }
|
158 |
|
159 | get mainData(): MainDataInterface {
|
160 | return this._mainData;
|
161 | }
|
162 | set mainData(data: MainDataInterface) {
|
163 | (Object as any).assign(this._mainData, data);
|
164 | }
|
165 | }
|
166 |
|
167 | export default Configuration.getInstance();
|