Skip to content

Commit

Permalink
Updates
Browse files Browse the repository at this point in the history
  • Loading branch information
BrandonQDixon committed Jul 14, 2021
1 parent 9478e7f commit 3ebc859
Show file tree
Hide file tree
Showing 12 changed files with 125 additions and 42 deletions.
2 changes: 1 addition & 1 deletion coverage/lcov-report/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ <h1>All files</h1>
<div class='footer quiet pad2 space-top1 center small'>
Code coverage generated by
<a href="https://istanbul.js.org/" target="_blank">istanbul</a>
at Tue Jul 13 2021 11:41:48 GMT-0400 (Eastern Daylight Time)
at Tue Jul 13 2021 22:06:15 GMT-0400 (Eastern Daylight Time)
</div>
</div>
<script src="prettify.js"></script>
Expand Down
8 changes: 7 additions & 1 deletion example-cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@

import { CliApplication } from "./src/cli-application/cli-application";
import { ArrayCliCommandsCollection } from "./src/cli-commands-collection/cli-commands-collection";
import { ConsoleUserInputRequestor } from "./src/input-requestor/console-input-requestor";
import { iCliCommand } from "./src/models/cli-command";
import { iCliOutputter } from "./src/models/cli-outputter";
import { ConsoleOutputter } from "./src/outputter/console-outputter";

