diff --git a/.changeset/red-walls-greet.md b/.changeset/red-walls-greet.md index 32c2700..7bceacd 100644 --- a/.changeset/red-walls-greet.md +++ b/.changeset/red-walls-greet.md @@ -2,4 +2,4 @@ '@clack/prompts': minor --- -add prompt `builder` +add prompt `workflow` builder diff --git a/examples/package.json b/examples/package.json index bf906b2..e112593 100644 --- a/examples/package.json +++ b/examples/package.json @@ -12,7 +12,7 @@ "basic": "jiti ./basic.ts", "spinner": "jiti ./spinner.ts", "changesets": "jiti ./changesets.ts", - "builder": "jiti ./builder.ts" + "workflow": "jiti ./workflow.ts" }, "devDependencies": { "jiti": "^1.17.0" diff --git a/examples/builder.ts b/examples/workflow.ts similarity index 81% rename from examples/builder.ts rename to examples/workflow.ts index aca68a7..b29afe0 100644 --- a/examples/builder.ts +++ b/examples/workflow.ts @@ -2,8 +2,8 @@ import * as p from '@clack/prompts'; (async () => { const results = await p - .builder() - .add('path', () => + .workflow() + .step('path', () => p.text({ message: 'Where should we create your project?', placeholder: './sparkling-solid', @@ -13,7 +13,7 @@ import * as p from '@clack/prompts'; }, }) ) - .add('password', () => + .step('password', () => p.password({ message: 'Provide a password', validate: (value) => { @@ -22,7 +22,7 @@ import * as p from '@clack/prompts'; }, }) ) - .add('type', ({ results }) => + .step('type', ({ results }) => p.select({ message: `Pick a project type within "${results.path}"`, initialValue: 'ts', @@ -37,7 +37,7 @@ import * as p from '@clack/prompts'; ], }) ) - .add('tools', () => + .step('tools', () => p.multiselect({ message: 'Select additional tools.', initialValues: ['prettier', 'eslint'], @@ -49,7 +49,7 @@ import * as p from '@clack/prompts'; ], }) ) - .add('install', ({ results }) => + .step('install', ({ results }) => p.confirm({ message: 'Install dependencies?', initialValue: false, @@ -58,11 +58,11 @@ import * as p from '@clack/prompts'; .run(); await p - .builder() - .add('cancel', () => p.text({ message: 'Try cancel prompt (Ctrl + C):' })) - .add('afterCancel', () => p.text({ message: 'This will not appear!' })) + .workflow() + .step('cancel', () => p.text({ message: 'Try cancel prompt (Ctrl + C):' })) + .step('afterCancel', () => p.text({ message: 'This will not appear!' })) .onCancel(({ results }) => { - p.cancel('Builder canceled'); + p.cancel('Workflow canceled'); process.exit(0); }) .run(); diff --git a/packages/prompts/README.md b/packages/prompts/README.md index 6440f5f..8f0482b 100644 --- a/packages/prompts/README.md +++ b/packages/prompts/README.md @@ -123,7 +123,7 @@ s.stop('Installed via npm'); ## Utilities -### Grouping +### Group Grouping prompts together is a great way to keep your code organized. This accepts a JSON object with a name that can be used to reference the group later. The second argument is an optional but has a `onCancel` callback that will be called if the user cancels one of the prompts in the group. @@ -157,18 +157,18 @@ const group = await p.group( console.log(group.name, group.age, group.color); ``` -### Building +### Workflow -Just like `group`, but on `builder` way, so you can choose which one fits better. +Just like `group`, but on builder way, so you can choose which one fits better. ```js import * as p from '@clack/prompts'; const results = await p - .builder() - .add('name', () => p.text({ message: 'What is your name?' })) - .add('age', () => p.text({ message: 'What is your age?' })) - .add('color', ({ results }) => + .workflow() + .step('name', () => p.text({ message: 'What is your name?' })) + .step('age', () => p.text({ message: 'What is your age?' })) + .step('color', ({ results }) => p.multiselect({ message: `What is your favorite color ${results.name}?`, options: [ @@ -179,7 +179,7 @@ const results = await p }) ) .onCancel(() => { - p.cancel('Builder canceled'); + p.cancel('Workflow canceled'); process.exit(0); }) .run(); diff --git a/packages/prompts/src/index.ts b/packages/prompts/src/index.ts index 13764b2..57fb14e 100644 --- a/packages/prompts/src/index.ts +++ b/packages/prompts/src/index.ts @@ -770,11 +770,11 @@ export const group = async ( return results; }; -type NextPromptBuilder< +type NextWorkflowBuilder< TResults extends Record, TKey extends string, TResult -> = PromptBuilder< +> = WorkflowBuilder< { [Key in keyof TResults]: Key extends TKey ? TResult : TResults[Key]; } & { @@ -782,20 +782,20 @@ type NextPromptBuilder< } >; -class PromptBuilder = {}> { +class WorkflowBuilder = {}> { private results: TResults = {} as TResults; private prompts: Record> = {}; private cancelCallback: PromptWithOptions, void> | undefined; - public add( + public step( key: TKey extends keyof TResults ? never : TKey, prompt: PromptWithOptions - ): NextPromptBuilder { + ): NextWorkflowBuilder { this.prompts[key] = prompt; - return this as NextPromptBuilder; + return this as NextWorkflowBuilder; } - public onCancel(cb: PromptWithOptions, void>): PromptBuilder { + public onCancel(cb: PromptWithOptions, void>): WorkflowBuilder { this.cancelCallback = cb; return this; } @@ -814,6 +814,6 @@ class PromptBuilder = {}> { } } -export const builder = () => { - return new PromptBuilder(); +export const workflow = () => { + return new WorkflowBuilder(); };