From 4eb7cc7bf170cd48dd87fdd0dd387d3592beec69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Leosvel=20P=C3=A9rez=20Espinosa?= Date: Fri, 31 Mar 2023 16:22:18 +0100 Subject: [PATCH] fix(misc): skip formatting files in nested generator calls (#15961) --- .../generators/workspace-rules-project.json | 9 ++++- .../packages/next/generators/component.json | 6 ++++ .../packages/next/generators/page.json | 6 ++++ .../nx-plugin/generators/e2e-project.json | 6 ++++ .../generators/component-story.json | 6 ++++ .../react-native/generators/stories.json | 6 ++++ .../generators/component-cypress-spec.json | 6 ++++ .../react/generators/component-story.json | 6 ++++ .../packages/react/generators/component.json | 6 ++++ .../packages/react/generators/stories.json | 6 ++++ .../storybook/generators/configuration.json | 6 ++++ .../storybook/generators/cypress-project.json | 6 ++++ .../vite/generators/configuration.json | 6 ++++ .../packages/vite/generators/vitest.json | 6 ++++ .../esbuild-project/esbuild-project.ts | 5 ++- .../generators/application/lib/add-detox.ts | 1 + packages/expo/src/utils/add-jest.ts | 1 + packages/express/src/generators/init/init.ts | 5 ++- packages/js/src/generators/library/library.ts | 2 ++ .../workspace-rule/workspace-rule.ts | 3 +- .../workspace-rules-project/schema.json | 9 ++++- .../workspace-rules-project.ts | 13 ++++++-- .../convert-tslint-to-eslint.ts | 2 +- packages/nest/src/generators/init/init.ts | 5 ++- .../generators/application/lib/add-cypress.ts | 1 + .../src/generators/component/component.ts | 7 ++++ .../next/src/generators/component/schema.json | 6 ++++ packages/next/src/generators/init/init.ts | 5 ++- .../next/src/generators/library/library.ts | 6 ++++ packages/next/src/generators/page/page.ts | 12 ++++++- packages/next/src/generators/page/schema.d.ts | 1 + packages/next/src/generators/page/schema.json | 6 ++++ .../src/generators/application/application.ts | 4 ++- .../e2e-project/e2e-project.spec.ts | 3 +- .../src/generators/e2e-project/e2e-project.ts | 2 +- .../src/generators/e2e-project/schema.d.ts | 2 +- .../src/generators/e2e-project/schema.json | 6 ++-- .../src/generators/e2e-project/e2e.ts | 5 ++- .../src/generators/e2e-project/schema.d.ts | 1 + .../src/generators/e2e-project/schema.json | 6 ++++ .../nx-plugin/src/generators/plugin/plugin.ts | 2 ++ .../component-story/component-story.ts | 5 ++- .../generators/component-story/schema.d.ts | 1 + .../generators/component-story/schema.json | 6 ++++ .../src/generators/stories/schema.d.ts | 1 + .../src/generators/stories/schema.json | 6 ++++ .../src/generators/stories/stories.ts | 6 ++++ .../storybook-configuration/configuration.ts | 9 ++--- .../src/generators/application/application.ts | 19 +++++++---- .../generators/application/lib/add-cypress.ts | 6 ++-- .../generators/application/lib/add-jest.ts | 7 ++-- .../component-cypress-spec.ts | 8 ++++- .../component-cypress-spec/schema.json | 6 ++++ .../component-story/component-story.ts | 6 +++- .../generators/component-story/schema.json | 6 ++++ .../src/generators/component/component.ts | 4 ++- .../src/generators/component/schema.d.ts | 1 + .../src/generators/component/schema.json | 6 ++++ packages/react/src/generators/host/host.ts | 4 ++- .../library/lib/add-rollup-build-target.ts | 7 ++-- .../react/src/generators/library/library.ts | 21 ++++++++---- .../react/src/generators/remote/remote.ts | 2 ++ .../src/generators/setup-ssr/setup-ssr.ts | 2 +- .../react/src/generators/stories/schema.json | 6 ++++ .../react/src/generators/stories/stories.ts | 8 +++++ .../storybook-configuration/configuration.ts | 9 ++--- .../rollup-project/rollup-project.ts | 5 ++- .../generators/configuration/configuration.ts | 5 ++- .../src/generators/configuration/schema.d.ts | 1 + .../src/generators/configuration/schema.json | 6 ++++ .../cypress-project/cypress-project.ts | 6 +++- .../generators/cypress-project/schema.json | 6 ++++ .../generators/configuration/configuration.ts | 5 ++- .../src/generators/configuration/schema.d.ts | 1 + .../src/generators/configuration/schema.json | 6 ++++ .../vite/src/generators/vitest/schema.d.ts | 1 + .../vite/src/generators/vitest/schema.json | 6 ++++ .../src/generators/vitest/vitest-generator.ts | 4 ++- .../src/generators/application/application.ts | 33 +++++++++++-------- .../webpack-project/webpack-project.ts | 11 +++++-- 80 files changed, 393 insertions(+), 73 deletions(-) diff --git a/docs/generated/packages/linter/generators/workspace-rules-project.json b/docs/generated/packages/linter/generators/workspace-rules-project.json index 4144ef73221de..bf080140352f5 100644 --- a/docs/generated/packages/linter/generators/workspace-rules-project.json +++ b/docs/generated/packages/linter/generators/workspace-rules-project.json @@ -14,7 +14,14 @@ "description": "Create the Workspace Lint Rules Project" } ], - "properties": {}, + "properties": { + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" + } + }, "required": [], "presets": [] }, diff --git a/docs/generated/packages/next/generators/component.json b/docs/generated/packages/next/generators/component.json index 9f8bf5c0250e3..0fefb6530eb83 100644 --- a/docs/generated/packages/next/generators/component.json +++ b/docs/generated/packages/next/generators/component.json @@ -101,6 +101,12 @@ "description": "Use pascal case directory name (e.g. `App/App.tsx`).", "alias": "R", "default": false + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["name", "project"], diff --git a/docs/generated/packages/next/generators/page.json b/docs/generated/packages/next/generators/page.json index f8d7386fe8792..ae02f33745aad 100644 --- a/docs/generated/packages/next/generators/page.json +++ b/docs/generated/packages/next/generators/page.json @@ -89,6 +89,12 @@ "type": "boolean", "description": "Create component at the source root rather than its own directory.", "default": false + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["name", "project"], diff --git a/docs/generated/packages/nx-plugin/generators/e2e-project.json b/docs/generated/packages/nx-plugin/generators/e2e-project.json index 7e117bad789ad..84497269109df 100644 --- a/docs/generated/packages/nx-plugin/generators/e2e-project.json +++ b/docs/generated/packages/nx-plugin/generators/e2e-project.json @@ -45,6 +45,12 @@ "type": "boolean", "description": "Generate the e2e project with a minimal setup. This would involve not generating tests for a default executor and generator.", "default": false + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["pluginName", "npmPackageName"], diff --git a/docs/generated/packages/react-native/generators/component-story.json b/docs/generated/packages/react-native/generators/component-story.json index 947ae39cc5585..a0aafc7f413b9 100644 --- a/docs/generated/packages/react-native/generators/component-story.json +++ b/docs/generated/packages/react-native/generators/component-story.json @@ -22,6 +22,12 @@ "description": "Relative path to the component file from the library root.", "examples": ["lib/components"], "x-prompt": "What's path of the component relative to the project's lib root?" + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["project", "componentPath"], diff --git a/docs/generated/packages/react-native/generators/stories.json b/docs/generated/packages/react-native/generators/stories.json index 85a99c800d541..2323495a18cfa 100644 --- a/docs/generated/packages/react-native/generators/stories.json +++ b/docs/generated/packages/react-native/generators/stories.json @@ -27,6 +27,12 @@ "**/**/src/**/*.other.*", "libs/my-lib/src/not-stories/**,**/**/src/**/*.other.*,apps/my-app/**/*.something.ts" ] + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["project"], diff --git a/docs/generated/packages/react/generators/component-cypress-spec.json b/docs/generated/packages/react/generators/component-cypress-spec.json index c8e727baea4eb..ac932d09c9670 100644 --- a/docs/generated/packages/react/generators/component-cypress-spec.json +++ b/docs/generated/packages/react/generators/component-cypress-spec.json @@ -32,6 +32,12 @@ "cypressProject": { "type": "string", "description": "The Cypress project to generate the stories under. By default, inferred from `project`." + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["project", "componentPath"], diff --git a/docs/generated/packages/react/generators/component-story.json b/docs/generated/packages/react/generators/component-story.json index 6a20d98d6b4b8..1a959e4cac315 100644 --- a/docs/generated/packages/react/generators/component-story.json +++ b/docs/generated/packages/react/generators/component-story.json @@ -24,6 +24,12 @@ "examples": ["lib/components"], "x-prompt": "What's path of the component relative to the project's lib root?", "x-priority": "important" + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["project", "componentPath"], diff --git a/docs/generated/packages/react/generators/component.json b/docs/generated/packages/react/generators/component.json index 124e94b8320d7..3f81d977536b5 100644 --- a/docs/generated/packages/react/generators/component.json +++ b/docs/generated/packages/react/generators/component.json @@ -136,6 +136,12 @@ "type": "boolean", "default": false, "description": "When using Vitest, separate spec files will not be generated and instead will be included within the source files. Read more on the Vitest docs site: https://vitest.dev/guide/in-source.html" + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["name", "project"], diff --git a/docs/generated/packages/react/generators/stories.json b/docs/generated/packages/react/generators/stories.json index 0b0b1852aa76b..75d9a9b5d50b0 100644 --- a/docs/generated/packages/react/generators/stories.json +++ b/docs/generated/packages/react/generators/stories.json @@ -43,6 +43,12 @@ "**/**/src/**/*.other.*", "libs/my-lib/src/not-stories/**,**/**/src/**/*.other.*,apps/my-app/**/*.something.ts" ] + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["project"], diff --git a/docs/generated/packages/storybook/generators/configuration.json b/docs/generated/packages/storybook/generators/configuration.json index 7d5680fbb1154..76496422e7518 100644 --- a/docs/generated/packages/storybook/generators/configuration.json +++ b/docs/generated/packages/storybook/generators/configuration.json @@ -111,6 +111,12 @@ "@storybook/web-components-vite" ], "hidden": true + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["name"], diff --git a/docs/generated/packages/storybook/generators/cypress-project.json b/docs/generated/packages/storybook/generators/cypress-project.json index f60f2b8ef4ea2..11cebcf71df2e 100644 --- a/docs/generated/packages/storybook/generators/cypress-project.json +++ b/docs/generated/packages/storybook/generators/cypress-project.json @@ -43,6 +43,12 @@ "type": "string", "description": "The name of the devServerTarget to use for the Cypress CI configuration. Used to control if using :static-storybook:ci or :storybook:ci", "x-priority": "internal" + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["name"], diff --git a/docs/generated/packages/vite/generators/configuration.json b/docs/generated/packages/vite/generators/configuration.json index b1b005366fa25..4f1eca889366b 100644 --- a/docs/generated/packages/vite/generators/configuration.json +++ b/docs/generated/packages/vite/generators/configuration.json @@ -49,6 +49,12 @@ "testTarget": { "type": "string", "description": "The test target of the project to be transformed to use the @nrwl/vite:test executor." + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "examplesFile": "---\ntitle: Examples for the Vite configuration generator\ndescription: This page contains examples for the Vite @nrwl/vite:configuration generator, which helps you set up Vite on your Nx workspace, or convert an existing project to use Vite.\n---\n\nThis generator is used for converting an existing React or Web project to use [Vite.js](https://vitejs.dev/) and the [@nrwl/vite executors](/packages/vite#executors).\n\nIt will change the `build` and `serve` targets to use the `@nrwl/vite` executors for serving and building the application. If you choose so, it will also change your `test` target to use the `@nrwl/vite:test` executor. It will create a `vite.config.ts` file at the root of your project with the correct settings, or if there's already a `vite.config.ts` file, it will modify it to include the correct settings.\n\n{% callout type=\"caution\" title=\"Your code will be modified!\" %}\nThis generator will modify your code, so make sure to commit your changes before running it.\n{% /callout %}\n\n```bash\nnx g @nrwl/vite:configuration\n```\n\nWhen running this generator, you will be prompted to provide the following:\n\n- The `project`, as the name of the project you want to generate the configuration for.\n- The `uiFramework` you want to use. Supported values are: `react` and `none`.\n\nYou must provide a `project` and a `uiFramework` for the generator to work.\n\nYou may also pass the `includeVitest` flag. This will also change your `test` target to use the `@nrwl/vite:test` executor, and configure your project for testing with [Vitest](https://vitest.dev/), by adding the `test` configuration in your `vite.config.ts` file.\n\n## Converting custom (specific) targets\n\nBy default, the `@nrwl/vite:configuration` generator will search your project's configuration to find the targets for serving, building, and testing your project, and it will attempt to convert these targets to use the `@nrwl/vite` executors.\n\nYour targets for building, serving and testing may not be named `build`, `serve` and `test`. Nx will try to infer the correct targets to convert, and it will attempt to convert the first one it finds for each of these actions if you have more than one. If you have more than one target for serving, building, or testing your project, you can pass the `--serveTarget`, `--buildTarget`, and `--testTarget` flags to the generator, to tell Nx specifically which targets to convert.\n\nNx will determine if the targets you provided (or the ones it inferred) are valid and can be converted to use the `@nrwl/vite` executors. If the targets are not valid, the generator will fail. If no targets are found - or recognized to be either supported or unsupported - Nx will ask you whether you want to convert your project anyway. If you choose to do so, Nx will configure your project to use Vite.js, creating new targets for you, and creating or modifying your `vite.config.ts` file. You can then test on your own if the result works or not, and modify the configuration as needed. It's suggested that if Nx does not recognize your targets automatically, you commit your changes before running the generator, so you can revert the changes if needed.\n\n## Projects that can be converted to use the `@nrwl/vite` executors\n\nUsually, React and Web projects generated with the `@nrwl/react` and the `@nrwl/web` generators can be converted to use the `@nrwl/vite` executors without any issues.\n\nThe list of executors for building, testing and serving that can be converted to use the `@nrwl/vite` executors is:\n\n### Supported `build` executors\n\n- `@nxext/vite:build`\n- `@nrwl/js:babel`\n- `@nrwl/js:swc`\n- `@nrwl/webpack:webpack`\n- `@nrwl/rollup:rollup`\n- `@nrwl/web:rollup`\n\n### Supported `serve` executors\n\n- `@nxext/vite:dev`\n- `@nrwl/webpack:dev-server`\n\n### Supported `test` executors\n\n- `@nrwl/jest:jest`\n- `@nxext/vitest:vitest`\n\n### Unsupported executors\n\n- `@nrwl/angular:ng-packagr-lite`\n- `@nrwl/angular:package`\n- `@nrwl/angular:webpack-browser`\n- `@angular-devkit/build-angular:browser`\n- `@angular-devkit/build-angular:dev-server`\n- `@nrwl/esbuild:esbuild`\n- `@nrwl/react-native:start`\n- `@nrwl/next:build`\n- `@nrwl/next:server`\n- `@nrwl/js:tsc`\n- any executor _not_ listed in the lists of \"supported executors\"\n- any project that does _not_ have a target for building, serving or testing\n\nWe **cannot** guarantee that projects using unsupported executors - _or any executor that is NOT listed in the list of \"supported executors\"_ - for either building, testing or serving will work correctly when converted to use the `@nrwl/vite` executors.\n\nIf you have a project that does _not_ use one of the supported executors you can try to [configure it to use the `@nrwl/vite` executors manually](/packages/vite/documents/set-up-vite-manually), but it may not work properly.\n\nYou can read more in the [Vite package overview page](/packages/vite).\n\n## Examples\n\n### Change a React app to use Vite\n\n```bash\nnx g @nrwl/vite:configuration --project=my-react-app --uiFramework=react --includeVitest\n```\n\nThis will change the `my-react-app` project to use the `@nrwl/vite` executors for building, serving and testing the application.\n\n### Change a Web app to use Vite\n\n```bash\nnx g @nrwl/vite:configuration --project=my-web-app --uiFramework=none --includeVitest\n```\n\nThis will change the `my-web-app` project to use the `@nrwl/vite` executors for building, serving and testing the application.\n\n### Change only my custom provided targets to use Vite\n\n```bash\nnx g @nrwl/vite:configuration --project=my-react-app --uiFramework=react --includeVitest --buildTarget=my-build --serveTarget=my-serve --testTarget=my-test\n```\n\nThis will change the `my-build`, `my-serve` and `my-test` targets to use the `@nrwl/vite` executors for building, serving and testing the application, even if you have other targets for these actions as well.\n", diff --git a/docs/generated/packages/vite/generators/vitest.json b/docs/generated/packages/vite/generators/vitest.json index 4c0edc78f07c9..a2b7fb7814e7e 100644 --- a/docs/generated/packages/vite/generators/vitest.json +++ b/docs/generated/packages/vite/generators/vitest.json @@ -40,6 +40,12 @@ "type": "string", "description": "The test target of the project to be transformed to use the @nrwl/vite:test executor.", "hidden": true + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["project"], diff --git a/packages/esbuild/src/generators/esbuild-project/esbuild-project.ts b/packages/esbuild/src/generators/esbuild-project/esbuild-project.ts index eafafb804926d..d10857859510d 100644 --- a/packages/esbuild/src/generators/esbuild-project/esbuild-project.ts +++ b/packages/esbuild/src/generators/esbuild-project/esbuild-project.ts @@ -18,7 +18,10 @@ export async function esbuildProjectGenerator( tree: Tree, options: EsBuildProjectSchema ) { - const task = await esbuildInitGenerator(tree, options); + const task = await esbuildInitGenerator(tree, { + ...options, + skipFormat: true, + }); checkForTargetConflicts(tree, options); addBuildTarget(tree, options); await formatFiles(tree); diff --git a/packages/expo/src/generators/application/lib/add-detox.ts b/packages/expo/src/generators/application/lib/add-detox.ts index abd51966666a4..d2a3c03cd4e15 100644 --- a/packages/expo/src/generators/application/lib/add-detox.ts +++ b/packages/expo/src/generators/application/lib/add-detox.ts @@ -18,5 +18,6 @@ export async function addDetox(host: Tree, options: NormalizedSchema) { appName: options.name, framework: 'expo', setParserOptionsProject: options.setParserOptionsProject, + skipFormat: true, }); } diff --git a/packages/expo/src/utils/add-jest.ts b/packages/expo/src/utils/add-jest.ts index 70314432adf6f..6b0673df9f4f3 100644 --- a/packages/expo/src/utils/add-jest.ts +++ b/packages/expo/src/utils/add-jest.ts @@ -18,6 +18,7 @@ export async function addJest( skipSerializers: true, setupFile: 'none', babelJest: true, + skipFormat: true, }); // overwrite the jest.config.ts file because react native needs to have special transform property diff --git a/packages/express/src/generators/init/init.ts b/packages/express/src/generators/init/init.ts index b4f7a468d37ef..7db2787112f1b 100644 --- a/packages/express/src/generators/init/init.ts +++ b/packages/express/src/generators/init/init.ts @@ -31,7 +31,10 @@ function updateDependencies(tree: Tree) { } export async function initGenerator(tree: Tree, schema: Schema) { - const initTask = await nodeInitGenerator(tree, schema); + const initTask = await nodeInitGenerator(tree, { + ...schema, + skipFormat: true, + }); const installTask = updateDependencies(tree); if (!schema.skipFormat) { await formatFiles(tree); diff --git a/packages/js/src/generators/library/library.ts b/packages/js/src/generators/library/library.ts index b526c12af7fd7..5a9e394d26003 100644 --- a/packages/js/src/generators/library/library.ts +++ b/packages/js/src/generators/library/library.ts @@ -80,6 +80,7 @@ export async function projectGenerator( uiFramework: 'none', includeVitest: options.unitTestRunner === 'vitest', includeLib: true, + skipFormat: true, }); tasks.push(viteTask); } @@ -107,6 +108,7 @@ export async function projectGenerator( project: options.name, uiFramework: 'none', coverageProvider: 'c8', + skipFormat: true, }); tasks.push(vitestTask); } diff --git a/packages/linter/src/generators/workspace-rule/workspace-rule.ts b/packages/linter/src/generators/workspace-rule/workspace-rule.ts index b34537f8a9ed7..06c14e4e790e1 100644 --- a/packages/linter/src/generators/workspace-rule/workspace-rule.ts +++ b/packages/linter/src/generators/workspace-rule/workspace-rule.ts @@ -25,7 +25,8 @@ export async function lintWorkspaceRuleGenerator( ) { // Ensure that the workspace rules project has been created const projectGeneratorCallback = await lintWorkspaceRulesProjectGenerator( - tree + tree, + { skipFormat: true } ); const ruleDir = joinPathFragments( diff --git a/packages/linter/src/generators/workspace-rules-project/schema.json b/packages/linter/src/generators/workspace-rules-project/schema.json index 0d7942e25be68..dcd3eb04601cc 100644 --- a/packages/linter/src/generators/workspace-rules-project/schema.json +++ b/packages/linter/src/generators/workspace-rules-project/schema.json @@ -11,6 +11,13 @@ "description": "Create the Workspace Lint Rules Project" } ], - "properties": {}, + "properties": { + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" + } + }, "required": [] } diff --git a/packages/linter/src/generators/workspace-rules-project/workspace-rules-project.ts b/packages/linter/src/generators/workspace-rules-project/workspace-rules-project.ts index 6aae5bdf01f4c..f6621c61c67a9 100644 --- a/packages/linter/src/generators/workspace-rules-project/workspace-rules-project.ts +++ b/packages/linter/src/generators/workspace-rules-project/workspace-rules-project.ts @@ -23,7 +23,14 @@ export const WORKSPACE_RULES_PROJECT_NAME = 'eslint-rules'; export const WORKSPACE_PLUGIN_DIR = 'tools/eslint-rules'; -export async function lintWorkspaceRulesProjectGenerator(tree: Tree) { +export interface LintWorkspaceRulesProjectGeneratorOptions { + skipFormat?: boolean; +} + +export async function lintWorkspaceRulesProjectGenerator( + tree: Tree, + options: LintWorkspaceRulesProjectGeneratorOptions = {} +) { const { addPropertyToJestConfig, jestProjectGenerator } = ensurePackage( '@nrwl/jest', nxVersion @@ -114,7 +121,9 @@ export async function lintWorkspaceRulesProjectGenerator(tree: Tree) { } ); - await formatFiles(tree); + if (!options.skipFormat) { + await formatFiles(tree); + } return installTask; } diff --git a/packages/nest/src/generators/convert-tslint-to-eslint/convert-tslint-to-eslint.ts b/packages/nest/src/generators/convert-tslint-to-eslint/convert-tslint-to-eslint.ts index a1751f46b20f0..e35308e847ab7 100755 --- a/packages/nest/src/generators/convert-tslint-to-eslint/convert-tslint-to-eslint.ts +++ b/packages/nest/src/generators/convert-tslint-to-eslint/convert-tslint-to-eslint.ts @@ -68,7 +68,7 @@ export async function conversionGenerator( projectDirectory: '', fileName: '', parsedTags: [], - skipFormat: options.skipFormat, + skipFormat: true, } as AddLintForLibrarySchema); } }, diff --git a/packages/nest/src/generators/init/init.ts b/packages/nest/src/generators/init/init.ts index e7cd11f5c9177..3193766703f17 100644 --- a/packages/nest/src/generators/init/init.ts +++ b/packages/nest/src/generators/init/init.ts @@ -16,7 +16,10 @@ export async function initGenerator( const options = normalizeOptions(rawOptions); const tasks: GeneratorCallback[] = []; - const nodeInitTask = await nodeInitGenerator(tree, options); + const nodeInitTask = await nodeInitGenerator(tree, { + ...options, + skipFormat: true, + }); tasks.push(nodeInitTask); if (!options.skipPackageJson) { diff --git a/packages/next/src/generators/application/lib/add-cypress.ts b/packages/next/src/generators/application/lib/add-cypress.ts index fb3be4b8aeae3..83017ed43b385 100644 --- a/packages/next/src/generators/application/lib/add-cypress.ts +++ b/packages/next/src/generators/application/lib/add-cypress.ts @@ -18,5 +18,6 @@ export async function addCypress(host: Tree, options: NormalizedSchema) { name: `${options.name}-e2e`, directory: options.directory, project: options.projectName, + skipFormat: true, }); } diff --git a/packages/next/src/generators/component/component.ts b/packages/next/src/generators/component/component.ts index 0da7096f41ac8..3607b749a8c0f 100644 --- a/packages/next/src/generators/component/component.ts +++ b/packages/next/src/generators/component/component.ts @@ -1,5 +1,6 @@ import { convertNxGenerator, + formatFiles, getProjects, runTasksInSerial, Tree, @@ -17,6 +18,7 @@ interface Schema { flat?: boolean; pascalCaseFiles?: boolean; pascalCaseDirectory?: boolean; + skipFormat?: boolean; } function getDirectory(host: Tree, options: Schema) { @@ -40,10 +42,15 @@ export async function componentGenerator(host: Tree, options: Schema) { directory: getDirectory(host, options), classComponent: false, routing: false, + skipFormat: true, }); const styledInstall = addStyleDependencies(host, options.style); + if (!options.skipFormat) { + await formatFiles(host); + } + return runTasksInSerial(styledInstall, componentInstall); } diff --git a/packages/next/src/generators/component/schema.json b/packages/next/src/generators/component/schema.json index e8c728a1345e5..bdd97db8d1271 100644 --- a/packages/next/src/generators/component/schema.json +++ b/packages/next/src/generators/component/schema.json @@ -106,6 +106,12 @@ "description": "Use pascal case directory name (e.g. `App/App.tsx`).", "alias": "R", "default": false + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["name", "project"], diff --git a/packages/next/src/generators/init/init.ts b/packages/next/src/generators/init/init.ts index dd7c4e225c6f9..2192a11ea88de 100644 --- a/packages/next/src/generators/init/init.ts +++ b/packages/next/src/generators/init/init.ts @@ -62,7 +62,10 @@ export async function nextInitGenerator(host: Tree, schema: InitSchema) { tasks.push(cypressTask); } - const reactTask = await reactInitGenerator(host, schema); + const reactTask = await reactInitGenerator(host, { + ...schema, + skipFormat: true, + }); tasks.push(reactTask); if (!schema.skipPackageJson) { diff --git a/packages/next/src/generators/library/library.ts b/packages/next/src/generators/library/library.ts index f048f8280ea7a..427c9bac4f5ca 100644 --- a/packages/next/src/generators/library/library.ts +++ b/packages/next/src/generators/library/library.ts @@ -1,5 +1,6 @@ import { convertNxGenerator, + formatFiles, GeneratorCallback, getWorkspaceLayout, joinPathFragments, @@ -31,6 +32,7 @@ export async function libraryGenerator(host: Tree, options: Schema) { const libTask = await reactLibraryGenerator(host, { ...options, compiler: 'swc', + skipFormat: true, }); tasks.push(libTask); @@ -87,6 +89,10 @@ export async function libraryGenerator(host: Tree, options: Schema) { } ); + if (!options.skipFormat) { + await formatFiles(host); + } + return runTasksInSerial(...tasks); } diff --git a/packages/next/src/generators/page/page.ts b/packages/next/src/generators/page/page.ts index a146fb400d47b..9f1df0ed7aaa9 100644 --- a/packages/next/src/generators/page/page.ts +++ b/packages/next/src/generators/page/page.ts @@ -1,5 +1,10 @@ import { componentGenerator as reactComponentGenerator } from '@nrwl/react'; -import { convertNxGenerator, runTasksInSerial, Tree } from '@nrwl/devkit'; +import { + convertNxGenerator, + formatFiles, + runTasksInSerial, + Tree, +} from '@nrwl/devkit'; import { addStyleDependencies } from '../../utils/styles'; import { Schema } from './schema'; @@ -21,10 +26,15 @@ export async function pageGenerator(host: Tree, options: Schema) { skipTests: !options.withTests, flat: !!options.flat, fileName: !options.flat ? 'index' : undefined, + skipFormat: true, }); const styledTask = addStyleDependencies(host, options.style); + if (!options.skipFormat) { + await formatFiles(host); + } + return runTasksInSerial(componentTask, styledTask); } diff --git a/packages/next/src/generators/page/schema.d.ts b/packages/next/src/generators/page/schema.d.ts index fb79f60691ebb..44c986e84fb47 100644 --- a/packages/next/src/generators/page/schema.d.ts +++ b/packages/next/src/generators/page/schema.d.ts @@ -9,4 +9,5 @@ export interface Schema { withTests?: boolean; js?: boolean; flat?: boolean; + skipFormat?: boolean; } diff --git a/packages/next/src/generators/page/schema.json b/packages/next/src/generators/page/schema.json index 2bd40c4e46308..3601304504740 100644 --- a/packages/next/src/generators/page/schema.json +++ b/packages/next/src/generators/page/schema.json @@ -94,6 +94,12 @@ "type": "boolean", "description": "Create component at the source root rather than its own directory.", "default": false + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["name", "project"], diff --git a/packages/node/src/generators/application/application.ts b/packages/node/src/generators/application/application.ts index 6027a4bf55d9e..9a56a11d20f30 100644 --- a/packages/node/src/generators/application/application.ts +++ b/packages/node/src/generators/application/application.ts @@ -371,7 +371,7 @@ export async function applicationGenerator(tree: Tree, schema: Schema) { if (options.framework === 'nest') { const { applicationGenerator } = ensurePackage('@nrwl/nest', nxVersion); - return await applicationGenerator(tree, options); + return await applicationGenerator(tree, { ...options, skipFormat: true }); } const initTask = await initGenerator(tree, { @@ -419,6 +419,7 @@ export async function applicationGenerator(tree: Tree, schema: Schema) { project: options.name, port: options.port, isNest: options.isNest, + skipFormat: true, }); tasks.push(e2eTask); } @@ -435,6 +436,7 @@ export async function applicationGenerator(tree: Tree, schema: Schema) { const dockerTask = await setupDockerGenerator(tree, { ...options, project: options.name, + skipFormat: true, }); tasks.push(dockerTask); diff --git a/packages/node/src/generators/e2e-project/e2e-project.spec.ts b/packages/node/src/generators/e2e-project/e2e-project.spec.ts index 2f7d1fee732f0..18a25879e388b 100644 --- a/packages/node/src/generators/e2e-project/e2e-project.spec.ts +++ b/packages/node/src/generators/e2e-project/e2e-project.spec.ts @@ -56,14 +56,13 @@ describe('e2eProjectGenerator', () => { describe('CLI tests', () => { it('should print a message', () => { - const cliPath = join(process.cwd(), \\"dist/api\\"); + const cliPath = join(process.cwd(), 'dist/api'); const output = execSync(\`node \${cliPath}\`).toString(); expect(output).toMatch(/Hello World/); }); }); - " `); }); diff --git a/packages/node/src/generators/e2e-project/e2e-project.ts b/packages/node/src/generators/e2e-project/e2e-project.ts index e162722466bec..4a6aa843f0628 100644 --- a/packages/node/src/generators/e2e-project/e2e-project.ts +++ b/packages/node/src/generators/e2e-project/e2e-project.ts @@ -139,7 +139,7 @@ export async function e2eProjectGenerator(host: Tree, _options: Schema) { }); } - if (options.formatFile) { + if (!options.skipFormat) { await formatFiles(host); } diff --git a/packages/node/src/generators/e2e-project/schema.d.ts b/packages/node/src/generators/e2e-project/schema.d.ts index 2e5aaaa1b6ce2..c52d11ecc202e 100644 --- a/packages/node/src/generators/e2e-project/schema.d.ts +++ b/packages/node/src/generators/e2e-project/schema.d.ts @@ -5,7 +5,7 @@ export interface Schema { name?: string; port?: number; linter?: 'eslint' | 'none'; - formatFile?: boolean; rootProject?: boolean; isNest?: boolean; + skipFormat?: boolean; } diff --git a/packages/node/src/generators/e2e-project/schema.json b/packages/node/src/generators/e2e-project/schema.json index 3aafca2eb6e71..545e481d6f72f 100644 --- a/packages/node/src/generators/e2e-project/schema.json +++ b/packages/node/src/generators/e2e-project/schema.json @@ -53,10 +53,10 @@ "hidden": true, "x-priority": "internal" }, - "formatFiles": { - "description": "Format generated files.", + "skipFormat": { + "description": "Skip formatting files.", "type": "boolean", - "default": true, + "default": false, "hidden": true, "x-priority": "internal" } diff --git a/packages/nx-plugin/src/generators/e2e-project/e2e.ts b/packages/nx-plugin/src/generators/e2e-project/e2e.ts index 3be83d7250359..4214308eb19a5 100644 --- a/packages/nx-plugin/src/generators/e2e-project/e2e.ts +++ b/packages/nx-plugin/src/generators/e2e-project/e2e.ts @@ -90,6 +90,7 @@ async function addJest(host: Tree, options: NormalizedSchema) { setupFile: 'none', supportTsx: false, skipSerializers: true, + skipFormat: true, }); const project = readProjectConfiguration(host, options.projectName); @@ -141,7 +142,9 @@ export async function e2eProjectGenerator(host: Tree, schema: Schema) { tasks.push(lintTask); } - await formatFiles(host); + if (!options.skipFormat) { + await formatFiles(host); + } return runTasksInSerial(...tasks); } diff --git a/packages/nx-plugin/src/generators/e2e-project/schema.d.ts b/packages/nx-plugin/src/generators/e2e-project/schema.d.ts index 2afbe5a0fc63b..9a0941e00e44b 100644 --- a/packages/nx-plugin/src/generators/e2e-project/schema.d.ts +++ b/packages/nx-plugin/src/generators/e2e-project/schema.d.ts @@ -8,4 +8,5 @@ export interface Schema { jestConfig?: string; minimal?: boolean; linter?: Linter; + skipFormat?: boolean; } diff --git a/packages/nx-plugin/src/generators/e2e-project/schema.json b/packages/nx-plugin/src/generators/e2e-project/schema.json index fcc8a618a4255..ae5729dfaf417 100644 --- a/packages/nx-plugin/src/generators/e2e-project/schema.json +++ b/packages/nx-plugin/src/generators/e2e-project/schema.json @@ -45,6 +45,12 @@ "type": "boolean", "description": "Generate the e2e project with a minimal setup. This would involve not generating tests for a default executor and generator.", "default": false + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["pluginName", "npmPackageName"] diff --git a/packages/nx-plugin/src/generators/plugin/plugin.ts b/packages/nx-plugin/src/generators/plugin/plugin.ts index 5defa1c21b76c..14c2c70dc94ca 100644 --- a/packages/nx-plugin/src/generators/plugin/plugin.ts +++ b/packages/nx-plugin/src/generators/plugin/plugin.ts @@ -95,6 +95,7 @@ export async function pluginGenerator(host: Tree, schema: Schema) { config: 'project', bundler: options.bundler, importPath: options.npmPackageName, + skipFormat: true, }); addDependenciesToPackageJson( @@ -123,6 +124,7 @@ export async function pluginGenerator(host: Tree, schema: Schema) { pluginOutputPath: `dist/${options.libsDir}/${options.projectDirectory}`, npmPackageName: options.npmPackageName, minimal: options.minimal ?? false, + skipFormat: true, }); } diff --git a/packages/react-native/src/generators/component-story/component-story.ts b/packages/react-native/src/generators/component-story/component-story.ts index 53c5a86b0f6db..8de859eda685d 100644 --- a/packages/react-native/src/generators/component-story/component-story.ts +++ b/packages/react-native/src/generators/component-story/component-story.ts @@ -174,7 +174,10 @@ export async function componentStoryGenerator( schema: CreateComponentStoriesFileSchema ) { createComponentStoriesFile(host, schema); - await formatFiles(host); + + if (!schema.skipFormat) { + await formatFiles(host); + } } export default componentStoryGenerator; diff --git a/packages/react-native/src/generators/component-story/schema.d.ts b/packages/react-native/src/generators/component-story/schema.d.ts index 5fa087a5abfed..7430d8c0b3651 100644 --- a/packages/react-native/src/generators/component-story/schema.d.ts +++ b/packages/react-native/src/generators/component-story/schema.d.ts @@ -1,4 +1,5 @@ export interface CreateComponentStoriesFileSchema { project: string; componentPath: string; + skipFormat?: boolean; } diff --git a/packages/react-native/src/generators/component-story/schema.json b/packages/react-native/src/generators/component-story/schema.json index 06611da4fce2d..101494247b7f2 100644 --- a/packages/react-native/src/generators/component-story/schema.json +++ b/packages/react-native/src/generators/component-story/schema.json @@ -22,6 +22,12 @@ "description": "Relative path to the component file from the library root.", "examples": ["lib/components"], "x-prompt": "What's path of the component relative to the project's lib root?" + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["project", "componentPath"] diff --git a/packages/react-native/src/generators/stories/schema.d.ts b/packages/react-native/src/generators/stories/schema.d.ts index 363b7c14bad1c..ae586c8bc4ac7 100644 --- a/packages/react-native/src/generators/stories/schema.d.ts +++ b/packages/react-native/src/generators/stories/schema.d.ts @@ -1,4 +1,5 @@ export interface StorybookStoriesSchema { project: string; ignorePaths?: string[]; + skipFormat?: boolean; } diff --git a/packages/react-native/src/generators/stories/schema.json b/packages/react-native/src/generators/stories/schema.json index a9ee09a535143..cad2733099663 100644 --- a/packages/react-native/src/generators/stories/schema.json +++ b/packages/react-native/src/generators/stories/schema.json @@ -30,6 +30,12 @@ "**/**/src/**/*.other.*", "libs/my-lib/src/not-stories/**,**/**/src/**/*.other.*,apps/my-app/**/*.something.ts" ] + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["project"] diff --git a/packages/react-native/src/generators/stories/stories.ts b/packages/react-native/src/generators/stories/stories.ts index 4f1ef4cd879a9..56879fdddc068 100644 --- a/packages/react-native/src/generators/stories/stories.ts +++ b/packages/react-native/src/generators/stories/stories.ts @@ -1,6 +1,7 @@ import { convertNxGenerator, ensurePackage, + formatFiles, getProjects, Tree, visitNotIgnoredFiles, @@ -65,6 +66,7 @@ export async function createAllStories( await componentStoryGenerator(tree, { componentPath: relativeCmpDir, project: projectName, + skipFormat: true, }); }) ); @@ -75,6 +77,10 @@ export async function storiesGenerator( schema: StorybookStoriesSchema ) { await createAllStories(host, schema.project, schema.ignorePaths); + + if (!schema.skipFormat) { + await formatFiles(host); + } } export default storiesGenerator; diff --git a/packages/react-native/src/generators/storybook-configuration/configuration.ts b/packages/react-native/src/generators/storybook-configuration/configuration.ts index 20d4a11fbf71e..bac077419d4fe 100644 --- a/packages/react-native/src/generators/storybook-configuration/configuration.ts +++ b/packages/react-native/src/generators/storybook-configuration/configuration.ts @@ -20,6 +20,7 @@ async function generateStories(host: Tree, schema: StorybookConfigureSchema) { await storiesGenerator(host, { project: schema.name, ignorePaths: schema.ignorePaths, + skipFormat: true, }); } @@ -27,10 +28,9 @@ export async function storybookConfigurationGenerator( host: Tree, schema: StorybookConfigureSchema ): Promise { - const { configurationGenerator } = ensurePackage( - '@nrwl/storybook', - nxVersion - ); + const { configurationGenerator } = ensurePackage< + typeof import('@nrwl/storybook') + >('@nrwl/storybook', nxVersion); const installTask = await configurationGenerator(host, { name: schema.name, @@ -40,6 +40,7 @@ export async function storybookConfigurationGenerator( linter: schema.linter, standaloneConfig: schema.standaloneConfig, tsConfiguration: schema.tsConfiguration, + skipFormat: true, }); addStorybookTask(host, schema.name); diff --git a/packages/react/src/generators/application/application.ts b/packages/react/src/generators/application/application.ts index 6c7f515d4fe6a..d24db1b343970 100644 --- a/packages/react/src/generators/application/application.ts +++ b/packages/react/src/generators/application/application.ts @@ -106,10 +106,9 @@ export async function applicationGenerator( addProject(host, options); if (options.bundler === 'vite') { - const { viteConfigurationGenerator } = ensurePackage( - '@nrwl/vite', - nxVersion - ); + const { viteConfigurationGenerator } = ensurePackage< + typeof import('@nrwl/vite') + >('@nrwl/vite', nxVersion); // We recommend users use `import.meta.env.MODE` and other variables in their code to differentiate between production and development. // See: https://vitejs.dev/guide/env-and-mode.html if ( @@ -126,24 +125,32 @@ export async function applicationGenerator( newProject: true, includeVitest: options.unitTestRunner === 'vitest', inSourceTests: options.inSourceTests, + skipFormat: true, }); tasks.push(viteTask); } else if (options.bundler === 'webpack') { - const { webpackInitGenerator } = ensurePackage('@nrwl/webpack', nxVersion); + const { webpackInitGenerator } = ensurePackage< + typeof import('@nrwl/webpack') + >('@nrwl/webpack', nxVersion); const webpackInitTask = await webpackInitGenerator(host, { uiFramework: 'react', + skipFormat: true, }); tasks.push(webpackInitTask); } if (options.bundler !== 'vite' && options.unitTestRunner === 'vitest') { - const { vitestGenerator } = ensurePackage('@nrwl/vite', nxVersion); + const { vitestGenerator } = ensurePackage( + '@nrwl/vite', + nxVersion + ); const vitestTask = await vitestGenerator(host, { uiFramework: 'react', coverageProvider: 'c8', project: options.projectName, inSourceTests: options.inSourceTests, + skipFormat: true, }); tasks.push(vitestTask); } diff --git a/packages/react/src/generators/application/lib/add-cypress.ts b/packages/react/src/generators/application/lib/add-cypress.ts index 18ada80ec827d..e59466e24713a 100644 --- a/packages/react/src/generators/application/lib/add-cypress.ts +++ b/packages/react/src/generators/application/lib/add-cypress.ts @@ -13,14 +13,16 @@ export async function addCypress(host: Tree, options: NormalizedSchema) { targetName: 'serve-static', }); - const { cypressProjectGenerator } = ensurePackage('@nrwl/cypress', nxVersion); + const { cypressProjectGenerator } = ensurePackage< + typeof import('@nrwl/cypress') + >('@nrwl/cypress', nxVersion); return await cypressProjectGenerator(host, { ...options, name: options.e2eProjectName, directory: options.directory, project: options.projectName, - rootProject: options.rootProject, bundler: options.bundler, + skipFormat: true, }); } diff --git a/packages/react/src/generators/application/lib/add-jest.ts b/packages/react/src/generators/application/lib/add-jest.ts index 6f0c5e99dd9b2..9d5e262d27530 100644 --- a/packages/react/src/generators/application/lib/add-jest.ts +++ b/packages/react/src/generators/application/lib/add-jest.ts @@ -6,7 +6,10 @@ export async function addJest( host: Tree, options: NormalizedSchema ): Promise { - const { jestProjectGenerator } = ensurePackage('@nrwl/jest', nxVersion); + const { jestProjectGenerator } = ensurePackage( + '@nrwl/jest', + nxVersion + ); if (options.unitTestRunner !== 'jest') { return () => {}; @@ -19,6 +22,6 @@ export async function addJest( skipSerializers: true, setupFile: 'none', compiler: options.compiler, - rootProject: options.rootProject, + skipFormat: true, }); } diff --git a/packages/react/src/generators/component-cypress-spec/component-cypress-spec.ts b/packages/react/src/generators/component-cypress-spec/component-cypress-spec.ts index 74d4d8929bb90..cfe40a37faa71 100644 --- a/packages/react/src/generators/component-cypress-spec/component-cypress-spec.ts +++ b/packages/react/src/generators/component-cypress-spec/component-cypress-spec.ts @@ -1,5 +1,6 @@ import { convertNxGenerator, + formatFiles, generateFiles, getProjects, joinPathFragments, @@ -21,13 +22,18 @@ export interface CreateComponentSpecFileSchema { componentPath: string; js?: boolean; cypressProject?: string; + skipFormat?: boolean; } -export function componentCypressGenerator( +export async function componentCypressGenerator( host: Tree, schema: CreateComponentSpecFileSchema ) { createComponentSpecFile(host, schema); + + if (!schema.skipFormat) { + await formatFiles(host); + } } // TODO: candidate to refactor with the angular component story diff --git a/packages/react/src/generators/component-cypress-spec/schema.json b/packages/react/src/generators/component-cypress-spec/schema.json index c183d27ab1c14..3b38a9d073be9 100644 --- a/packages/react/src/generators/component-cypress-spec/schema.json +++ b/packages/react/src/generators/component-cypress-spec/schema.json @@ -32,6 +32,12 @@ "cypressProject": { "type": "string", "description": "The Cypress project to generate the stories under. By default, inferred from `project`." + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["project", "componentPath"] diff --git a/packages/react/src/generators/component-story/component-story.ts b/packages/react/src/generators/component-story/component-story.ts index ab6281ce1d1e2..4cf9025070203 100644 --- a/packages/react/src/generators/component-story/component-story.ts +++ b/packages/react/src/generators/component-story/component-story.ts @@ -20,6 +20,7 @@ let tsModule: typeof import('typescript'); export interface CreateComponentStoriesFileSchema { project: string; componentPath: string; + skipFormat?: boolean; } export function createComponentStoriesFile( @@ -142,7 +143,10 @@ export async function componentStoryGenerator( schema: CreateComponentStoriesFileSchema ) { createComponentStoriesFile(host, schema); - await formatFiles(host); + + if (!schema.skipFormat) { + await formatFiles(host); + } } export default componentStoryGenerator; diff --git a/packages/react/src/generators/component-story/schema.json b/packages/react/src/generators/component-story/schema.json index 3a931d01b113e..df34160896a38 100644 --- a/packages/react/src/generators/component-story/schema.json +++ b/packages/react/src/generators/component-story/schema.json @@ -24,6 +24,12 @@ "examples": ["lib/components"], "x-prompt": "What's path of the component relative to the project's lib root?", "x-priority": "important" + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["project", "componentPath"] diff --git a/packages/react/src/generators/component/component.ts b/packages/react/src/generators/component/component.ts index 495c830af3788..3c381f9347775 100644 --- a/packages/react/src/generators/component/component.ts +++ b/packages/react/src/generators/component/component.ts @@ -47,7 +47,9 @@ export async function componentGenerator(host: Tree, schema: Schema) { tasks.push(routingTask); } - await formatFiles(host); + if (!options.skipFormat) { + await formatFiles(host); + } return runTasksInSerial(...tasks); } diff --git a/packages/react/src/generators/component/schema.d.ts b/packages/react/src/generators/component/schema.d.ts index aa9a2de264471..eebf19612e7d5 100644 --- a/packages/react/src/generators/component/schema.d.ts +++ b/packages/react/src/generators/component/schema.d.ts @@ -16,4 +16,5 @@ export interface Schema { globalCss?: boolean; fileName?: string; inSourceTests?: boolean; + skipFormat?: boolean; } diff --git a/packages/react/src/generators/component/schema.json b/packages/react/src/generators/component/schema.json index 443dcea40748d..27d2e557cfd84 100644 --- a/packages/react/src/generators/component/schema.json +++ b/packages/react/src/generators/component/schema.json @@ -141,6 +141,12 @@ "type": "boolean", "default": false, "description": "When using Vitest, separate spec files will not be generated and instead will be included within the source files. Read more on the Vitest docs site: https://vitest.dev/guide/in-source.html" + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["name", "project"] diff --git a/packages/react/src/generators/host/host.ts b/packages/react/src/generators/host/host.ts index 8741371d22217..894abfb44c0e1 100644 --- a/packages/react/src/generators/host/host.ts +++ b/packages/react/src/generators/host/host.ts @@ -30,6 +30,7 @@ export async function hostGenerator(host: Tree, schema: Schema) { routing: true, // Only webpack works with module federation for now. bundler: 'webpack', + skipFormat: true, }); tasks.push(initTask); @@ -43,12 +44,12 @@ export async function hostGenerator(host: Tree, schema: Schema) { name: remote, directory: options.directory, style: options.style, - skipFormat: options.skipFormat, unitTestRunner: options.unitTestRunner, e2eTestRunner: options.e2eTestRunner, linter: options.linter, devServerPort: remotePort, ssr: options.ssr, + skipFormat: true, }); remotePort++; } @@ -62,6 +63,7 @@ export async function hostGenerator(host: Tree, schema: Schema) { const setupSsrTask = await setupSsrGenerator(host, { project: options.projectName, serverPort: options.devServerPort, + skipFormat: true, }); tasks.push(setupSsrTask); diff --git a/packages/react/src/generators/library/lib/add-rollup-build-target.ts b/packages/react/src/generators/library/lib/add-rollup-build-target.ts index 9ac3dd03069da..f438fbd800328 100644 --- a/packages/react/src/generators/library/lib/add-rollup-build-target.ts +++ b/packages/react/src/generators/library/lib/add-rollup-build-target.ts @@ -20,7 +20,10 @@ export async function addRollupBuildTarget( host: Tree, options: NormalizedSchema ) { - const { rollupInitGenerator } = ensurePackage('@nrwl/rollup', nxVersion); + const { rollupInitGenerator } = ensurePackage( + '@nrwl/rollup', + nxVersion + ); // These are used in `@nrwl/react/plugins/bundle-rollup` addDependenciesToPackageJson( @@ -75,5 +78,5 @@ export async function addRollupBuildTarget( targets, }); - return rollupInitGenerator(host, options); + return rollupInitGenerator(host, { ...options, skipFormat: true }); } diff --git a/packages/react/src/generators/library/library.ts b/packages/react/src/generators/library/library.ts index c94848dbf020b..19fc801aed1b0 100644 --- a/packages/react/src/generators/library/library.ts +++ b/packages/react/src/generators/library/library.ts @@ -63,10 +63,9 @@ export async function libraryGenerator(host: Tree, schema: Schema) { // Set up build target if (options.buildable && options.bundler === 'vite') { - const { viteConfigurationGenerator } = ensurePackage( - '@nrwl/vite', - nxVersion - ); + const { viteConfigurationGenerator } = ensurePackage< + typeof import('@nrwl/vite') + >('@nrwl/vite', nxVersion); const viteTask = await viteConfigurationGenerator(host, { uiFramework: 'react', project: options.name, @@ -74,6 +73,7 @@ export async function libraryGenerator(host: Tree, schema: Schema) { includeLib: true, inSourceTests: options.inSourceTests, includeVitest: options.unitTestRunner === 'vitest', + skipFormat: true, }); tasks.push(viteTask); } else if (options.buildable && options.bundler === 'rollup') { @@ -83,7 +83,10 @@ export async function libraryGenerator(host: Tree, schema: Schema) { // Set up test target if (options.unitTestRunner === 'jest') { - const { jestProjectGenerator } = ensurePackage('@nrwl/jest', nxVersion); + const { jestProjectGenerator } = ensurePackage( + '@nrwl/jest', + nxVersion + ); const jestTask = await jestProjectGenerator(host, { ...options, @@ -92,6 +95,7 @@ export async function libraryGenerator(host: Tree, schema: Schema) { supportTsx: true, skipSerializers: true, compiler: options.compiler, + skipFormat: true, }); tasks.push(jestTask); const jestConfigPath = joinPathFragments( @@ -108,12 +112,16 @@ export async function libraryGenerator(host: Tree, schema: Schema) { options.unitTestRunner === 'vitest' && options.bundler !== 'vite' // tests are already configured if bundler is vite ) { - const { vitestGenerator } = ensurePackage('@nrwl/vite', nxVersion); + const { vitestGenerator } = ensurePackage( + '@nrwl/vite', + nxVersion + ); const vitestTask = await vitestGenerator(host, { uiFramework: 'react', project: options.name, coverageProvider: 'c8', inSourceTests: options.inSourceTests, + skipFormat: true, }); tasks.push(vitestTask); } @@ -132,6 +140,7 @@ export async function libraryGenerator(host: Tree, schema: Schema) { js: options.js, pascalCaseFiles: options.pascalCaseFiles, inSourceTests: options.inSourceTests, + skipFormat: true, }); tasks.push(componentTask); } diff --git a/packages/react/src/generators/remote/remote.ts b/packages/react/src/generators/remote/remote.ts index 35a3e3c2ad15b..22d292735799f 100644 --- a/packages/react/src/generators/remote/remote.ts +++ b/packages/react/src/generators/remote/remote.ts @@ -45,6 +45,7 @@ export async function remoteGenerator(host: Tree, schema: Schema) { ...options, // Only webpack works with module federation for now. bundler: 'webpack', + skipFormat: true, }); tasks.push(initAppTask); @@ -67,6 +68,7 @@ export async function remoteGenerator(host: Tree, schema: Schema) { const setupSsrTask = await setupSsrGenerator(host, { project: options.projectName, serverPort: options.devServerPort, + skipFormat: true, }); tasks.push(setupSsrTask); diff --git a/packages/react/src/generators/setup-ssr/setup-ssr.ts b/packages/react/src/generators/setup-ssr/setup-ssr.ts index 0d8a69a9c9ce9..b303c638284c3 100644 --- a/packages/react/src/generators/setup-ssr/setup-ssr.ts +++ b/packages/react/src/generators/setup-ssr/setup-ssr.ts @@ -53,7 +53,7 @@ interface AppComponentInfo { } export async function setupSsrGenerator(tree: Tree, options: Schema) { - await initGenerator(tree, {}); + await initGenerator(tree, { skipFormat: true }); const projectConfig = readProjectConfiguration(tree, options.project); const projectRoot = projectConfig.root; const appImportCandidates: AppComponentInfo[] = [ diff --git a/packages/react/src/generators/stories/schema.json b/packages/react/src/generators/stories/schema.json index 09d979418e84b..3fdd31177510f 100644 --- a/packages/react/src/generators/stories/schema.json +++ b/packages/react/src/generators/stories/schema.json @@ -46,6 +46,12 @@ "**/**/src/**/*.other.*", "libs/my-lib/src/not-stories/**,**/**/src/**/*.other.*,apps/my-app/**/*.something.ts" ] + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["project"], diff --git a/packages/react/src/generators/stories/stories.ts b/packages/react/src/generators/stories/stories.ts index 80c05452e1ba7..3fee97c4af01f 100644 --- a/packages/react/src/generators/stories/stories.ts +++ b/packages/react/src/generators/stories/stories.ts @@ -6,6 +6,7 @@ import { } from '../../utils/ast-utils'; import { convertNxGenerator, + formatFiles, getProjects, joinPathFragments, logger, @@ -25,6 +26,7 @@ export interface StorybookStoriesSchema { js?: boolean; cypressProject?: string; ignorePaths?: string[]; + skipFormat?: boolean; } export async function projectRootPath( @@ -141,6 +143,7 @@ export async function createAllStories( await componentStoryGenerator(tree, { componentPath: relativeCmpDir, project: projectName, + skipFormat: true, }); if (generateCypressSpecs && e2eProject) { @@ -149,6 +152,7 @@ export async function createAllStories( componentPath: relativeCmpDir, js, cypressProject, + skipFormat: true, }); } }) @@ -167,6 +171,10 @@ export async function storiesGenerator( schema.cypressProject, schema.ignorePaths ); + + if (!schema.skipFormat) { + await formatFiles(host); + } } export default storiesGenerator; diff --git a/packages/react/src/generators/storybook-configuration/configuration.ts b/packages/react/src/generators/storybook-configuration/configuration.ts index 1ed9e918a5378..8aafdd192156a 100644 --- a/packages/react/src/generators/storybook-configuration/configuration.ts +++ b/packages/react/src/generators/storybook-configuration/configuration.ts @@ -27,6 +27,7 @@ async function generateStories(host: Tree, schema: StorybookConfigureSchema) { js: schema.js, cypressProject, ignorePaths: schema.ignorePaths, + skipFormat: true, }); } @@ -34,10 +35,9 @@ export async function storybookConfigurationGenerator( host: Tree, schema: StorybookConfigureSchema ) { - const { configurationGenerator } = ensurePackage( - '@nrwl/storybook', - nxVersion - ); + const { configurationGenerator } = ensurePackage< + typeof import('@nrwl/storybook') + >('@nrwl/storybook', nxVersion); let bundler = schema.bundler ?? 'webpack'; const projectConfig = readProjectConfiguration(host, schema.name); @@ -72,6 +72,7 @@ export async function storybookConfigurationGenerator( bundler === 'vite' ? '@storybook/react-vite' : '@storybook/react-webpack5', + skipFormat: true, }); if (schema.generateStories) { diff --git a/packages/rollup/src/generators/rollup-project/rollup-project.ts b/packages/rollup/src/generators/rollup-project/rollup-project.ts index 571dc0da05cae..2f38d0033b039 100644 --- a/packages/rollup/src/generators/rollup-project/rollup-project.ts +++ b/packages/rollup/src/generators/rollup-project/rollup-project.ts @@ -18,7 +18,10 @@ export async function rollupProjectGenerator( tree: Tree, options: RollupProjectSchema ) { - const task = await rollupInitGenerator(tree, options); + const task = await rollupInitGenerator(tree, { + ...options, + skipFormat: true, + }); checkForTargetConflicts(tree, options); addBuildTarget(tree, options); await formatFiles(tree); diff --git a/packages/storybook/src/generators/configuration/configuration.ts b/packages/storybook/src/generators/configuration/configuration.ts index e3a78430a204e..318b3ecea16e9 100644 --- a/packages/storybook/src/generators/configuration/configuration.ts +++ b/packages/storybook/src/generators/configuration/configuration.ts @@ -208,6 +208,7 @@ export async function configurationGenerator( ciTargetName: schema.configureStaticServe ? 'static-storybook' : undefined, + skipFormat: true, }); tasks.push(cypressTask); } else { @@ -243,7 +244,9 @@ export async function configurationGenerator( tasks.push(addDependenciesToPackageJson(tree, {}, devDeps)); - await formatFiles(tree); + if (!schema.skipFormat) { + await formatFiles(tree); + } return runTasksInSerial(...tasks); } diff --git a/packages/storybook/src/generators/configuration/schema.d.ts b/packages/storybook/src/generators/configuration/schema.d.ts index 5f3c8ed9a5ae8..7f2cacadbb281 100644 --- a/packages/storybook/src/generators/configuration/schema.d.ts +++ b/packages/storybook/src/generators/configuration/schema.d.ts @@ -15,4 +15,5 @@ export interface StorybookConfigureSchema { configureStaticServe?: boolean; storybook7Configuration?: boolean; // TODO(katerina): Change when Storybook 7 storybook7UiFramework?: UiFramework7; // TODO(katerina): Change when Storybook 7 + skipFormat?: boolean; } diff --git a/packages/storybook/src/generators/configuration/schema.json b/packages/storybook/src/generators/configuration/schema.json index 744f89894eb27..18f7960297fef 100644 --- a/packages/storybook/src/generators/configuration/schema.json +++ b/packages/storybook/src/generators/configuration/schema.json @@ -111,6 +111,12 @@ "@storybook/web-components-vite" ], "hidden": true + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["name"], diff --git a/packages/storybook/src/generators/cypress-project/cypress-project.ts b/packages/storybook/src/generators/cypress-project/cypress-project.ts index 443c7aa3e142b..59c9a751a2039 100644 --- a/packages/storybook/src/generators/cypress-project/cypress-project.ts +++ b/packages/storybook/src/generators/cypress-project/cypress-project.ts @@ -31,6 +31,7 @@ export interface CypressConfigureSchema { linter: Linter; standaloneConfig?: boolean; ciTargetName?: string; + skipFormat?: boolean; } export async function cypressProjectGenerator( @@ -56,6 +57,7 @@ export async function cypressProjectGenerator( linter: schema.linter, directory: schema.directory, standaloneConfig: schema.standaloneConfig, + skipFormat: true, }); tasks.push(installTask); @@ -72,7 +74,9 @@ export async function cypressProjectGenerator( ciTargetName: schema.ciTargetName, }); - await formatFiles(tree); + if (!schema.skipFormat) { + await formatFiles(tree); + } return runTasksInSerial(...tasks); } diff --git a/packages/storybook/src/generators/cypress-project/schema.json b/packages/storybook/src/generators/cypress-project/schema.json index 9f95c85d25c0d..1a5e689a2f770 100644 --- a/packages/storybook/src/generators/cypress-project/schema.json +++ b/packages/storybook/src/generators/cypress-project/schema.json @@ -43,6 +43,12 @@ "type": "string", "description": "The name of the devServerTarget to use for the Cypress CI configuration. Used to control if using :static-storybook:ci or :storybook:ci", "x-priority": "internal" + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["name"] diff --git a/packages/vite/src/generators/configuration/configuration.ts b/packages/vite/src/generators/configuration/configuration.ts index 8ddb7dc34b598..b8b258df83114 100644 --- a/packages/vite/src/generators/configuration/configuration.ts +++ b/packages/vite/src/generators/configuration/configuration.ts @@ -178,11 +178,14 @@ export async function viteConfigurationGenerator( coverageProvider: 'c8', skipViteConfig: true, testTarget: testTargetName, + skipFormat: true, }); tasks.push(vitestTask); } - await formatFiles(tree); + if (!schema.skipFormat) { + await formatFiles(tree); + } return runTasksInSerial(...tasks); } diff --git a/packages/vite/src/generators/configuration/schema.d.ts b/packages/vite/src/generators/configuration/schema.d.ts index b4ea5ed7cf7f2..646be0d161469 100644 --- a/packages/vite/src/generators/configuration/schema.d.ts +++ b/packages/vite/src/generators/configuration/schema.d.ts @@ -8,4 +8,5 @@ export interface ViteConfigurationGeneratorSchema { buildTarget?: string; serveTarget?: string; testTarget?: string; + skipFormat?: boolean; } diff --git a/packages/vite/src/generators/configuration/schema.json b/packages/vite/src/generators/configuration/schema.json index 1159c50883238..f8be75665e1f0 100644 --- a/packages/vite/src/generators/configuration/schema.json +++ b/packages/vite/src/generators/configuration/schema.json @@ -49,6 +49,12 @@ "testTarget": { "type": "string", "description": "The test target of the project to be transformed to use the @nrwl/vite:test executor." + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "examplesFile": "../../../docs/configuration-examples.md" diff --git a/packages/vite/src/generators/vitest/schema.d.ts b/packages/vite/src/generators/vitest/schema.d.ts index fd2bcdd72c306..835bebb70ee28 100644 --- a/packages/vite/src/generators/vitest/schema.d.ts +++ b/packages/vite/src/generators/vitest/schema.d.ts @@ -5,4 +5,5 @@ export interface VitestGeneratorSchema { inSourceTests?: boolean; skipViteConfig?: boolean; testTarget?: string; + skipFormat?: boolean; } diff --git a/packages/vite/src/generators/vitest/schema.json b/packages/vite/src/generators/vitest/schema.json index 7732fff0c2f70..3cd8da91594d5 100644 --- a/packages/vite/src/generators/vitest/schema.json +++ b/packages/vite/src/generators/vitest/schema.json @@ -37,6 +37,12 @@ "type": "string", "description": "The test target of the project to be transformed to use the @nrwl/vite:test executor.", "hidden": true + }, + "skipFormat": { + "description": "Skip formatting files.", + "type": "boolean", + "default": false, + "x-priority": "internal" } }, "required": ["project"] diff --git a/packages/vite/src/generators/vitest/vitest-generator.ts b/packages/vite/src/generators/vitest/vitest-generator.ts index 0139d5464b414..9d2a8586637dc 100644 --- a/packages/vite/src/generators/vitest/vitest-generator.ts +++ b/packages/vite/src/generators/vitest/vitest-generator.ts @@ -74,7 +74,9 @@ export async function vitestGenerator( ); tasks.push(installCoverageProviderTask); - await formatFiles(tree); + if (!schema.skipFormat) { + await formatFiles(tree); + } return runTasksInSerial(...tasks); } diff --git a/packages/web/src/generators/application/application.ts b/packages/web/src/generators/application/application.ts index 5190365f962cf..0f89e7b339d09 100644 --- a/packages/web/src/generators/application/application.ts +++ b/packages/web/src/generators/application/application.ts @@ -88,6 +88,7 @@ async function setupBundler(tree: Tree, options: NormalizedSchema) { options.appProjectRoot, 'webpack.config.js' ), + skipFormat: true, }); const project = readProjectConfiguration(tree, options.projectName); const prodConfig = project.targets.build.configurations.production; @@ -201,10 +202,9 @@ export async function applicationGenerator(host: Tree, schema: Schema) { await addProject(host, options); if (options.bundler === 'vite') { - const { viteConfigurationGenerator } = ensurePackage( - '@nrwl/vite', - nxVersion - ); + const { viteConfigurationGenerator } = ensurePackage< + typeof import('@nrwl/vite') + >('@nrwl/vite', nxVersion); // We recommend users use `import.meta.env.MODE` and other variables in their code to differentiate between production and development. // See: https://vitejs.dev/guide/env-and-mode.html if ( @@ -221,17 +221,22 @@ export async function applicationGenerator(host: Tree, schema: Schema) { newProject: true, includeVitest: options.unitTestRunner === 'vitest', inSourceTests: options.inSourceTests, + skipFormat: true, }); tasks.push(viteTask); } if (options.bundler !== 'vite' && options.unitTestRunner === 'vitest') { - const { vitestGenerator } = ensurePackage('@nrwl/vite', nxVersion); + const { vitestGenerator } = ensurePackage( + '@nrwl/vite', + nxVersion + ); const vitestTask = await vitestGenerator(host, { uiFramework: 'none', project: options.projectName, coverageProvider: 'c8', inSourceTests: options.inSourceTests, + skipFormat: true, }); tasks.push(vitestTask); } @@ -265,34 +270,34 @@ export async function applicationGenerator(host: Tree, schema: Schema) { } if (options.e2eTestRunner === 'cypress') { - const { cypressProjectGenerator } = await ensurePackage( - '@nrwl/cypress', - nxVersion - ); + const { cypressProjectGenerator } = await ensurePackage< + typeof import('@nrwl/cypress') + >('@nrwl/cypress', nxVersion); const cypressTask = await cypressProjectGenerator(host, { ...options, name: `${options.name}-e2e`, directory: options.directory, project: options.projectName, + skipFormat: true, }); tasks.push(cypressTask); } if (options.unitTestRunner === 'jest') { - const { jestProjectGenerator } = await ensurePackage( - '@nrwl/jest', - nxVersion - ); + const { jestProjectGenerator } = await ensurePackage< + typeof import('@nrwl/jest') + >('@nrwl/jest', nxVersion); const jestTask = await jestProjectGenerator(host, { project: options.projectName, skipSerializers: true, setupFile: 'web-components', compiler: options.compiler, + skipFormat: true, }); tasks.push(jestTask); } if (options.compiler === 'swc') { - const installTask = await addDependenciesToPackageJson( + const installTask = addDependenciesToPackageJson( host, {}, { '@swc/core': swcCoreVersion, 'swc-loader': swcLoaderVersion } diff --git a/packages/webpack/src/generators/webpack-project/webpack-project.ts b/packages/webpack/src/generators/webpack-project/webpack-project.ts index b8b3188c2e737..316a46da77bc0 100644 --- a/packages/webpack/src/generators/webpack-project/webpack-project.ts +++ b/packages/webpack/src/generators/webpack-project/webpack-project.ts @@ -15,13 +15,20 @@ export async function webpackProjectGenerator( tree: Tree, options: WebpackProjectGeneratorSchema ) { - const task = await webpackInitGenerator(tree, options); + const task = await webpackInitGenerator(tree, { + ...options, + skipFormat: true, + }); checkForTargetConflicts(tree, options); addBuildTarget(tree, options); if (options.devServer) { addServeTarget(tree, options); } - await formatFiles(tree); + + if (!options.skipFormat) { + await formatFiles(tree); + } + return task; }