diff --git a/.changeset/fix-clack-prompts-types.md b/.changeset/fix-clack-prompts-types.md new file mode 100644 index 0000000..6baa19a --- /dev/null +++ b/.changeset/fix-clack-prompts-types.md @@ -0,0 +1,5 @@ +--- +"@heymp/scratchpad": patch +--- + +Fix TypeScript errors caused by @clack/prompts 1.8.0 returning `T | symbol` from prompt functions. Added explicit return type annotations and type casts after `isCancel` guards in utils.ts and login.ts. diff --git a/src/login.ts b/src/login.ts index 294d69b..5d87efd 100644 --- a/src/login.ts +++ b/src/login.ts @@ -172,8 +172,10 @@ async function saveSessionFromContextWithPrompts( throw new OperationCancelledError(); } + const validChoice = choice as string; + let sessionName: string; - if (choice === CREATE_NEW_SESSION) { + if (validChoice === CREATE_NEW_SESSION) { sessionName = await prompts.promptName(await generateDefaultSessionName()); if (await exists(getSessionPath(sessionName))) { const confirmed = await prompts.confirm(`Session "${sessionName}" already exists. Overwrite?`); @@ -182,11 +184,11 @@ async function saveSessionFromContextWithPrompts( } } } else { - const confirmed = await prompts.confirm(`Overwrite session "${choice}"?`); + const confirmed = await prompts.confirm(`Overwrite session "${validChoice}"?`); if (!confirmed) { throw new OperationCancelledError(); } - sessionName = choice; + sessionName = validChoice; } const sessionPath = getSessionPath(sessionName); diff --git a/src/utils.ts b/src/utils.ts index 550078b..578ea81 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -152,7 +152,7 @@ async function promptForSessionNameWithReadline(defaultName: string) { } } -export async function promptForSessionName(defaultName: string) { +export async function promptForSessionName(defaultName: string): Promise { if (!stdin.isTTY) { return promptForSessionNameWithReadline(defaultName); } @@ -168,7 +168,7 @@ export async function promptForSessionName(defaultName: string) { throw new OperationCancelledError(); } - return name || defaultName; + return (name as string) || defaultName; } async function confirmActionWithReadline(message: string) { @@ -182,7 +182,7 @@ async function confirmActionWithReadline(message: string) { } } -export async function confirmAction(message: string) { +export async function confirmAction(message: string): Promise { if (!stdin.isTTY) { return confirmActionWithReadline(message); } @@ -192,10 +192,10 @@ export async function confirmAction(message: string) { return false; } - return result; + return result as boolean; } -async function pickSessionWithReadline(sessions: SessionInfo[]) { +async function pickSessionWithReadline(sessions: SessionInfo[]): Promise { console.log('\nAvailable sessions:'); sessions.forEach((session, index) => { const saved = formatSessionSavedDate(session.savedAt); @@ -220,7 +220,7 @@ async function pickSessionWithReadline(sessions: SessionInfo[]) { } } -async function pickSessionWithClack(sessions: SessionInfo[]) { +async function pickSessionWithClack(sessions: SessionInfo[]): Promise { const choice = await select({ message: 'Select a session', options: formatSessionOptions(sessions), @@ -231,10 +231,10 @@ async function pickSessionWithClack(sessions: SessionInfo[]) { throw new OperationCancelledError(); } - return choice; + return choice as string; } -export async function pickSession() { +export async function pickSession(): Promise { const sessions = await listSessions(); if (sessions.length === 0) { throw new Error('No saved sessions found. Run `scratchpad session login` to create one.'); @@ -247,7 +247,7 @@ export async function pickSession() { return pickSessionWithReadline(sessions); } -async function pickSessionsWithReadline(sessions: SessionInfo[]) { +async function pickSessionsWithReadline(sessions: SessionInfo[]): Promise { console.log('\nAvailable sessions:'); sessions.forEach((session, index) => { const saved = formatSessionSavedDate(session.savedAt); @@ -284,7 +284,7 @@ async function pickSessionsWithReadline(sessions: SessionInfo[]) { } } -async function pickSessionsWithClack(sessions: SessionInfo[]) { +async function pickSessionsWithClack(sessions: SessionInfo[]): Promise { const choices = await multiselect({ message: 'Select sessions to delete', options: formatSessionOptions(sessions), @@ -296,10 +296,10 @@ async function pickSessionsWithClack(sessions: SessionInfo[]) { throw new OperationCancelledError(); } - return choices; + return choices as string[]; } -export async function pickSessions() { +export async function pickSessions(): Promise { const sessions = await listSessions(); if (sessions.length === 0) { throw new Error('No saved sessions found. Run `scratchpad session login` to create one.');