Skip to content

Commit

Permalink
fix(prompts): fixed type for array prompts, added name as mandatory
Browse files Browse the repository at this point in the history
  • Loading branch information
cenk1cenk2 committed Jun 2, 2020
1 parent d0cb7e9 commit a08b1e4
Show file tree
Hide file tree
Showing 5 changed files with 13 additions and 11 deletions.
1 change: 0 additions & 1 deletion examples/get-user-input.example.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,6 @@ async function main (): Promise<void> {
task: async (ctx, task): Promise<void> => {
ctx.input = await task.prompt({
type: 'Survey',
name: 'experience',
message: 'Please rate your experience',
scale: [
{ name: '1', message: 'Strongly Disagree' },
Expand Down
2 changes: 1 addition & 1 deletion src/interfaces/listr.interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ export interface ListrTaskWrapper<Ctx, Renderer extends ListrRendererFactory> {
report(error: Error): void
skip(message: string): void
run(ctx?: Ctx, task?: ListrTaskWrapper<Ctx, Renderer>): Promise<void>
prompt<T = any>(options: PromptOptions | PromptOptions[]): Promise<T>
prompt<T = any>(options: PromptOptions | PromptOptions<true>[]): Promise<T>
stdout(): NodeJS.WritableStream
}

Expand Down
2 changes: 1 addition & 1 deletion src/lib/task-wrapper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ export class TaskWrapper<Ctx, Renderer extends ListrRendererFactory> implements
}
}

public async prompt<T = any>(options: PromptOptions | PromptOptions[]): Promise<T> {
public async prompt<T = any>(options: PromptOptions | PromptOptions<true>[]): Promise<T> {
this.task.prompt = true

const response = await createPrompt.bind(this)(options)
Expand Down
17 changes: 10 additions & 7 deletions src/utils/prompt.interface.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ import Enquirer from 'enquirer'

import { PromptError } from '@interfaces/listr.interface'

export type PromptOptions = Unionize<
export type PromptOptions<T extends boolean = false> = Unionize<
{
[K in PromptTypes]-?: { type: K } & PromptOptionsType<K>
[K in PromptTypes]-?: T extends true ? { type: K } & PromptOptionsType<K> & { name: string | (() => string) } : { type: K } & PromptOptionsType<K>
}
>

Expand All @@ -13,7 +13,6 @@ export type Unionize<T extends object> = {
}[keyof T]

interface BasePromptOptions {
name?: string | (() => string)
message: string | (() => string) | (() => Promise<string>)
initial?: boolean | number | string | (() => string) | (() => Promise<string>)
required?: boolean
Expand All @@ -27,8 +26,12 @@ interface BasePromptOptions {
onCancel?(name: any, value: any, prompt: Enquirer.Prompt): boolean | Promise<boolean>
}

interface BasePromptOptionsWithName extends BasePromptOptions {
name: string | (() => string)
}

interface ArrayPromptOptions extends BasePromptOptions {
choices: string[] | BasePromptOptions[]
choices: string[] | BasePromptOptionsWithName[]
maxChoices?: number
muliple?: boolean
initial?: number
Expand All @@ -52,7 +55,7 @@ interface StringPromptOptions extends BasePromptOptions {

interface ScalePromptOptions extends ArrayPromptOptions {
scale: StringPromptOptions[]
margin: [number, number, number, number]
margin?: [number, number, number, number]
}

interface NumberPromptOptions extends BasePromptOptions {
Expand All @@ -68,7 +71,7 @@ interface NumberPromptOptions extends BasePromptOptions {

interface SnippetPromptOptions extends BasePromptOptions {
newline?: string
fields: Partial<BasePromptOptions>[]
fields: Partial<BasePromptOptionsWithName>[]
template: string
}

Expand All @@ -79,7 +82,7 @@ interface SortPromptOptions extends BasePromptOptions {
}

interface SurveyPromptOptions extends ArrayPromptOptions {
scale: BasePromptOptions[]
scale: BasePromptOptionsWithName[]
margin: [number, number, number, number]
}

Expand Down
2 changes: 1 addition & 1 deletion src/utils/prompt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { PromptOptions, PromptSettings } from './prompt.interface'
import { PromptError } from '@interfaces/listr.interface'
import { TaskWrapper } from '@root/lib/task-wrapper'

export async function createPrompt (options: PromptOptions | PromptOptions[], settings?: PromptSettings): Promise<any> {
export async function createPrompt (options: PromptOptions | PromptOptions<true>[], settings?: PromptSettings): Promise<any> {
// override cancel callback
let cancelCallback: PromptSettings['cancelCallback']
if (settings?.cancelCallback) {
Expand Down

0 comments on commit a08b1e4

Please sign in to comment.