diff --git a/packages/cypress/src/generators/init/init.ts b/packages/cypress/src/generators/init/init.ts index f978b298102d6..71a73901d621e 100644 --- a/packages/cypress/src/generators/init/init.ts +++ b/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, {}, diff --git a/packages/express/src/generators/init/init.ts b/packages/express/src/generators/init/init.ts index 98406891c0495..010ead1942428 100644 --- a/packages/express/src/generators/init/init.ts +++ b/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, @@ -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, { diff --git a/packages/jest/src/generators/init/init.ts b/packages/jest/src/generators/init/init.ts index 2c598a964617a..5ca32e0251ef9 100644 --- a/packages/jest/src/generators/init/init.ts +++ b/packages/jest/src/generators/init/init.ts @@ -2,6 +2,7 @@ import { addDependenciesToPackageJson, convertNxGenerator, GeneratorCallback, + removeDependenciesFromPackageJson, stripIndents, Tree, updateJson, @@ -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( @@ -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); diff --git a/packages/linter/src/generators/init/init.ts b/packages/linter/src/generators/init/init.ts index 5c8d86e92b887..fe0952bdeac22 100644 --- a/packages/linter/src/generators/init/init.ts +++ b/packages/linter/src/generators/init/init.ts @@ -1,5 +1,6 @@ import { addDependenciesToPackageJson, + removeDependenciesFromPackageJson, updateJson, writeJson, } from '@nrwl/devkit'; @@ -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); diff --git a/packages/node/src/generators/init/init.spec.ts b/packages/node/src/generators/init/init.spec.ts index 9076abd5b2fee..073a3e380a354 100644 --- a/packages/node/src/generators/init/init.spec.ts +++ b/packages/node/src/generators/init/init.spec.ts @@ -3,6 +3,7 @@ import { NxJsonConfiguration, readJson, Tree, + updateJson, } from '@nrwl/devkit'; import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing'; @@ -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(); + }); }); diff --git a/packages/node/src/generators/init/init.ts b/packages/node/src/generators/init/init.ts index f5be5a18469ed..d9c8751e726c4 100644 --- a/packages/node/src/generators/init/init.ts +++ b/packages/node/src/generators/init/init.ts @@ -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, diff --git a/packages/react/src/generators/init/init.ts b/packages/react/src/generators/init/init.ts index 8c79ea2558f71..5f48741fcc469 100755 --- a/packages/react/src/generators/init/init.ts +++ b/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); @@ -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, diff --git a/packages/web/src/generators/init/init.spec.ts b/packages/web/src/generators/init/init.spec.ts index 21c6dbf9bd4cb..ea098ca93a4a5 100644 --- a/packages/web/src/generators/init/init.spec.ts +++ b/packages/web/src/generators/init/init.spec.ts @@ -3,6 +3,7 @@ import { NxJsonConfiguration, readJson, Tree, + updateJson, } from '@nrwl/devkit'; import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing'; @@ -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(); + }); }); }); diff --git a/packages/web/src/generators/init/init.ts b/packages/web/src/generators/init/init.ts index 06e47909ef6f2..7a9490643c7af 100644 --- a/packages/web/src/generators/init/init.ts +++ b/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,