angular-ide
Version:
Provides a seamless integration with the Angular IDE from the command-line for developers looking for an enhanced development experience with Angular.
110 lines (88 loc) • 3.5 kB
JavaScript
const prepareImportProjectMessage = require('../lib/utils').prepareImportProjectMessage;
const getIDEExecutablePath = require('../lib/utils').getIDEExecutablePath;
const ideHasProcessedOperation = require('../lib/utils').ideHasProcessedOperation;
const getInstallations = require('../lib/utils').getInstallations;
const path = require('path');
const homedir = require('homedir');
const getProjectPath = require('../lib/utils').getProjectPath;
const Messages = require('./messages');
const child_process = require('child_process');
const wsManager = require('../addon/services/WSConnectionsManager');
const Rx = require('rxjs');
function openProjectInIDE(openPath) {
getProjectPath(path.resolve(openPath))
.subscribe(x => {
const actualProjectPath = x[1];
console.log(Messages.OPENING_ANGULAR_IDE, actualProjectPath);
const commandMessage = prepareImportProjectMessage(actualProjectPath);
const ideHasProcessedOperation$ = ideHasProcessedOperation(wsManager);
const ideLocationsPath = path.resolve(homedir()+'/.webclipse/angular-ide.locations');
Rx.Observable.interval(1000)
.withLatestFrom(ideHasProcessedOperation$)
.subscribe(([interval, ideHasProcessedOperation]) => {
if (!ideHasProcessedOperation) {
wsManager.sendToAll(commandMessage);
}
});
const installations$ = getInstallations();
const runningInstallations$ = installations$
.flatMap(installations => {
return installations.filter(installation => installation.port);
});
runningInstallations$
.subscribe(installation => {
wsManager.register(installation.port);
});
const ideRan$ = Rx.Observable.create(a => {
a.next(false);
Rx.Observable.timer(2000)
.withLatestFrom(ideHasProcessedOperation$)
.subscribe( ([t, ideHasProcessedOperation]) => {
if (!ideHasProcessedOperation) {
const aoe = installations$.subscribe(installations => {
a.next(true);
aoe.unsubscribe();
getIDEExecutablePath(installations[0])
.subscribe(ideExecutablePath => {
console.log(Messages.STARTING_ANGULAR_IDE);
const execIDE = child_process.spawn(ideExecutablePath, [], {
detached: true,
});
Rx.Observable.fromEvent(execIDE, 'exit')
.subscribe(
x => {
process.exit();
}
);
Rx.Observable.fromEvent(execIDE, 'error')
.subscribe(
x => {
console.log(Messages.ANGULAR_IDE_NOT_STARTED);
process.exit();
}
);
});
});
}
});
});
ideHasProcessedOperation$
.combineLatest(ideRan$)
.subscribe( ([hasProcessed, ideRan]) => {
if (hasProcessed) {
process.exit();
}
});
ideHasProcessedOperation$
.subscribe(x => {
if (x) {
console.log(Messages.VALIDATING_PROJECT);
}
});
},
e => {
console.log(Messages.NOT_ANGULAR_PROJECT);
process.exit();
});
}
module.exports = openProjectInIDE;