Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/fix-clack-prompts-types.md
Original file line number Diff line number Diff line change
@@ -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.
8 changes: 5 additions & 3 deletions src/login.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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?`);
Expand All @@ -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);
Expand Down
24 changes: 12 additions & 12 deletions src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ async function promptForSessionNameWithReadline(defaultName: string) {
}
}

export async function promptForSessionName(defaultName: string) {
export async function promptForSessionName(defaultName: string): Promise<string> {
if (!stdin.isTTY) {
return promptForSessionNameWithReadline(defaultName);
}
Expand All @@ -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) {
Expand All @@ -182,7 +182,7 @@ async function confirmActionWithReadline(message: string) {
}
}

export async function confirmAction(message: string) {
export async function confirmAction(message: string): Promise<boolean> {
if (!stdin.isTTY) {
return confirmActionWithReadline(message);
}
Expand All @@ -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<string> {
console.log('\nAvailable sessions:');
sessions.forEach((session, index) => {
const saved = formatSessionSavedDate(session.savedAt);
Expand All @@ -220,7 +220,7 @@ async function pickSessionWithReadline(sessions: SessionInfo[]) {
}
}

async function pickSessionWithClack(sessions: SessionInfo[]) {
async function pickSessionWithClack(sessions: SessionInfo[]): Promise<string> {
const choice = await select({
message: 'Select a session',
options: formatSessionOptions(sessions),
Expand All @@ -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<string> {
const sessions = await listSessions();
if (sessions.length === 0) {
throw new Error('No saved sessions found. Run `scratchpad session login` to create one.');
Expand All @@ -247,7 +247,7 @@ export async function pickSession() {
return pickSessionWithReadline(sessions);
}

async function pickSessionsWithReadline(sessions: SessionInfo[]) {
async function pickSessionsWithReadline(sessions: SessionInfo[]): Promise<string[]> {
console.log('\nAvailable sessions:');
sessions.forEach((session, index) => {
const saved = formatSessionSavedDate(session.savedAt);
Expand Down Expand Up @@ -284,7 +284,7 @@ async function pickSessionsWithReadline(sessions: SessionInfo[]) {
}
}

async function pickSessionsWithClack(sessions: SessionInfo[]) {
async function pickSessionsWithClack(sessions: SessionInfo[]): Promise<string[]> {
const choices = await multiselect({
message: 'Select sessions to delete',
options: formatSessionOptions(sessions),
Expand All @@ -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<string[]> {
const sessions = await listSessions();
if (sessions.length === 0) {
throw new Error('No saved sessions found. Run `scratchpad session login` to create one.');
Expand Down
Loading