From 565bcb4121e678310c26bb249b119da504d13ada Mon Sep 17 00:00:00 2001 From: Evan You Date: Wed, 10 Feb 2021 16:39:41 -0500 Subject: [PATCH] fix(plugin-react-refresh): enable parsing for stage 3 and decorators syntax close #1970 --- packages/plugin-react-refresh/index.js | 18 +++++++++++++++--- packages/plugin-react-refresh/package.json | 7 +++---- yarn.lock | 6 +++--- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/packages/plugin-react-refresh/index.js b/packages/plugin-react-refresh/index.js index 0910b5ac9c4e88..0a5cc8056f915e 100644 --- a/packages/plugin-react-refresh/index.js +++ b/packages/plugin-react-refresh/index.js @@ -78,10 +78,23 @@ function reactRefreshPlugin(opts) { /** * @type ParserOptions["plugins"] */ - const parserPlugins = ['jsx'] + const parserPlugins = [ + 'jsx', + 'importMeta', + // since the plugin now applies before esbuild transforms the code, + // we need to enable some stage 3 syntax since they are supported in + // TS and some environments already. + 'topLevelAwait', + 'classProperties', + 'classPrivateProperties', + 'classPrivateMethods' + ] if (/\.tsx?$/.test(id)) { // it's a typescript file - parserPlugins.push('typescript') + // TODO: maybe we need to read tsconfig to determine parser plugins to + // enable here, but allowing decorators by default since it's very + // commonly used with TS. + parserPlugins.push('typescript', 'decorators-legacy') } if (opts && opts.parserPlugins) { parserPlugins.push(...opts.parserPlugins) @@ -99,7 +112,6 @@ function reactRefreshPlugin(opts) { plugins: [ require('@babel/plugin-transform-react-jsx-self'), require('@babel/plugin-transform-react-jsx-source'), - require('@babel/plugin-syntax-import-meta'), [require('react-refresh/babel'), { skipEnvCheck: true }] ], ast: !isReasonReact, diff --git a/packages/plugin-react-refresh/package.json b/packages/plugin-react-refresh/package.json index eea577ca6ada5f..15c440855073cb 100644 --- a/packages/plugin-react-refresh/package.json +++ b/packages/plugin-react-refresh/package.json @@ -25,10 +25,9 @@ }, "homepage": "https://github.com/vitejs/vite/tree/main/packages/plugin-react-refresh#readme", "dependencies": { - "@babel/core": "^7.12.10", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-transform-react-jsx-self": "^7.12.10", - "@babel/plugin-transform-react-jsx-source": "^7.12.10", + "@babel/core": "^7.12.13", + "@babel/plugin-transform-react-jsx-self": "^7.12.13", + "@babel/plugin-transform-react-jsx-source": "^7.12.13", "react-refresh": "^0.9.0" } } diff --git a/yarn.lock b/yarn.lock index a8be1fcfd9827a..e4a3b4e4d16e1e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -118,7 +118,7 @@ dependencies: "@babel/highlight" "^7.12.13" -"@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.7.5": +"@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.12.13", "@babel/core@^7.7.5": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.13.tgz#b73a87a3a3e7d142a66248bf6ad88b9ceb093425" integrity sha512-BQKE9kXkPlXHPeqissfxo0lySWJcYdEP0hdtJOH/iJfDdhOCcgtNCjftCJg3qqauB4h+lz2N6ixM++b9DN1Tcw== @@ -366,14 +366,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-react-jsx-self@^7.12.10": +"@babel/plugin-transform-react-jsx-self@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.13.tgz#422d99d122d592acab9c35ea22a6cfd9bf189f60" integrity sha512-FXYw98TTJ125GVCCkFLZXlZ1qGcsYqNQhVBQcZjyrwf8FEUtVfKIoidnO8S0q+KBQpDYNTmiGo1gn67Vti04lQ== dependencies: "@babel/helper-plugin-utils" "^7.12.13" -"@babel/plugin-transform-react-jsx-source@^7.12.10": +"@babel/plugin-transform-react-jsx-source@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.13.tgz#051d76126bee5c9a6aa3ba37be2f6c1698856bcb" integrity sha512-O5JJi6fyfih0WfDgIJXksSPhGP/G0fQpfxYy87sDc+1sFmsCS6wr3aAn+whbzkhbjtq4VMqLRaSzR6IsshIC0Q==