repomix
Version:
A tool to pack repository contents to single file for AI consumption
35 lines (34 loc) • 1.46 kB
JavaScript
import { spawn } from 'node:child_process';
import * as clipboard from 'tinyclip';
import { logger } from '../../shared/logger.js';
export const copyToClipboardIfEnabled = async (output, progressCallback, config) => {
if (!config.output.copyToClipboard)
return;
progressCallback('Copying to clipboard...');
if (process.env.NODE_ENV !== 'test' && process.env.WAYLAND_DISPLAY) {
logger.trace('Wayland detected; attempting wl-copy.');
try {
await new Promise((resolve, reject) => {
const proc = spawn('wl-copy', [], { stdio: ['pipe', 'ignore', 'ignore'] });
proc.on('error', (err) => reject(new Error(`Failed to execute wl-copy: ${err.message}`)));
proc.on('close', (code) => (code ? reject(new Error(`wl-copy exited with code ${code}`)) : resolve()));
proc.stdin.end(output);
});
logger.trace('Copied using wl-copy.');
return;
}
catch (err) {
const msg = err instanceof Error ? err.message : 'unknown error';
logger.warn(`wl-copy failed (${msg}); falling back.`);
}
}
try {
logger.trace('Using tinyclip.');
await clipboard.writeText(output);
logger.trace('Copied using tinyclip.');
}
catch (err) {
const msg = err instanceof Error ? err.message : 'unknown error';
logger.error(`tinyclip failed: ${msg}`);
}
};