diff --git a/e2e/utils/test-utils.ts b/e2e/utils/test-utils.ts index c91b50f7b2..dfd470fa4a 100644 --- a/e2e/utils/test-utils.ts +++ b/e2e/utils/test-utils.ts @@ -52,3 +52,7 @@ export function expectNoTsJestInJestConfig(appName: string) { ); expect(jestConfig).not.toContain('ts-jest'); } + +export function expectCodeIsFormatted() { + expect(() => runCLI(`format:check`)).not.toThrow(); +} diff --git a/e2e/workspace-create/src/create-nx-workspace.test.ts b/e2e/workspace-create/src/create-nx-workspace.test.ts index 6b7433a00f..64228db9ea 100644 --- a/e2e/workspace-create/src/create-nx-workspace.test.ts +++ b/e2e/workspace-create/src/create-nx-workspace.test.ts @@ -3,6 +3,7 @@ import { checkFilesExist, cleanupProject, e2eCwd, + expectCodeIsFormatted, expectNoAngularDevkit, expectNoTsJestInJestConfig, getSelectedPackageManager, @@ -34,6 +35,7 @@ describe('create-nx-workspace', () => { checkFilesExist('src/app/app.routes.ts'); checkFilesDoNotExist('tsconfig.base.json'); checkFilesExist('project.json'); + expectCodeIsFormatted(); }); it('should create a workspace with a single angular app at the root without routing', () => { @@ -51,6 +53,7 @@ describe('create-nx-workspace', () => { checkFilesExist('project.json'); checkFilesExist('src/app/app.module.ts'); checkFilesDoNotExist('src/app/app.routes.ts'); + expectCodeIsFormatted(); }); it('should create a workspace with a single angular app at the root using standalone APIs', () => { @@ -68,6 +71,7 @@ describe('create-nx-workspace', () => { checkFilesExist('package.json'); checkFilesExist('project.json'); checkFilesDoNotExist('src/app/app.module.ts'); + expectCodeIsFormatted(); }); it('should create a workspace with a single react app with vite at the root', () => { @@ -85,6 +89,7 @@ describe('create-nx-workspace', () => { checkFilesExist('project.json'); checkFilesExist('vite.config.ts'); checkFilesDoNotExist('tsconfig.base.json'); + expectCodeIsFormatted(); }); it('should create a workspace with a single react app with webpack at the root', () => { @@ -102,6 +107,7 @@ describe('create-nx-workspace', () => { checkFilesExist('project.json'); checkFilesExist('webpack.config.js'); checkFilesDoNotExist('tsconfig.base.json'); + expectCodeIsFormatted(); }); it('should be able to create an empty workspace built for apps', () => { @@ -138,11 +144,12 @@ describe('create-nx-workspace', () => { it('should be able to create an empty workspace with ts/js capabilities', () => { const wsName = uniq('ts'); runCreateWorkspace(wsName, { - preset: 'npm', + preset: 'ts', packageManager, }); expectNoAngularDevkit(); + expectCodeIsFormatted(); }); it('should be able to create an angular workspace', () => { @@ -156,6 +163,7 @@ describe('create-nx-workspace', () => { standaloneApi: false, routing: true, }); + expectCodeIsFormatted(); }); it('should fail correctly when preset errors', () => { @@ -164,7 +172,7 @@ describe('create-nx-workspace', () => { // Due to a validation error Angular will throw. const wsName = uniq('angular-1-test'); const appName = uniq('app'); - try { + expect(() => runCreateWorkspace(wsName, { preset: 'angular-monorepo', style: 'css', @@ -172,10 +180,8 @@ describe('create-nx-workspace', () => { packageManager, standaloneApi: false, routing: true, - }); - } catch (e) { - expect(e).toBeTruthy(); - } + }) + ).toThrow(); }); it('should be able to create a react workspace with webpack', () => { @@ -194,6 +200,7 @@ describe('create-nx-workspace', () => { expectNoTsJestInJestConfig(appName); const packageJson = readJson('package.json'); expect(packageJson.devDependencies['@nrwl/webpack']).toBeDefined(); + expectCodeIsFormatted(); }); it('should be able to create a react workspace with vite', () => { @@ -212,6 +219,7 @@ describe('create-nx-workspace', () => { const packageJson = readJson('package.json'); expect(packageJson.devDependencies['@nrwl/webpack']).not.toBeDefined(); expect(packageJson.devDependencies['@nrwl/vite']).toBeDefined(); + expectCodeIsFormatted(); }); it('should be able to create an next workspace', () => { @@ -225,6 +233,7 @@ describe('create-nx-workspace', () => { }); expectNoAngularDevkit(); + expectCodeIsFormatted(); }); it('should be able to create an web-components workspace', () => { @@ -238,6 +247,7 @@ describe('create-nx-workspace', () => { }); expectNoAngularDevkit(); + expectCodeIsFormatted(); }); it('should be able to create an express workspace', () => { @@ -251,6 +261,7 @@ describe('create-nx-workspace', () => { }); expectNoAngularDevkit(); + expectCodeIsFormatted(); }); it('should be able to create react-native workspace', () => { @@ -263,6 +274,7 @@ describe('create-nx-workspace', () => { }); expectNoAngularDevkit(); + expectCodeIsFormatted(); }); it('should be able to create an expo workspace', () => { @@ -275,6 +287,7 @@ describe('create-nx-workspace', () => { }); expectNoAngularDevkit(); + expectCodeIsFormatted(); }); it('should be able to create a workspace with a custom base branch and HEAD', () => { @@ -304,6 +317,7 @@ describe('create-nx-workspace', () => { appName, packageManager, }); + expectCodeIsFormatted(); }); it('should respect package manager preference', () => { @@ -323,6 +337,7 @@ describe('create-nx-workspace', () => { checkFilesDoNotExist('yarn.lock'); checkFilesExist('package-lock.json'); + expectCodeIsFormatted(); process.env.SELECTED_PM = packageManager; }); @@ -344,6 +359,7 @@ describe('create-nx-workspace', () => { checkFilesDoNotExist('yarn.lock'); checkFilesExist('package-lock.json'); + expectCodeIsFormatted(); process.env.SELECTED_PM = packageManager; }); diff --git a/packages/angular/src/generators/ng-add/files/prettier/__dot__prettierignore b/packages/angular/src/generators/ng-add/files/prettier/__dot__prettierignore deleted file mode 100644 index d0b804da2a..0000000000 --- a/packages/angular/src/generators/ng-add/files/prettier/__dot__prettierignore +++ /dev/null @@ -1,4 +0,0 @@ -# Add files here to ignore them from prettier formatting - -/dist -/coverage diff --git a/packages/angular/src/generators/ng-add/migrate-from-angular-cli.spec.ts b/packages/angular/src/generators/ng-add/migrate-from-angular-cli.spec.ts index 990b76fd3d..4688de769f 100644 --- a/packages/angular/src/generators/ng-add/migrate-from-angular-cli.spec.ts +++ b/packages/angular/src/generators/ng-add/migrate-from-angular-cli.spec.ts @@ -6,7 +6,7 @@ import { writeJson, } from '@nrwl/devkit'; import { createTree } from '@nrwl/devkit/testing'; -import * as prettierUtils from '@nrwl/workspace/src/utilities/prettier'; +import * as prettierUtils from '@nrwl/js/src/utils/prettier'; import { migrateFromAngularCli } from './migrate-from-angular-cli'; describe('workspace', () => { diff --git a/packages/angular/src/generators/ng-add/migrate-from-angular-cli.ts b/packages/angular/src/generators/ng-add/migrate-from-angular-cli.ts index 11d6ad5f99..be2a9d1ed6 100755 --- a/packages/angular/src/generators/ng-add/migrate-from-angular-cli.ts +++ b/packages/angular/src/generators/ng-add/migrate-from-angular-cli.ts @@ -5,7 +5,8 @@ import { readJson, updateJson, } from '@nrwl/devkit'; -import { prettierVersion } from '@nrwl/workspace/src/utils/versions'; +import { prettierVersion } from '@nrwl/js/src/utils/versions'; +import { initGenerator as jsInitGenerator } from '@nrwl/js'; import { nxVersion } from '../../utils/versions'; import type { ProjectMigrator } from './migrators'; import { AppMigrator, LibMigrator } from './migrators'; @@ -24,7 +25,6 @@ import { getWorkspaceRootFileTypesInfo, normalizeOptions, updatePackageJson, - updatePrettierConfig, updateRootEsLintConfig, updateRootTsConfig, updateVsCodeRecommendedExtensions, @@ -55,7 +55,7 @@ export async function migrateFromAngularCli( ); createNxJson(tree, options, angularJson.defaultProject); updateVsCodeRecommendedExtensions(tree); - await updatePrettierConfig(tree); + await jsInitGenerator(tree, {}); // convert workspace config format to standalone project configs updateJson(tree, 'angular.json', (json) => ({ diff --git a/packages/angular/src/generators/ng-add/utilities/workspace.ts b/packages/angular/src/generators/ng-add/utilities/workspace.ts index 8372602f5a..3f8a0624f9 100644 --- a/packages/angular/src/generators/ng-add/utilities/workspace.ts +++ b/packages/angular/src/generators/ng-add/utilities/workspace.ts @@ -10,11 +10,12 @@ import { writeJson, } from '@nrwl/devkit'; import { Linter, lintInitGenerator } from '@nrwl/linter'; -import { DEFAULT_NRWL_PRETTIER_CONFIG } from '@nrwl/workspace/src/generators/new/generate-workspace-files'; +import { + getRootTsConfigPathInTree, + initGenerator as jsInitGenerator, +} from '@nrwl/js'; import { deduceDefaultBase } from 'nx/src/utils/default-base'; -import { resolveUserExistingPrettierConfig } from '@nrwl/workspace/src/utilities/prettier'; -import { getRootTsConfigPathInTree } from '@nrwl/js'; -import { prettierVersion } from '@nrwl/workspace/src/utils/versions'; +import { prettierVersion } from '@nrwl/js/src/utils/versions'; import { toNewFormat } from 'nx/src/adapter/angular-json'; import { angularDevkitVersion, nxVersion } from '../../../utils/versions'; import type { ProjectMigrator } from '../migrators'; @@ -262,7 +263,8 @@ export function cleanupEsLintPackages(tree: Tree): void { export async function createWorkspaceFiles(tree: Tree): Promise { updateVsCodeRecommendedExtensions(tree); - await updatePrettierConfig(tree); + + await jsInitGenerator(tree, {}); generateFiles(tree, joinPathFragments(__dirname, '../files/root'), '.', { tmpl: '', @@ -346,22 +348,6 @@ export function updateVsCodeRecommendedExtensions(tree: Tree): void { } } -export async function updatePrettierConfig(tree: Tree): Promise { - const existingPrettierConfig = await resolveUserExistingPrettierConfig(); - if (!existingPrettierConfig) { - writeJson(tree, '.prettierrc', DEFAULT_NRWL_PRETTIER_CONFIG); - } - - if (!tree.exists('.prettierignore')) { - generateFiles( - tree, - joinPathFragments(__dirname, '../files/prettier'), - '.', - { tmpl: '', dot: '.' } - ); - } -} - export function deleteAngularJson(tree: Tree): void { const projects = toNewFormat(readJson(tree, 'angular.json')).projects; if (!Object.keys(projects).length) { diff --git a/packages/angular/src/generators/storybook-configuration/__snapshots__/storybook-configuration.spec.ts.snap b/packages/angular/src/generators/storybook-configuration/__snapshots__/storybook-configuration.spec.ts.snap index 33813fbffd..84143b3094 100644 --- a/packages/angular/src/generators/storybook-configuration/__snapshots__/storybook-configuration.spec.ts.snap +++ b/packages/angular/src/generators/storybook-configuration/__snapshots__/storybook-configuration.spec.ts.snap @@ -30,6 +30,7 @@ exports[`StorybookConfiguration generator should generate in the correct folder Array [ ".eslintignore", ".eslintrc.json", + ".prettierignore", ".prettierrc", "apps/.gitignore", "apps/one/two/test-ui-lib-e2e/.eslintrc.json", @@ -160,6 +161,7 @@ exports[`StorybookConfiguration generator should generate the right files 1`] = Array [ ".eslintignore", ".eslintrc.json", + ".prettierignore", ".prettierrc", "apps/.gitignore", "apps/test-ui-lib-e2e/.eslintrc.json", diff --git a/packages/devkit/src/generators/format-files.ts b/packages/devkit/src/generators/format-files.ts index 38a1b3a2ed..2802855904 100644 --- a/packages/devkit/src/generators/format-files.ts +++ b/packages/devkit/src/generators/format-files.ts @@ -24,6 +24,7 @@ export async function formatFiles(tree: Tree): Promise { const files = new Set( tree.listChanges().filter((file) => file.type !== 'DELETE') ); + await Promise.all( Array.from(files).map(async (file) => { const systemPath = path.join(tree.root, file.path); diff --git a/packages/js/src/generators/init/init.spec.ts b/packages/js/src/generators/init/init.spec.ts new file mode 100644 index 0000000000..9831fc2764 --- /dev/null +++ b/packages/js/src/generators/init/init.spec.ts @@ -0,0 +1,70 @@ +import { writeJson, readJson, Tree } from '@nrwl/devkit'; +import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing'; +import init from './init'; + +describe('js init generator', () => { + let tree: Tree; + + beforeEach(() => { + tree = createTreeWithEmptyWorkspace(); + }); + + it('should install prettier package', async () => { + await init(tree, {}); + + const packageJson = readJson(tree, 'package.json'); + expect(packageJson.devDependencies['prettier']).toBeDefined(); + }); + + it('should create .prettierrc and .prettierignore files', async () => { + await init(tree, {}); + + const prettierrc = readJson(tree, '.prettierrc'); + expect(prettierrc).toEqual({ singleQuote: true }); + + const prettierignore = tree.read('.prettierignore', 'utf-8'); + expect(prettierignore).toMatch(/\n\/coverage/); + expect(prettierignore).toMatch(/\n\/dist/); + }); + + it('should not overwrite existing .prettierrc and .prettierignore files', async () => { + writeJson(tree, '.prettierrc', { singleQuote: false }); + tree.write('.prettierignore', `# custom ignore file`); + + await init(tree, {}); + + const prettierrc = readJson(tree, '.prettierrc'); + expect(prettierrc).toEqual({ singleQuote: false }); + + const prettierignore = tree.read('.prettierignore', 'utf-8'); + expect(prettierignore).toContain('# custom ignore file'); + }); + + it('should add prettier vscode extension if .vscode/extensions.json file exists', async () => { + // No existing recommendations + writeJson(tree, '.vscode/extensions.json', {}); + + await init(tree, {}); + + let json = readJson(tree, '.vscode/extensions.json'); + expect(json).toEqual({ + recommendations: ['esbenp.prettier-vscode'], + }); + + // Existing recommendations + writeJson(tree, '.vscode/extensions.json', { recommendations: ['foo'] }); + + await init(tree, {}); + + json = readJson(tree, '.vscode/extensions.json'); + expect(json).toEqual({ + recommendations: ['foo', 'esbenp.prettier-vscode'], + }); + }); + + it('should skip adding prettier extension if .vscode/extensions.json file does not exist', async () => { + await init(tree, {}); + + expect(tree.exists('.vscode/extensions.json')).toBeFalsy(); + }); +}); diff --git a/packages/js/src/generators/init/init.ts b/packages/js/src/generators/init/init.ts index f0a3572daf..09b43e48e5 100644 --- a/packages/js/src/generators/init/init.ts +++ b/packages/js/src/generators/init/init.ts @@ -1,16 +1,24 @@ import { addDependenciesToPackageJson, convertNxGenerator, - formatFiles, generateFiles, GeneratorCallback, joinPathFragments, + stripIndents, Tree, + updateJson, + writeJson, } from '@nrwl/devkit'; import { getRootTsConfigFileName } from '../../utils/typescript/ts-config'; -import { typescriptVersion, nxVersion } from '../../utils/versions'; +import { + nxVersion, + prettierVersion, + typescriptVersion, +} from '../../utils/versions'; import { InitSchema } from './schema'; +let formatTaskAdded = false; + export async function initGenerator( tree: Tree, schema: InitSchema @@ -23,21 +31,59 @@ export async function initGenerator( } const devDependencies = { '@nrwl/js': nxVersion, + prettier: prettierVersion, }; if (!schema.js) { devDependencies['typescript'] = typescriptVersion; } + if (!tree.exists(`.prettierrc`)) { + writeJson(tree, '.prettierrc', { + singleQuote: true, + }); + } + + if (!tree.exists(`.prettierignore`)) { + tree.write( + '.prettierignore', + stripIndents` + # Add files here to ignore them from prettier formatting + /dist + /coverage + ` + ); + } + if (tree.exists('.vscode/extensions.json')) { + updateJson(tree, '.vscode/extensions.json', (json) => { + json.recommendations ??= []; + const extension = 'esbenp.prettier-vscode'; + if (!json.recommendations.includes(extension)) { + json.recommendations.push(extension); + } + return json; + }); + } + const installTask = !schema.skipPackageJson ? addDependenciesToPackageJson(tree, {}, devDependencies) : () => {}; - if (!schema.skipFormat) { - await formatFiles(tree); - } + return async () => { + await installTask(); - return installTask; + // Run Prettier once on all non-ignored files because some files may not be changed in the tree. e.g. nx.json + // TODO(jack): Once we create @nrwl/prettier:init we can move this logic there with --formatExistingFiles option. + if (!formatTaskAdded) { + formatTaskAdded = true; + try { + const prettierCli = await import('prettier/cli'); + await prettierCli.run(['.', '--write']); + } catch { + // If --skipPackageJson is passed then prettier is not installed. + } + } + }; } export default initGenerator; diff --git a/packages/js/src/migrations/update-13-8-5/update-swcrc.ts b/packages/js/src/migrations/update-13-8-5/update-swcrc.ts index 469feb8745..7bb4f0b74e 100644 --- a/packages/js/src/migrations/update-13-8-5/update-swcrc.ts +++ b/packages/js/src/migrations/update-13-8-5/update-swcrc.ts @@ -28,7 +28,7 @@ export default async function update(host: Tree) { // check swcExclude build options const exclude = - config?.targets?.build?.options['swcExclude'] || defaultExclude; + config?.targets?.build?.options?.['swcExclude'] || defaultExclude; updateJson(host, libSwcrcPath, (swcrc) => { swcrc['exclude'] = exclude; return swcrc; diff --git a/packages/workspace/src/utilities/prettier.ts b/packages/js/src/utils/prettier.ts similarity index 100% rename from packages/workspace/src/utilities/prettier.ts rename to packages/js/src/utils/prettier.ts diff --git a/packages/js/src/utils/versions.ts b/packages/js/src/utils/versions.ts index 6de986a750..3f2117a7a7 100644 --- a/packages/js/src/utils/versions.ts +++ b/packages/js/src/utils/versions.ts @@ -3,6 +3,7 @@ export { swcCoreVersion } from 'nx/src/utils/versions'; export const nxVersion = require('../../package.json').version; export const esbuildVersion = '^0.17.5'; +export const prettierVersion = '^2.6.2'; export const swcCliVersion = '~0.1.55'; export const swcHelpersVersion = '~0.4.11'; export const typesNodeVersion = '18.7.1'; diff --git a/packages/storybook/src/generators/init/__snapshots__/init.spec.ts.snap b/packages/storybook/src/generators/init/__snapshots__/init.spec.ts.snap index 82ca798b12..e05e8d03a8 100644 --- a/packages/storybook/src/generators/init/__snapshots__/init.spec.ts.snap +++ b/packages/storybook/src/generators/init/__snapshots__/init.spec.ts.snap @@ -16,6 +16,7 @@ Object { "@storybook/manager-webpack5": "^6.5.15", "existing": "1.0.0", "html-webpack-plugin": "^5.5.0", + "prettier": "^2.6.2", "typescript": "~4.9.5", "webpack": "^5.64.0", }, diff --git a/packages/web/src/generators/application/application.ts b/packages/web/src/generators/application/application.ts index 84d3be4abe..176f31fbea 100644 --- a/packages/web/src/generators/application/application.ts +++ b/packages/web/src/generators/application/application.ts @@ -329,7 +329,7 @@ function normalizeOptions(host: Tree, options: Schema): NormalizedSchema { return { ...options, - prefix: options.prefix ?? npmScope, + prefix: options.prefix ?? npmScope ?? 'app', name: names(options.name).fileName, compiler: options.compiler ?? 'babel', bundler: options.bundler ?? 'webpack', diff --git a/packages/web/src/generators/init/init.ts b/packages/web/src/generators/init/init.ts index 7c6f633c34..5702c8a6aa 100644 --- a/packages/web/src/generators/init/init.ts +++ b/packages/web/src/generators/init/init.ts @@ -39,10 +39,12 @@ function updateDependencies(tree: Tree, schema: Schema) { } export async function webInitGenerator(tree: Tree, schema: Schema) { - await jsInitGenerator(tree, { + const tasks: GeneratorCallback[] = []; + + const jsInitTask = await jsInitGenerator(tree, { js: false, }); - let tasks: GeneratorCallback[] = []; + tasks.push(jsInitTask); if (!schema.unitTestRunner || schema.unitTestRunner === 'jest') { const jestTask = await jestInitGenerator(tree, { @@ -60,7 +62,7 @@ export async function webInitGenerator(tree: Tree, schema: Schema) { const installTask = updateDependencies(tree, schema); tasks.push(installTask); } - addBabelInputs(tree); + await addBabelInputs(tree); if (!schema.skipFormat) { await formatFiles(tree); diff --git a/packages/workspace/index.ts b/packages/workspace/index.ts index 9699fd6951..80934442ec 100644 --- a/packages/workspace/index.ts +++ b/packages/workspace/index.ts @@ -9,11 +9,6 @@ export { export { names } from '@nrwl/devkit'; -export { - ExistingPrettierConfig, - resolveUserExistingPrettierConfig, -} from './src/utilities/prettier'; - export { output } from './src/utilities/output'; export { diff --git a/packages/workspace/package.json b/packages/workspace/package.json index 7e69789a4c..a6944ba69c 100644 --- a/packages/workspace/package.json +++ b/packages/workspace/package.json @@ -61,14 +61,6 @@ "nx": "*" } }, - "peerDependencies": { - "prettier": "^2.6.2" - }, - "peerDependenciesMeta": { - "prettier": { - "optional": true - } - }, "dependencies": { "@nrwl/devkit": "file:../devkit", "@parcel/watcher": "2.0.4", diff --git a/packages/workspace/src/generators/new/__snapshots__/generate-workspace-files.spec.ts.snap b/packages/workspace/src/generators/new/__snapshots__/generate-workspace-files.spec.ts.snap index 711c0be606..3e108043e9 100644 --- a/packages/workspace/src/generators/new/__snapshots__/generate-workspace-files.spec.ts.snap +++ b/packages/workspace/src/generators/new/__snapshots__/generate-workspace-files.spec.ts.snap @@ -393,13 +393,6 @@ Visit the [Nx Documentation](https://nx.dev) to learn more. " `; -exports[`@nrwl/workspace:generateWorkspaceFiles should create a prettierrc file 1`] = ` -"{ - \\"singleQuote\\": true -} -" -`; - exports[`@nrwl/workspace:generateWorkspaceFiles should recommend vscode extensions (angular) 1`] = ` Array [ "nrwl.angular-console", diff --git a/packages/workspace/src/generators/new/__snapshots__/new.spec.ts.snap b/packages/workspace/src/generators/new/__snapshots__/new.spec.ts.snap index 22f6c802c6..abdeb578a3 100644 --- a/packages/workspace/src/generators/new/__snapshots__/new.spec.ts.snap +++ b/packages/workspace/src/generators/new/__snapshots__/new.spec.ts.snap @@ -8,7 +8,6 @@ Object { "devDependencies": Object { "@nrwl/workspace": "0.0.1", "nx": "0.0.1", - "prettier": "^2.6.2", }, "license": "MIT", "name": "my-workspace", @@ -24,7 +23,6 @@ Object { "devDependencies": Object { "@nrwl/workspace": "0.0.1", "nx": "0.0.1", - "prettier": "^2.6.2", }, "license": "MIT", "name": "my-workspace", @@ -41,7 +39,6 @@ Object { "@nrwl/react": "0.0.1", "@nrwl/workspace": "0.0.1", "nx": "0.0.1", - "prettier": "^2.6.2", }, "license": "MIT", "name": "my-workspace", diff --git a/packages/workspace/src/generators/new/files-integrated-repo/__dot__prettierignore b/packages/workspace/src/generators/new/files-integrated-repo/__dot__prettierignore deleted file mode 100644 index d0b804da2a..0000000000 --- a/packages/workspace/src/generators/new/files-integrated-repo/__dot__prettierignore +++ /dev/null @@ -1,4 +0,0 @@ -# Add files here to ignore them from prettier formatting - -/dist -/coverage diff --git a/packages/workspace/src/generators/new/files-integrated-repo/package.json__tmpl__ b/packages/workspace/src/generators/new/files-integrated-repo/package.json__tmpl__ index 35be353024..e1620d9df7 100644 --- a/packages/workspace/src/generators/new/files-integrated-repo/package.json__tmpl__ +++ b/packages/workspace/src/generators/new/files-integrated-repo/package.json__tmpl__ @@ -9,7 +9,6 @@ }, "devDependencies": { "nx": "<%= nxVersion %>", - "@nrwl/workspace": "<%= nxVersion %>", - "prettier": "<%= prettierVersion %>" + "@nrwl/workspace": "<%= nxVersion %>" } } diff --git a/packages/workspace/src/generators/new/files-package-based-repo/__dot__prettierignore b/packages/workspace/src/generators/new/files-package-based-repo/__dot__prettierignore deleted file mode 100644 index d0b804da2a..0000000000 --- a/packages/workspace/src/generators/new/files-package-based-repo/__dot__prettierignore +++ /dev/null @@ -1,4 +0,0 @@ -# Add files here to ignore them from prettier formatting - -/dist -/coverage diff --git a/packages/workspace/src/generators/new/files-package-based-repo/__dot__vscode/extensions.json__tmpl__ b/packages/workspace/src/generators/new/files-package-based-repo/__dot__vscode/extensions.json__tmpl__ index 3732796ca3..35ad27269d 100644 --- a/packages/workspace/src/generators/new/files-package-based-repo/__dot__vscode/extensions.json__tmpl__ +++ b/packages/workspace/src/generators/new/files-package-based-repo/__dot__vscode/extensions.json__tmpl__ @@ -3,7 +3,6 @@ <% if(cliCommand === 'ng') { %> "angular.ng-template",<% } %> - "nrwl.angular-console", - "esbenp.prettier-vscode" + "nrwl.angular-console" ] } diff --git a/packages/workspace/src/generators/new/files-package-based-repo/package.json__tmpl__ b/packages/workspace/src/generators/new/files-package-based-repo/package.json__tmpl__ index 3f273c84ad..ca5e43f623 100644 --- a/packages/workspace/src/generators/new/files-package-based-repo/package.json__tmpl__ +++ b/packages/workspace/src/generators/new/files-package-based-repo/package.json__tmpl__ @@ -8,7 +8,6 @@ "dependencies": { }, "devDependencies": { - "nx": "<%= nxVersion %>", - "prettier": "<%= prettierVersion %>" + "nx": "<%= nxVersion %>" } } diff --git a/packages/workspace/src/generators/new/files-root-app/__dot__prettierignore b/packages/workspace/src/generators/new/files-root-app/__dot__prettierignore deleted file mode 100644 index d0b804da2a..0000000000 --- a/packages/workspace/src/generators/new/files-root-app/__dot__prettierignore +++ /dev/null @@ -1,4 +0,0 @@ -# Add files here to ignore them from prettier formatting - -/dist -/coverage diff --git a/packages/workspace/src/generators/new/files-root-app/__dot__vscode/extensions.json__tmpl__ b/packages/workspace/src/generators/new/files-root-app/__dot__vscode/extensions.json__tmpl__ index aaf47be3eb..06b24f939e 100644 --- a/packages/workspace/src/generators/new/files-root-app/__dot__vscode/extensions.json__tmpl__ +++ b/packages/workspace/src/generators/new/files-root-app/__dot__vscode/extensions.json__tmpl__ @@ -1,7 +1,6 @@ { "recommendations": [<% if(cliCommand === 'ng') { %> "angular.ng-template",<% } %> - "nrwl.angular-console", - "esbenp.prettier-vscode" + "nrwl.angular-console" ] } diff --git a/packages/workspace/src/generators/new/files-root-app/package.json__tmpl__ b/packages/workspace/src/generators/new/files-root-app/package.json__tmpl__ index 592e9f5150..d1e1aee40a 100644 --- a/packages/workspace/src/generators/new/files-root-app/package.json__tmpl__ +++ b/packages/workspace/src/generators/new/files-root-app/package.json__tmpl__ @@ -9,7 +9,6 @@ }, "devDependencies": { "@nrwl/workspace": "<%= nxVersion %>", - "nx": "<%= nxVersion %>", - "prettier": "<%= prettierVersion %>" + "nx": "<%= nxVersion %>" } } diff --git a/packages/workspace/src/generators/new/generate-workspace-files.spec.ts b/packages/workspace/src/generators/new/generate-workspace-files.spec.ts index ef1f7a5c56..7db427b5cd 100644 --- a/packages/workspace/src/generators/new/generate-workspace-files.spec.ts +++ b/packages/workspace/src/generators/new/generate-workspace-files.spec.ts @@ -22,8 +22,6 @@ describe('@nrwl/workspace:generateWorkspaceFiles', () => { }); expect(tree.exists('/proj/README.md')).toBe(true); expect(tree.exists('/proj/nx.json')).toBe(true); - expect(tree.exists('/proj/.prettierrc')).toBe(true); - expect(tree.exists('/proj/.prettierignore')).toBe(true); }); describe('README.md', () => { @@ -158,16 +156,6 @@ describe('@nrwl/workspace:generateWorkspaceFiles', () => { `); }); - it('should create a prettierrc file', async () => { - await generateWorkspaceFiles(tree, { - name: 'proj', - directory: 'proj', - preset: Preset.Empty, - defaultBase: 'main', - }); - expect(tree.read('proj/.prettierrc', 'utf-8')).toMatchSnapshot(); - }); - it('should recommend vscode extensions', async () => { await generateWorkspaceFiles(tree, { name: 'proj', @@ -237,7 +225,6 @@ describe('@nrwl/workspace:generateWorkspaceFiles', () => { "dependencies": Object {}, "devDependencies": Object { "nx": "0.0.1", - "prettier": "^2.6.2", }, "license": "MIT", "name": "proj", @@ -266,7 +253,6 @@ describe('@nrwl/workspace:generateWorkspaceFiles', () => { "dependencies": Object {}, "devDependencies": Object { "nx": "0.0.1", - "prettier": "^2.6.2", }, "license": "MIT", "name": "proj", diff --git a/packages/workspace/src/generators/new/generate-workspace-files.ts b/packages/workspace/src/generators/new/generate-workspace-files.ts index 58d6ddb2cf..4ffe797e1f 100644 --- a/packages/workspace/src/generators/new/generate-workspace-files.ts +++ b/packages/workspace/src/generators/new/generate-workspace-files.ts @@ -9,16 +9,12 @@ import { updateJson, writeJson, } from '@nrwl/devkit'; -import { nxVersion, prettierVersion } from '../../utils/versions'; +import { nxVersion } from '../../utils/versions'; import { join, join as pathJoin } from 'path'; import { Preset } from '../utils/presets'; import { deduceDefaultBase } from '../../utilities/default-base'; import { NormalizedSchema } from './new'; -export const DEFAULT_NRWL_PRETTIER_CONFIG = { - singleQuote: true, -}; - export async function generateWorkspaceFiles( tree: Tree, options: NormalizedSchema @@ -30,7 +26,6 @@ export async function generateWorkspaceFiles( createReadme(tree, options); createFiles(tree, options); createNxJson(tree, options); - createPrettierrc(tree, options); const [packageMajor] = getPackageManagerVersion( options.packageManager as PackageManager @@ -142,7 +137,6 @@ function createFiles(tree: Tree, options: NormalizedSchema) { tmpl: '', cliCommand: 'nx', nxCli: false, - prettierVersion, ...(options as object), nxVersion, packageManager: options.packageManager, @@ -161,14 +155,6 @@ function createReadme( }); } -function createPrettierrc(tree: Tree, options: NormalizedSchema) { - writeJson( - tree, - join(options.directory, '.prettierrc'), - DEFAULT_NRWL_PRETTIER_CONFIG - ); -} - // ensure that pnpm install add all the missing peer deps function createNpmrc(tree: Tree, options: NormalizedSchema) { diff --git a/packages/workspace/src/generators/new/new.ts b/packages/workspace/src/generators/new/new.ts index e7c21d4e96..57e92b0114 100644 --- a/packages/workspace/src/generators/new/new.ts +++ b/packages/workspace/src/generators/new/new.ts @@ -46,8 +46,6 @@ export async function newGenerator(host: Tree, options: Schema) { const isCustomPreset = !Object.values(Preset).includes(options.preset as any); addCloudDependencies(host, options); - await formatFiles(host); - return async () => { installPackagesTask(host, false, options.directory, options.packageManager); // TODO: move all of these into create-nx-workspace diff --git a/packages/workspace/src/generators/preset/preset.ts b/packages/workspace/src/generators/preset/preset.ts index 02567d312b..0144b6c197 100644 --- a/packages/workspace/src/generators/preset/preset.ts +++ b/packages/workspace/src/generators/preset/preset.ts @@ -11,10 +11,10 @@ import { Preset } from '../utils/presets'; export async function presetGenerator(tree: Tree, options: Schema) { options = normalizeOptions(options); - await createPreset(tree, options); - await formatFiles(tree); - return () => { + const presetTask = await createPreset(tree, options); + return async () => { installPackagesTask(tree); + if (presetTask) await presetTask(); }; } @@ -28,7 +28,7 @@ async function createPreset(tree: Tree, options: Schema) { applicationGenerator: angularApplicationGenerator, } = require('@nrwl' + '/angular/generators'); - await angularApplicationGenerator(tree, { + return angularApplicationGenerator(tree, { name: options.name, style: options.style, linter: options.linter, @@ -40,7 +40,7 @@ async function createPreset(tree: Tree, options: Schema) { applicationGenerator: angularApplicationGenerator, } = require('@nrwl' + '/angular/generators'); - await angularApplicationGenerator(tree, { + return angularApplicationGenerator(tree, { name: options.name, style: options.style, linter: options.linter, @@ -53,7 +53,7 @@ async function createPreset(tree: Tree, options: Schema) { applicationGenerator: reactApplicationGenerator, } = require('@nrwl' + '/react'); - await reactApplicationGenerator(tree, { + return reactApplicationGenerator(tree, { name: options.name, style: options.style, linter: options.linter, @@ -64,7 +64,7 @@ async function createPreset(tree: Tree, options: Schema) { applicationGenerator: reactApplicationGenerator, } = require('@nrwl' + '/react'); - await reactApplicationGenerator(tree, { + return reactApplicationGenerator(tree, { name: options.name, style: options.style, linter: options.linter, @@ -77,7 +77,7 @@ async function createPreset(tree: Tree, options: Schema) { const { applicationGenerator: nextApplicationGenerator } = require('@nrwl' + '/next'); - await nextApplicationGenerator(tree, { + return nextApplicationGenerator(tree, { name: options.name, style: options.style, linter: options.linter, @@ -86,7 +86,7 @@ async function createPreset(tree: Tree, options: Schema) { const { applicationGenerator: webApplicationGenerator } = require('@nrwl' + '/web'); - await webApplicationGenerator(tree, { + return webApplicationGenerator(tree, { name: options.name, style: options.style, linter: options.linter, @@ -96,7 +96,7 @@ async function createPreset(tree: Tree, options: Schema) { const { applicationGenerator: nestApplicationGenerator } = require('@nrwl' + '/nest'); - await nestApplicationGenerator(tree, { + return nestApplicationGenerator(tree, { name: options.name, linter: options.linter, }); @@ -104,36 +104,38 @@ async function createPreset(tree: Tree, options: Schema) { const { applicationGenerator: expressApplicationGenerator, } = require('@nrwl' + '/express'); - await expressApplicationGenerator(tree, { + return expressApplicationGenerator(tree, { name: options.name, linter: options.linter, }); } else if (options.preset === Preset.ReactNative) { const { reactNativeApplicationGenerator } = require('@nrwl' + '/react-native'); - await reactNativeApplicationGenerator(tree, { + return reactNativeApplicationGenerator(tree, { name: options.name, linter: options.linter, e2eTestRunner: 'detox', }); } else if (options.preset === Preset.Expo) { const { expoApplicationGenerator } = require('@nrwl' + '/expo'); - await expoApplicationGenerator(tree, { + return expoApplicationGenerator(tree, { name: options.name, linter: options.linter, e2eTestRunner: 'detox', }); } else if (options.preset === Preset.TS) { const c = readNxJson(tree); + const { initGenerator } = require('@nrwl' + '/js'); c.workspaceLayout = { appsDir: 'packages', libsDir: 'packages', }; updateNxJson(tree, c); + return initGenerator(tree, {}); } else if (options.preset === Preset.NodeServer) { const { applicationGenerator: nodeApplicationGenerator } = require('@nrwl' + '/node'); - await nodeApplicationGenerator(tree, { + return nodeApplicationGenerator(tree, { name: options.name, linter: options.linter, standaloneConfig: options.standaloneConfig, diff --git a/packages/workspace/src/utils/versions.ts b/packages/workspace/src/utils/versions.ts index dffbb59caf..e754a656de 100644 --- a/packages/workspace/src/utils/versions.ts +++ b/packages/workspace/src/utils/versions.ts @@ -2,7 +2,6 @@ export const nxVersion = require('../../package.json').version; export const angularCliVersion = '~15.2.0'; export const typescriptVersion = '~4.9.5'; -export const prettierVersion = '^2.6.2'; export const typescriptESLintVersion = '^5.36.1'; export const eslintVersion = '~8.15.0'; export const eslintConfigPrettierVersion = '8.1.0';