All files / src/utils file-dialog.ts

100% Statements 1/1
100% Branches 0/0
100% Functions 0/0
100% Lines 1/1

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31                                2x                            
export interface OpenDialogResult {
    canceled: boolean;
    filePaths: string[];
}
 
export interface SaveDialogResult {
    canceled: boolean;
    filePath?: string;
}
 
interface ElectronDialog {
    showOpenDialog(opts: Record<string, unknown>): Promise<OpenDialogResult>;
    showSaveDialog(opts: Record<string, unknown>): Promise<SaveDialogResult>;
}
 
/** Thin wrapper around Electron's native dialogs — exported for test stubbing. */
export const electronDialog = {
    /* v8 ignore start -- requires Electron runtime */
    showOpenDialog(opts: Record<string, unknown>): Promise<OpenDialogResult> {
        // eslint-disable-next-line @typescript-eslint/no-require-imports -- electron exists only at runtime inside Obsidian; a static import would break the esbuild bundle
        const electron = require("electron") as { remote: { dialog: ElectronDialog } };
        return electron.remote.dialog.showOpenDialog(opts);
    },
    showSaveDialog(opts: Record<string, unknown>): Promise<SaveDialogResult> {
        // eslint-disable-next-line @typescript-eslint/no-require-imports -- electron exists only at runtime inside Obsidian; a static import would break the esbuild bundle
        const electron = require("electron") as { remote: { dialog: ElectronDialog } };
        return electron.remote.dialog.showSaveDialog(opts);
    },
    /* v8 ignore stop */
};