Browse Source

Refactor for elevated IPC

production
pb 2 years ago
parent
commit
efaa8f0bc4
1 changed files with 68 additions and 39 deletions
  1. 68
    39
      index.js

+ 68
- 39
index.js View File

@@ -1,16 +1,72 @@
global.env = process.env
global.env.NODE_ENV = global.env.NODE_ENV || 'development'
var __g = require('global-this');
__g.env = process.env
__g.env.NODE_ENV = __g.env.NODE_ENV || 'development'


const fs = require('fs')
var path = require('path');
var utils = require('bbhverse');



const cliargs = utils.cliargs;
const processedArgs = cliargs(process.argv.slice(2));
if(!processedArgs.wd){
if(process.env.wd){
}
else {
process.env.wd = process.cwd();
if(process.cwd() === __dirname) {
// This script was launched in the same dir.
// We do not know if it was copied to some random location. Check if we have elxr installed in current location. Or subidr.
process.env.wd = path.dirname( process.env.wd ); // Default to the parent.
}
}
}
else process.env.wd = processedArgs.wd
var ENV = Object.assign({}, process.env); // Shallow clone it.

const __ALIAS__STAMP__ = '9e7bebe0-1f57-11ec-8f88-778ffeea9d1b'
const BUILD_VERSION = '[VI]Version: {version} - built on {date}[/VI]';
const runtimestamp = processedArgs.runtimestamp ? (new Date(processedArgs.runtimestamp)).getTime() : (new Date()).getTime();
function getVersion() { return BUILD_VERSION; }
console.log(getVersion());


var selectedinstance = (function() {
var __pvt = { root : process.env.wd || process.env.PWD }
var __pub = {
get root(){ return __pvt.root }
, set root(val){
throw 'root has changed'
// if the root changes for this run we need to relocate all the necessary files to that folder for this run.
if(__pvt.root === val){
fsMove()
return __pvt.root = val
}
else __pvt.root
}
}

Object.defineProperty(__g, 'selectedinstance', {
get(){ return __pub}
, set( inst ){ __pvt = inst; return __pub }
})
return __pub;
})()

var any = utils.any;
var Tasq = utils.Tasq
var statuslog = utils.Traq
var Traq = utils.Traq
Tasq.addlistener(statuslog.statuslog)
// fs.writeFileSync('run.log', ', ' + JSON.stringify( { m : 'Hello'} ), { 'flag': 'a+' })
Tasq.addlistener((e)=>{ fs.writeFileSync('run.log', ', ' + JSON.stringify( e ), { 'flag': 'a+' }) })

