/
index.js
99 lines (89 loc) · 3.09 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
var vow = require('vow'),
_ = require('lodash'),
logger = require('../../logger')(module),
data = require('../../modules/data'),
common = data.common,
getSitemap = require('./get_sitemap').run,
analyzeSitemap = require('./analyze_sitemap').run,
loadSources = require('./load_sources').run,
loadLibraries = require('./load_libraries').run,
loadPeople = require('./load_people').run,
addDynamicNodes = require('./add_dynamic_nodes').run,
addLibraryNodes = require('./add_library_nodes').run,
saveAndUpload = require('./save_and_upload').run;
var MSG = {
INFO: {
START: '-- sitemap_compiler module start --',
END: '-- sitemap_compiler successfully finished --'
},
ERROR: 'Error occur while compile models and loading documentation'
};
module.exports = {
/**
* Start point for data compiler module
* @param modelPath - {String} relative path to model index file
*/
run: function(modelPath) {
logger.info(MSG.INFO.START);
vow
.when(data.common.init())
.then(function() {
return getSitemap(modelPath);
})
.then(function(sitemap) {
return analyzeSitemap(sitemap);
})
.then(function(obj) {
return vow.all([
obj,
loadSources(obj.sourceNodes, obj.sourceRouteHash),
loadLibraries(obj.libraryNodes),
loadPeople()
]);
})
.spread(function(obj, docs, libraries, people) {
return vow
.all([
addDynamicNodes(obj.sitemap, obj.routes, docs, people),
addLibraryNodes(obj.sitemap, obj.routes, obj.libraryNodes, libraries)
]).spread(function(dynamic, libraries) {
return {
sitemap: removeCircularReferences(obj.sitemap),
routes: obj.routes,
docs: docs,
urls: dynamic,
people: people
};
});
})
.then(function(content) {
return saveAndUpload(content);
})
.then(
function() { logger.info(MSG.INFO.END); },
function() { logger.error(MSG.ERROR); }
);
}
};
/**
* Remove circular references for parent nodes
* for get ability to save sitemap object to json file
* @param tree - {Object} sitemap object with removed circular references
* @returns {Object}
*/
var removeCircularReferences = function(tree) {
var traverseTreeNodes = function(node) {
if(node.parent) {
node.parent = node.parent.id;
}
if(node.items) {
node.items = node.items.map(function(item) {
return traverseTreeNodes(item);
});
}
return node;
};
return tree.map(function(item) {
return traverseTreeNodes(item);
});
};