import * as plugins from './smartshell.plugins' import * as smartshellWrap from './smartshell.wrap' export type TExecutor = 'sh' | 'bash' export interface ISmartshellContructorOptions { executor: TExecutor sourceFilePaths: string[] } export class Smartshell { executor: TExecutor sourceFileArray: string[] = [] constructor (optionsArg: ISmartshellContructorOptions) { this.executor = optionsArg.executor for (let sourceFilePath of optionsArg.sourceFilePaths) { this.sourceFileArray.push(sourceFilePath) } } addSourceFiles(sourceFilePathsArray: string[]) { for(let sourceFilePath of sourceFilePathsArray) { this.sourceFileArray.push(sourceFilePath) } } cleanSourceFiles () { this.sourceFileArray = [] } /** * executes silently and returns IExecResult * @param commandArg */ async execSilent (commandArg: string) { let execCommand = this.createExecString(commandArg) return await smartshellWrap.execSilent(execCommand) } /** * executes and returns IExecResult * @param commandArg */ async exec (commandArg: string) { let execCommand = this.createExecString(commandArg) return await smartshellWrap.exec(execCommand) } /** * creates the final sourcing string * @param commandArg */ private createExecString (commandArg): string { if (this.executor === 'bash') { let sourceString = '' for (let sourceFilePath of this.sourceFileArray) { sourceString = sourceString + `source ${sourceFilePath} && ` } return `bash -c '${sourceString} ${commandArg}'` } else { return commandArg } } }