From d77834086f00746ecdb61e09da3a9bbcf4f5b15d Mon Sep 17 00:00:00 2001 From: Chau Tran Date: Mon, 21 Mar 2022 16:33:34 -0500 Subject: [PATCH] fix(js): mimic the behavior of tsc compilation for runTypeCheck (#9240) * fix(js): mimic the behavior of tsc compilation for runTypeCheck ISSUES CLOSED: #9203 * chore(js): add check for type defs files in e2e Co-authored-by: Chau Tran --- e2e/js/src/js.test.ts | 20 ++++++++++++++----- packages/js/src/utils/swc/compile-swc.ts | 3 ++- .../js/src/utils/typescript/run-type-check.ts | 5 ++++- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/e2e/js/src/js.test.ts b/e2e/js/src/js.test.ts index 51af7b938263a..ee6528e4a8832 100644 --- a/e2e/js/src/js.test.ts +++ b/e2e/js/src/js.test.ts @@ -48,7 +48,9 @@ describe('js e2e', () => { `dist/libs/${lib}/README.md`, `dist/libs/${lib}/package.json`, `dist/libs/${lib}/src/index.js`, - `dist/libs/${lib}/src/lib/${lib}.js` + `dist/libs/${lib}/src/lib/${lib}.js`, + `dist/libs/${lib}/src/index.d.ts`, + `dist/libs/${lib}/src/lib/${lib}.d.ts` ); updateJson(`libs/${lib}/project.json`, (json) => { @@ -105,7 +107,9 @@ describe('js e2e', () => { checkFilesExist( `dist/libs/${parentLib}/package.json`, `dist/libs/${parentLib}/src/index.js`, - `dist/libs/${parentLib}/src/lib/${parentLib}.js` + `dist/libs/${parentLib}/src/lib/${parentLib}.js`, + `dist/libs/${parentLib}/src/index.d.ts`, + `dist/libs/${parentLib}/src/lib/${parentLib}.d.ts` ); const tsconfig = readJson(`tsconfig.base.json`); @@ -117,6 +121,7 @@ describe('js e2e', () => { updateFile(`libs/${parentLib}/src/index.ts`, () => { return ` import { ${lib} } from '@${scope}/${lib}' + export * from './lib/${parentLib}'; `; }); @@ -144,7 +149,9 @@ describe('js e2e', () => { checkFilesExist( `dist/libs/${lib}/package.json`, `dist/libs/${lib}/src/index.js`, - `dist/libs/${lib}/src/lib/${lib}.js` + `dist/libs/${lib}/src/lib/${lib}.js`, + `dist/libs/${lib}/src/index.d.ts`, + `dist/libs/${lib}/src/lib/${lib}.d.ts` ); const parentLib = uniq('parentlib'); @@ -164,7 +171,9 @@ describe('js e2e', () => { checkFilesExist( `dist/libs/${parentLib}/package.json`, `dist/libs/${parentLib}/src/index.js`, - `dist/libs/${parentLib}/src/lib/${parentLib}.js` + `dist/libs/${parentLib}/src/lib/${parentLib}.js`, + `dist/libs/${parentLib}/src/index.d.ts`, + `dist/libs/${parentLib}/src/lib/${parentLib}.d.ts` ); const tsconfig = readJson(`tsconfig.base.json`); @@ -175,7 +184,8 @@ describe('js e2e', () => { updateFile(`libs/${parentLib}/src/index.ts`, () => { return ` - import { ${lib} } from '@${scope}/${lib}' + import { ${lib} } from '@${scope}/${lib}'; + export * from './lib/${parentLib}'; `; }); diff --git a/packages/js/src/utils/swc/compile-swc.ts b/packages/js/src/utils/swc/compile-swc.ts index 2df1654b3bb74..f3faa8d7f8c72 100644 --- a/packages/js/src/utils/swc/compile-swc.ts +++ b/packages/js/src/utils/swc/compile-swc.ts @@ -20,8 +20,9 @@ function getTypeCheckOptions(normalizedOptions: NormalizedSwcExecutorOptions) { const typeCheckOptions: TypeCheckOptions = { mode: 'emitDeclarationOnly', tsConfigPath: tsConfig, - outDir: outputPath.replace(`/${projectRoot}`, ''), + outDir: outputPath, workspaceRoot: root, + rootDir: projectRoot, }; if (watch) { diff --git a/packages/js/src/utils/typescript/run-type-check.ts b/packages/js/src/utils/typescript/run-type-check.ts index 264989ab17017..6ebb695ac5dfa 100644 --- a/packages/js/src/utils/typescript/run-type-check.ts +++ b/packages/js/src/utils/typescript/run-type-check.ts @@ -19,6 +19,7 @@ interface BaseTypeCheckOptions { tsConfigPath: string; cacheDir?: string; incremental?: boolean; + rootDir?: string; } type Mode = NoEmitMode | EmitDeclarationOnlyMode; @@ -116,7 +117,8 @@ export async function runTypeCheck( async function setupTypeScript(options: TypeCheckOptions) { const ts = await import('typescript'); - const { workspaceRoot, tsConfigPath, cacheDir, incremental } = options; + const { workspaceRoot, tsConfigPath, cacheDir, incremental, rootDir } = + options; const config = readTsConfig(tsConfigPath); if (config.errors.length) { throw new Error(`Invalid config file: ${config.errors}`); @@ -132,6 +134,7 @@ async function setupTypeScript(options: TypeCheckOptions) { skipLibCheck: true, ...emitOptions, incremental, + rootDir: rootDir || config.options.rootDir, }; return { ts, workspaceRoot, cacheDir, config, compilerOptions };