150 lines
2.6 KiB
JavaScript
150 lines
2.6 KiB
JavaScript
|
|
/*
|
||
|
|
|
||
|
|
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();
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|