mirror of
https://github.com/zumbiepig/MineXLauncher.git
synced 2025-06-26 10:05:10 +00:00
step 2
This commit is contained in:
84
build.ts
84
build.ts
@@ -1,8 +1,11 @@
|
||||
import { $, build } from 'bun';
|
||||
import { mkdirSync, readdirSync, statSync, writeFileSync, readFileSync } from 'fs';
|
||||
import { resolve, dirname } from 'path';
|
||||
import chalk from 'chalk';
|
||||
import { build } from 'bun';
|
||||
import { mkdirSync, readdirSync, statSync, writeFileSync, readFileSync, rmSync } from 'fs';
|
||||
import { resolve, dirname, basename } from 'path';
|
||||
import { minify } from 'html-minifier';
|
||||
import javascriptObfuscator from 'javascript-obfuscator';
|
||||
import chalk from 'chalk';
|
||||
|
||||
console.clear();
|
||||
|
||||
function getFiles(baseDir: string, dir?: string, filesArr?: string[]) {
|
||||
dir = dir ?? baseDir;
|
||||
@@ -19,32 +22,31 @@ function getFiles(baseDir: string, dir?: string, filesArr?: string[]) {
|
||||
return filesArr;
|
||||
}
|
||||
|
||||
console.clear();
|
||||
|
||||
const isDev = process.env.NODE_ENV === 'development' ? true : false;
|
||||
const srcDir = resolve(import.meta.dir, 'src');
|
||||
const publicDir = resolve(import.meta.dir, 'public');
|
||||
const srcFilesArr = getFiles(resolve(import.meta.dir, 'src'));
|
||||
const srcFiles = getFiles(resolve(import.meta.dir, 'src'));
|
||||
const bundleFiles: string[] = [];
|
||||
const minifyFiles: string[] = [];
|
||||
const copyFiles: string[] = [];
|
||||
srcFiles.forEach((file) => {
|
||||
const strippedPath = file.replace(new RegExp(`^${srcDir}`), '');
|
||||
if (file.endsWith('.ts')) bundleFiles.push(file);
|
||||
else if (isDev) copyFiles.push(file);
|
||||
else if (/\.(html|css|js|json)$/.test(strippedPath)) {
|
||||
if (strippedPath.startsWith('/game/offline/') || basename(strippedPath) === 'classes.js') copyFiles.push(file);
|
||||
else minifyFiles.push(file);
|
||||
} else copyFiles.push(file);
|
||||
});
|
||||
|
||||
console.log(chalk.cyan('Linting code...\n'));
|
||||
//const lintOutput = await $`bunx eslint ./src/`.nothrow().text();
|
||||
//if (lintOutput) {
|
||||
// console.error(lintOutput);
|
||||
// process.exit(1);
|
||||
//}
|
||||
|
||||
console.log(chalk.cyan('Type-checking code...\n'));
|
||||
//const tscOutput = await $`bunx tsc`.nothrow().text();
|
||||
//if (tscOutput) {
|
||||
// console.error(tscOutput);
|
||||
// process.exit(1);
|
||||
//}
|
||||
|
||||
console.log(chalk.cyan('Removing old build artifacts...\n'));
|
||||
await $`rm -rf ./public/resources/scripts/ ./public/resources/data/assets.json ./public/sw.js ./public/sw-full.js`.quiet();
|
||||
if (!isDev) {
|
||||
console.log(chalk.cyan('Removing old build artifacts...\n'));
|
||||
rmSync(publicDir, { force: true, recursive: true });
|
||||
}
|
||||
|
||||
console.log(chalk.cyan('Bundling TypeScript and modules...\n'));
|
||||
await build({
|
||||
entrypoints: srcFilesArr.filter((file) => file.endsWith('.ts')),
|
||||
entrypoints: srcFiles.filter((file) => file.endsWith('.ts')),
|
||||
outdir: './public/',
|
||||
target: 'browser',
|
||||
root: './src/',
|
||||
@@ -55,10 +57,9 @@ await build({
|
||||
},
|
||||
});
|
||||
|
||||
console.log(chalk.cyan('Minifying HTML and CSS...\n'));
|
||||
srcFilesArr
|
||||
.filter((file) => !file.endsWith('.ts'))
|
||||
.forEach((file) => {
|
||||
if (!isDev) {
|
||||
console.log(chalk.cyan('Minifying HTML, JS, CSS, and JSON...\n'));
|
||||
minifyFiles.forEach((file) => {
|
||||
const outputPath = file.replace(new RegExp(`^${srcDir}`), publicDir);
|
||||
mkdirSync(dirname(outputPath), { recursive: true });
|
||||
writeFileSync(
|
||||
@@ -68,16 +69,37 @@ srcFilesArr
|
||||
removeComments: true,
|
||||
minifyCSS: true,
|
||||
minifyJS: true,
|
||||
continueOnParseError: true,
|
||||
})
|
||||
);
|
||||
});
|
||||
|
||||
console.log(chalk.cyan('Obfuscating JavaScript...\n'));
|
||||
await $`bunx javascript-obfuscator ./public/resources/scripts/ --output ./public/resources/scripts/ --options-preset high-obfuscation`.quiet();
|
||||
console.log(chalk.cyan('Obfuscating JavaScript...\n'));
|
||||
getFiles(resolve(publicDir, 'resources/scripts')).forEach((file) => {
|
||||
writeFileSync(
|
||||
file,
|
||||
javascriptObfuscator
|
||||
.obfuscate(readFileSync(file, 'utf-8'), {
|
||||
optionsPreset: 'high-obfuscation',
|
||||
target: 'browser',
|
||||
})
|
||||
.getObfuscatedCode()
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
console.log(chalk.cyan('Copying other files...\n'));
|
||||
copyFiles.forEach((file) => {
|
||||
const outputPath = file.replace(new RegExp(`^${srcDir}`), publicDir);
|
||||
mkdirSync(dirname(outputPath), { recursive: true });
|
||||
writeFileSync(outputPath, readFileSync(file));
|
||||
});
|
||||
|
||||
console.log(chalk.cyan('Generating assets list...\n'));
|
||||
const assetsJsonPath = resolve(publicDir, 'resources/data/assets.json');
|
||||
mkdirSync(dirname(assetsJsonPath), { recursive: true });
|
||||
writeFileSync(
|
||||
resolve(publicDir, 'resources/data/assets.json'),
|
||||
assetsJsonPath,
|
||||
JSON.stringify(
|
||||
getFiles(publicDir).map((asset) => {
|
||||
return asset.replace(new RegExp(`^${publicDir}`), '').replace(/\/index\.html$/, '/');
|
||||
|
||||
Reference in New Issue
Block a user