import { createRequire } from "module"; import { dirname, join } from "path"; import { pathToFileURL } from "url"; export type ClipboardModule = { getText: () => Promise; setText: (text: string) => Promise; hasImage: () => boolean; getImageBinary: () => Promise>; }; type ClipboardRequire = (id: string) => unknown; const moduleRequire = createRequire(import.meta.url); const executableDirRequire = createRequire(pathToFileURL(join(dirname(process.execPath), "package.json")).href); const hasDisplay = process.platform !== "linux" || Boolean(process.env.DISPLAY || process.env.WAYLAND_DISPLAY); export function loadClipboardNative( requires: readonly ClipboardRequire[] = [moduleRequire, executableDirRequire], ): ClipboardModule | null { for (const requireClipboard of requires) { try { return requireClipboard("@mariozechner/clipboard") as ClipboardModule; } catch { // Try the next resolution root. } } return null; } const clipboard = !process.env.TERMUX_VERSION && hasDisplay ? loadClipboardNative() : null; export { clipboard };