@push.rocks/smartshell 3.0.5 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * autocreated commitinfo by @pushrocks/commitinfo
2
+ * autocreated commitinfo by @push.rocks/commitinfo
3
3
  */
4
4
  export declare const commitinfo: {
5
5
  name: string;
@@ -1,9 +1,9 @@
1
1
  /**
2
- * autocreated commitinfo by @pushrocks/commitinfo
2
+ * autocreated commitinfo by @push.rocks/commitinfo
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartshell',
6
- version: '3.0.5',
6
+ version: '3.1.0',
7
7
  description: 'A library for executing shell commands using promises.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLHdEQUF3RDtDQUN0RSxDQUFBIn0=
@@ -0,0 +1,29 @@
1
+ export type TExecutor = 'sh' | 'bash';
2
+ export interface IShellEnvContructorOptions {
3
+ executor: TExecutor;
4
+ sourceFilePaths?: string[];
5
+ pathDirectories?: string[];
6
+ }
7
+ export declare class ShellEnv {
8
+ executor: TExecutor;
9
+ sourceFileArray: string[];
10
+ pathDirArray: string[];
11
+ /**
12
+ * constructor for the shellenv
13
+ */
14
+ constructor(optionsArg: IShellEnvContructorOptions);
15
+ /**
16
+ * imports path into the shell from env if available and returns it with
17
+ */
18
+ private _setPath;
19
+ /**
20
+ * add files that are going to be sourced when running a command
21
+ * @param sourceFilePathsArray
22
+ */
23
+ addSourceFiles(sourceFilePathsArray: string[]): void;
24
+ /**
25
+ * cleans the source files array
26
+ */
27
+ cleanSourceFiles(): void;
28
+ createEnvExecString(commandArg: string): string;
29
+ }
@@ -0,0 +1,82 @@
1
+ export class ShellEnv {
2
+ /**
3
+ * constructor for the shellenv
4
+ */
5
+ constructor(optionsArg) {
6
+ this.sourceFileArray = [];
7
+ this.pathDirArray = [];
8
+ this.executor = optionsArg.executor;
9
+ // add sourcefiles
10
+ if (optionsArg.sourceFilePaths) {
11
+ this.sourceFileArray = this.sourceFileArray.concat(optionsArg.sourceFilePaths);
12
+ }
13
+ // add pathDirectories
14
+ if (optionsArg.pathDirectories) {
15
+ this.pathDirArray = this.pathDirArray.concat(optionsArg.pathDirectories);
16
+ }
17
+ }
18
+ /**
19
+ * imports path into the shell from env if available and returns it with
20
+ */
21
+ _setPath(commandStringArg) {
22
+ let commandResult = commandStringArg;
23
+ let commandPaths = [];
24
+ commandPaths = commandPaths.concat(process.env.PATH.split(':'));
25
+ if (process.env.SMARTSHELL_PATH) {
26
+ commandPaths = commandPaths.concat(process.env.SMARTSHELL_PATH.split(':'));
27
+ }
28
+ // lets filter for unwanted paths
29
+ // Windows WSL
30
+ commandPaths = commandPaths.filter((commandPathArg) => {
31
+ const filterResult = !commandPathArg.startsWith('/mnt/c/') &&
32
+ !commandPathArg.startsWith('Files/1E') &&
33
+ !commandPathArg.includes(' ');
34
+ if (!filterResult) {
35
+ // console.log(`${commandPathArg} will be filtered!`);
36
+ }
37
+ return filterResult;
38
+ });
39
+ commandResult = `PATH=${commandPaths.join(':')} && ${commandStringArg}`;
40
+ return commandResult;
41
+ }
42
+ /**
43
+ * add files that are going to be sourced when running a command
44
+ * @param sourceFilePathsArray
45
+ */
46
+ addSourceFiles(sourceFilePathsArray) {
47
+ for (let sourceFilePath of sourceFilePathsArray) {
48
+ this.sourceFileArray.push(sourceFilePath);
49
+ }
50
+ }
51
+ /**
52
+ * cleans the source files array
53
+ */
54
+ cleanSourceFiles() {
55
+ this.sourceFileArray = [];
56
+ }
57
+ createEnvExecString(commandArg) {
58
+ let commandResult = '';
59
+ let sourceString = '';
60
+ // deal with sourcestring
61
+ for (const sourceFilePath of this.sourceFileArray) {
62
+ sourceString = sourceString + `source ${sourceFilePath} && `;
63
+ }
64
+ // deal with available path
65
+ let pathString = 'PATH=$PATH';
66
+ for (const pathDir of this.pathDirArray) {
67
+ pathString += `:${pathDir}`;
68
+ }
69
+ pathString += ` && `;
70
+ switch (this.executor) {
71
+ case 'bash':
72
+ commandResult = `bash -c '${pathString}${sourceString}${commandArg}'`;
73
+ break;
74
+ case 'sh':
75
+ commandResult = `${pathString}${sourceString}${commandArg}`;
76
+ break;
77
+ }
78
+ commandResult = this._setPath(commandResult);
79
+ return commandResult;
80
+ }
81
+ }
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zaGVsbGVudi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMuc2hlbGxlbnYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsTUFBTSxPQUFPLFFBQVE7SUFLbkI7O09BRUc7SUFDSCxZQUFZLFVBQXNDO1FBTmxELG9CQUFlLEdBQWEsRUFBRSxDQUFDO1FBQy9CLGlCQUFZLEdBQWEsRUFBRSxDQUFDO1FBTTFCLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUVwQyxrQkFBa0I7UUFDbEIsSUFBSSxVQUFVLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUVELHNCQUFzQjtRQUN0QixJQUFJLFVBQVUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMzRSxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssUUFBUSxDQUFDLGdCQUF3QjtRQUN2QyxJQUFJLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQztRQUNyQyxJQUFJLFlBQVksR0FBYSxFQUFFLENBQUM7UUFDaEMsWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ2hDLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdFLENBQUM7UUFFRCxpQ0FBaUM7UUFDakMsY0FBYztRQUNkLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUU7WUFDcEQsTUFBTSxZQUFZLEdBQ2hCLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7Z0JBQ3JDLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7Z0JBQ3RDLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ2xCLHNEQUFzRDtZQUN4RCxDQUFDO1lBQ0QsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxhQUFhLEdBQUcsUUFBUSxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLGdCQUFnQixFQUFFLENBQUM7UUFDeEUsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsQ0FBQyxvQkFBOEI7UUFDM0MsS0FBSyxJQUFJLGNBQWMsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU0sbUJBQW1CLENBQUMsVUFBa0I7UUFDM0MsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUV0Qix5QkFBeUI7UUFDekIsS0FBSyxNQUFNLGNBQWMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbEQsWUFBWSxHQUFHLFlBQVksR0FBRyxVQUFVLGNBQWMsTUFBTSxDQUFDO1FBQy9ELENBQUM7UUFFRCwyQkFBMkI7UUFDM0IsSUFBSSxVQUFVLEdBQUcsWUFBWSxDQUFDO1FBQzlCLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3hDLFVBQVUsSUFBSSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzlCLENBQUM7UUFDRCxVQUFVLElBQUksTUFBTSxDQUFDO1FBRXJCLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3RCLEtBQUssTUFBTTtnQkFDVCxhQUFhLEdBQUcsWUFBWSxVQUFVLEdBQUcsWUFBWSxHQUFHLFVBQVUsR0FBRyxDQUFDO2dCQUN0RSxNQUFNO1lBQ1IsS0FBSyxJQUFJO2dCQUNQLGFBQWEsR0FBRyxHQUFHLFVBQVUsR0FBRyxZQUFZLEdBQUcsVUFBVSxFQUFFLENBQUM7Z0JBQzVELE1BQU07UUFDVixDQUFDO1FBQ0QsYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0MsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztDQUNGIn0=
@@ -0,0 +1,18 @@
1
+ /**
2
+ * a log handler for spawned logs
3
+ * making sure the process doesn't run out of memory
4
+ */
5
+ export declare class ShellLog {
6
+ logStore: Buffer;
7
+ /**
8
+ * log data to console
9
+ * @param dataArg
10
+ */
11
+ writeToConsole(dataArg: string | Buffer): void;
12
+ /**
13
+ * add data to Buffer for later consumption
14
+ * @param dataArg
15
+ */
16
+ addToBuffer(dataArg: string | Buffer): void;
17
+ logAndAdd(dataArg: string | Buffer): void;
18
+ }
@@ -0,0 +1,37 @@
1
+ import * as plugins from './plugins.js';
2
+ /**
3
+ * a log handler for spawned logs
4
+ * making sure the process doesn't run out of memory
5
+ */
6
+ export class ShellLog {
7
+ constructor() {
8
+ this.logStore = Buffer.from('');
9
+ }
10
+ /**
11
+ * log data to console
12
+ * @param dataArg
13
+ */
14
+ writeToConsole(dataArg) {
15
+ // make sure we have the data as string
16
+ process.stdout.write(dataArg);
17
+ }
18
+ /**
19
+ * add data to Buffer for later consumption
20
+ * @param dataArg
21
+ */
22
+ addToBuffer(dataArg) {
23
+ // make sure we have the data as Buffer
24
+ const dataBuffer = (() => {
25
+ if (!Buffer.isBuffer(dataArg)) {
26
+ return Buffer.from(dataArg);
27
+ }
28
+ return dataArg;
29
+ })();
30
+ this.logStore = Buffer.concat([this.logStore, dataBuffer]);
31
+ }
32
+ logAndAdd(dataArg) {
33
+ this.writeToConsole(dataArg);
34
+ this.addToBuffer(dataArg);
35
+ }
36
+ }
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zaGVsbGxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMuc2hlbGxsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFFeEM7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFFBQVE7SUFBckI7UUFDUyxhQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQThCcEMsQ0FBQztJQTVCQzs7O09BR0c7SUFDSSxjQUFjLENBQUMsT0FBd0I7UUFDNUMsdUNBQXVDO1FBQ3ZDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxXQUFXLENBQUMsT0FBd0I7UUFDekMsdUNBQXVDO1FBQ3ZDLE1BQU0sVUFBVSxHQUFXLENBQUMsR0FBRyxFQUFFO1lBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QixDQUFDO1lBQ0QsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNMLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRU0sU0FBUyxDQUFDLE9BQXdCO1FBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QixDQUFDO0NBQ0YifQ==
@@ -0,0 +1,8 @@
1
+ import { Smartshell, type IExecResultStreaming } from './classes.smartshell.js';
2
+ export declare class SmartExecution {
3
+ smartshell: Smartshell;
4
+ currentStreamingExecution: IExecResultStreaming;
5
+ commandString: string;
6
+ constructor(commandStringArg: string);
7
+ restart(): Promise<void>;
8
+ }
@@ -0,0 +1,19 @@
1
+ import * as plugins from './plugins.js';
2
+ import { Smartshell } from './classes.smartshell.js';
3
+ export class SmartExecution {
4
+ constructor(commandStringArg) {
5
+ this.commandString = commandStringArg;
6
+ }
7
+ async restart() {
8
+ if (!this.smartshell) {
9
+ this.smartshell = new Smartshell({
10
+ executor: 'bash',
11
+ });
12
+ }
13
+ if (this.currentStreamingExecution) {
14
+ await this.currentStreamingExecution.kill();
15
+ }
16
+ this.currentStreamingExecution = await this.smartshell.execStreaming(this.commandString);
17
+ }
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zbWFydGV4ZWN1dGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMuc21hcnRleGVjdXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUE7QUFDdkMsT0FBTyxFQUFFLFVBQVUsRUFBNkIsTUFBTSx5QkFBeUIsQ0FBQztBQUVoRixNQUFNLE9BQU8sY0FBYztJQUt6QixZQUFZLGdCQUF3QjtRQUNsQyxJQUFJLENBQUMsYUFBYSxHQUFHLGdCQUFnQixDQUFDO0lBQ3hDLENBQUM7SUFFTSxLQUFLLENBQUMsT0FBTztRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUM7Z0JBQy9CLFFBQVEsRUFBRSxNQUFNO2FBQ2pCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1lBQ25DLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlDLENBQUM7UUFDRCxJQUFJLENBQUMseUJBQXlCLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDM0YsQ0FBQztDQUNGIn0=
@@ -0,0 +1,36 @@
1
+ import * as plugins from './plugins.js';
2
+ import { ShellEnv } from './classes.shellenv.js';
3
+ import type { IShellEnvContructorOptions } from './classes.shellenv.js';
4
+ import * as cp from 'child_process';
5
+ export interface IExecResult {
6
+ exitCode: number;
7
+ stdout: string;
8
+ }
9
+ export interface IExecResultStreaming {
10
+ childProcess: cp.ChildProcess;
11
+ finalPromise: Promise<IExecResult>;
12
+ kill: () => Promise<void>;
13
+ terminate: () => Promise<void>;
14
+ keyboardInterrupt: () => Promise<void>;
15
+ customSignal: (signalArg: plugins.smartexit.TProcessSignal) => Promise<void>;
16
+ }
17
+ export declare class Smartshell {
18
+ shellEnv: ShellEnv;
19
+ smartexit: plugins.smartexit.SmartExit;
20
+ constructor(optionsArg: IShellEnvContructorOptions);
21
+ /**
22
+ * executes a given command async
23
+ */
24
+ private _exec;
25
+ private _execInteractive;
26
+ private _execCommand;
27
+ exec(commandString: string): Promise<IExecResult>;
28
+ execSilent(commandString: string): Promise<IExecResult>;
29
+ execStrict(commandString: string): Promise<IExecResult>;
30
+ execStrictSilent(commandString: string): Promise<IExecResult>;
31
+ execStreaming(commandString: string, silent?: boolean): Promise<IExecResultStreaming>;
32
+ execStreamingSilent(commandString: string): Promise<IExecResultStreaming>;
33
+ execInteractive(commandString: string): Promise<void>;
34
+ execAndWaitForLine(commandString: string, regexArg: RegExp, silentArg?: boolean): Promise<unknown>;
35
+ execAndWaitForLineSilent(commandString: string, regexArg: RegExp): Promise<unknown>;
36
+ }
@@ -0,0 +1,138 @@
1
+ import * as plugins from './plugins.js';
2
+ import { ShellEnv } from './classes.shellenv.js';
3
+ import { ShellLog } from './classes.shelllog.js';
4
+ import * as cp from 'child_process';
5
+ export class Smartshell {
6
+ constructor(optionsArg) {
7
+ this.smartexit = new plugins.smartexit.SmartExit();
8
+ this.shellEnv = new ShellEnv(optionsArg);
9
+ }
10
+ /**
11
+ * executes a given command async
12
+ */
13
+ async _exec(options) {
14
+ if (options.interactive) {
15
+ return await this._execInteractive(options);
16
+ }
17
+ return await this._execCommand(options);
18
+ }
19
+ async _execInteractive(options) {
20
+ if (process.env.CI) {
21
+ return;
22
+ }
23
+ const done = plugins.smartpromise.defer();
24
+ const shell = cp.spawn(options.commandString, {
25
+ stdio: 'inherit',
26
+ shell: true,
27
+ detached: true
28
+ });
29
+ this.smartexit.addProcess(shell);
30
+ shell.on('close', (code) => {
31
+ console.log(`interactive shell terminated with code ${code}`);
32
+ this.smartexit.removeProcess(shell);
33
+ done.resolve();
34
+ });
35
+ await done.promise;
36
+ }
37
+ async _execCommand(options) {
38
+ const done = plugins.smartpromise.defer();
39
+ const childProcessEnded = plugins.smartpromise.defer();
40
+ const commandToExecute = this.shellEnv.createEnvExecString(options.commandString);
41
+ const shellLogInstance = new ShellLog();
42
+ const execChildProcess = cp.spawn(commandToExecute, [], {
43
+ shell: true,
44
+ cwd: process.cwd(),
45
+ env: process.env,
46
+ detached: false,
47
+ });
48
+ this.smartexit.addProcess(execChildProcess);
49
+ execChildProcess.stdout.on('data', (data) => {
50
+ if (!options.silent) {
51
+ shellLogInstance.writeToConsole(data);
52
+ }
53
+ shellLogInstance.addToBuffer(data);
54
+ });
55
+ execChildProcess.stderr.on('data', (data) => {
56
+ if (!options.silent) {
57
+ shellLogInstance.writeToConsole(data);
58
+ }
59
+ shellLogInstance.addToBuffer(data);
60
+ });
61
+ execChildProcess.on('exit', (code, signal) => {
62
+ this.smartexit.removeProcess(execChildProcess);
63
+ if (options.strict && code === 1) {
64
+ done.reject();
65
+ }
66
+ const execResult = {
67
+ exitCode: code,
68
+ stdout: shellLogInstance.logStore.toString(),
69
+ };
70
+ if (!options.streaming) {
71
+ done.resolve(execResult);
72
+ }
73
+ childProcessEnded.resolve(execResult);
74
+ });
75
+ if (options.streaming) {
76
+ done.resolve({
77
+ childProcess: execChildProcess,
78
+ finalPromise: childProcessEnded.promise,
79
+ kill: async () => {
80
+ console.log(`running tree kill with SIGKILL on process ${execChildProcess.pid}`);
81
+ await plugins.smartexit.SmartExit.killTreeByPid(execChildProcess.pid, 'SIGKILL');
82
+ },
83
+ terminate: async () => {
84
+ console.log(`running tree kill with SIGTERM on process ${execChildProcess.pid}`);
85
+ await plugins.smartexit.SmartExit.killTreeByPid(execChildProcess.pid, 'SIGTERM');
86
+ },
87
+ keyboardInterrupt: async () => {
88
+ console.log(`running tree kill with SIGINT on process ${execChildProcess.pid}`);
89
+ await plugins.smartexit.SmartExit.killTreeByPid(execChildProcess.pid, 'SIGINT');
90
+ },
91
+ customSignal: async (signalArg) => {
92
+ console.log(`running tree kill with custom signal ${signalArg} on process ${execChildProcess.pid}`);
93
+ await plugins.smartexit.SmartExit.killTreeByPid(execChildProcess.pid, signalArg);
94
+ },
95
+ });
96
+ }
97
+ return await done.promise;
98
+ }
99
+ async exec(commandString) {
100
+ return (await this._exec({ commandString }));
101
+ }
102
+ async execSilent(commandString) {
103
+ return (await this._exec({ commandString, silent: true }));
104
+ }
105
+ async execStrict(commandString) {
106
+ return (await this._exec({ commandString, strict: true }));
107
+ }
108
+ async execStrictSilent(commandString) {
109
+ return (await this._exec({ commandString, silent: true, strict: true }));
110
+ }
111
+ async execStreaming(commandString, silent = false) {
112
+ return (await this._exec({ commandString, silent, streaming: true }));
113
+ }
114
+ async execStreamingSilent(commandString) {
115
+ return (await this._exec({
116
+ commandString,
117
+ silent: true,
118
+ streaming: true,
119
+ }));
120
+ }
121
+ async execInteractive(commandString) {
122
+ await this._exec({ commandString, interactive: true });
123
+ }
124
+ async execAndWaitForLine(commandString, regexArg, silentArg = false) {
125
+ let done = plugins.smartpromise.defer();
126
+ let execStreamingResult = await this.execStreaming(commandString, silentArg);
127
+ execStreamingResult.childProcess.stdout.on('data', (stdOutChunk) => {
128
+ if (regexArg.test(stdOutChunk)) {
129
+ done.resolve();
130
+ }
131
+ });
132
+ return done.promise;
133
+ }
134
+ async execAndWaitForLineSilent(commandString, regexArg) {
135
+ return this.execAndWaitForLine(commandString, regexArg, true);
136
+ }
137
+ }
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zbWFydHNoZWxsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5zbWFydHNoZWxsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFakQsT0FBTyxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFpQnBDLE1BQU0sT0FBTyxVQUFVO0lBSXJCLFlBQVksVUFBc0M7UUFGM0MsY0FBUyxHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUduRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FNbkI7UUFDQyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN4QixPQUFPLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxPQUFPLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU8sS0FBSyxDQUFDLGdCQUFnQixDQUFDLE9BRzlCO1FBQ0MsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ25CLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUUxQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDNUMsS0FBSyxFQUFFLFNBQVM7WUFDaEIsS0FBSyxFQUFFLElB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
@@ -1,2 +1,3 @@
1
- export * from './smartshell.classes.smartshell.js';
2
- export { which } from './smartshell.plugins.js';
1
+ export * from './classes.smartshell.js';
2
+ export * from './classes.smartexecution.js';
3
+ export { which } from './plugins.js';
package/dist_ts/index.js CHANGED
@@ -1,3 +1,4 @@
1
- export * from './smartshell.classes.smartshell.js';
2
- export { which } from './smartshell.plugins.js';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQyJ9
1
+ export * from './classes.smartshell.js';
2
+ export * from './classes.smartexecution.js';
3
+ export { which } from './plugins.js';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQyJ9
@@ -0,0 +1,5 @@
1
+ import * as smartdelay from '@push.rocks/smartdelay';
2
+ import * as smartexit from '@push.rocks/smartexit';
3
+ import * as smartpromise from '@push.rocks/smartpromise';
4
+ import which from 'which';
5
+ export { smartdelay, smartexit, smartpromise, which };
@@ -0,0 +1,6 @@
1
+ import * as smartdelay from '@push.rocks/smartdelay';
2
+ import * as smartexit from '@push.rocks/smartexit';
3
+ import * as smartpromise from '@push.rocks/smartpromise';
4
+ import which from 'which';
5
+ export { smartdelay, smartexit, smartpromise, which };
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3BsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLFVBQVUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEtBQUssU0FBUyxNQUFNLHVCQUF1QixDQUFDO0FBQ25ELE9BQU8sS0FBSyxZQUFZLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRTFCLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQyJ9
@@ -1,4 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  /**
3
2
  * a log handler for spawned logs
4
3
  * making sure the process doesn't run out of memory
@@ -1,4 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import * as plugins from './smartshell.plugins.js';
3
2
  import { ShellEnv } from './smartshell.classes.shellenv.js';
4
3
  import type { IShellEnvContructorOptions } from './smartshell.classes.shellenv.js';
@@ -23,6 +22,8 @@ export declare class Smartshell {
23
22
  * executes a given command async
24
23
  */
25
24
  private _exec;
25
+ private _execInteractive;
26
+ private _execCommand;
26
27
  exec(commandString: string): Promise<IExecResult>;
27
28
  execSilent(commandString: string): Promise<IExecResult>;
28
29
  execStrict(commandString: string): Promise<IExecResult>;
@@ -12,30 +12,33 @@ export class Smartshell {
12
12
  */
13
13
  async _exec(options) {
14
14
  if (options.interactive) {
15
- if (process.env.CI) {
16
- return;
17
- }
18
- const done = plugins.smartpromise.defer();
19
- // Notice that stdio is set to 'inherit'
20
- const shell = cp.spawn(options.commandString, {
21
- stdio: 'inherit',
22
- shell: true,
23
- detached: true
24
- });
25
- this.smartexit.addProcess(shell);
26
- shell.on('close', (code) => {
27
- console.log(`interactive shell terminated with code ${code}`);
28
- this.smartexit.removeProcess(shell);
29
- done.resolve();
30
- });
31
- await done.promise;
15
+ return await this._execInteractive(options);
16
+ }
17
+ return await this._execCommand(options);
18
+ }
19
+ async _execInteractive(options) {
20
+ if (process.env.CI) {
32
21
  return;
33
22
  }
23
+ const done = plugins.smartpromise.defer();
24
+ const shell = cp.spawn(options.commandString, {
25
+ stdio: 'inherit',
26
+ shell: true,
27
+ detached: true
28
+ });
29
+ this.smartexit.addProcess(shell);
30
+ shell.on('close', (code) => {
31
+ console.log(`interactive shell terminated with code ${code}`);
32
+ this.smartexit.removeProcess(shell);
33
+ done.resolve();
34
+ });
35
+ await done.promise;
36
+ }
37
+ async _execCommand(options) {
34
38
  const done = plugins.smartpromise.defer();
35
39
  const childProcessEnded = plugins.smartpromise.defer();
36
- let commandToExecute = options.commandString;
37
- commandToExecute = this.shellEnv.createEnvExecString(options.commandString);
38
- const spawnlogInstance = new ShellLog();
40
+ const commandToExecute = this.shellEnv.createEnvExecString(options.commandString);
41
+ const shellLogInstance = new ShellLog();
39
42
  const execChildProcess = cp.spawn(commandToExecute, [], {
40
43
  shell: true,
41
44
  cwd: process.cwd(),
@@ -45,15 +48,15 @@ export class Smartshell {
45
48
  this.smartexit.addProcess(execChildProcess);
46
49
  execChildProcess.stdout.on('data', (data) => {
47
50
  if (!options.silent) {
48
- spawnlogInstance.writeToConsole(data);
51
+ shellLogInstance.writeToConsole(data);
49
52
  }
50
- spawnlogInstance.addToBuffer(data);
53
+ shellLogInstance.addToBuffer(data);
51
54
  });
52
55
  execChildProcess.stderr.on('data', (data) => {
53
56
  if (!options.silent) {
54
- spawnlogInstance.writeToConsole(data);
57
+ shellLogInstance.writeToConsole(data);
55
58
  }
56
- spawnlogInstance.addToBuffer(data);
59
+ shellLogInstance.addToBuffer(data);
57
60
  });
58
61
  execChildProcess.on('exit', (code, signal) => {
59
62
  this.smartexit.removeProcess(execChildProcess);
@@ -62,7 +65,7 @@ export class Smartshell {
62
65
  }
63
66
  const execResult = {
64
67
  exitCode: code,
65
- stdout: spawnlogInstance.logStore.toString(),
68
+ stdout: shellLogInstance.logStore.toString(),
66
69
  };
67
70
  if (!options.streaming) {
68
71
  done.resolve(execResult);
@@ -132,4 +135,4 @@ export class Smartshell {
132
135
  return this.execAndWaitForLine(commandString, regexArg, true);
133
136
  }
134
137
  }
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzaGVsbC5jbGFzc2VzLnNtYXJ0c2hlbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydHNoZWxsLmNsYXNzZXMuc21hcnRzaGVsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUU1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFNUQsT0FBTyxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFpQnBDLE1BQU0sT0FBTyxVQUFVO0lBSXJCLFlBQVksVUFBc0M7UUFGM0MsY0FBUyxHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUduRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FNbkI7UUFDQyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN4QixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ25CLE9BQU87WUFDVCxDQUFDO1lBRUQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUUxQyx3Q0FBd0M7WUFDeEMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO2dCQUM1QyxLQUFLLEVBQUUsU0FBUztnQkFDaEIsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsUUFBUSxFQUFFLElBQUk7YUFDZixDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVqQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9B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
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzaGVsbC5jbGFzc2VzLnNtYXJ0c2hlbGwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydHNoZWxsLmNsYXNzZXMuc21hcnRzaGVsbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUU1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFNUQsT0FBTyxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFpQnBDLE1BQU0sT0FBTyxVQUFVO0lBSXJCLFlBQVksVUFBc0M7UUFGM0MsY0FBUyxHQUFHLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUduRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FNbkI7UUFDQyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN4QixPQUFPLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxPQUFPLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU8sS0FBSyxDQUFDLGdCQUFnQixDQUFDLE9BRzlCO1FBQ0MsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ25CLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUUxQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDNUMsS0FBSyxFQUFF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
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@push.rocks/smartshell",
3
3
  "private": false,
4
- "version": "3.0.5",
4
+ "version": "3.1.0",
5
5
  "description": "A library for executing shell commands using promises.",
6
6
  "main": "dist_ts/index.js",
7
7
  "typings": "dist_ts/index.d.ts",
8
8
  "type": "module",
9
9
  "repository": {
10
10
  "type": "git",
11
- "url": "git+ssh://git@gitlab.com/pushrocks/smartshell.git"
11
+ "url": "https://code.foss.global/push.rocks/smartshell.git"
12
12
  },
13
13
  "keywords": [
14
14
  "shell commands",
@@ -26,21 +26,21 @@
26
26
  "bugs": {
27
27
  "url": "https://gitlab.com/pushrocks/smartshell/issues"
28
28
  },
29
- "homepage": "https://gitlab.com/pushrocks/smartshell#README",
29
+ "homepage": "https://code.foss.global/push.rocks/smartshell",
30
30
  "devDependencies": {
31
- "@git.zone/tsbuild": "^2.1.66",
32
- "@git.zone/tsrun": "^1.2.44",
33
- "@git.zone/tstest": "^1.0.77",
34
- "@push.rocks/tapbundle": "^5.0.23",
35
- "@types/node": "^20.12.7"
31
+ "@git.zone/tsbuild": "^2.2.0",
32
+ "@git.zone/tsrun": "^1.3.3",
33
+ "@git.zone/tstest": "^1.0.90",
34
+ "@push.rocks/tapbundle": "^5.5.3",
35
+ "@types/node": "^22.10.1"
36
36
  },
37
37
  "dependencies": {
38
38
  "@push.rocks/smartdelay": "^3.0.1",
39
39
  "@push.rocks/smartexit": "^1.0.23",
40
- "@push.rocks/smartpromise": "^4.0.2",
41
- "@types/which": "^3.0.3",
40
+ "@push.rocks/smartpromise": "^4.0.4",
41
+ "@types/which": "^3.0.4",
42
42
  "tree-kill": "^1.2.2",
43
- "which": "^4.0.0"
43
+ "which": "^5.0.0"
44
44
  },
45
45
  "files": [
46
46
  "ts/**/*",
@@ -59,7 +59,7 @@
59
59
  ],
60
60
  "scripts": {
61
61
  "test": "(tstest test/)",
62
- "build": "(tsbuild --web)",
62
+ "build": "(tsbuild tsfolders --web)",
63
63
  "buildDocs": "tsdoc"
64
64
  }
65
65
  }
@@ -1,8 +1,8 @@
1
1
  /**
2
- * autocreated commitinfo by @pushrocks/commitinfo
2
+ * autocreated commitinfo by @push.rocks/commitinfo
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartshell',
6
- version: '3.0.5',
6
+ version: '3.1.0',
7
7
  description: 'A library for executing shell commands using promises.'
8
8
  }
@@ -1,4 +1,4 @@
1
- import * as plugins from './smartshell.plugins.js';
1
+ import * as plugins from './plugins.js';
2
2
 
3
3
  /**
4
4
  * a log handler for spawned logs
@@ -0,0 +1,24 @@
1
+ import * as plugins from './plugins.js'
2
+ import { Smartshell, type IExecResultStreaming } from './classes.smartshell.js';
3
+
4
+ export class SmartExecution {
5
+ public smartshell: Smartshell;
6
+ public currentStreamingExecution: IExecResultStreaming;
7
+ public commandString: string;
8
+
9
+ constructor(commandStringArg: string) {
10
+ this.commandString = commandStringArg;
11
+ }
12
+
13
+ public async restart() {
14
+ if (!this.smartshell) {
15
+ this.smartshell = new Smartshell({
16
+ executor: 'bash',
17
+ });
18
+ }
19
+ if (this.currentStreamingExecution) {
20
+ await this.currentStreamingExecution.kill();
21
+ }
22
+ this.currentStreamingExecution = await this.smartshell.execStreaming(this.commandString);
23
+ }
24
+ }
@@ -1,7 +1,7 @@
1
- import * as plugins from './smartshell.plugins.js';
2
- import { ShellEnv } from './smartshell.classes.shellenv.js';
3
- import type { IShellEnvContructorOptions, TExecutor } from './smartshell.classes.shellenv.js';
4
- import { ShellLog } from './smartshell.classes.shelllog.js';
1
+ import * as plugins from './plugins.js';
2
+ import { ShellEnv } from './classes.shellenv.js';
3
+ import type { IShellEnvContructorOptions, TExecutor } from './classes.shellenv.js';
4
+ import { ShellLog } from './classes.shelllog.js';
5
5
 
6
6
  import * as cp from 'child_process';
7
7
 
@@ -39,39 +39,51 @@ export class Smartshell {
39
39
  interactive?: boolean;
40
40
  }): Promise<IExecResult | IExecResultStreaming | void> {
41
41
  if (options.interactive) {
42
- if (process.env.CI) {
43
- return;
44
- }
42
+ return await this._execInteractive(options);
43
+ }
45
44
 
46
- const done = plugins.smartpromise.defer();
47
-
48
- // Notice that stdio is set to 'inherit'
49
- const shell = cp.spawn(options.commandString, {
50
- stdio: 'inherit',
51
- shell: true,
52
- detached: true
53
- });
45
+ return await this._execCommand(options);
46
+ }
54
47
 
55
- this.smartexit.addProcess(shell);
48
+ private async _execInteractive(options: {
49
+ commandString: string;
50
+ interactive?: boolean;
51
+ }): Promise<void> {
52
+ if (process.env.CI) {
53
+ return;
54
+ }
56
55
 
57
- shell.on('close', (code) => {
58
- console.log(`interactive shell terminated with code ${code}`);
59
- this.smartexit.removeProcess(shell);
60
- done.resolve();
61
- });
56
+ const done = plugins.smartpromise.defer();
62
57
 
63
- await done.promise;
58
+ const shell = cp.spawn(options.commandString, {
59
+ stdio: 'inherit',
60
+ shell: true,
61
+ detached: true
62
+ });
64
63
 
65
- return;
66
- }
64
+ this.smartexit.addProcess(shell);
65
+
66
+ shell.on('close', (code) => {
67
+ console.log(`interactive shell terminated with code ${code}`);
68
+ this.smartexit.removeProcess(shell);
69
+ done.resolve();
70
+ });
71
+
72
+ await done.promise;
73
+ }
67
74
 
75
+ private async _execCommand(options: {
76
+ commandString: string;
77
+ silent?: boolean;
78
+ strict?: boolean;
79
+ streaming?: boolean;
80
+ }): Promise<IExecResult | IExecResultStreaming> {
68
81
  const done = plugins.smartpromise.defer<IExecResult | IExecResultStreaming>();
69
82
  const childProcessEnded = plugins.smartpromise.defer<IExecResult>();
70
83
 
71
- let commandToExecute = options.commandString;
72
- commandToExecute = this.shellEnv.createEnvExecString(options.commandString);
84
+ const commandToExecute = this.shellEnv.createEnvExecString(options.commandString);
73
85
 
74
- const spawnlogInstance = new ShellLog();
86
+ const shellLogInstance = new ShellLog();
75
87
  const execChildProcess = cp.spawn(commandToExecute, [], {
76
88
  shell: true,
77
89
  cwd: process.cwd(),
@@ -83,16 +95,16 @@ export class Smartshell {
83
95
 
84
96
  execChildProcess.stdout.on('data', (data) => {
85
97
  if (!options.silent) {
86
- spawnlogInstance.writeToConsole(data);
98
+ shellLogInstance.writeToConsole(data);
87
99
  }
88
- spawnlogInstance.addToBuffer(data);
100
+ shellLogInstance.addToBuffer(data);
89
101
  });
90
102
 
91
103
  execChildProcess.stderr.on('data', (data) => {
92
104
  if (!options.silent) {
93
- spawnlogInstance.writeToConsole(data);
105
+ shellLogInstance.writeToConsole(data);
94
106
  }
95
- spawnlogInstance.addToBuffer(data);
107
+ shellLogInstance.addToBuffer(data);
96
108
  });
97
109
 
98
110
  execChildProcess.on('exit', (code, signal) => {
@@ -103,7 +115,7 @@ export class Smartshell {
103
115
 
104
116
  const execResult = {
105
117
  exitCode: code,
106
- stdout: spawnlogInstance.logStore.toString(),
118
+ stdout: shellLogInstance.logStore.toString(),
107
119
  };
108
120
 
109
121
  if (!options.streaming) {
@@ -191,4 +203,4 @@ export class Smartshell {
191
203
  public async execAndWaitForLineSilent(commandString: string, regexArg: RegExp) {
192
204
  return this.execAndWaitForLine(commandString, regexArg, true);
193
205
  }
194
- }
206
+ }
package/ts/index.ts CHANGED
@@ -1,2 +1,3 @@
1
- export * from './smartshell.classes.smartshell.js';
2
- export { which } from './smartshell.plugins.js';
1
+ export * from './classes.smartshell.js';
2
+ export * from './classes.smartexecution.js';
3
+ export { which } from './plugins.js';
File without changes