-
Notifications
You must be signed in to change notification settings - Fork 4
/
generate.js
63 lines (53 loc) · 2.77 KB
/
generate.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
const VERSION_INCREASE = 0;
const fetch = options => new Promise((resolve, reject) => {
require("https").get(options, function(response) {
let body = "";
if (response.statusCode !== 200) { reject(new Error("Request failed. Status code: " + response.statusCode)); response.resume(); return; }
response.on("error", err => reject(err));
response.on("data", chunk => body += chunk);
response.on("end", () => resolve(body));
});
});
async function generate() {
let changelog = await fetch({
host: "raw.githubusercontent.com",
path: "/FortAwesome/Font-Awesome/master/CHANGELOG.md"
});
let version = (changelog.match(/(?:\n|^)##\s+\[(\d+\.\d+\.\d+)\]/)||[,""])[1];
if (version.length < 3) {
throw new Error("Couldn't parse version");
}
var packageVersion = version.replace(/\.\d$/, x => "." + (parseInt(x.substr(1)) + VERSION_INCREASE));
console.log("Font Awesome v" + version + " (package version " + packageVersion + ")");
let source = await fetch({
host: "pro.fontawesome.com",
path: "/releases/v" + version + "/css/all.css",
headers: {
"Referer": "https://mo-mar.de"
}
});
var fa = "/* Unicode mappings for FontAwesome Pro v" + version + " */\nvar fa=function(i){return fa[i.replace(/-./g,function(x){return x.substr(1).toUpperCase()})]};"
var namecount = 0;
var main = source.match(/(\}\.fa-[a-z0-9\-]+(?::before,\.fa-[a-z0-9\-]+)*):before\{content:"\\([0-9a-f]+)"/g);
if (!main) { console.log("Couldn't parse icons"); return process.exit(1); }
for (var i = 0; i < main.length; i++) {
var icon = main[i].match(/(\}\.fa-[a-z0-9\-]+(?::before,\.fa-[a-z0-9\-]+)*):before\{content:"\\([0-9a-f]+)"/).slice(1);
icon[0] = icon[0].substr(5).split(/:before,\.fa-/);
for (var k = 0; k < icon[0].length; k++) {
icon[0][k] = icon[0][k].replace(/-./g, function(x) { return x.substr(1).toUpperCase() });
// fa.500px is not valid JS
if (icon[0][k].match(/^[^a-z]/)) fa += "fa[\"" + icon[0][k] + "\"]=\"\\u" + icon[1] + "\";";
else fa += "fa." + icon[0][k] + "=\"\\u" + icon[1] + "\";";
}
namecount += icon[0].length;
}
fa += "module.exports=fa;";
require("fs").writeFileSync(__dirname + "/index.js", fa);
console.log(main.length + " icons parsed (" + namecount + " names)")
var packageInfo = require("fs").readFileSync(__dirname + "/package.json").toString();
packageInfo = packageInfo.replace(/(\"version\":\s*\")[\d.]+\"/, "$1"+packageVersion+"\"");
require("fs").writeFileSync(__dirname + "/package.json", packageInfo);
}
generate()
.then(() => console.log("Successfully generated new index.js"))
.catch(err => console.error(err));