1 | import * as path from 'path';
|
2 |
|
3 | import Configuration from '../configuration';
|
4 |
|
5 | import { logger } from '../../utils/logger';
|
6 | import DependenciesEngine from './dependencies.engine';
|
7 |
|
8 | import { ExportData } from '../interfaces/export-data.interface';
|
9 |
|
10 | import { AngularNgModuleNode } from '../nodes/angular-ngmodule-node';
|
11 | import FileEngine from './file.engine';
|
12 |
|
13 | const traverse = require('traverse');
|
14 |
|
15 | export class ExportJsonEngine {
|
16 | private static instance: ExportJsonEngine;
|
17 | private constructor() {}
|
18 | public static getInstance() {
|
19 | if (!ExportJsonEngine.instance) {
|
20 | ExportJsonEngine.instance = new ExportJsonEngine();
|
21 | }
|
22 | return ExportJsonEngine.instance;
|
23 | }
|
24 |
|
25 | public export(outputFolder, data) {
|
26 | let exportData: ExportData = {};
|
27 |
|
28 | traverse(data).forEach(function(node) {
|
29 | if (node) {
|
30 | if (node.parent) {
|
31 | delete node.parent;
|
32 | }
|
33 | if (node.initializer) {
|
34 | delete node.initializer;
|
35 | }
|
36 | if (Configuration.mainData.disableSourceCode) {
|
37 | delete node.sourceCode;
|
38 | }
|
39 | }
|
40 | });
|
41 |
|
42 | exportData.pipes = data.pipes;
|
43 | exportData.interfaces = data.interfaces;
|
44 | exportData.injectables = data.injectables;
|
45 | exportData.guards = data.guards;
|
46 | exportData.interceptors = data.interceptors;
|
47 | exportData.classes = data.classes;
|
48 | exportData.directives = data.directives;
|
49 | exportData.components = data.components;
|
50 | exportData.modules = this.processModules();
|
51 | exportData.miscellaneous = data.miscellaneous;
|
52 | if (!Configuration.mainData.disableRoutesGraph) {
|
53 | exportData.routes = data.routes;
|
54 | }
|
55 | if (!Configuration.mainData.disableCoverage) {
|
56 | exportData.coverage = data.coverageData;
|
57 | }
|
58 |
|
59 | return FileEngine.write(
|
60 | outputFolder + path.sep + '/documentation.json',
|
61 | JSON.stringify(exportData, undefined, 4)
|
62 | ).catch(err => {
|
63 | logger.error('Error during export file generation ', err);
|
64 | return Promise.reject(err);
|
65 | });
|
66 | }
|
67 |
|
68 | public processModules() {
|
69 | const modules: AngularNgModuleNode[] = DependenciesEngine.getModules();
|
70 |
|
71 | let _resultedModules = [];
|
72 |
|
73 | for (let moduleNr = 0; moduleNr < modules.length; moduleNr++) {
|
74 | const module = modules[moduleNr];
|
75 | const moduleElement = {
|
76 | name: module.name,
|
77 | id: module.id,
|
78 | description: module.description,
|
79 | rawDescription: module.rawDescription,
|
80 | deprecationMessage: module.deprecationMessage,
|
81 | deprecated: module.deprecated,
|
82 | file: module.file,
|
83 | methods: module.methods,
|
84 | sourceCode: module.sourceCode,
|
85 | children: [
|
86 | {
|
87 | type: 'providers',
|
88 | elements: []
|
89 | },
|
90 | {
|
91 | type: 'declarations',
|
92 | elements: []
|
93 | },
|
94 | {
|
95 | type: 'imports',
|
96 | elements: []
|
97 | },
|
98 | {
|
99 | type: 'exports',
|
100 | elements: []
|
101 | },
|
102 | {
|
103 | type: 'bootstrap',
|
104 | elements: []
|
105 | },
|
106 | {
|
107 | type: 'classes',
|
108 | elements: []
|
109 | }
|
110 | ]
|
111 | };
|
112 |
|
113 | for (let k = 0; k < module.providers.length; k++) {
|
114 | const providerElement = {
|
115 | name: module.providers[k].name
|
116 | };
|
117 | moduleElement.children[0].elements.push(providerElement);
|
118 | }
|
119 | for (let k = 0; k < module.declarations.length; k++) {
|
120 | const declarationElement = {
|
121 | name: module.declarations[k].name
|
122 | };
|
123 | moduleElement.children[1].elements.push(declarationElement);
|
124 | }
|
125 | for (let k = 0; k < module.imports.length; k++) {
|
126 | const importElement = {
|
127 | name: module.imports[k].name
|
128 | };
|
129 | moduleElement.children[2].elements.push(importElement);
|
130 | }
|
131 | for (let k = 0; k < module.exports.length; k++) {
|
132 | const exportElement = {
|
133 | name: module.exports[k].name
|
134 | };
|
135 | moduleElement.children[3].elements.push(exportElement);
|
136 | }
|
137 | for (let k = 0; k < module.bootstrap.length; k++) {
|
138 | const bootstrapElement = {
|
139 | name: module.bootstrap[k].name
|
140 | };
|
141 | moduleElement.children[4].elements.push(bootstrapElement);
|
142 | }
|
143 |
|
144 | _resultedModules.push(moduleElement);
|
145 | }
|
146 |
|
147 | return _resultedModules;
|
148 | }
|
149 | }
|
150 |
|
151 | export default ExportJsonEngine.getInstance();
|