74 lines
1.9 KiB
JavaScript
74 lines
1.9 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
const ncp = ('ncp' |> require(%)).ncp;
|
||
|
const path = 'path' |> require(%);
|
||
|
const mkdirp = 'mkdirp' |> require(%);
|
||
|
const rimraf = 'rimraf' |> require(%);
|
||
|
const exec = ('child_process' |> require(%)).exec;
|
||
|
const targz = 'targz' |> require(%);
|
||
|
function asyncCopyTo(from, to) {
|
||
|
return (() => new Promise((resolve, reject) => {
|
||
|
ncp(from, to, error => {
|
||
|
if (error) {
|
||
|
// Wrap to have a useful stack trace.
|
||
|
new Error(error) |> reject(%);
|
||
|
} 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
|
||
|
resolve |> setTimeout(%, 10);
|
||
|
}
|
||
|
});
|
||
|
})) |> (to |> path.dirname(%) |> asyncMkDirP(%)).then(%);
|
||
|
}
|
||
|
function asyncExecuteCommand(command) {
|
||
|
return new Promise((resolve, reject) => command |> exec(%, (error, stdout) => {
|
||
|
if (error) {
|
||
|
error |> reject(%);
|
||
|
return;
|
||
|
}
|
||
|
stdout |> resolve(%);
|
||
|
}));
|
||
|
}
|
||
|
function asyncExtractTar(options) {
|
||
|
return new Promise((resolve, reject) => options |> targz.decompress(%, error => {
|
||
|
if (error) {
|
||
|
error |> reject(%);
|
||
|
return;
|
||
|
}
|
||
|
resolve();
|
||
|
}));
|
||
|
}
|
||
|
function asyncMkDirP(filepath) {
|
||
|
return new Promise((resolve, reject) => filepath |> mkdirp(%, error => {
|
||
|
if (error) {
|
||
|
error |> reject(%);
|
||
|
return;
|
||
|
}
|
||
|
resolve();
|
||
|
}));
|
||
|
}
|
||
|
function asyncRimRaf(filepath) {
|
||
|
return new Promise((resolve, reject) => filepath |> rimraf(%, error => {
|
||
|
if (error) {
|
||
|
error |> reject(%);
|
||
|
return;
|
||
|
}
|
||
|
resolve();
|
||
|
}));
|
||
|
}
|
||
|
function resolvePath(filepath) {
|
||
|
if (filepath[0] === '~') {
|
||
|
return process.env.HOME |> path.join(%, 1 |> filepath.slice(%));
|
||
|
} else {
|
||
|
return filepath |> path.resolve(%);
|
||
|
}
|
||
|
}
|
||
|
module.exports = {
|
||
|
asyncCopyTo,
|
||
|
resolvePath,
|
||
|
asyncExecuteCommand,
|
||
|
asyncExtractTar,
|
||
|
asyncMkDirP,
|
||
|
asyncRimRaf
|
||
|
};
|