forked from googleapis/cloud-trace-nodejs
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.ts
64 lines (56 loc) · 2.4 KB
/
utils.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import { mkdir, Stats, stat, readFile, writeFile } from 'fs';
import * as glob from 'glob';
import { ncp } from 'ncp';
import * as path from 'path';
import * as pify from 'pify';
import { ChildProcess, ForkOptions, fork, SpawnOptions, spawn } from 'child_process';
import * as once from 'once';
import * as tmp from 'tmp';
export const BUILD_DIRECTORY = 'build';
export const globP: (pattern: string) => Promise<string[]> = pify(glob);
export const mkdirP: (dir: string) => Promise<void> = pify(mkdir);
export const ncpP: (src: string, dest: string) => Promise<void> = pify(ncp);
export const readFileP: (path: string, encoding?: string) => Promise<Buffer|string> = pify(readFile);
export const writeFileP: (path: string, data: Buffer|string, encoding?: string) => Promise<void> = pify(writeFile);
export const statP: (path: string) => Promise<Stats> = pify(stat);
export const tmpDirP: () => Promise<string> = pify(tmp.dir);
export function nodule(nodule: string) {
return path.relative(BUILD_DIRECTORY, `node_modules/${nodule}`);
}
export function flatten<T>(arr: Array<Array<T>>): Array<T> {
return arr.reduce((acc, e) => acc.concat(e), []);
}
export function existsP(path: string): Promise<boolean> {
return statP(path).then(
() => Promise.resolve(true),
() => Promise.resolve(false)
);
}
function promisifyChildProcess(childProcess: ChildProcess): Promise<void> {
return new Promise((resolve, reject) => {
const exit = (err?: Error) => once(() => err ? reject(err) : resolve())();
childProcess.on('error', exit);
childProcess.on('close', (code) => {
if (code === 0) {
exit();
} else {
exit(new Error(`Process ${childProcess.pid} exited with code ${code}.`));
}
});
});
}
export function spawnP(command: string, args?: string[], options?: SpawnOptions): Promise<void> {
const stringifiedCommand = `\`${command}${args ? (' ' + args.join(' ')) : ''}\``;
console.log(`> Running: ${stringifiedCommand}`);
return promisifyChildProcess(spawn(command, args, Object.assign({
stdio: 'inherit',
shell: true
}, options)));
}
export function forkP(moduleName: string, args?: string[], options?: ForkOptions): Promise<void> {
const stringifiedCommand = `\`${moduleName}${args ? (' ' + args.join(' ')) : ''}\``;
console.log(`> Running: ${stringifiedCommand}`);
return promisifyChildProcess(fork(moduleName, args, Object.assign({
stdio: 'inherit'
}, options)));
}