From 5dbe7856b6bf3649f6ed8b186efc6e8884637205 Mon Sep 17 00:00:00 2001 From: kevduc Date: Thu, 17 Aug 2023 03:45:56 +0200 Subject: [PATCH 1/5] Fix SelectPrompt options type --- packages/core/src/prompts/select.ts | 5 +++-- packages/core/src/utility-types.ts | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 packages/core/src/utility-types.ts diff --git a/packages/core/src/prompts/select.ts b/packages/core/src/prompts/select.ts index 521764e2..d474fe9e 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: NonEmptyArray; initialValue?: T['value']; } export default class SelectPrompt extends Prompt { - options: T[]; + options: SelectOptions['options']; 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[]]; From 93fc16a25b2988b47b9f451a11b6b241b33bca6b Mon Sep 17 00:00:00 2001 From: kevduc Date: Thu, 17 Aug 2023 04:42:05 +0200 Subject: [PATCH 2/5] Fix select option type --- packages/core/src/index.ts | 1 + packages/prompts/src/index.ts | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) 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/prompts/src/index.ts b/packages/prompts/src/index.ts index 42451cc8..61f9cb54 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; } From ce1fae23c8b7949a6d15d6258c56dacd518acc9a Mon Sep 17 00:00:00 2001 From: kevduc Date: Thu, 24 Aug 2023 16:54:39 +0200 Subject: [PATCH 3/5] fixup! Fix SelectPrompt options type --- packages/core/src/prompts/select.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/src/prompts/select.ts b/packages/core/src/prompts/select.ts index d474fe9e..0846ebd0 100644 --- a/packages/core/src/prompts/select.ts +++ b/packages/core/src/prompts/select.ts @@ -2,11 +2,11 @@ import { NonEmptyArray } from '../utility-types'; import Prompt, { PromptOptions } from './prompt'; interface SelectOptions extends PromptOptions> { - options: NonEmptyArray; + options: SelectPrompt['options']; initialValue?: T['value']; } export default class SelectPrompt extends Prompt { - options: SelectOptions['options']; + options: NonEmptyArray; cursor: number = 0; private get _value() { From 20cde30e5e48fbe2b15a8d5dba2ae8f9845a4489 Mon Sep 17 00:00:00 2001 From: kevduc Date: Thu, 24 Aug 2023 16:55:26 +0200 Subject: [PATCH 4/5] non empty array for multiselect --- packages/core/src/prompts/multi-select.ts | 5 +++-- packages/prompts/src/index.ts | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) 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/prompts/src/index.ts b/packages/prompts/src/index.ts index 61f9cb54..be46be6f 100644 --- a/packages/prompts/src/index.ts +++ b/packages/prompts/src/index.ts @@ -300,7 +300,7 @@ export const selectKey = (opts: SelectOptions) => { export interface MultiSelectOptions { message: string; - options: Option[]; + options: NonEmptyArray>; initialValues?: Value[]; required?: boolean; cursorAt?: Value; From f663d0f7e2a37ba7a088ac08f92c9e13a72dffe7 Mon Sep 17 00:00:00 2001 From: kevduc Date: Mon, 28 Aug 2023 02:23:53 +0200 Subject: [PATCH 5/5] non empty array for GroupMultiSelect --- packages/core/src/prompts/group-multiselect.ts | 5 +++-- packages/prompts/src/index.ts | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) 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/prompts/src/index.ts b/packages/prompts/src/index.ts index be46be6f..602b456a 100644 --- a/packages/prompts/src/index.ts +++ b/packages/prompts/src/index.ts @@ -416,7 +416,7 @@ export const multiselect = (opts: MultiSelectOptions) => { export interface GroupMultiSelectOptions { message: string; - options: Record[]>; + options: Record>>; initialValues?: Value[]; required?: boolean; cursorAt?: Value;