UNPKG

@dotenvx/dotenvx-pro

Version:
58 lines (50 loc) 1.61 kB
'use strict' const path = require('path') const execa = require('execa') const xsel = 'xsel' const xselFallback = path.join(__dirname, './fallbacks/linux/xsel') const copyArguments = ['--clipboard', '--input'] const pasteArguments = ['--clipboard', '--output'] const makeError = (xselError, fallbackError) => { let error if (xselError.code === 'ENOENT') { error = new Error('Couldn\'t find the `xsel` binary and fallback didn\'t work. On Debian/Ubuntu you can install xsel with: sudo apt install xsel') } else { error = new Error('Both xsel and fallback failed') error.xselError = xselError } error.fallbackError = fallbackError return error } const xselWithFallback = async (argumentList, options) => { try { return await execa.stdout(xsel, argumentList, options) } catch (xselError) { try { return await execa.stdout(xselFallback, argumentList, options) } catch (fallbackError) { throw makeError(xselError, fallbackError) } } } const xselWithFallbackSync = (argumentList, options) => { try { return execa.sync(xsel, argumentList, options) } catch (xselError) { try { return execa.sync(xselFallback, argumentList, options) } catch (fallbackError) { throw makeError(xselError, fallbackError) } } } module.exports = { copy: async options => { await xselWithFallback(copyArguments, options) }, copySync: options => { xselWithFallbackSync(copyArguments, options) }, paste: options => xselWithFallback(pasteArguments, options), pasteSync: options => xselWithFallbackSync(pasteArguments, options) }