From 2996ecd7d16f444759e3ea67f02e634f93d135de Mon Sep 17 00:00:00 2001 From: Caleb Ukle Date: Fri, 24 Feb 2023 21:20:08 -0600 Subject: [PATCH] fix(vite): add missing types for tsconfigs --- e2e/react/src/react-package.test.ts | 3 ++- .../application/application.spec.ts | 20 +++++++++++++++++++ .../src/generators/library/library.spec.ts | 20 +++++++++++++++++++ packages/react/src/utils/create-ts-config.ts | 17 +++++++++++++++- .../vitest/files/tsconfig.spec.json__tmpl__ | 2 +- .../vite/src/generators/vitest/vitest.spec.ts | 2 ++ 6 files changed, 61 insertions(+), 3 deletions(-) diff --git a/e2e/react/src/react-package.test.ts b/e2e/react/src/react-package.test.ts index 6ce3c14dc6b70..c32226d6823d1 100644 --- a/e2e/react/src/react-package.test.ts +++ b/e2e/react/src/react-package.test.ts @@ -1,6 +1,7 @@ import { checkFilesDoNotExist, checkFilesExist, + cleanupProject, getSize, killPorts, newProject, @@ -107,7 +108,7 @@ describe('Build React libraries and apps', () => { afterEach(() => { killPorts(); - // cleanupProject(); + cleanupProject(); }); describe('Buildable libraries', () => { diff --git a/packages/react/src/generators/application/application.spec.ts b/packages/react/src/generators/application/application.spec.ts index 026bf74a1a556..9d5605364cf69 100644 --- a/packages/react/src/generators/application/application.spec.ts +++ b/packages/react/src/generators/application/application.spec.ts @@ -44,6 +44,26 @@ describe('app', () => { expect(projects.get('my-app-e2e').root).toEqual('apps/my-app-e2e'); }); + it('should add vite types to tsconfigs', async () => { + await applicationGenerator(appTree, { + ...schema, + bundler: 'vite', + unitTestRunner: 'vitest', + }); + const tsconfigApp = readJson(appTree, 'apps/my-app/tsconfig.app.json'); + expect(tsconfigApp.compilerOptions.types).toEqual([ + 'node', + 'vite/client', + ]); + const tsconfigSpec = readJson(appTree, 'apps/my-app/tsconfig.spec.json'); + expect(tsconfigSpec.compilerOptions.types).toEqual([ + 'vitest/globals', + 'vitest/importMeta', + 'vite/client', + 'node', + ]); + }); + it('should not overwrite default project if already set', async () => { const nxJson = readNxJson(appTree); nxJson.defaultProject = 'some-awesome-project'; diff --git a/packages/react/src/generators/library/library.spec.ts b/packages/react/src/generators/library/library.spec.ts index 6604c4cce162b..c282760686d7f 100644 --- a/packages/react/src/generators/library/library.spec.ts +++ b/packages/react/src/generators/library/library.spec.ts @@ -61,6 +61,26 @@ describe('lib', () => { }); }); + it('should add vite types to tsconfigs', async () => { + await libraryGenerator(tree, { + ...defaultSchema, + bundler: 'vite', + unitTestRunner: 'vitest', + }); + const tsconfigApp = readJson(tree, 'libs/my-lib/tsconfig.lib.json'); + expect(tsconfigApp.compilerOptions.types).toEqual([ + 'node', + 'vite/client', + ]); + const tsconfigSpec = readJson(tree, 'libs/my-lib/tsconfig.spec.json'); + expect(tsconfigSpec.compilerOptions.types).toEqual([ + 'vitest/globals', + 'vitest/importMeta', + 'vite/client', + 'node', + ]); + }); + it('should update tags', async () => { await libraryGenerator(tree, { ...defaultSchema, tags: 'one,two' }); const project = readProjectConfiguration(tree, 'my-lib'); diff --git a/packages/react/src/utils/create-ts-config.ts b/packages/react/src/utils/create-ts-config.ts index cedc62debf966..2e1ba17c5952c 100644 --- a/packages/react/src/utils/create-ts-config.ts +++ b/packages/react/src/utils/create-ts-config.ts @@ -1,6 +1,6 @@ import { Tree } from 'nx/src/generators/tree'; import * as shared from '@nrwl/js/src/utils/typescript/create-ts-config'; -import { writeJson } from 'nx/src/generators/utils/json'; +import { updateJson, writeJson } from 'nx/src/generators/utils/json'; export function createTsConfig( host: Tree, @@ -56,6 +56,21 @@ export function createTsConfig( } writeJson(host, `${projectRoot}/tsconfig.json`, json); + + const tsconfigProjectPath = `${projectRoot}/tsconfig.${type}.json`; + if (options.bundler === 'vite' && host.exists(tsconfigProjectPath)) { + updateJson(host, tsconfigProjectPath, (json) => { + json.compilerOptions ??= {}; + + const types = new Set(json.compilerOptions.types ?? []); + types.add('node'); + types.add('vite/client'); + + json.compilerOptions.types = Array.from(types); + + return json; + }); + } } export function extractTsConfigBase(host: Tree) { diff --git a/packages/vite/src/generators/vitest/files/tsconfig.spec.json__tmpl__ b/packages/vite/src/generators/vitest/files/tsconfig.spec.json__tmpl__ index 71fccd8aed14a..6d3be7427133d 100644 --- a/packages/vite/src/generators/vitest/files/tsconfig.spec.json__tmpl__ +++ b/packages/vite/src/generators/vitest/files/tsconfig.spec.json__tmpl__ @@ -2,7 +2,7 @@ "extends": "./tsconfig.json", "compilerOptions": { "outDir": "../../dist/out-tsc", - "types": ["vitest/globals", "node"] + "types": ["vitest/globals", "vitest/importMeta", "vite/client", "node"] }, "include": [ "vite.config.ts", diff --git a/packages/vite/src/generators/vitest/vitest.spec.ts b/packages/vite/src/generators/vitest/vitest.spec.ts index fdb48897e5d36..70d19a4ea283d 100644 --- a/packages/vite/src/generators/vitest/vitest.spec.ts +++ b/packages/vite/src/generators/vitest/vitest.spec.ts @@ -93,6 +93,8 @@ describe('vitest generator', () => { "outDir": "../../dist/out-tsc", "types": Array [ "vitest/globals", + "vitest/importMeta", + "vite/client", "node", ], },