-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinstall.js
100 lines (86 loc) · 2.62 KB
/
install.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
var https = require("https");
var fs = require("fs");
var path = require("path");
var replaceSpecials = (function() {
var regex = /[\(\)\[\]\{\}\,\ \.\:]+/gi;
var regex2 = / /gi;
return function(text) {
return text.replace(regex, " ").toLowerCase().trim().replace(regex2, "_");
};
})();
https.get("https://nodejs.org/api/all.json", function(response) {
var body = "";
response.on("data", function(chunk) {
body += chunk;
});
response.on("end", function() {
var API = generateAPIExternals(JSON.parse(body));
fs.writeFile(path.join(__dirname, "./externals.json"),
JSON.stringify(API, null, " "), function(err) {
process.exit(err ? 1 : 0);
});
});
});
function generateAPIExternals(API) {
var APIMOD = API.modules;
var APITAGS = {};
for(var i = 0; i < APIMOD.length; ++i) {
var mod = APIMOD[i];
var baseName = toModuleName(mod.name);
var tags = APITAGS[baseName] = {
$base: baseName + ".html"
};
var base = tags.$base + "#" + baseName + "_";
if(mod.methods) {
for(var j = 0; j < mod.methods.length; ++j) {
var m = mod.methods[j];
tags[baseName + "." + m.name] = base + replaceSpecials(m.textRaw);
}
}
if(mod.properties) {
for(var j = 0; j < mod.properties.length; ++j) {
var m = mod.properties[j];
tags[baseName + "." + m.name] = base + replaceSpecials(m.textRaw);
}
}
if(mod.classes) {
for(var k = 0; k < mod.classes.length; ++k) {
var m = mod.classes[k];
var name = (startsWith(m.name,baseName) ? "" : baseName + ".") + m.name;
tags[name] = base + replaceSpecials(m.textRaw);
if(m.methods) {
for(var l = 0; l < m.methods.length; ++l) {
var cm = m.methods[l];
tags[name + "#" + cm.name] = base +
replaceSpecials(m.textRaw);
}
}
if(m.properties) {
for(l = 0; l < m.properties.length; ++l) {
var cm = m.properties[l];
tags[name + "#" + cm.name] = base +
replaceSpecials(m.textRaw);
}
}
if(m.classMethods) {
for(l = 0; l < m.classMethods.length; ++l) {
var cm = m.classMethods[l];
tags[name + "." + cm.name] = base +
replaceSpecials(m.textRaw.replace("Class Method: "));
}
}
}
}
}
return APITAGS;
}
function startsWith(str, search) {
return str.slice(0, search.length) === search;
}
function toModuleName(str) {
if(str.indexOf("(") !== -1) {
var splitted = str.split("_(");
str = splitted[0];
}
return str.toLowerCase();
}