fix(picker): end the closed worker-message switch in assertNever
The driver's switch over Win32DialogWorkerMessage handled all three current kinds but had no default, so a fourth kind added to the worker protocol would compile cleanly and silently no-op — settle() never called and the pick dangles until worker exit. Add the local assertNever backstop (the command-compact shape; this package does not depend on dsh-llm for the helper) and the return the error case needs to avoid falling into it. Round-five review finding.
This commit is contained in:
@@ -51,6 +51,13 @@ const CLOSE_RETRY_MS = 150
|
|||||||
/** Abort-service attempts before force-terminating the worker. */
|
/** Abort-service attempts before force-terminating the worker. */
|
||||||
const CLOSE_MAX_ATTEMPTS = 20
|
const CLOSE_MAX_ATTEMPTS = 20
|
||||||
|
|
||||||
|
/** Fail loudly if the closed worker-to-driver union gains an unhandled member. */
|
||||||
|
/* v8 ignore start -- closed-union backstop; unreachable without a TypeScript contract violation */
|
||||||
|
function assertNever(value: never): never {
|
||||||
|
throw new TypeError(`unknown win32 dialog worker message kind: ${String(value)}`)
|
||||||
|
}
|
||||||
|
/* v8 ignore stop */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Open the modern Win32 folder picker off the event loop.
|
* Open the modern Win32 folder picker off the event loop.
|
||||||
* @param signal - caller lifetime; abort closes the dialog and rejects.
|
* @param signal - caller lifetime; abort closes the dialog and rejects.
|
||||||
@@ -133,6 +140,10 @@ export async function pickWin32Directory(
|
|||||||
settle(() => {
|
settle(() => {
|
||||||
reject(new Error(`win32 folder dialog failed: ${message.message}`))
|
reject(new Error(`win32 folder dialog failed: ${message.message}`))
|
||||||
})
|
})
|
||||||
|
return
|
||||||
|
/* v8 ignore next 2 -- closed worker-owned union; a fourth kind becomes a compile error */
|
||||||
|
default:
|
||||||
|
assertNever(message)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
worker.on('error', (error: Error) => {
|
worker.on('error', (error: Error) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user