Files
Unify/start.js

150 lines
2.6 KiB
JavaScript
Raw Permalink Normal View History

2025-12-25 11:16:59 +01:00
/*
Copyright (c) 2020, 2023, The Unified Company.
This code is part of Unify.
This program is free software; you can redistribute it and/or modify
it under the terms of the ESA Software Community License - Strong Copyleft,
https://unifyjs.org
*/
import child_process from'child_process';
import { execSync } from'child_process';
import binaryName from "./framework/node_modules/esbuild/getBinaryName.js"
import fs from 'fs';
import path from 'path';
import consoleColors from './framework/unify/consoleColors.js';
import colors from './framework/unify/consoleColors.js';
import cluster from 'cluster';
const originalEmit = process.emit;
process.emit = function (name, data, ...args) {
if (
name === `warning` &&
typeof data === `object` &&
data.name === `ExperimentalWarning`
//if you want to only stop certain messages, test for the message here:
//&& data.message.includes(`Fetch API`)
) {
return false;
}
return originalEmit.apply(process, arguments);
};
class boatLoader{
async cmd( command ) {
var imported = await import( command );
return imported;
}
async esBuild() {
var options = new Object();
options.stdio = 'pipe';
var args = new Array();
args.push("--bundle")
args.push('framework/client/index.js')
args.push("--outfile=assets/bundle.js")
args.push("--keep-names")
//args.push('--external:fs, better-sqlite3, process')
args.push('--format=esm')
//console.log(binaryName, args.join(" "))
console.log("\n\n Bundling application, This can take a while, Please wait...\n\n");
var child = child_process.spawnSync( binaryName, args, options );
if( child.error ) {
if( child.error.code == "EACCES" ) {
console.log( "\n\n" )
console.log( " EsBuild binary cannot be accessed." );
console.log( " Please perform an: \n\n" );
console.log( consoleColors.green( " sudo chmod 755 " + binaryName), "\n\n\n\n" );
return false;
}
}
return true;
}
async startServer() {
var proceed = true;
if( cluster.isMaster ) {
var cacheManager = await import( './framework/server/scripts/cacheManager.js' );
var cache = new cacheManager.default();
await cache.start();
var config = await import("./framework/configs/config.js")
if( config.default.mode == "production" ) {
proceed = await this.esBuild();
}
}
if( proceed ) {
import( './framework/server/index.js' );
}
return true;
}
}
//console.log(colors.green( "start.js" ));
var instance = new boatLoader();
await instance.startServer();