// Instead of waiting for the root to be establised we start working at the current locatoin and then relocate when root changes.
var runlogjson = `${selectedinstance.root}/.elxr/run-${runtimestamp}/run.log`
ensureDirectoryExistence(runlogjson)
fs.writeFileSync(runlogjson, JSON.stringify( `Started ${runtimestamp}`)) // Initialize a new log file with "logrotate" for every run
Tasq.addlistener((e)=>{ fs.writeFileSync(runlogjson, ', ' + JSON.stringify( e ), { 'flag': 'a+' }) })
var cli = require('./cliverse')
function isWin(){ return /^win/.test(process.platform) }
if(isWin()) {
@@ -22,13 +78,10 @@ else {
var shell_verse = lin_verse;
}



var nodeShellExec = cli.nodeShellExec;
var chalk = require('chalk')
const homedir = require('os').homedir();


function sysAddPathVar(addpath){
// Object.assign({
// inherit: true, shell: true, env: ENV, title: `${command} ${args}`
@@ -41,7 +94,7 @@ function sysAddPathVar(addpath){
$newpath = $path + ';${addpath}'
[Environment]::SetEnvironmentVariable("PATH", $newpath, 'Machine')`
]).then(() => {
fs.writeFileSync('run.done', 'success')
fs.writeFileSync('run.done', 'success') // PB : TODO -- IPC through files is needed only for windows.
}).catch(() => {
fs.writeFileSync('run.done', 'error')
})
@@ -94,12 +147,6 @@ function getCurrentFolder(){
return any(tasks);
}

const __ALIAS__STAMP__ = '9e7bebe0-1f57-11ec-8f88-778ffeea9d1b'
const BUILD_VERSION = '[VI]Version: {version} - built on {date}[/VI]';
const runtimestamp = (new Date()).getTime();
function getVersion() { return BUILD_VERSION; }
console.log(getVersion());

// 'use strict';

// PB : TODO -- make sure folder context is proper coz we can now run elxr from anywhere.
@@ -153,23 +200,6 @@ const existslink = function(name, cb){
}
const existsFolderSync = existsSync;

const cliargs = utils.cliargs;
const processedArgs = cliargs(process.argv.slice(2));
if(!processedArgs.wd){
if(process.env.wd){
}
else {
process.env.wd = process.cwd();
if(process.cwd() === __dirname) {
// This script was launched in the same dir.
// We do not know if it was copied to some random location. Check if we have elxr installed in current location. Or subidr.
process.env.wd = path.dirname( process.env.wd ); // Default to the parent.
}
}
}
else process.env.wd = processedArgs.wd
var ENV = Object.assign({}, process.env); // Shallow clone it.



@@ -2013,7 +2043,7 @@ var op = {
}
];
return any(tasks).then(() => {
fs.writeFileSync('run.done', 'success')
fs.writeFileSync('run.done', 'success') // PB : TODO -- IPC through files is needed only for windows.
}).catch(() => {
fs.writeFileSync('run.done', 'error')
})
@@ -2048,7 +2078,7 @@ var op = {
selectedinstance.instanceName && runconfig.use === selectedinstance.instanceName) {

console.log(`No change detected. Already using requested specs : ${runconfig.NODE_ENV} ${runconfig.use}`)
if (processedArgs.runas) { fs.writeFileSync('run.done', 'success') }
if (processedArgs.runas) { fs.writeFileSync('run.done', 'success') } // PB : TODO -- IPC through files is needed only for windows.
if (existsSync('config') && existsSync('data')){
return
}
@@ -3107,7 +3137,7 @@ var configs = (function(){
console.warn('elevated repo manifest has obsolete format. Attempting upgrade.')
selectedinstance.elevated = selectedinstance.elevated.map(function(repo){ return { repo } })
}
chessinstances[selected.instanceName][selected.node_env] = selectedinstance = utils.assign_core( { arraymergetype : utils.assign_core.DISTINCT_UNION }
chessinstances[selected.instanceName][selected.node_env] = selectedinstance = __g.selectedinstance = utils.assign_core( { arraymergetype : utils.assign_core.DISTINCT_UNION }
, selected, selectedinstance)
chessinstances[selected.instanceName][selected.node_env].reposervers = Array.from(new Set(chessinstances[selected.instanceName][selected.node_env].reposervers))
selectedinstance.reposerver = selectedinstance.reposerver || selectedinstance.reposervers[0] // PB : TODO -- Attempt first one that is available and online...
@@ -3328,7 +3358,7 @@ var __acquireConfig = function (selected, options, configrepo, errHandler) {
console.warn('elevated repo manifest has obsolete format. Attempting upgrade.')
selectedinstance.elevated = selectedinstance.elevated.map(function(repo){ return { repo } })
}
chessinstances[selected.instanceName][selected.node_env] = selectedinstance = utils.assign_core( { arraymergetype : utils.assign_core.DISTINCT_UNION }
chessinstances[selected.instanceName][selected.node_env] = selectedinstance = __g.selectedinstance = utils.assign_core( { arraymergetype : utils.assign_core.DISTINCT_UNION }
, selected, selectedinstance)
chessinstances[selected.instanceName][selected.node_env].reposervers = Array.from(new Set(chessinstances[selected.instanceName][selected.node_env].reposervers))
selectedinstance.reposerver = selectedinstance.reposerver || selectedinstance.reposervers[0] // PB : TODO -- Attempt first one that is available and online...
@@ -4065,7 +4095,6 @@ function findlocalinstances(chessinstances, instanceoptions){


// function updateselection(selected) { selectedinstance = utils.assign(selectedinstance, selected) }
var selectedinstance = { root : process.env.wd };
var runconfig = null;

var chessinstances = { current_run : {} };
@@ -4477,7 +4506,7 @@ function initinstances(selected_overrides) {
// PB : TODO -- We now have options that can be passed into assign_core to control this behavior.
if(selected_overrides.node_env === undefined) delete selected_overrides.node_env
selectedinstance = utils.assign_core( { arraymergetype : utils.assign_core.DISTINCT_UNION }
selectedinstance = __g.selectedinstance = utils.assign_core( { arraymergetype : utils.assign_core.DISTINCT_UNION }
, __default
, chessinstances[instanceName][node_env]
, clioverrides
@@ -4655,7 +4684,7 @@ function generateDependencies(){
var timer = function(){
l('.');
if(fso.FileExists("run.done")) {
fso.DeleteFile('run.done')
fso.DeleteFile('run.done') // PB : TODO -- IPC through files is needed only for windows we need to do it per run...
close();
}
else window.setTimeout(timer, 1000);
@@ -4687,7 +4716,7 @@ var startElxr = function() {
var cmdprompts = cmdinstance.getPossiblePrompts()
selectedinstance.node_env ? selectedinstance.node_env : selectedinstance.node_env = clioverrides.node_env
// PB : TODO -- Most recent should be at the tip ! at index 0 so utils.reverseassign is required !!!
selectedinstance = utils.assign_core( { arraymergetype : utils.assign_core.DISTINCT_UNION }
selectedinstance = __g.selectedinstance = utils.assign_core( { arraymergetype : utils.assign_core.DISTINCT_UNION }
, ...detectedinstanceoptions.slice(-2), promptkeys )
// promptkeys = utils.assign(promptkeys, clioverrides)


Loading…
Cancel
Save