'use strict'; const decompress = require('decompress'); const download = require('download'); const execa = require('execa'); const pMapSeries = require('p-map-series'); const tempfile = require('tempfile'); const exec = (cmd, cwd) => pMapSeries(cmd, x => execa.shell(x, {cwd})); exports.directory = (dir, cmd) => { if (typeof dir !== 'string') { return Promise.reject(new TypeError(`Expected a \`string\`, got \`${typeof dir}\``)); } return exec(cmd, dir); }; exports.file = (file, cmd, opts) => { opts = Object.assign({strip: 1}, opts); if (typeof file !== 'string') { return Promise.reject(new TypeError(`Expected a \`string\`, got \`${typeof file}\``)); } const tmp = tempfile(); return decompress(file, tmp, opts).then(() => exec(cmd, tmp)); }; exports.url = (url, cmd, opts) => { opts = Object.assign({ extract: true, strip: 1 }, opts); if (typeof url !== 'string') { return Promise.reject(new TypeError(`Expected a \`string\`, got \`${typeof url}\``)); } const tmp = tempfile(); return download(url, tmp, opts).then(() => exec(cmd, tmp)); };