diff --git a/docs/generated/packages/linter/generators/workspace-rules-project.json b/docs/generated/packages/linter/generators/workspace-rules-project.json index 4144ef7322..bf08014035 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 9f8bf5c025..0fefb6530e 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 f8d7386fe8..ae02f33745 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 7e117bad78..8449726910 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 947ae39cc5..a0aafc7f41 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 85a99c800d..2323495a18 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 c8e727baea..ac932d09c9 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 6a20d98d6b..1a959e4cac 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 124e94b832..3f81d97753 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 0b0b1852aa..75d9a9b5d5 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 7d5680fbb1..76496422e7 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 f60f2b8ef4..11cebcf71d 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 b1b005366f..4f1eca8893 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 4c0edc78f0..a2b7fb7814 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 eafafb8049..d108578595 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 abd5196666..d2a3c03cd4 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 70314432ad..6b0673df9f 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 b4f7a468d3..7db2787112 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 b526c12af7..5a9e394d26 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 b34537f8a9..06c14e4e79 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 0d7942e25b..dcd3eb0460 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 6aae5bdf01..f6621c61c6 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 a1751f46b2..e35308e847 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 e7cd11f5c9..3193766703 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 fb3be4b8ae..83017ed43b 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 0da7096f41..3607b749a8 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 e8c728a134..bdd97db8d1 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 dd7c4e225c..2192a11ea8 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 f048f8280e..427c9bac4f 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 a146fb400d..9f1df0ed7a 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 fb79f60691..44c986e84f 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 2bd40c4e46..3601304504 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 6027a4bf55..9a56a11d20 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 2f7d1fee73..18a25879e3 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 e162722466..4a6aa843f0 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 2e5aaaa1b6..c52d11ecc2 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 3aafca2eb6..545e481d6f 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 3be83d7250..4214308eb1 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 2afbe5a0fc..9a0941e00e 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 fcc8a618a4..ae5729dfaf 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 5defa1c21b..14c2c70dc9 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 53c5a86b0f..8de859eda6 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 5fa087a5ab..7430d8c0b3 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 06611da4fc..101494247b 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 363b7c14ba..ae586c8bc4 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 a9ee09a535..cad2733099 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 4f1ef4cd87..56879fdddc 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 20d4a11fbf..bac077419d 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 6c7f515d4f..d24db1b343 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 18ada80ec8..e59466e247 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 6f0c5e99dd..9d5e262d27 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 74d4d8929b..cfe40a37fa 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 c183d27ab1..3b38a9d073 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 ab6281ce1d..4cf9025070 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 3a931d01b1..df34160896 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 495c830af3..3c381f9347 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 aa9a2de264..eebf19612e 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 443dcea407..27d2e557cf 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 8741371d22..894abfb44c 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 9ac3dd0306..f438fbd800 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 c94848dbf0..19fc801aed 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 35a3e3c2ad..22d2927357 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 0d8a69a9c9..b303c63828 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 09d979418e..3fdd311775 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 80c05452e1..3fee97c4af 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 1ed9e918a5..8aafdd1921 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 571dc0da05..2f38d0033b 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 e3a78430a2..318b3ecea1 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 5f3c8ed9a5..7f2cacadbb 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 744f89894e..18f7960297 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 443c7aa3e1..59c9a751a2 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 9f95c85d25..1a5e689a2f 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 8ddb7dc34b..b8b258df83 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 b4ea5ed7cf..646be0d161 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 1159c50883..f8be75665e 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 fd2bcdd72c..835bebb70e 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 7732fff0c2..3cd8da9159 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 0139d5464b..9d2a858663 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 5190365f96..0f89e7b339 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 b8b3188c2e..316a46da77 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; }