diff --git a/e2e/linter/src/linter.test.ts b/e2e/linter/src/linter.test.ts index 672818d7cb..45de3b6aca 100644 --- a/e2e/linter/src/linter.test.ts +++ b/e2e/linter/src/linter.test.ts @@ -105,7 +105,7 @@ describe('Linter', () => { /'tslint' option is no longer supported/ ); expect(() => runCLI(`lint ${myapp} --linter=random`)).toThrow( - /Schema validation failed/ + /'random' should be one of eslint,tslint/ ); }, 1000000); diff --git a/packages/react/src/schematics/application/application.spec.ts b/packages/react/src/schematics/application/application.spec.ts index 8fb1e74de6..b38983e87c 100644 --- a/packages/react/src/schematics/application/application.spec.ts +++ b/packages/react/src/schematics/application/application.spec.ts @@ -377,12 +377,20 @@ describe('app', () => { expect(eslintJson.extends).toEqual( expect.arrayContaining(['plugin:@nrwl/nx/react']) ); - expect(packageJson).toMatchObject({ - devDependencies: { - 'eslint-plugin-react': expect.anything(), - 'eslint-plugin-react-hooks': expect.anything(), - }, - }); + expect(packageJson.devDependencies.eslint).toBeDefined(); + expect(packageJson.devDependencies['@nrwl/linter']).toBeDefined(); + expect(packageJson.devDependencies['@nrwl/eslint-plugin-nx']).toBeDefined(); + expect(packageJson.devDependencies['eslint-plugin-react']).toBeDefined(); + expect( + packageJson.devDependencies['eslint-plugin-react-hooks'] + ).toBeDefined(); + expect( + packageJson.devDependencies['@typescript-eslint/parser'] + ).toBeDefined(); + expect( + packageJson.devDependencies['@typescript-eslint/eslint-plugin'] + ).toBeDefined(); + expect(packageJson.devDependencies['eslint-config-prettier']).toBeDefined(); }); describe('--class-component', () => { diff --git a/packages/tao/src/shared/params.ts b/packages/tao/src/shared/params.ts index e61ec2bd48..8c6cb6e925 100644 --- a/packages/tao/src/shared/params.ts +++ b/packages/tao/src/shared/params.ts @@ -226,6 +226,14 @@ function validateProperty( `Property '${propName}' does not match the schema. '${value}' should be a '${schema.type}'.` ); } + + if (schema.enum && !schema.enum.includes(value)) { + throw new SchemaError( + `Property '${propName}' does not match the schema. '${value}' should be one of ${schema.enum.join( + ',' + )}.` + ); + } } else if (Array.isArray(value)) { if (schema.type !== 'array') throwInvalidSchema(propName, schema); value.forEach((valueInArray) => diff --git a/packages/workspace/src/utils/lint.ts b/packages/workspace/src/utils/lint.ts index c9dcff190f..168f21af4e 100644 --- a/packages/workspace/src/utils/lint.ts +++ b/packages/workspace/src/utils/lint.ts @@ -115,6 +115,7 @@ export function addLintFiles( : {}), }, { + '@nrwl/linter': nxVersion, '@nrwl/eslint-plugin-nx': nxVersion, '@typescript-eslint/parser': typescriptESLintVersion, '@typescript-eslint/eslint-plugin': typescriptESLintVersion,