123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- 'use strict';
- const fs = require('fs');
- const execa = require('execa');
- const pFinally = require('p-finally');
- const pify = require('pify');
- const rimraf = require('rimraf');
- const tempfile = require('tempfile');
-
- const fsP = pify(fs);
- const rmP = pify(rimraf);
- const input = Symbol('inputPath');
- const output = Symbol('outputPath');
-
- module.exports = opts => {
- opts = Object.assign({}, opts);
-
- if (!Buffer.isBuffer(opts.input)) {
- return Promise.reject(new Error('Input is required'));
- }
-
- if (typeof opts.bin !== 'string') {
- return Promise.reject(new Error('Binary is required'));
- }
-
- if (!Array.isArray(opts.args)) {
- return Promise.reject(new Error('Arguments are required'));
- }
-
- const inputPath = opts.inputPath || tempfile();
- const outputPath = opts.outputPath || tempfile();
-
- opts.args = opts.args.map(x => x === input ? inputPath : x === output ? outputPath : x);
-
- const promise = fsP.writeFile(inputPath, opts.input)
- .then(() => execa(opts.bin, opts.args))
- .then(() => fsP.readFile(outputPath));
-
- return pFinally(promise, () => Promise.all([
- rmP(inputPath),
- rmP(outputPath)
- ]));
- };
-
- module.exports.input = input;
- module.exports.output = output;
|