UNPKG

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.

111 lines (88 loc) 3.46 kB
const prepareOpenFileMessage = require('../lib/utils').prepareOpenFileMessage; 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 openFileInIDE(openPath) { getProjectPath(path.dirname(openPath)) .subscribe(x => { console.log(Messages.OPENING_ANGULAR_IDE, openPath); const actualProjectPath = x[1]; const commandMessage = prepareOpenFileMessage(openPath); 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 = openFileInIDE;