UNPKG

5.2 kBPlain TextView Raw
1import * as path from 'path';
2
3import Configuration from '../configuration';
4
5import { logger } from '../../utils/logger';
6import DependenciesEngine from './dependencies.engine';
7
8import { ExportData } from '../interfaces/export-data.interface';
9
10import { AngularNgModuleNode } from '../nodes/angular-ngmodule-node';
11import FileEngine from './file.engine';
12
13const traverse = require('traverse');
14
15export 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
151export default ExportJsonEngine.getInstance();