swc/crates/swc_bundler/tests/.cache/deno/554a35c2725c7f0b404b9484dcddf343e67a384d.ts
2021-11-09 20:42:49 +09:00

132 lines
3.5 KiB
TypeScript

// Loaded from https://deno.land/x/cliffy@v0.18.0/prompt/confirm.ts
import { GenericPrompt } from "./_generic_prompt.ts";
import {
GenericSuggestions,
GenericSuggestionsKeys,
GenericSuggestionsOptions,
GenericSuggestionsSettings,
} from "./_generic_suggestions.ts";
import { blue, dim } from "./deps.ts";
import { Figures } from "./figures.ts";
export type ConfirmKeys = GenericSuggestionsKeys;
type UnsupportedInputOptions = "suggestions" | "list" | "info";
/** Confirm prompt options. */
export interface ConfirmOptions
extends
Omit<GenericSuggestionsOptions<boolean, string>, UnsupportedInputOptions> {
active?: string;
inactive?: string;
keys?: ConfirmKeys;
}
/** Confirm prompt settings. */
interface ConfirmSettings extends GenericSuggestionsSettings<boolean, string> {
active: string;
inactive: string;
keys?: ConfirmKeys;
}
/** Confirm prompt representation. */
export class Confirm
extends GenericSuggestions<boolean, string, ConfirmSettings> {
/** Execute the prompt and show cursor on end. */
public static prompt(
options: string | ConfirmOptions,
): Promise<boolean> {
if (typeof options === "string") {
options = { message: options };
}
return new this({
pointer: blue(Figures.POINTER_SMALL),
indent: " ",
listPointer: blue(Figures.POINTER),
maxRows: 8,
active: "Yes",
inactive: "No",
...options,
suggestions: [
options.active ?? "Yes",
options.inactive ?? "No",
],
list: false,
info: false,
}).prompt();
}
/**
* Inject prompt value. Can be used for unit tests or pre selections.
* @param value Input value.
*/
public static inject(value: string): void {
GenericPrompt.inject(value);
}
protected defaults(): string {
let defaultMessage = "";
if (this.settings.default === true) {
defaultMessage += this.settings.active[0].toUpperCase() + "/" +
this.settings.inactive[0].toLowerCase();
} else if (this.settings.default === false) {
defaultMessage += this.settings.active[0].toLowerCase() + "/" +
this.settings.inactive[0].toUpperCase();
} else {
defaultMessage += this.settings.active[0].toLowerCase() + "/" +
this.settings.inactive[0].toLowerCase();
}
return defaultMessage ? dim(` (${defaultMessage})`) : "";
}
/** Get input input. */
protected getValue(): string {
return this.inputValue;
}
/**
* Validate input value.
* @param value User input value.
* @return True on success, false or error message on error.
*/
protected validate(value: string): boolean | string {
return typeof value === "string" &&
[
this.settings.active[0].toLowerCase(),
this.settings.active.toLowerCase(),
this.settings.inactive[0].toLowerCase(),
this.settings.inactive.toLowerCase(),
].indexOf(value.toLowerCase()) !== -1;
}
/**
* Map input value to output value.
* @param value Input value.
* @return Output value.
*/
protected transform(value: string): boolean | undefined {
switch (value.toLowerCase()) {
case this.settings.active[0].toLowerCase():
case this.settings.active.toLowerCase():
return true;
case this.settings.inactive[0].toLowerCase():
case this.settings.inactive.toLowerCase():
return false;
}
return;
}
/**
* Format output value.
* @param value Output value.
*/
protected format(value: boolean): string {
return value ? this.settings.active : this.settings.inactive;
}
}