Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cleanup(repo): refactored fileutils #10503

Merged
merged 1 commit into from
Jun 8, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 3 additions & 10 deletions packages/add-nx-to-monorepo/src/add-nx-to-monorepo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import * as enquirer from 'enquirer';
import * as yargsParser from 'yargs-parser';
import { output, readJsonFile, writeJsonFile } from '@nrwl/devkit';
import ignore from 'ignore';
import { directoryExists } from 'nx/src/utils/fileutils';

const parsedArgs = yargsParser(process.argv, {
boolean: ['nxCloud'],
Expand Down Expand Up @@ -212,23 +213,15 @@ function createNxJsonFile(repoRoot: string, projects: ProjectDesc[]) {
}

function deduceWorkspaceLayout(repoRoot: string) {
if (exists(path.join(repoRoot, 'packages'))) {
if (directoryExists(path.join(repoRoot, 'packages'))) {
return undefined;
} else if (exists(path.join(repoRoot, 'projects'))) {
} else if (directoryExists(path.join(repoRoot, 'projects'))) {
return { libsDir: 'projects', appsDir: 'projects' };
} else {
return undefined;
}
}

function exists(folder: string) {
try {
return fs.statSync(folder).isDirectory();
} catch {
return false;
}
}

function deduceDefaultBase() {
try {
execSync(`git rev-parse --verify main`, {
Expand Down
27 changes: 3 additions & 24 deletions packages/nx-plugin/src/utils/testing-utils/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ import { dirname, isAbsolute } from 'path';
import { tmpProjPath } from './paths';
import { parseJson } from '@nrwl/devkit';
import type { JsonParseOptions } from '@nrwl/devkit';
import { directoryExists, fileExists } from 'nx/src/utils/fileutils';

export { directoryExists, fileExists };

/**
* Copies module folders from the working directory to the e2e directory
Expand Down Expand Up @@ -139,30 +142,6 @@ export function getCwd(): string {
return process.cwd();
}

/**
* Check if a directory exists
* @param directoryPath Path to directory
*/
export function directoryExists(directoryPath: string): boolean {
try {
return statSync(directoryPath).isDirectory();
} catch {
return false;
}
}

/**
* Check if a file exists.
* @param filePath Path to file
*/
export function fileExists(filePath: string): boolean {
try {
return statSync(filePath).isFile();
} catch {
return false;
}
}

/**
* Check if a file or directory exists.
* @param path Path to file or directory
Expand Down
3 changes: 1 addition & 2 deletions packages/nx/src/command-line/init.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@ import { execSync } from 'child_process';
import { join } from 'path';
import { output } from '../utils/output';
import { getPackageManagerCommand } from '../utils/package-manager';
import { fileExists } from '../utils/workspace-root';
import { readJsonFile, writeJsonFile } from '../utils/fileutils';
import { readJsonFile, writeJsonFile, fileExists } from '../utils/fileutils';

export function initHandler() {
const nxIsInstalled = !!execSync(getPackageManagerCommand().list)
Expand Down
30 changes: 4 additions & 26 deletions packages/nx/src/utils/fileutils.spec.ts
Original file line number Diff line number Diff line change
@@ -1,32 +1,10 @@
import { fs, vol } from 'memfs';
import { stripIndents } from '@angular-devkit/core/src/utils/literals';
import { fs } from 'memfs';
import { createDirectory, isRelativePath } from './fileutils';

jest.mock('fs', () => require('memfs').fs);
jest.mock('fs', () => fs);

describe('fileutils', () => {
beforeEach(() => {
vol.fromJSON(
{
'./README.md': 'hello',
'./.nxignore': stripIndents`
apps/demo/tmp.txt
tmp/
`,
'./.gitignore': stripIndents`
*.js
node_modules/
`,
'./apps/demo/src/index.ts': 'console.log("hello");',
'./apps/demo/tmp.txt': '...',
'./apps/demo/tmp.js': 'console.log("tmp")',
'./workspace.json': '{}',
},
'/root'
);
});

describe('createDirectory', () => {
describe(createDirectory.name, () => {
it('should recursively create the directory', () => {
createDirectory('/root/b/c');
expect(fs.statSync('/root').isDirectory()).toBe(true);
Expand All @@ -35,7 +13,7 @@ describe('fileutils', () => {
});
});

describe('isRelativePath()', () => {
describe(isRelativePath.name, () => {
it('should return true for deeper imports', () => {
expect(isRelativePath('.')).toEqual(true);
expect(isRelativePath('./file')).toEqual(true);
Expand Down
40 changes: 21 additions & 19 deletions packages/nx/src/utils/fileutils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ import type { JsonParseOptions, JsonSerializeOptions } from './json';
import {
createReadStream,
createWriteStream,
PathLike,
readFileSync,
writeFileSync,
mkdirSync,
statSync,
} from 'fs';
import { dirname } from 'path';
import { ensureDirSync } from 'fs-extra';
import { mkdirSync, statSync } from 'fs';
import { resolve as pathResolve } from 'path';
import * as tar from 'tar-stream';
import { createGunzip } from 'zlib';

Expand Down Expand Up @@ -64,38 +64,40 @@ export function writeJsonFile<T extends object = object>(
data: T,
options?: JsonWriteOptions
): void {
ensureDirSync(dirname(path));
mkdirSync(dirname(path), { recursive: true });
const serializedJson = serializeJson(data, options);
const content = options?.appendNewLine
? `${serializedJson}\n`
: serializedJson;
writeFileSync(path, content, { encoding: 'utf-8' });
}

export function directoryExists(name) {
/**
* Check if a directory exists
* @param path Path to directory
*/
export function directoryExists(path: PathLike): boolean {
try {
return statSync(name).isDirectory();
} catch (e) {
return statSync(path).isDirectory();
} catch {
return false;
}
}

export function fileExists(filePath: string): boolean {
/**
* Check if a file exists.
* @param path Path to file
*/
export function fileExists(path: PathLike): boolean {
try {
return statSync(filePath).isFile();
} catch (err) {
return statSync(path).isFile();
} catch {
return false;
}
}

export function createDirectory(directoryPath: string) {
const parentPath = pathResolve(directoryPath, '..');
if (!directoryExists(parentPath)) {
createDirectory(parentPath);
}
if (!directoryExists(directoryPath)) {
mkdirSync(directoryPath);
}
export function createDirectory(path: PathLike) {
mkdirSync(path, { recursive: true });
}

export function isRelativePath(path: string): boolean {
Expand All @@ -120,7 +122,7 @@ export async function extractFileFromTarball(
destinationFilePath: string
) {
return new Promise<string>((resolve, reject) => {
ensureDirSync(dirname(destinationFilePath));
mkdirSync(dirname(destinationFilePath), { recursive: true });
var tarExtractStream = tar.extract();
const destinationFileStream = createWriteStream(destinationFilePath);

Expand Down
6 changes: 2 additions & 4 deletions packages/nx/src/utils/target-project-locator.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
import { getRootTsConfigFileName, resolveModuleByImport } from './typescript';
import { isRelativePath } from './fileutils';
import { isRelativePath, readJsonFile } from './fileutils';
import { dirname, join, posix } from 'path';
import { workspaceRoot } from './workspace-root';
import { readFileSync } from 'fs';
import {
ProjectGraphExternalNode,
ProjectGraphProjectNode,
} from '../config/project-graph';
import { parseJson } from './json';

export class TargetProjectLocator {
private projectRootMappings = createProjectRootMappings(this.nodes);
Expand Down Expand Up @@ -173,7 +171,7 @@ export class TargetProjectLocator {
return {
absolutePath,
path,
config: parseJson(readFileSync(absolutePath, 'utf8')),
config: readJsonFile(absolutePath),
};
}

Expand Down
10 changes: 1 addition & 9 deletions packages/nx/src/utils/workspace-root.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import * as path from 'path';
import { statSync } from 'fs';
import { fileExists } from './fileutils';

/**
* The root of the workspace
Expand Down Expand Up @@ -28,11 +28,3 @@ export function workspaceRootInner(
return workspaceRootInner(path.dirname(dir), candidateRoot);
}
}

export function fileExists(filePath: string): boolean {
try {
return statSync(filePath).isFile();
} catch (err) {
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,7 @@ import { updatePackageJson } from './update-package-json';
import * as utils from 'nx/src/utils/fileutils';
import { PackageJson } from 'nx/src/utils/package-json';

jest.mock('nx/src/utils/fileutils', () => ({
writeJsonFile: () => {},
}));
Phillip9587 marked this conversation as resolved.
Show resolved Hide resolved
jest.mock('fs', () => require('memfs').fs);

describe('updatePackageJson', () => {
const commonOptions = {
Expand Down
13 changes: 3 additions & 10 deletions packages/web/src/utils/fs.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import * as path from 'path';
import { existsSync, removeSync, statSync } from 'fs-extra';
import { existsSync, removeSync } from 'fs-extra';
import { directoryExists } from 'nx/src/utils/fileutils';

export function findUp(
names: string | string[],
Expand Down Expand Up @@ -39,7 +40,7 @@ export function findAllNodeModules(from: string, root?: string) {
let current = from;
while (current && current !== root) {
const potential = path.join(current, 'node_modules');
if (existsSync(potential) && isDirectory(potential)) {
if (directoryExists(potential)) {
nodeModules.push(potential);
}

Expand All @@ -64,11 +65,3 @@ export function deleteOutputDir(root: string, outputPath: string) {

removeSync(resolvedOutputPath);
}

export function isDirectory(path: string) {
try {
return statSync(path).isDirectory();
} catch (_) {
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,11 @@ import type {
NxJsonConfiguration,
ProjectGraphExternalNode,
} from '@nrwl/devkit';
import { workspaceRoot } from '@nrwl/devkit';
import {
workspaceRoot,
readNxJson,
readCachedProjectGraph,
} from '@nrwl/devkit';
import {
DepConstraint,
findConstraintsFor,
Expand All @@ -32,7 +36,6 @@ import {
findFilesInCircularPath,
} from '../utils/graph-utils';
import { isRelativePath } from '../utilities/fileutils';
import { readNxJson, readCachedProjectGraph } from '@nrwl/devkit';

export class Rule extends Lint.Rules.AbstractRule {
constructor(
Expand Down
30 changes: 4 additions & 26 deletions packages/workspace/src/utilities/fileutils.spec.ts
Original file line number Diff line number Diff line change
@@ -1,32 +1,10 @@
import { fs, vol } from 'memfs';
import { stripIndents } from '@angular-devkit/core/src/utils/literals';
import { fs } from 'memfs';
import { createDirectory, isRelativePath } from './fileutils';

jest.mock('fs', () => require('memfs').fs);
jest.mock('fs', () => fs);

describe('fileutils', () => {
beforeEach(() => {
vol.fromJSON(
{
'./README.md': 'hello',
'./.nxignore': stripIndents`
apps/demo/tmp.txt
tmp/
`,
'./.gitignore': stripIndents`
*.js
node_modules/
`,
'./apps/demo/src/index.ts': 'console.log("hello");',
'./apps/demo/tmp.txt': '...',
'./apps/demo/tmp.js': 'console.log("tmp")',
'./workspace.json': '{}',
},
'/root'
);
});

describe('createDirectory', () => {
describe(createDirectory.name, () => {
it('should recursively create the directory', () => {
createDirectory('/root/b/c');
expect(fs.statSync('/root').isDirectory()).toBe(true);
Expand All @@ -35,7 +13,7 @@ describe('fileutils', () => {
});
});

describe('isRelativePath()', () => {
describe(isRelativePath.name, () => {
it('should return true for deeper imports', () => {
expect(isRelativePath('.')).toEqual(true);
expect(isRelativePath('./file')).toEqual(true);
Expand Down
Loading