flow-coverage-report
Version:
Generate an HTML report of the flow coverage data
89 lines (78 loc) • 2.08 kB
JavaScript
;
// @flow
import {exec as nodeExec} from 'child_process';
import fs from 'fs';
import npmGlob from 'glob';
import temp from 'temp';
// Automatically cleanup temp file on process.exit
temp.track();
export type ExecError = Error & {
code: number | string | null,
};
export type ExecResult = {err?: ExecError, stdout?: string|Buffer, stderr?: string|Buffer};
export type ExecOptions = child_process$execOpts; // eslint-disable-line camelcase
export type ExecExtras = {dontReject?: boolean};
export function exec(
command: string, options: ExecOptions,
extra: ?ExecExtras
): Promise<ExecResult> {
return new Promise((resolve, reject) => {
nodeExec(command, options, (err, stdout, stderr) => {
if (err) {
if (extra && extra.dontReject) {
resolve({err, stdout, stderr});
} else {
reject(err);
}
} else {
resolve({stdout, stderr});
}
});
});
}
export function readFile(path: string): Promise<Buffer> {
return new Promise((resolve, reject) => {
fs.readFile(path, (err, buff) => {
if (err) {
reject(err);
} else {
resolve(buff);
}
});
});
}
export function writeFile(path: string, data: string|Buffer): Promise<void> {
return new Promise((resolve, reject) => {
fs.writeFile(path, data, err => {
if (err) {
reject(err);
} else {
resolve();
}
});
});
}
export type GlobFilelist = Array<string>;
export function glob(pattern: string, options: *): Promise<GlobFilelist> {
return new Promise((resolve, reject) => {
npmGlob(pattern, options, (err, files) => {
if (err) {
reject(err);
} else {
resolve(files);
}
});
});
}
// eslint-disable-next-line unicorn/prevent-abbreviations
export function withTmpDir(temporaryFileId: string): Promise<string> {
return new Promise((resolve, reject) => {
temp.mkdir(temporaryFileId, (err, dirPath) => {
if (err) {
reject(err);
} else {
resolve(dirPath);
}
});
});
}