123 lines
4.9 KiB
JavaScript
123 lines
4.9 KiB
JavaScript
|
const child_process = require("child_process")
|
||
|
const path = require("path")
|
||
|
const bytenode = require("bytenode")
|
||
|
const terser = require("terser")
|
||
|
const util = require("util")
|
||
|
var rimraf = require("rimraf");
|
||
|
let electron
|
||
|
try{
|
||
|
electron = require("electron")
|
||
|
}catch(e){
|
||
|
electron = null
|
||
|
}
|
||
|
let fs = electron ? require("original-fs") : require("fs")
|
||
|
|
||
|
console.log = (...args) => {
|
||
|
process.stdout.write(Buffer.from(util.formatWithOptions({colors: true}, ...args)+"\n", "binary").toString("utf8"))
|
||
|
}
|
||
|
console.info = (...args) => {
|
||
|
console.log(`\x1b[34m[INFO]\x1b[0m`, ...args)
|
||
|
}
|
||
|
|
||
|
async function main(){
|
||
|
if(electron)await electron.app.whenReady()
|
||
|
|
||
|
console.log(__dirname, process.cwd())
|
||
|
|
||
|
console.info("Reseting existent directory...")
|
||
|
child_process.execSync("node remove.js") // why can't electron remove directory ? it just doesn't work and I am required to use electron for the .jsc compilation.
|
||
|
await fs.promises.mkdir(__dirname+"/distApp/dist", {"recursive": true})
|
||
|
|
||
|
console.info("Executing command `tsc`")
|
||
|
console.log(child_process.execSync("tsc", {encoding: "binary"}))
|
||
|
|
||
|
let startDir = path.join(__dirname, "./dist")
|
||
|
let newDir = path.join(__dirname, "./distApp/dist")
|
||
|
console.info("No error detected. Copying files from "+startDir+".")
|
||
|
await fs.promises.mkdir(startDir, {recursive: true})
|
||
|
|
||
|
async function processNextDir(folder, folders, predicate, compile){
|
||
|
for(let file of fs.readdirSync(folder, {withFileTypes: true})){
|
||
|
if(file.isFile()){
|
||
|
let filepath = path.join(folder, file.name)
|
||
|
if(predicate(filepath)){
|
||
|
await compile(filepath, path.join(filepath.replace(folders.startDir, folders.newDir)), "..")
|
||
|
}else{
|
||
|
await fs.promises.copyFile(filepath, filepath.replace(folders.startDir, folders.newDir))
|
||
|
}
|
||
|
}else if(file.isDirectory()){
|
||
|
await fs.promises.mkdir(path.join(folder, file.name).replace(folders.startDir, folders.newDir), {recursive: true})
|
||
|
await processNextDir(path.join(folder, file.name), ...Array.from(arguments).slice(1))
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
await processNextDir(startDir, {
|
||
|
startDir,
|
||
|
newDir
|
||
|
}, ((filepath) => filepath.endsWith(".js") && !filepath.endsWith("launcher.js")), (filepath, newpath) => {
|
||
|
console.info(`Compiling ${filepath} to ${newpath}c`)
|
||
|
bytenode.compileFile(filepath, newpath+"c")
|
||
|
}).then(() => {
|
||
|
console.info(`Copied files and minified them from ${startDir}.`)
|
||
|
}).catch(console.error)
|
||
|
|
||
|
await processNextDir(path.join(__dirname, "modules"), {
|
||
|
startDir: path.join(__dirname, "modules"),
|
||
|
newDir: path.join(__dirname, "distApp", "modules")
|
||
|
}, (filepath) => {
|
||
|
if(filepath.includes("node_modules"))return false
|
||
|
if(filepath.endsWith(".node"))return false
|
||
|
if(filepath.endsWith(".json"))return false
|
||
|
if(filepath.endsWith(".js")){
|
||
|
if(filepath.endsWith("mainScreenPreload.js"))return false
|
||
|
for(let file of [
|
||
|
"discord_cloudsync\\index.js",
|
||
|
"discord_desktop_core\\index.js",
|
||
|
"discord_dispatch\\index.js",
|
||
|
"discord_erlpack\\index.js",
|
||
|
"discord_game_utils\\index.js",
|
||
|
"discord_krisp\\index.js",
|
||
|
"discord_media\\index.js",
|
||
|
"discord_modules\\index.js",
|
||
|
"discord_overlay2\\index.js",
|
||
|
"discord_rpc\\index.js",
|
||
|
"discord_spellcheck\\index.js",
|
||
|
"discord_utils\\index.js",
|
||
|
"discord_voice\\index.js",
|
||
|
"discord_desktop_core\\core\\app\\index.js"
|
||
|
]){
|
||
|
if(filepath.endsWith(file))return false
|
||
|
}
|
||
|
return true
|
||
|
}
|
||
|
return false
|
||
|
}, (filepath, newpath) => {
|
||
|
console.info(`Compiling ${filepath} to ${newpath}c`)
|
||
|
bytenode.compileFile(filepath, newpath+"c")
|
||
|
}).then(() => {
|
||
|
console.info(`Copied files and minified them from ${path.join(__dirname, "modules")}.`)
|
||
|
})
|
||
|
await processNextDir(startDir, {
|
||
|
startDir,
|
||
|
newDir
|
||
|
}, ((filepath) => false), ()=>{}).then(() => {
|
||
|
console.info(`Copied files and minified them from ${startDir}.`)
|
||
|
}).catch(console.error)
|
||
|
|
||
|
let packageJSON = require("./package.json")
|
||
|
packageJSON.scripts.build = packageJSON.scripts.build.replace("./distApp", ".")
|
||
|
|
||
|
fs.writeFileSync(path.join(__dirname, "distApp", "package.json"), JSON.stringify(packageJSON), "utf8")
|
||
|
|
||
|
console.info(`Installing ${Object.keys(packageJSON.dependencies).length + Object.keys(packageJSON.devDependencies).length} packages...`)
|
||
|
console.log(child_process.execSync("npm i", {
|
||
|
encoding: "binary",
|
||
|
cwd: path.join(__dirname, "distApp")
|
||
|
}))
|
||
|
}
|
||
|
main()
|
||
|
.then(() => {
|
||
|
if(electron){
|
||
|
electron.app.exit()
|
||
|
}
|
||
|
})
|