-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathbuild.js
More file actions
55 lines (44 loc) · 1.6 KB
/
build.js
File metadata and controls
55 lines (44 loc) · 1.6 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
/**
* TinyPine.js Build Script
* Minifies core.js for production
*/
const fs = require("fs");
const path = require("path");
// Read source file
const coreSource = fs.readFileSync("src/core.js", "utf8");
// Basic minification (remove comments, whitespace, etc.)
function minify(code) {
// Remove single-line comments
let minified = code.replace(/\/\/.*\n/g, "");
// Remove multi-line comments (not JSDoc)
minified = minified.replace(/\/\*[\s\S]*?\*\//g, (match) => {
// Keep JSDoc comments
if (match.includes("@param") || match.includes("@returns")) {
return match;
}
return "";
});
// Remove extra whitespace
minified = minified.replace(/\n\s*\n/g, "\n");
minified = minified.replace(/\s{2,}/g, " ");
// Remove whitespace around certain operators
minified = minified.replace(/\s*{\s*/g, "{");
minified = minified.replace(/\s*}\s*/g, "}");
minified = minified.replace(/\s*\(\s*/g, "(");
minified = minified.replace(/\s*\)\s*/g, ")");
minified = minified.replace(/\s*;\s*/g, ";");
minified = minified.replace(/\s*,\s*/g, ",");
minified = minified.replace(/\s*=\s*/g, "=");
return minified.trim();
}
// Create dist directory if it doesn't exist
if (!fs.existsSync("dist")) {
fs.mkdirSync("dist");
}
// Minify and write to dist
const minified = minify(coreSource);
fs.writeFileSync("dist/tinypine.min.js", minified);
// Get file size
const size = (fs.statSync("dist/tinypine.min.js").size / 1024).toFixed(2);
console.log("✅ Build complete!");
console.log(`📦 Output: dist/tinypine.min.js (${size} KB)`);