diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index db26c399..3b1f8102 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -8,3 +8,4 @@ export { default as SelectPrompt } from './prompts/select'; export { default as SelectKeyPrompt } from './prompts/select-key'; export { default as TextPrompt } from './prompts/text'; export { block } from './utils'; +export type { NonEmptyArray } from './utility-types'; diff --git a/packages/core/src/prompts/group-multiselect.ts b/packages/core/src/prompts/group-multiselect.ts index b5440539..e1c4c586 100644 --- a/packages/core/src/prompts/group-multiselect.ts +++ b/packages/core/src/prompts/group-multiselect.ts @@ -1,14 +1,15 @@ +import { NonEmptyArray } from '../utility-types'; import Prompt, { PromptOptions } from './prompt'; interface GroupMultiSelectOptions extends PromptOptions> { - options: Record; + options: Record>; initialValues?: T['value'][]; required?: boolean; cursorAt?: T['value']; } export default class GroupMultiSelectPrompt extends Prompt { - options: (T & { group: string | boolean })[]; + options: NonEmptyArray; cursor: number = 0; getGroupItems(group: string): T[] { diff --git a/packages/core/src/prompts/multi-select.ts b/packages/core/src/prompts/multi-select.ts index 911dab25..de52fb3c 100644 --- a/packages/core/src/prompts/multi-select.ts +++ b/packages/core/src/prompts/multi-select.ts @@ -1,13 +1,14 @@ +import { NonEmptyArray } from '../utility-types'; import Prompt, { PromptOptions } from './prompt'; interface MultiSelectOptions extends PromptOptions> { - options: T[]; + options: MultiSelectPrompt['options']; initialValues?: T['value'][]; required?: boolean; cursorAt?: T['value']; } export default class MultiSelectPrompt extends Prompt { - options: T[]; + options: NonEmptyArray; cursor: number = 0; private get _value() { diff --git a/packages/core/src/prompts/select.ts b/packages/core/src/prompts/select.ts index 521764e2..0846ebd0 100644 --- a/packages/core/src/prompts/select.ts +++ b/packages/core/src/prompts/select.ts @@ -1,11 +1,12 @@ +import { NonEmptyArray } from '../utility-types'; import Prompt, { PromptOptions } from './prompt'; interface SelectOptions extends PromptOptions> { - options: T[]; + options: SelectPrompt['options']; initialValue?: T['value']; } export default class SelectPrompt extends Prompt { - options: T[]; + options: NonEmptyArray; cursor: number = 0; private get _value() { diff --git a/packages/core/src/utility-types.ts b/packages/core/src/utility-types.ts new file mode 100644 index 00000000..5ae448c0 --- /dev/null +++ b/packages/core/src/utility-types.ts @@ -0,0 +1 @@ +export type NonEmptyArray = [T, ...T[]]; diff --git a/packages/prompts/src/index.ts b/packages/prompts/src/index.ts index 42451cc8..602b456a 100644 --- a/packages/prompts/src/index.ts +++ b/packages/prompts/src/index.ts @@ -4,6 +4,7 @@ import { GroupMultiSelectPrompt, isCancel, MultiSelectPrompt, + NonEmptyArray, PasswordPrompt, SelectKeyPrompt, SelectPrompt, @@ -176,7 +177,7 @@ type Option = Value extends Primitive export interface SelectOptions { message: string; - options: Option[]; + options: NonEmptyArray>; initialValue?: Value; maxItems?: number; } @@ -299,7 +300,7 @@ export const selectKey = (opts: SelectOptions) => { export interface MultiSelectOptions { message: string; - options: Option[]; + options: NonEmptyArray>; initialValues?: Value[]; required?: boolean; cursorAt?: Value; @@ -415,7 +416,7 @@ export const multiselect = (opts: MultiSelectOptions) => { export interface GroupMultiSelectOptions { message: string; - options: Record[]>; + options: Record>>; initialValues?: Value[]; required?: boolean; cursorAt?: Value;