From dedec0979f3803906a7fef1a12ec99c46df74666 Mon Sep 17 00:00:00 2001 From: Sebastian Markbage Date: Mon, 27 Feb 2023 20:57:18 -0500 Subject: [PATCH] Upgrade acorn parsing to a newer version that can parse dynamic imports --- .../src/ReactFlightWebpackNodeLoader.js | 30 ++++++++++++++----- .../src/ReactFlightWebpackNodeRegister.js | 15 +++++++--- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/packages/react-server-dom-webpack/src/ReactFlightWebpackNodeLoader.js b/packages/react-server-dom-webpack/src/ReactFlightWebpackNodeLoader.js index 6ee4abae013bb..08e571f10c3de 100644 --- a/packages/react-server-dom-webpack/src/ReactFlightWebpackNodeLoader.js +++ b/packages/react-server-dom-webpack/src/ReactFlightWebpackNodeLoader.js @@ -266,10 +266,17 @@ async function parseExportNamesInto( if (typeof source !== 'string') { throw new Error('Expected the transformed source to be a string.'); } - const {body: childBody} = acorn.parse(source, { - ecmaVersion: '2019', - sourceType: 'module', - }); + let childBody; + try { + childBody = acorn.parse(source, { + ecmaVersion: '2024', + sourceType: 'module', + }).body; + } catch (x) { + // eslint-disable-next-line react-internal/no-production-logging + console.error('Error parsing %s %s', url, x.message); + continue; + } await parseExportNamesInto(childBody, names, url, loader); continue; } @@ -381,10 +388,17 @@ async function transformModuleIfNeeded( return source; } - const {body} = acorn.parse(source, { - ecmaVersion: '2019', - sourceType: 'module', - }); + let body; + try { + body = acorn.parse(source, { + ecmaVersion: '2024', + sourceType: 'module', + }).body; + } catch (x) { + // eslint-disable-next-line react-internal/no-production-logging + console.error('Error parsing %s %s', url, x.message); + return source; + } let useClient = false; let useServer = false; diff --git a/packages/react-server-dom-webpack/src/ReactFlightWebpackNodeRegister.js b/packages/react-server-dom-webpack/src/ReactFlightWebpackNodeRegister.js index 14b841c4b9cd4..7d4eb95ca2a05 100644 --- a/packages/react-server-dom-webpack/src/ReactFlightWebpackNodeRegister.js +++ b/packages/react-server-dom-webpack/src/ReactFlightWebpackNodeRegister.js @@ -244,10 +244,17 @@ module.exports = function register() { return originalCompile.apply(this, arguments); } - const {body} = acorn.parse(content, { - ecmaVersion: '2019', - sourceType: 'source', - }); + let body; + try { + body = acorn.parse(content, { + ecmaVersion: '2024', + sourceType: 'source', + }).body; + } catch (x) { + // eslint-disable-next-line react-internal/no-production-logging + console.error('Error parsing %s %s', url, x.message); + return originalCompile.apply(this, arguments); + } let useClient = false; let useServer = false;