export type TExecutor = "sh" | "bash"; export interface IShellEnvContructorOptions { executor: TExecutor; sourceFilePaths?: string[]; pathDirectories?: string[]; } export class ShellEnv { executor: TExecutor; sourceFileArray: string[] = []; pathDirArray: string[] = []; /** * constructor for the shellenv */ constructor(optionsArg: IShellEnvContructorOptions) { this.executor = optionsArg.executor; // add sourcefiles if (optionsArg.sourceFilePaths) { this.sourceFileArray = this.sourceFileArray.concat( optionsArg.sourceFilePaths ); } // add pathDirectories if (optionsArg.pathDirectories) { this.pathDirArray = this.pathDirArray.concat(optionsArg.pathDirectories); } } /** * imports path into the shell from env if available and returns it with */ private _setPath(commandStringArg): string { let commandResult = commandStringArg; let commandPath = process.env.PATH; if (process.env.SMARTSHELL_PATH) { commandPath = `${commandPath}:${process.env.SMARTSHELL_PATH}`; } commandResult = `PATH=${ commandPath } && ${commandStringArg}`; return commandResult; } /** * add files that are going to be sourced when running a command * @param sourceFilePathsArray */ addSourceFiles(sourceFilePathsArray: string[]) { for (let sourceFilePath of sourceFilePathsArray) { this.sourceFileArray.push(sourceFilePath); } } /** * cleans the source files array */ cleanSourceFiles() { this.sourceFileArray = []; } createEnvExecString(commandArg): string { let commandResult = '' if (this.executor === "bash") { let sourceString = ""; for (let sourceFilePath of this.sourceFileArray) { sourceString = sourceString + `source ${sourceFilePath} && `; } commandResult = `bash -c '${sourceString} ${commandArg}'`; } commandResult = this._setPath(commandResult); return commandResult; } }