Eugene Pankov 8 years ago
parent
commit
2d1dca41d7

+ 3 - 1
app/main.js

@@ -27,7 +27,9 @@ if (!process.env.TERMINUS_PLUGINS) {
   process.env.TERMINUS_PLUGINS = ''
 }
 
-process.env.TERMINUS_PLUGINS += `:${path.resolve(__dirname, '..')}`
+if (process.env.DEV) {
+  process.env.TERMINUS_PLUGINS += `:${path.resolve(__dirname, '..')}`
+}
 
 setupWindowManagement = () => {
     let windowCloseable

+ 6 - 5
app/src/entry.ts

@@ -12,7 +12,7 @@ import { enableProdMode } from '@angular/core'
 import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'
 
 import { getRootModule } from './app.module'
-import { loadPlugins } from './plugins'
+import { findPlugins, loadPlugins } from './plugins'
 
 if ((<any>global).require('electron-is-dev')) {
     console.warn('Running in debug mode')
@@ -20,9 +20,10 @@ if ((<any>global).require('electron-is-dev')) {
     enableProdMode()
 }
 
-loadPlugins((current, total) => {
-    (<HTMLElement>document.querySelector('.progress .bar')).style.width = 100 * current / total + '%'
-}).then(async plugins => {
-    let module = await getRootModule(plugins)
+findPlugins().then(async plugins => {
+    let pluginsModules = loadPlugins(plugins, (current, total) => {
+        (<HTMLElement>document.querySelector('.progress .bar')).style.width = 100 * current / total + '%'
+    })
+    let module = await getRootModule(pluginsModules)
     platformBrowserDynamic().bootstrapModule(module)
 })

+ 27 - 9
app/src/plugins.ts

@@ -19,27 +19,46 @@ if (process.env.TERMINUS_PLUGINS) {
 
 export declare type ProgressCallback = (current, total) => void
 
-interface IFoundPlugin {
+interface IPluginEntry {
     name: string
     path: string
+    info: any
 }
 
-export async function loadPlugins (progress: ProgressCallback): Promise<any[]> {
+export async function findPlugins (): Promise<IPluginEntry[]> {
     let paths = nodeModule.globalPaths
-    let plugins: any[] = []
-    let foundPlugins: IFoundPlugin[] = []
+    let foundPlugins: IPluginEntry[] = []
 
-    progress(0, 1)
     for (let pluginDir of paths) {
         pluginDir = normalizePath(pluginDir)
         if (!await fs.exists(pluginDir)) {
             continue
         }
         let pluginNames = await fs.readdir(pluginDir)
-        pluginNames.filter(pluginName => /^terminus-/.exec(pluginName)).forEach(name => {
-            foundPlugins.push({ name, path: path.join(pluginDir, name) })
-        })
+        for (let pluginName of pluginNames.filter(x => /^terminus-/.exec(x))) {
+            let pluginPath = path.join(pluginDir, pluginName)
+            let infoPath = path.join(pluginPath, 'package.json')
+            if (!await fs.exists(infoPath)) {
+                continue
+            }
+            try {
+                foundPlugins.push({
+                    name: pluginName,
+                    path: pluginPath,
+                    info: await fs.readJson(infoPath),
+                })
+            } catch (error) {
+                console.error('Cannot load package info for', pluginName)
+            }
+        }
     }
+
+    return foundPlugins
+}
+
+export function loadPlugins (foundPlugins: IPluginEntry[], progress: ProgressCallback): any[] {
+    let plugins: any[] = []
+    progress(0, 1)
     foundPlugins.forEach((foundPlugin, index) => {
         console.info(`Loading ${foundPlugin.name}: ${(<any>global).require.resolve(foundPlugin.path)}`)
         progress(index, foundPlugins.length)
@@ -50,7 +69,6 @@ export async function loadPlugins (progress: ProgressCallback): Promise<any[]> {
             console.error(`Could not load ${foundPlugin.name}:`, error)
         }
     })
-
     progress(1, 1)
     return plugins
 }

+ 0 - 1
terminus-settings/webpack.config.js

@@ -40,7 +40,6 @@ module.exports = {
     'fs-promise',
     'path',
     'node-pty',
-    'child-process-promise',
     'fs-promise',
     /^rxjs/,
     /^@angular/,

+ 2 - 1
terminus-terminal/package.json

@@ -12,6 +12,7 @@
   "license": "MIT",
   "devDependencies": {
     "@types/deep-equal": "^1.0.0",
+    "@types/mz": "0.0.31",
     "@types/node": "7.0.12",
     "@types/webpack-env": "1.13.0",
     "@types/winreg": "^1.2.30",
@@ -38,10 +39,10 @@
     "rxjs": "5.3.0"
   },
   "dependencies": {
-    "child-process-promise": "2.2.1",
     "font-manager": "0.2.2",
     "fs-promise": "2.0.2",
     "hterm-commonjs": "1.0.0",
+    "mz": "^2.6.0",
     "node-pty": "0.6.2",
     "winreg": "^1.2.3"
   }

+ 3 - 3
terminus-terminal/src/components/terminalSettingsTab.component.ts

@@ -1,9 +1,9 @@
 import { Observable } from 'rxjs'
 import * as fs from 'fs-promise'
 import * as path from 'path'
+import { exec } from 'mz/child_process'
 const equal = require('deep-equal')
 const fontManager = require('font-manager')
-const { exec } = require('child-process-promise')
 
 import { Component, Inject } from '@angular/core'
 import { ConfigService, HostAppService, Platform } from 'terminus-core'
@@ -44,8 +44,8 @@ export class TerminalSettingsTabComponent {
             this.fonts.sort()
         }
         if (this.hostApp.platform == Platform.Linux) {
-            exec('fc-list :spacing=mono').then((result) => {
-                this.fonts = result.stdout
+            exec('fc-list :spacing=mono').then(([stdout, _]) => {
+                this.fonts = stdout
                     .split('\n')
                     .filter(x => !!x)
                     .map(x => x.split(':')[1].trim())

+ 3 - 3
terminus-terminal/src/persistenceProviders.ts

@@ -1,5 +1,5 @@
 import * as fs from 'fs-promise'
-const { exec, spawn } = require('child-process-promise')
+import { exec, spawn } from 'mz/child_process'
 
 import { Injectable } from '@angular/core'
 import { Logger, LogService } from 'terminus-core'
@@ -13,7 +13,7 @@ interface IChildProcess {
 }
 
 async function listProcesses (): Promise<IChildProcess[]> {
-    return (await exec(`ps -A -o pid,ppid,command`)).stdout
+    return (await exec(`ps -A -o pid,ppid,command`))[0].toString()
         .split('\n')
         .slice(1)
         .map(line => line.split(' ').filter(x => x).slice(0, 3))
@@ -38,7 +38,7 @@ export class ScreenPersistenceProvider extends SessionPersistenceProvider {
     async attachSession (recoveryId: any): Promise<SessionOptions> {
         let lines: string[]
         try {
-            lines = (await exec('screen -list')).stdout.split('\n')
+            lines = (await exec('screen -list'))[0].toString().split('\n')
         } catch (result) {
             lines = result.stdout.split('\n')
         }

+ 3 - 3
terminus-terminal/src/services/sessions.service.ts

@@ -3,7 +3,7 @@ import * as fs from 'fs-promise'
 import { Subject } from 'rxjs'
 import { Injectable } from '@angular/core'
 import { Logger, LogService } from 'terminus-core'
-const { exec } = require('child-process-promise')
+import { exec } from 'mz/child_process'
 
 import { SessionOptions, SessionPersistenceProvider } from '../api'
 
@@ -85,7 +85,7 @@ export class Session {
             this.kill()
         } else {
             await new Promise((resolve) => {
-                this.kill('SIGTERM') 
+                this.kill('SIGTERM')
                 setImmediate(() => {
                     if (!this.open) {
                         resolve()
@@ -114,7 +114,7 @@ export class Session {
 
     async getWorkingDirectory (): Promise<string> {
         if (process.platform == 'darwin') {
-            let lines = (await exec(`lsof -p ${this.truePID} -Fn`)).stdout.split('\n')
+            let lines = (await exec(`lsof -p ${this.truePID} -Fn`))[0].toString().split('\n')
             return lines[2].substring(1)
         }
         if (process.platform == 'linux') {

+ 1 - 1
terminus-terminal/webpack.config.js

@@ -40,7 +40,7 @@ module.exports = {
     'font-manager',
     'path',
     'node-pty',
-    'child-process-promise',
+    'mz/child_process',
     'winreg',
     /^rxjs/,
     /^@angular/,