-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpack.js
More file actions
executable file
·72 lines (64 loc) · 2.5 KB
/
pack.js
File metadata and controls
executable file
·72 lines (64 loc) · 2.5 KB
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
const DEBUG = true;
const fs = require("fs");
const path = require('path');
const UglifyJS = require("uglify-js");
const htmlminify = require('html-minifier').minify;
const mime = require('mime-types');
if(process.argv.length != 3) {
console.log("Usage: node pack.js <html-output-file>\n");
process.exit();
}
const outputFile = process.argv[2];
const uicss = fs.readFileSync("ui.css", "utf8");
const uicode = "<style>" + uicss + "</style>" + fs.readFileSync("ui.html", "utf8");
const minifiedui = htmlminify(uicode);
const code = fs.readFileSync("engine.js", "utf8") + fs.readFileSync("game.js", "utf8");
const minified = UglifyJS.minify(code, { mangle: { toplevel: true, reserved: ["initAd", "resized"] } });
if(minified.error) {
console.error(`Error minifying code: ${minified.error}`);
process.exit(-1);
}
let resources = "let images={};let sounds={};";
let files;
try {
files = fs.readdirSync("images");
}
catch (err) {
return console.log(`Unable to read 'images' directory: ${err}`);
}
files.forEach(function (filename) {
const dot = filename.lastIndexOf(".");
const imgName = filename.slice(0, dot);
const mimeType = mime.lookup(filename);
if(!mimeType.startsWith("image")) {
console.warning(`Warning: found non-image file '${filename}' in 'images' folder, ignoring!`);
}
else if(!imgName.startsWith(".")) {
resources += `images.${imgName}="data:${mimeType};base64,${fs.readFileSync(path.join("images",filename)).toString("base64")}";`;
}
});
try {
files = fs.readdirSync("sounds");
}
catch (err) {
return console.log(`Unable to read 'sounds' directory: ${err}`);
}
files.forEach(function (filename) {
const dot = filename.lastIndexOf(".");
const sndName = filename.slice(0, dot);
const mimeType = mime.lookup(filename);
if(!mimeType.startsWith("audio")) {
console.warning(`Warning: found non-audio file '${filename}' in 'sounds' folder, ignoring!`);
}
else if(!sndName.startsWith(".")) {
resources += `sounds.${sndName}="data:${mimeType};base64,${fs.readFileSync(path.join("sounds",filename)).toString("base64")}";`;
}
});
const output = fs.readFileSync("boilerplate.html", "utf8").replace("UI", minifiedui).replace("JSCODE", DEBUG ? code : minified.code).replace("RESOURCES", resources);
try {
fs.writeFileSync(outputFile, output);
var stats = fs.statSync(outputFile);
console.log(`Succesfully written ${stats.size} bytes (${(stats.size / 1024).toFixed(1)} kB, ${(stats.size / 1048576).toFixed(1)} MB) to '${outputFile}'.\n`);
} catch (err) {
console.error(`Error writing to '${outputFile}':\n${err}\n`);
}