const commands: iCliCommand[] = [
{
Expand Down Expand Up @@ -121,5 +123,9 @@ new CliApplication().startApp(
},
},
new ArrayCliCommandsCollection(commands),
[...process.argv].slice(2)
[...process.argv].slice(2),
new ConsoleOutputter(),
new ConsoleUserInputRequestor(
new ConsoleOutputter()
)
);
20 changes: 6 additions & 14 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@byte-this/js-cli",
"version": "1.0.9",
"version": "1.0.17",
"description": "Functionality to streamline the process of scripting for the console with javascript",
"main": "public-api.js",
"types": "public-api.d.ts",
Expand All @@ -22,6 +22,9 @@
},
"homepage": "https://github.com/ByteThisStore/js-cli-scripting#readme",
"dependencies": {
"try-require": "^1.2.1"
},
"peerDependencies": {
"enquirer": "^2.3.6"
},
"devDependencies": {
Expand Down
3 changes: 3 additions & 0 deletions public-api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,12 @@ export * from "./src/models/recursive-partial";
export * from "./src/models/cli-commands-collection";

export * from "./src/outputter/console-outputter";
export * from "./src/outputter/composite-outputter";
export * from "./src/outputter/callback-outputter";

export * from "./src/input-requestor/base-input-requestor";
export * from "./src/input-requestor/console-input-requestor";
export * from "./src/input-requestor/callback-input-requestor";

export * from "./src/cmd-executor/cmd-executor";

Expand Down
23 changes: 3 additions & 20 deletions src/cli-application/cli-application.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
import EventEmitter from "events";
import { argv } from "process";
import { CliCommandExecutor } from "../cmd-executor/cmd-executor";
import { EVENTS } from "../events/events";
import { ConsoleUserInputRequestor } from "../input-requestor/console-input-requestor";
import {
iCliApplication,
iCliApplicationOptions,
} from "../models/cli-application";
import { iCliCommand } from "../models/cli-command";
import { iCliCommandExecutor } from "../models/cli-command-executor";
import { iCliOutputter } from "../models/cli-outputter";
import { iCliUserInputRequestor } from "../models/cli-user-input-requestor";
import { RecursivePartial } from "../models/recursive-partial";
import { ConsoleOutputter } from "../outputter/console-outputter";
import { QuitCliCommand } from "./app-commands/quit-cmd";
import { ArgvCommandExecutorCommand } from "./internal-app-commands/argv-exec-cmd";
import { CommandExecutorCommand } from "./internal-app-commands/cmd-exec-cmd";
Expand All @@ -24,10 +20,9 @@ export class CliApplication implements iCliApplication {
async startApp(
inputOptions: RecursivePartial<iCliApplicationOptions>,
cliCommandsCollection: iCliCommandsCollection,
argV?: string[],
cliOutputter?: iCliOutputter,
cliUserInputRequestor?: iCliUserInputRequestor,
cmdExecutor?: iCliCommandExecutor
argV: string[],
cliOutputter: iCliOutputter,
cliUserInputRequestor: iCliUserInputRequestor,
): Promise<void> {
const options: iCliApplicationOptions = {
appendDefaultCommands: true,
Expand All @@ -46,18 +41,6 @@ export class CliApplication implements iCliApplication {

//instantiate defaults if necessary
const eventEmitter = new EventEmitter();
if (!cliOutputter) {
cliOutputter = new ConsoleOutputter();
}
if (!cliUserInputRequestor) {
cliUserInputRequestor = new ConsoleUserInputRequestor(cliOutputter);
}
if (!cmdExecutor) {
cmdExecutor = new CliCommandExecutor(
cliOutputter,
cliUserInputRequestor
);
}

//listen to events
this.listenToEvents(eventEmitter);
Expand Down
2 changes: 1 addition & 1 deletion src/input-requestor/base-input-requestor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { iCliOutputter } from "../models/cli-outputter";
import { iCliUserInputRequestor } from "../models/cli-user-input-requestor";

export abstract class BaseUserInputRequestor implements iCliUserInputRequestor {
constructor(private cliOutputter: iCliOutputter) {}
constructor(protected cliOutputter: iCliOutputter) {}

async awaitInput(param: iCliCommandParam): Promise<any> {
if (param.doRepeat) {
Expand Down
27 changes: 27 additions & 0 deletions src/input-requestor/callback-input-requestor.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { iCliCommandParamChoice } from "../models/cli-command-param";
import { iCliOutputter } from "../models/cli-outputter";
import { BaseUserInputRequestor } from "./base-input-requestor";

export class CallbackInputRequestor extends BaseUserInputRequestor {

static events: {
getInput: "getInput",
getBoolean: "getBoolean"
}

constructor(
cliOutputter: iCliOutputter,
private callback: (eventType: string, displayText: string, defalutValue?: string | boolean, choices?: iCliCommandParamChoice[]) => Promise<string | boolean>
) {
super(cliOutputter);
}

protected async getInput(displayText: string, defaultValue?: string, choices?: iCliCommandParamChoice[]): Promise<string> {
return this.callback(CallbackInputRequestor.events.getInput, displayText, defaultValue, choices) as Promise<string>;
}

protected async getBoolean(displayText: string, defaultValue?: boolean): Promise<boolean> {
return this.callback(CallbackInputRequestor.events.getInput, displayText, defaultValue) as Promise<boolean>;
}

}
4 changes: 3 additions & 1 deletion src/input-requestor/console-input-requestor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ import {
iCliCommandParamChoice,
} from "../models/cli-command-param";
import { BaseUserInputRequestor } from "./base-input-requestor";
const { prompt } = require("enquirer");
const tryRequire = require('try-require');
const enquirer = tryRequire("enquirer");
const prompt = enquirer ? enquirer.promt : null;

export class ConsoleUserInputRequestor extends BaseUserInputRequestor {
protected getInput(
Expand Down
5 changes: 2 additions & 3 deletions src/models/cli-application.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,7 @@ export interface iCliApplication {
options: RecursivePartial<iCliApplicationOptions>,
cliCommandsCollection: iCliCommandsCollection,
argV: string[],
cliOutputter?: iCliOutputter,
cliUserInputRequestor?: iCliUserInputRequestor,
cmdExecutor?: iCliCommandExecutor
cliOutputter: iCliOutputter,
cliUserInputRequestor: iCliUserInputRequestor
): Promise<void>;
}
39 changes: 39 additions & 0 deletions src/outputter/callback-outputter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import { iCliCommand } from "../models/cli-command";
import { iCliOutputter } from "../models/cli-outputter";


export class CallbackCliOutputter implements iCliOutputter {

static events = {
pushCommandsDescriptionsOutput: "pushCommandsDescriptionsOutput",
pushDebug: "pushDebug",
pushError: "pushError",
pushMessage: "pushMessage",
pushWarning: "pushWarning",
clearVisibleOutput: "clearVisibleOutput"
};

constructor(
private callback: (eventType: string, params: any[]) => void
) {}

pushDebug(level: number, ...params: any[]): void {
this.callback(CallbackCliOutputter.events.pushDebug, [level, ...params]);
}
pushMessage(...params: any[]): void {
this.callback(CallbackCliOutputter.events.pushMessage, [...params]);
}
pushWarning(...params: any[]): void {
this.callback(CallbackCliOutputter.events.pushWarning, [...params]);
}
pushError(...params: any[]): void {
this.callback(CallbackCliOutputter.events.pushError, [...params]);
}
pushCommandsDescriptionsOutput(commands: iCliCommand[]): void {
this.callback(CallbackCliOutputter.events.pushCommandsDescriptionsOutput, [commands]);
}
clearVisibleOutput(): void {
this.callback(CallbackCliOutputter.events.clearVisibleOutput, []);
}

}
29 changes: 29 additions & 0 deletions src/outputter/composite-outputter.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { iCliCommand } from "../models/cli-command";
import { iCliOutputter } from "../models/cli-outputter";

export class CompositeCliOutputter implements iCliOutputter {

constructor(
private cliOutputters: iCliOutputter[]
) {}

pushDebug(level: number, ...params: any[]): void {
this.cliOutputters.forEach(co => co.pushDebug(level, ...params));
}
pushMessage(...params: any[]): void {
this.cliOutputters.forEach(co => co.pushMessage(params));
}
pushWarning(...params: any[]): void {
this.cliOutputters.forEach(co => co.pushWarning(params));
}
pushError(...params: any[]): void {
this.cliOutputters.forEach(co => co.pushError(params));
}
pushCommandsDescriptionsOutput(commands: iCliCommand[]): void {
this.cliOutputters.forEach(co => co.pushCommandsDescriptionsOutput(commands));
}
clearVisibleOutput(): void {
this.cliOutputters.forEach(co => co.clearVisibleOutput());
}

}

0 comments on commit 3ebc859

Please sign in to comment.