react/scripts/rollup/utils.js

93 lines
1.9 KiB
JavaScript

'use strict';
const ncp = require('ncp').ncp;
const path = require('path');
const mkdirp = require('mkdirp');
const rimraf = require('rimraf');
const exec = require('child_process').exec;
const targz = require('targz');
function asyncCopyTo(from, to) {
return asyncMkDirP(path.dirname(to)).then(
() =>
new Promise((resolve, reject) => {
ncp(from, to, error => {
if (error) {
// Wrap to have a useful stack trace.
reject(new Error(error));
} else {
// Wait for copied files to exist; ncp() sometimes completes prematurely.
// For more detail, see github.com/facebook/react/issues/22323
// Also github.com/AvianFlu/ncp/issues/127
setTimeout(resolve, 10);
}
});
})
);
}
function asyncExecuteCommand(command) {
return new Promise((resolve, reject) =>
exec(command, (error, stdout) => {
if (error) {
reject(error);
return;
}
resolve(stdout);
})
);
}
function asyncExtractTar(options) {
return new Promise((resolve, reject) =>
targz.decompress(options, error => {
if (error) {
reject(error);
return;
}
resolve();
})
);
}
function asyncMkDirP(filepath) {
return new Promise((resolve, reject) =>
mkdirp(filepath, error => {
if (error) {
reject(error);
return;
}
resolve();
})
);
}
function asyncRimRaf(filepath) {
return new Promise((resolve, reject) =>
rimraf(filepath, error => {
if (error) {
reject(error);
return;
}
resolve();
})
);
}
function resolvePath(filepath) {
if (filepath[0] === '~') {
return path.join(process.env.HOME, filepath.slice(1));
} else {
return path.resolve(filepath);
}
}
module.exports = {
asyncCopyTo,
resolvePath,
asyncExecuteCommand,
asyncExtractTar,
asyncMkDirP,
asyncRimRaf,
};