From dccc7fcde7e910cc4316adc8c91788c1b000797b Mon Sep 17 00:00:00 2001 From: Ian Sutherland Date: Wed, 30 Sep 2020 15:08:37 -0600 Subject: [PATCH 1/3] Use new JSX setting with TypeScript 4.1.0 --- packages/react-scripts/scripts/utils/verifyTypeScriptSetup.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/react-scripts/scripts/utils/verifyTypeScriptSetup.js b/packages/react-scripts/scripts/utils/verifyTypeScriptSetup.js index 6a1f2c625f7..b6f7edead4c 100644 --- a/packages/react-scripts/scripts/utils/verifyTypeScriptSetup.js +++ b/packages/react-scripts/scripts/utils/verifyTypeScriptSetup.js @@ -14,6 +14,7 @@ const resolve = require('resolve'); const path = require('path'); const paths = require('../../config/paths'); const os = require('os'); +const semver = require('semver'); const immer = require('react-dev-utils/immer').produce; const globby = require('react-dev-utils/globby').sync; @@ -133,7 +134,8 @@ function verifyTypeScriptSetup() { noEmit: { value: true }, jsx: { parsedValue: ts.JsxEmit.React, - suggested: 'react', + value: semver.gte(ts.version, '4.1.0-beta') ? 'react-jsx' : 'react', + reason: 'to support the new JSX transform in React 17' }, paths: { value: undefined, reason: 'aliased imports are not supported' }, }; From ba0e466c4ef7b5c19ea2c5ae4affc265d070cc42 Mon Sep 17 00:00:00 2001 From: Ian Sutherland Date: Thu, 22 Oct 2020 21:10:23 -0600 Subject: [PATCH 2/3] Also check react version before setting jsx value in tsconfig --- .../scripts/utils/verifyTypeScriptSetup.js | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/react-scripts/scripts/utils/verifyTypeScriptSetup.js b/packages/react-scripts/scripts/utils/verifyTypeScriptSetup.js index b6f7edead4c..9942013ad32 100644 --- a/packages/react-scripts/scripts/utils/verifyTypeScriptSetup.js +++ b/packages/react-scripts/scripts/utils/verifyTypeScriptSetup.js @@ -18,6 +18,19 @@ const semver = require('semver'); const immer = require('react-dev-utils/immer').produce; const globby = require('react-dev-utils/globby').sync; +const hasJsxRuntime = (() => { + if (process.env.DISABLE_NEW_JSX_TRANSFORM === 'true') { + return false; + } + + try { + require.resolve('react/jsx-runtime', { paths: [paths.appPath] }); + return true; + } catch (e) { + return false; + } +})(); + function writeJson(fileName, object) { fs.writeFileSync( fileName, @@ -134,8 +147,11 @@ function verifyTypeScriptSetup() { noEmit: { value: true }, jsx: { parsedValue: ts.JsxEmit.React, - value: semver.gte(ts.version, '4.1.0-beta') ? 'react-jsx' : 'react', - reason: 'to support the new JSX transform in React 17' + value: + hasJsxRuntime && semver.gte(ts.version, '4.1.0-beta') + ? 'react-jsx' + : 'react', + reason: 'to support the new JSX transform in React 17', }, paths: { value: undefined, reason: 'aliased imports are not supported' }, }; From cfc78e402ad56fefd47e8ea3d661c40577259b70 Mon Sep 17 00:00:00 2001 From: Ian Sutherland Date: Thu, 22 Oct 2020 21:36:56 -0600 Subject: [PATCH 3/3] Update typescript config verification --- .../react-scripts/scripts/utils/verifyTypeScriptSetup.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/react-scripts/scripts/utils/verifyTypeScriptSetup.js b/packages/react-scripts/scripts/utils/verifyTypeScriptSetup.js index 9942013ad32..00139ee4caf 100644 --- a/packages/react-scripts/scripts/utils/verifyTypeScriptSetup.js +++ b/packages/react-scripts/scripts/utils/verifyTypeScriptSetup.js @@ -146,7 +146,10 @@ function verifyTypeScriptSetup() { isolatedModules: { value: true, reason: 'implementation limitation' }, noEmit: { value: true }, jsx: { - parsedValue: ts.JsxEmit.React, + parsedValue: + hasJsxRuntime && semver.gte(ts.version, '4.1.0-beta') + ? ts.JsxEmit.ReactJsx + : ts.JsxEmit.React, value: hasJsxRuntime && semver.gte(ts.version, '4.1.0-beta') ? 'react-jsx'