Skip to content

Commit

Permalink
fix(core): init generators should not crash when trying to remove dep…
Browse files Browse the repository at this point in the history
…endencies when package.json does not have dependencies (#9765)

Co-authored-by: Craigory Coppola <craigorycoppola@gmail.com>
  • Loading branch information
2 people authored and FrozenPandaz committed Apr 13, 2022
1 parent ee4174c commit 6da0c2b
Show file tree
Hide file tree
Showing 9 changed files with 55 additions and 60 deletions.
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

0 comments on commit 6da0c2b

Please sign in to comment.