import * as fs from "fs"; /** * Typing for the fields of package.json we care about */ export interface PackageJson { [key: string]: string; } /** * A function that json from a file */ export interface ReadJsonSync { // tslint:disable-next-line:no-any (packageJsonPath: string): any | undefined; } export interface FileExistsSync { (name: string): boolean; } export interface FileExistsAsync { (path: string, callback: (err?: Error, exists?: boolean) => void): void; } export interface ReadJsonAsyncCallback { // tslint:disable-next-line:no-any (err?: Error, content?: any): void; } export interface ReadJsonAsync { (path: string, callback: ReadJsonAsyncCallback): void; } export function fileExistsSync(path: string): boolean { try { const stats = fs.statSync(path); return stats.isFile(); } catch (err) { // If error, assume file did not exist return false; } } /** * Reads package.json from disk * @param file Path to package.json */ // tslint:disable-next-line:no-any export function readJsonFromDiskSync(packageJsonPath: string): any | undefined { if (!fs.existsSync(packageJsonPath)) { return undefined; } return require(packageJsonPath); } export function readJsonFromDiskAsync( path: string, // tslint:disable-next-line:no-any callback: (err?: Error, content?: any) => void ): void { fs.readFile(path, "utf8", (err, result) => { // If error, assume file did not exist if (err || !result) { return callback(); } const json = JSON.parse(result); return callback(undefined, json); }); } export function fileExistsAsync( path2: string, callback2: (err?: Error, exists?: boolean) => void ): void { fs.stat(path2, (err: Error, stats: fs.Stats) => { if (err) { // If error assume file does not exist return callback2(undefined, false); } callback2(undefined, stats ? stats.isFile() : false); }); } export function removeExtension(path: string): string { return path.substring(0, path.lastIndexOf(".")) || path; }