diff --git a/packages/select/demo.js b/packages/select/demo.ts similarity index 96% rename from packages/select/demo.js rename to packages/select/demo.ts index c37f8849e..2f1a47676 100644 --- a/packages/select/demo.js +++ b/packages/select/demo.ts @@ -1,4 +1,4 @@ -import select from './index.js'; +import select from './src/index.js'; (async () => { let answer; diff --git a/packages/select/package.json b/packages/select/package.json index 6b4a0c455..333bef399 100644 --- a/packages/select/package.json +++ b/packages/select/package.json @@ -3,7 +3,11 @@ "type": "module", "version": "0.0.21-alpha.0", "description": "Inquirer select/list prompt", - "main": "index.js", + "main": "dist/index.js", + "typings": "dist/index.d.ts", + "files": [ + "dist/" + ], "repository": "SBoudrias/Inquirer.js", "keywords": [ "cli", @@ -20,6 +24,9 @@ "chalk": "^5.0.1", "figures": "^4.0.1" }, + "scripts": { + "tsc": "tsc" + }, "publishConfig": { "access": "public" } diff --git a/packages/select/index.js b/packages/select/src/index.ts similarity index 85% rename from packages/select/index.js rename to packages/select/src/index.ts index c1a0b2a1f..722aa20f8 100644 --- a/packages/select/index.js +++ b/packages/select/src/index.ts @@ -9,12 +9,18 @@ import { isDownKey, isNumberKey, Paginator, + AsyncPromptConfig, } from '@inquirer/core'; import chalk from 'chalk'; import figures from 'figures'; import ansiEscapes from 'ansi-escapes'; -export default createPrompt((config, done) => { +type SelectConfig = AsyncPromptConfig & { + choices: { value: string; name?: string; description?: string; disabled?: boolean }[]; + pageSize?: number; +}; + +export default createPrompt((config, done) => { const [status, setStatus] = useState('pending'); const [cursorPosition, setCursorPos] = useState(0); const { choices, pageSize = 7 } = config; @@ -24,7 +30,7 @@ export default createPrompt((config, done) => { useKeypress((key) => { if (isEnterKey(key)) { setStatus('done'); - done(choices[cursorPosition].value); + done(choices[cursorPosition]!.value); } else if (isUpKey(key) || isDownKey(key)) { let newCursorPosition = cursorPosition; const offset = isUpKey(key) ? -1 : 1; @@ -42,7 +48,7 @@ export default createPrompt((config, done) => { const newCursorPosition = Number(key.name) - 1; // Abort if the choice doesn't exists or if disabled - if (!choices[newCursorPosition] || choices[newCursorPosition].disabled) { + if (!choices[newCursorPosition] || choices[newCursorPosition]!.disabled) { return; } @@ -53,7 +59,7 @@ export default createPrompt((config, done) => { const message = chalk.bold(config.message); if (status === 'done') { - const choice = choices[cursorPosition]; + const choice = choices[cursorPosition]!; return `${prefix} ${message} ${chalk.cyan(choice.name || choice.value)}`; } diff --git a/packages/select/tsconfig.json b/packages/select/tsconfig.json new file mode 100644 index 000000000..6a62dbc48 --- /dev/null +++ b/packages/select/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "./dist" + }, + "include": ["./src"] +}