fix(core): update
This commit is contained in:
		| @@ -52,6 +52,10 @@ tap.test('should spawn an interactive cli', async () => { | |||||||
|   await testSmartshell.execInteractive('echo "hi"'); |   await testSmartshell.execInteractive('echo "hi"'); | ||||||
| }); | }); | ||||||
|  |  | ||||||
|  | tap.test('should spawn an interactive cli', async () => { | ||||||
|  |   await testSmartshell.execInteractive('node'); | ||||||
|  | }); | ||||||
|  |  | ||||||
| tap.start({ | tap.start({ | ||||||
|   throwOnError: true, |   throwOnError: true, | ||||||
| }); | }); | ||||||
|   | |||||||
| @@ -3,6 +3,6 @@ | |||||||
|  */ |  */ | ||||||
| export const commitinfo = { | export const commitinfo = { | ||||||
|   name: '@pushrocks/smartshell', |   name: '@pushrocks/smartshell', | ||||||
|   version: '3.0.1', |   version: '3.0.2', | ||||||
|   description: 'shell actions designed as promises' |   description: 'shell actions designed as promises' | ||||||
| } | } | ||||||
|   | |||||||
| @@ -30,44 +30,45 @@ export class Smartshell { | |||||||
|    * executes a given command async |    * executes a given command async | ||||||
|    */ |    */ | ||||||
|   private async _exec(options: { |   private async _exec(options: { | ||||||
|     commandString: string, |     commandString: string; | ||||||
|     silent?: boolean, |     silent?: boolean; | ||||||
|     strict?: boolean, |     strict?: boolean; | ||||||
|     streaming?: boolean, |     streaming?: boolean; | ||||||
|     interactive?: boolean |     interactive?: boolean; | ||||||
|   }): Promise<IExecResult | IExecResultStreaming | void> { |   }): Promise<IExecResult | IExecResultStreaming | void> { | ||||||
|  |  | ||||||
|     if (options.interactive) { |     if (options.interactive) { | ||||||
|       if (process.env.CI) { |       if (process.env.CI) { | ||||||
|           return; |         return; | ||||||
|       } |       } | ||||||
|    |  | ||||||
|       const done = plugins.smartpromise.defer(); |       const done = plugins.smartpromise.defer(); | ||||||
|       const shell = cp.spawn('sh', [], { stdio: ['pipe', 'inherit', 'inherit'] }); |        | ||||||
|       this.smartexit.addProcess(shell); |       // Notice that stdio is set to 'inherit' | ||||||
|    |       const shell = cp.spawn(options.commandString, { | ||||||
|       shell.on('close', (code) => { |         stdio: 'inherit', | ||||||
|           console.log(`interactive shell terminated with code ${code}`); |         shell: true, | ||||||
|           this.smartexit.removeProcess(shell); |         detached: true | ||||||
|           done.resolve(); |  | ||||||
|       }); |       }); | ||||||
|    |  | ||||||
|       let commandString = options.commandString; |       this.smartexit.addProcess(shell); | ||||||
|        |  | ||||||
|       shell.stdin.write(commandString + '\n exit \n'); |       shell.on('close', (code) => { | ||||||
|        |         console.log(`interactive shell terminated with code ${code}`); | ||||||
|  |         this.smartexit.removeProcess(shell); | ||||||
|  |         done.resolve(); | ||||||
|  |       }); | ||||||
|  |  | ||||||
|       await done.promise; |       await done.promise; | ||||||
|    |  | ||||||
|       return; |       return; | ||||||
|   } |     } | ||||||
|    |  | ||||||
|  |  | ||||||
|     const done = plugins.smartpromise.defer<IExecResult | IExecResultStreaming>(); |     const done = plugins.smartpromise.defer<IExecResult | IExecResultStreaming>(); | ||||||
|     const childProcessEnded = plugins.smartpromise.defer<IExecResult>(); |     const childProcessEnded = plugins.smartpromise.defer<IExecResult>(); | ||||||
|  |  | ||||||
|     let commandToExecute = options.commandString; |     let commandToExecute = options.commandString; | ||||||
|     commandToExecute = this.shellEnv.createEnvExecString(options.commandString); |     commandToExecute = this.shellEnv.createEnvExecString(options.commandString); | ||||||
|      |  | ||||||
|     const spawnlogInstance = new ShellLog(); |     const spawnlogInstance = new ShellLog(); | ||||||
|     const execChildProcess = cp.spawn(commandToExecute, [], { |     const execChildProcess = cp.spawn(commandToExecute, [], { | ||||||
|       shell: true, |       shell: true, | ||||||
| @@ -143,19 +144,30 @@ export class Smartshell { | |||||||
|     return (await this._exec({ commandString, silent: true, strict: true })) as IExecResult; |     return (await this._exec({ commandString, silent: true, strict: true })) as IExecResult; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   public async execStreaming(commandString: string, silent: boolean = false): Promise<IExecResultStreaming> { |   public async execStreaming( | ||||||
|  |     commandString: string, | ||||||
|  |     silent: boolean = false | ||||||
|  |   ): Promise<IExecResultStreaming> { | ||||||
|     return (await this._exec({ commandString, silent, streaming: true })) as IExecResultStreaming; |     return (await this._exec({ commandString, silent, streaming: true })) as IExecResultStreaming; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   public async execStreamingSilent(commandString: string): Promise<IExecResultStreaming> { |   public async execStreamingSilent(commandString: string): Promise<IExecResultStreaming> { | ||||||
|     return (await this._exec({ commandString, silent: true, streaming: true })) as IExecResultStreaming; |     return (await this._exec({ | ||||||
|  |       commandString, | ||||||
|  |       silent: true, | ||||||
|  |       streaming: true, | ||||||
|  |     })) as IExecResultStreaming; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   public async execInteractive(commandString: string) { |   public async execInteractive(commandString: string) { | ||||||
|     await this._exec({ commandString, interactive: true }); |     await this._exec({ commandString, interactive: true }); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   public async execAndWaitForLine(commandString: string, regexArg: RegExp, silentArg: boolean = false) { |   public async execAndWaitForLine( | ||||||
|  |     commandString: string, | ||||||
|  |     regexArg: RegExp, | ||||||
|  |     silentArg: boolean = false | ||||||
|  |   ) { | ||||||
|     let done = plugins.smartpromise.defer(); |     let done = plugins.smartpromise.defer(); | ||||||
|     let execStreamingResult = await this.execStreaming(commandString, silentArg); |     let execStreamingResult = await this.execStreaming(commandString, silentArg); | ||||||
|     execStreamingResult.childProcess.stdout.on('data', (stdOutChunk: string) => { |     execStreamingResult.childProcess.stdout.on('data', (stdOutChunk: string) => { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user