diff --git a/packages/nx/src/migrations/update-15-0-0/migrate-to-inputs.spec.ts b/packages/nx/src/migrations/update-15-0-0/migrate-to-inputs.spec.ts index e3771998d51bf..367c092cad2e2 100644 --- a/packages/nx/src/migrations/update-15-0-0/migrate-to-inputs.spec.ts +++ b/packages/nx/src/migrations/update-15-0-0/migrate-to-inputs.spec.ts @@ -7,6 +7,7 @@ import { updateWorkspaceConfiguration, WorkspaceConfiguration, } from '../../generators/utils/project-configuration'; +import { readJson, writeJson } from '../../generators/utils/json'; import migrateToInputs from './migrate-to-inputs'; describe('15.0.0 migration (migrate-to-inputs)', () => { @@ -211,6 +212,45 @@ describe('15.0.0 migration (migrate-to-inputs)', () => { expect(lib.namedInputs).toBeUndefined(); }); + it('should add project specific implicit dependencies to projects with package.json', async () => { + updateWorkspaceConfiguration(tree, { + version: 2, + implicitDependencies: { + 'tools/scripts/build-app.js': ['app1', 'app2'], + }, + }); + addProjectConfiguration(tree, 'app1', { + root: 'app1', + }); + addProjectConfiguration(tree, 'app2', { + root: 'app2', + }); + tree.delete('app2/project.json'); + writeJson(tree, 'app2/package.json', { name: 'app2' }); + addProjectConfiguration(tree, 'lib1', { + root: 'lib1', + }); + + await migrateToInputs(tree); + + const updated = readWorkspaceConfiguration(tree); + expect(updated.implicitDependencies).toBeUndefined(); + expect(updated.namedInputs.projectSpecificFiles).toEqual([]); + expect(updated.namedInputs.default).toContain('projectSpecificFiles'); + + const app1 = readProjectConfiguration(tree, 'app1'); + expect(app1.namedInputs.projectSpecificFiles).toContain( + '{workspaceRoot}/tools/scripts/build-app.js' + ); + const app2 = readJson(tree, 'app2/package.json'); + expect(app2.nx.namedInputs.projectSpecificFiles).toContain( + '{workspaceRoot}/tools/scripts/build-app.js' + ); + + const lib = readProjectConfiguration(tree, 'lib1'); + expect(lib.namedInputs).toBeUndefined(); + }); + it('should do nothing if there are no implicitDependencies', async () => { const workspace: WorkspaceConfiguration = { version: 2, diff --git a/packages/nx/src/migrations/update-15-0-0/migrate-to-inputs.ts b/packages/nx/src/migrations/update-15-0-0/migrate-to-inputs.ts index ddd5dae4b33a2..ea05aff4010b6 100644 --- a/packages/nx/src/migrations/update-15-0-0/migrate-to-inputs.ts +++ b/packages/nx/src/migrations/update-15-0-0/migrate-to-inputs.ts @@ -7,6 +7,9 @@ import { updateWorkspaceConfiguration, } from '../../generators/utils/project-configuration'; import { joinPathFragments } from '../../utils/path'; +import { join } from 'path'; +import { updateJson } from '../../generators/utils/json'; +import { PackageJson } from '../../utils/package-json'; const skippedFiles = [ 'package.json', // Not to be added to filesets @@ -79,7 +82,23 @@ export default async function (tree: Tree) { project.namedInputs.projectSpecificFiles = Array.from( projectSpecificFileset ); - updateProjectConfiguration(tree, dependent, project); + + if (tree.exists(join(project.root, 'project.json'))) { + updateProjectConfiguration(tree, dependent, project); + } else if (tree.exists(join(project.root, 'package.json'))) { + updateJson( + tree, + join(project.root, 'package.json'), + (json) => { + json.nx ??= {}; + json.nx.namedInputs ??= {}; + json.nx.namedInputs.projectSpecificFiles ??= + project.namedInputs.projectSpecificFiles; + + return json; + } + ); + } } } else { workspaceConfiguration.namedInputs.sharedGlobals.push( diff --git a/packages/nx/src/migrations/update-15-0-0/prefix-outputs.spec.ts b/packages/nx/src/migrations/update-15-0-0/prefix-outputs.spec.ts index dc69fa6ff0c1c..6e0213fe10c51 100644 --- a/packages/nx/src/migrations/update-15-0-0/prefix-outputs.spec.ts +++ b/packages/nx/src/migrations/update-15-0-0/prefix-outputs.spec.ts @@ -6,9 +6,9 @@ import { readWorkspaceConfiguration, updateWorkspaceConfiguration, } from '../../generators/utils/project-configuration'; -import { writeJson } from '../../generators/utils/json'; +import { readJson, writeJson } from '../../generators/utils/json'; import prefixOutputs from './prefix-outputs'; -import { validateOutputs } from 'nx/src/tasks-runner/utils'; +import { validateOutputs } from '../../tasks-runner/utils'; describe('15.0.0 migration (prefix-outputs)', () => { let tree: Tree; @@ -82,6 +82,29 @@ describe('15.0.0 migration (prefix-outputs)', () => { `); }); + it('should migrate package.json projects', async () => { + writeJson(tree, 'proj/package.json', { + name: 'proj', + scripts: { + build: 'echo', + }, + nx: { + targets: { + build: { + outputs: ['dist/proj'], + }, + }, + }, + }); + tree.delete('workspace.json'); + + await prefixOutputs(tree); + + expect(readJson(tree, 'proj/package.json').nx.targets.build).toEqual({ + outputs: ['dist/proj'], + }); + }); + it('should not error for package.json projects', async () => { writeJson(tree, 'proj/package.json', { name: 'proj', diff --git a/packages/nx/src/migrations/update-15-0-0/prefix-outputs.ts b/packages/nx/src/migrations/update-15-0-0/prefix-outputs.ts index 5ba9cefed35ca..683e4df77eb70 100644 --- a/packages/nx/src/migrations/update-15-0-0/prefix-outputs.ts +++ b/packages/nx/src/migrations/update-15-0-0/prefix-outputs.ts @@ -7,11 +7,13 @@ import { updateWorkspaceConfiguration, } from '../../generators/utils/project-configuration'; import { joinPathFragments } from '../../utils/path'; -import { relative } from 'path'; +import { join, relative } from 'path'; import { transformLegacyOutputs, validateOutputs, } from 'nx/src/tasks-runner/utils'; +import { updateJson } from '../../generators/utils/json'; +import { PackageJson } from '../../utils/package-json'; export default async function (tree: Tree) { // If the workspace doesn't have a nx.json, don't make any changes @@ -37,7 +39,20 @@ export default async function (tree: Tree) { target.outputs = transformLegacyOutputs(project.root, e); } } - updateProjectConfiguration(tree, projectName, project); + if (tree.exists(join(project.root, 'project.json'))) { + updateProjectConfiguration(tree, projectName, project); + } else if (tree.exists(join(project.root, 'package.json'))) { + updateJson( + tree, + join(project.root, 'package.json'), + (json) => { + json.nx ??= {}; + json.nx.targets ??= project.targets; + + return json; + } + ); + } } if (workspaceConfiguration.targetDefaults) {