From 26105034da4fcce7ac883c899d781f016559310d Mon Sep 17 00:00:00 2001 From: ruki Date: Thu, 8 Nov 2018 00:38:48 +0800 Subject: switch to vuepress --- node_modules/opn/index.js | 96 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 node_modules/opn/index.js (limited to 'node_modules/opn/index.js') diff --git a/node_modules/opn/index.js b/node_modules/opn/index.js new file mode 100644 index 00000000..f17902fc --- /dev/null +++ b/node_modules/opn/index.js @@ -0,0 +1,96 @@ +'use strict'; +const path = require('path'); +const childProcess = require('child_process'); +const isWsl = require('is-wsl'); + +module.exports = (target, opts) => { + if (typeof target !== 'string') { + return Promise.reject(new Error('Expected a `target`')); + } + + opts = Object.assign({wait: true}, opts); + + let cmd; + let appArgs = []; + let args = []; + const cpOpts = {}; + + if (Array.isArray(opts.app)) { + appArgs = opts.app.slice(1); + opts.app = opts.app[0]; + } + + if (process.platform === 'darwin') { + cmd = 'open'; + + if (opts.wait) { + args.push('-W'); + } + + if (opts.app) { + args.push('-a', opts.app); + } + } else if (process.platform === 'win32' || isWsl) { + cmd = 'cmd' + (isWsl ? '.exe' : ''); + args.push('/c', 'start', '""', '/b'); + target = target.replace(/&/g, '^&'); + + if (opts.wait) { + args.push('/wait'); + } + + if (opts.app) { + args.push(opts.app); + } + + if (appArgs.length > 0) { + args = args.concat(appArgs); + } + } else { + if (opts.app) { + cmd = opts.app; + } else { + cmd = process.platform === 'android' ? 'xdg-open' : path.join(__dirname, 'xdg-open'); + } + + if (appArgs.length > 0) { + args = args.concat(appArgs); + } + + if (!opts.wait) { + // `xdg-open` will block the process unless + // stdio is ignored and it's detached from the parent + // even if it's unref'd + cpOpts.stdio = 'ignore'; + cpOpts.detached = true; + } + } + + args.push(target); + + if (process.platform === 'darwin' && appArgs.length > 0) { + args.push('--args'); + args = args.concat(appArgs); + } + + const cp = childProcess.spawn(cmd, args, cpOpts); + + if (opts.wait) { + return new Promise((resolve, reject) => { + cp.once('error', reject); + + cp.once('close', code => { + if (code > 0) { + reject(new Error('Exited with code ' + code)); + return; + } + + resolve(cp); + }); + }); + } + + cp.unref(); + + return Promise.resolve(cp); +}; -- cgit v1.2.3