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 6a9efa145ae78..60378b0cf3b34 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 @@ -283,6 +283,130 @@ describe('15.0.0 migration (migrate-to-inputs)', () => { const updatedWorkspace = readNxJson(tree); expect(updatedWorkspace.namedInputs).not.toBeDefined(); }); + + it('should not override production inputs when migrating "implicitDependencies"', async () => { + updateNxJson(tree, { + namedInputs: { + default: ['{projectRoot}/**/*', 'sharedGlobals'], + production: [ + 'default', + '!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)', + '!{projectRoot}/tsconfig.spec.json', + '!{projectRoot}/jest.config.[jt]s', + '!{projectRoot}/.eslintrc.json', + ], + sharedGlobals: ['{workspaceRoot}/nx.json'], + }, + implicitDependencies: { + '.eslintrc.json': '*', + }, + }); + await migrateToInputs(tree); + + const updated = readNxJson(tree); + + expect(updated.implicitDependencies).toBeUndefined(); + expect(updated).toMatchInlineSnapshot(` + Object { + "namedInputs": Object { + "default": Array [ + "{projectRoot}/**/*", + "sharedGlobals", + ], + "production": Array [ + "default", + "!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)", + "!{projectRoot}/tsconfig.spec.json", + "!{projectRoot}/jest.config.[jt]s", + "!{projectRoot}/.eslintrc.json", + ], + "sharedGlobals": Array [ + "{workspaceRoot}/nx.json", + ], + }, + } + `); + }); + + it('should only preppend "default" to production inputs if missing when migrating "implicitDependencies"', async () => { + updateNxJson(tree, { + namedInputs: { + default: ['{projectRoot}/**/*', 'sharedGlobals'], + production: [ + '!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)', + '!{projectRoot}/tsconfig.spec.json', + '!{projectRoot}/jest.config.[jt]s', + '!{projectRoot}/.eslintrc.json', + ], + sharedGlobals: ['{workspaceRoot}/nx.json'], + }, + implicitDependencies: { + '.eslintrc.json': '*', + }, + }); + await migrateToInputs(tree); + + const updated = readNxJson(tree); + + expect(updated.implicitDependencies).toBeUndefined(); + expect(updated).toMatchInlineSnapshot(` + Object { + "namedInputs": Object { + "default": Array [ + "{projectRoot}/**/*", + "sharedGlobals", + ], + "production": Array [ + "default", + "!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)", + "!{projectRoot}/tsconfig.spec.json", + "!{projectRoot}/jest.config.[jt]s", + "!{projectRoot}/.eslintrc.json", + ], + "sharedGlobals": Array [ + "{workspaceRoot}/nx.json", + ], + }, + } + `); + }); + + it('should not modify production inputs if "default" is missing when migrating "implicitDependencies"', async () => { + updateNxJson(tree, { + namedInputs: { + production: [ + '!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)', + '!{projectRoot}/tsconfig.spec.json', + '!{projectRoot}/jest.config.[jt]s', + '!{projectRoot}/.eslintrc.json', + ], + sharedGlobals: ['{workspaceRoot}/nx.json'], + }, + implicitDependencies: { + '.eslintrc.json': '*', + }, + }); + await migrateToInputs(tree); + + const updated = readNxJson(tree); + + expect(updated.implicitDependencies).toBeUndefined(); + expect(updated).toMatchInlineSnapshot(` + Object { + "namedInputs": Object { + "production": Array [ + "!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)", + "!{projectRoot}/tsconfig.spec.json", + "!{projectRoot}/jest.config.[jt]s", + "!{projectRoot}/.eslintrc.json", + ], + "sharedGlobals": Array [ + "{workspaceRoot}/nx.json", + ], + }, + } + `); + }); }); describe('15.0.0 migration (migrate-to-inputs) (v1)', () => {