-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbuild-documentation.js
125 lines (103 loc) · 3.06 KB
/
build-documentation.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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
var glob = require('glob');
var fs = require('fs');
var markdox = require('markdox');
var async = require('async');
var path = require('path');
var _ = require('lodash');
var doxTemplate = __dirname + '/src/documentation/file-dox-template.ejs';
var docFolder = __dirname + '/documentation/';
var configDocFolder = docFolder + 'config/';
var docSrcFolder = __dirname + '/src/documentation/';
var options = {
src: [
'src/scripts/**/*.js'
],
configTarget: 'config'
};
var allFiles = getSourceFileList(options.src);
var filesToCopy = ['connectors.md'];
ensureDirectory([docFolder]);
generatePerFileDoc(allFiles);
generateAllFilesDoc(allFiles);
copyDocViewer(filesToCopy);
function ensureDirectory(paths) {
function ensure(dir) { if (!fs.existsSync(dir)) fs.mkdirSync(dir); }
_.each(paths, ensure);
}
function copyDocViewer(srcFiles) {
srcFiles.forEach(function (file) {
var src = docSrcFolder + file;
var dst = docFolder + file;
if(fs.existsSync(docSrcFolder + file)) {
console.log('copying file ' + src + ' -> ' + dst);
copyFile(src, dst, function(err) { if(err) console.log(err); });
} else {
console.log('file ' + src + ' does not exists!');
}
});
}
function copyFile(source, target, cb) {
var cbCalled = false;
var rd = fs.createReadStream(source);
rd.on("error", function(err) {
done(err);
});
var wr = fs.createWriteStream(target);
wr.on("error", function(err) {
done(err);
});
wr.on("close", function(ex) {
done();
});
rd.pipe(wr);
function done(err) {
if (!cbCalled) {
cb(err);
cbCalled = true;
}
}
}
function getSourceFileList(srcSpec) {
var allFiles = [];
srcSpec.forEach(function (spec) {
glob(spec, { sync: true, nosort: true }, function (er, files) {
allFiles = _.union(allFiles, files);
});
});
return allFiles;
}
function commentNormalizer(data) {
// change simple /* comments to /*! comments
// so Dox does not treat them as jsdoc documentation comments
return data.replace(/\/\*(?!\*)/gm, '/*!');
}
function generatePerFileDoc(allFiles) {
// One file per Javascript file
async.forEach(allFiles, function(file, next) {
markdox.process(file, {
output: docFolder + path.basename(file) + '.md',
template: doxTemplate,
compiler: function(filepath, data){
return commentNormalizer(data);
}
}, next);
}, function(err) {
if (err) {
throw err;
}
console.log('Documents generated with success');
});
}
function generateAllFilesDoc(allFiles) {
// One file for all Javascript files
var output = docFolder + 'all.md';
markdox.process(allFiles, {
output:output,
template: doxTemplate,
compiler: function(filepath, data){
return commentNormalizer(data);
}
}, function() {
console.log('File `all.md` generated with success');
});
}