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

fix(core): init generators should not crash when trying to remove dependencies when package.json does not have dependencies #9765

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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 2 additions & 7 deletions packages/cypress/src/generators/init/init.ts
@@ -1,20 +1,15 @@
import {
addDependenciesToPackageJson,
convertNxGenerator,
removeDependenciesFromPackageJson,
Tree,
updateJson,
} from '@nrwl/devkit';

import { cypressVersion, nxVersion } from '../../utils/versions';
import { Schema } from './schema';

function updateDependencies(host: Tree) {
updateJson(host, 'package.json', (json) => {
json.dependencies = json.dependencies || {};
delete json.dependencies['@nrwl/cypress'];
removeDependenciesFromPackageJson(host, ['@nrwl/cypress'], []);

return json;
});
return addDependenciesToPackageJson(
host,
{},
Expand Down
12 changes: 5 additions & 7 deletions packages/express/src/generators/init/init.ts
@@ -1,12 +1,12 @@
import {
addDependenciesToPackageJson,
updateJson,
formatFiles,
convertNxGenerator,
formatFiles,
removeDependenciesFromPackageJson,
Tree,
} from '@nrwl/devkit';
import { setDefaultCollection } from '@nrwl/workspace/src/utilities/set-default-collection';
import { initGenerator as nodeInitGenerator } from '@nrwl/node';
import { setDefaultCollection } from '@nrwl/workspace/src/utilities/set-default-collection';
import {
expressTypingsVersion,
expressVersion,
Expand All @@ -15,10 +15,8 @@ import {
import type { Schema } from './schema';

function updateDependencies(tree: Tree) {
updateJson(tree, 'package.json', (json) => {
delete json.dependencies['@nrwl/express'];
return json;
});
removeDependenciesFromPackageJson(tree, ['@nrwl/express'], []);

return addDependenciesToPackageJson(
tree,
{
Expand Down
13 changes: 2 additions & 11 deletions packages/jest/src/generators/init/init.ts
Expand Up @@ -2,6 +2,7 @@ import {
addDependenciesToPackageJson,
convertNxGenerator,
GeneratorCallback,
removeDependenciesFromPackageJson,
stripIndents,
Tree,
updateJson,
Expand All @@ -23,16 +24,6 @@ const schemaDefaults = {
compiler: 'tsc',
} as const;

function removeNrwlJestFromDeps(host: Tree) {
updateJson(host, 'package.json', (json) => {
// check whether updating the package.json is necessary
if (json.dependencies && json.dependencies['@nrwl/jest']) {
delete json.dependencies['@nrwl/jest'];
}
return json;
});
}

function createJestConfig(host: Tree) {
if (!host.exists('jest.config.js')) {
host.write(
Expand Down Expand Up @@ -103,8 +94,8 @@ export function jestInitGenerator(tree: Tree, schema: JestInitSchema) {

let installTask: GeneratorCallback = () => {};
if (!options.skipPackageJson) {
removeDependenciesFromPackageJson(tree, ['@nrwl/jest'], []);
installTask = updateDependencies(tree, options);
removeNrwlJestFromDeps(tree);
}

updateExtensions(tree);
Expand Down
9 changes: 2 additions & 7 deletions packages/linter/src/generators/init/init.ts
@@ -1,5 +1,6 @@
import {
addDependenciesToPackageJson,
removeDependenciesFromPackageJson,
updateJson,
writeJson,
} from '@nrwl/devkit';
Expand Down Expand Up @@ -169,13 +170,7 @@ function initEsLint(tree: Tree, options: LinterInitOptions): GeneratorCallback {
}

if (!options.skipPackageJson) {
updateJson(tree, 'package.json', (json) => {
json.dependencies ||= {};

delete json.dependencies['@nrwl/linter'];

return json;
});
removeDependenciesFromPackageJson(tree, ['@nrwl/linter'], []);
}

writeJson(tree, '.eslintrc.json', globalEsLintConfiguration);
Expand Down
12 changes: 12 additions & 0 deletions packages/node/src/generators/init/init.spec.ts
Expand Up @@ -3,6 +3,7 @@ import {
NxJsonConfiguration,
readJson,
Tree,
updateJson,
} from '@nrwl/devkit';
import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing';

Expand Down Expand Up @@ -52,4 +53,15 @@ describe('init', () => {
await initGenerator(tree, { unitTestRunner: 'none' });
expect(tree.exists('jest.config.js')).toEqual(false);
});

it('should not fail when dependencies is missing from package.json and no other init generators are invoked', async () => {
updateJson(tree, 'package.json', (json) => {
delete json.dependencies;
return json;
});

expect(
initGenerator(tree, { unitTestRunner: 'none' })
).resolves.toBeTruthy();
});
});
11 changes: 4 additions & 7 deletions packages/node/src/generators/init/init.ts
Expand Up @@ -3,19 +3,16 @@ import {
convertNxGenerator,
formatFiles,
GeneratorCallback,
removeDependenciesFromPackageJson,
Tree,
updateJson,
} from '@nrwl/devkit';
import { jestInitGenerator } from '@nrwl/jest';
import { setDefaultCollection } from '@nrwl/workspace/src/utilities/set-default-collection';
import { nxVersion, tslibVersion } from '../../utils/versions';
import { Schema } from './schema';
import { setDefaultCollection } from '@nrwl/workspace/src/utilities/set-default-collection';
import { jestInitGenerator } from '@nrwl/jest';

function updateDependencies(tree: Tree) {
updateJson(tree, 'package.json', (json) => {
delete json.dependencies['@nrwl/node'];
return json;
});
removeDependenciesFromPackageJson(tree, ['@nrwl/node'], []);

return addDependenciesToPackageJson(
tree,
Expand Down
19 changes: 7 additions & 12 deletions packages/react/src/generators/init/init.ts
@@ -1,28 +1,28 @@
import { InitSchema } from './schema';
import { cypressInitGenerator } from '@nrwl/cypress';
import {
addDependenciesToPackageJson,
convertNxGenerator,
GeneratorCallback,
readWorkspaceConfiguration,
removeDependenciesFromPackageJson,
Tree,
updateJson,
updateWorkspaceConfiguration,
} from '@nrwl/devkit';
import { jestInitGenerator } from '@nrwl/jest';
import { cypressInitGenerator } from '@nrwl/cypress';
import { webInitGenerator } from '@nrwl/web';
import { setDefaultCollection } from '@nrwl/workspace/src/utilities/set-default-collection';
import { runTasksInSerial } from '@nrwl/workspace/src/utilities/run-tasks-in-serial';
import { setDefaultCollection } from '@nrwl/workspace/src/utilities/set-default-collection';
import {
nxVersion,
reactDomVersion,
reactTestRendererVersion,
reactVersion,
testingLibraryReactHooksVersion,
testingLibraryReactVersion,
typesReactDomVersion,
typesReactVersion,
testingLibraryReactHooksVersion,
reactTestRendererVersion,
} from '../../utils/versions';
import { InitSchema } from './schema';

function setDefault(host: Tree) {
const workspace = readWorkspaceConfiguration(host);
Expand All @@ -45,12 +45,7 @@ function setDefault(host: Tree) {
}

function updateDependencies(host: Tree) {
updateJson(host, 'package.json', (json) => {
if (json.dependencies && json.dependencies['@nrwl/react']) {
delete json.dependencies['@nrwl/react'];
}
return json;
});
removeDependenciesFromPackageJson(host, ['@nrwl/react'], []);

return addDependenciesToPackageJson(
host,
Expand Down
15 changes: 15 additions & 0 deletions packages/web/src/generators/init/init.spec.ts
Expand Up @@ -3,6 +3,7 @@ import {
NxJsonConfiguration,
readJson,
Tree,
updateJson,
} from '@nrwl/devkit';
import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing';

Expand Down Expand Up @@ -79,5 +80,19 @@ describe('init', () => {
});
expect(tree.exists('babel.config.json')).toBe(false);
});

it('should not fail when dependencies is missing from package.json and no other init generators are invoked', async () => {
updateJson(tree, 'package.json', (json) => {
delete json.dependencies;
return json;
});

expect(
webInitGenerator(tree, {
e2eTestRunner: 'none',
unitTestRunner: 'none',
})
).resolves.toBeTruthy();
});
});
});
15 changes: 6 additions & 9 deletions packages/web/src/generators/init/init.ts
@@ -1,24 +1,21 @@
import { cypressInitGenerator } from '@nrwl/cypress';
import {
addDependenciesToPackageJson,
convertNxGenerator,
formatFiles,
GeneratorCallback,
removeDependenciesFromPackageJson,
Tree,
updateJson,
writeJson,
} from '@nrwl/devkit';
import { setDefaultCollection } from '@nrwl/workspace/src/utilities/set-default-collection';
import { jestInitGenerator } from '@nrwl/jest';
import { runTasksInSerial } from '@nrwl/workspace/src/utilities/run-tasks-in-serial';
import { Schema } from './schema';
import { setDefaultCollection } from '@nrwl/workspace/src/utilities/set-default-collection';
import { nxVersion } from '../../utils/versions';
import { cypressInitGenerator } from '@nrwl/cypress';
import { jestInitGenerator } from '@nrwl/jest';
import { Schema } from './schema';

function updateDependencies(tree: Tree) {
updateJson(tree, 'package.json', (json) => {
delete json.dependencies['@nrwl/web'];
return json;
});
removeDependenciesFromPackageJson(tree, ['@nrwl/web'], []);

return addDependenciesToPackageJson(
tree,
Expand Down