import { parseJson } from '@nx/devkit'; import { createFileSync, ensureDirSync, readdirSync, readFileSync, removeSync, renameSync, statSync, writeFileSync, } from 'fs-extra'; import * as path from 'path'; import { e2eCwd } from './get-env-info'; import { tmpProjPath } from './create-project-utils'; export function createFile(f: string, content: string = ''): void { const path = tmpProjPath(f); createFileSync(path); if (content) { updateFile(f, content); } } export function updateFile( f: string, content: string | ((content: string) => string) ): void { ensureDirSync(path.dirname(tmpProjPath(f))); if (typeof content === 'string') { writeFileSync(tmpProjPath(f), content); } else { writeFileSync( tmpProjPath(f), content(readFileSync(tmpProjPath(f)).toString()) ); } } export function renameFile(f: string, newPath: string): void { ensureDirSync(path.dirname(tmpProjPath(newPath))); renameSync(tmpProjPath(f), tmpProjPath(newPath)); } export function checkFilesExist(...expectedFiles: string[]) { expectedFiles.forEach((f) => { const ff = f.startsWith('/') ? f : tmpProjPath(f); if (!exists(ff)) { throw new Error(`File '${ff}' does not exist`); } }); } export function updateJson( f: string, updater: (value: T) => U ) { updateFile(f, (s) => { const json = JSON.parse(s); return JSON.stringify(updater(json), null, 2); }); } export function checkFilesDoNotExist(...expectedFiles: string[]) { expectedFiles.forEach((f) => { const ff = f.startsWith('/') ? f : tmpProjPath(f); if (exists(ff)) { throw new Error(`File '${ff}' should not exist`); } }); } export function listFiles(dirName: string) { return readdirSync(tmpProjPath(dirName)); } export function readJson(f: string): T { const content = readFile(f); return parseJson(content); } export function readFile(f: string) { const ff = f.startsWith('/') ? f : tmpProjPath(f); return readFileSync(ff, 'utf-8'); } export function removeFile(f: string) { const ff = f.startsWith('/') ? f : tmpProjPath(f); removeSync(ff); } export function rmDist() { removeSync(`${tmpProjPath()}/dist`); } export function directoryExists(filePath: string): boolean { try { return statSync(filePath).isDirectory(); } catch (err) { return false; } } export function fileExists(filePath: string): boolean { try { return statSync(filePath).isFile(); } catch (err) { return false; } } export function exists(filePath: string): boolean { return directoryExists(filePath) || fileExists(filePath); } export function getSize(filePath: string): number { return statSync(filePath).size; } export function tmpBackupProjPath(path?: string) { return path ? `${e2eCwd}/proj-backup/${path}` : `${e2eCwd}/proj-backup`; } export function tmpBackupNgCliProjPath(path?: string) { return path ? `${e2eCwd}/ng-cli-proj-backup/${path}` : `${e2eCwd}/ng-cli-proj-backup`; }