From 4dcd48951290381cc23f29a7e5ba63de93d7d3a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Fri, 26 Feb 2021 17:32:29 -0500 Subject: [PATCH] fix: add compatibility warning for older @babel/helper versions --- Makefile | 1 + .../src/fields.js | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 58f47e68022c..28a2bb056473 100644 --- a/Makefile +++ b/Makefile @@ -202,6 +202,7 @@ new-version: @echo "!!!!!! Update classStaticPrivateFieldDestructureSet !!!!!!" @echo "!!!!!! helper version in !!!!!!" @echo "!!!!!! packages/babel-helpers/src/helpers.js !!!!!!" + @echo "!!!!!! packages/babel-helper-create-class-features-plugin/src/fields.js" @echo "!!!!!! !!!!!!" @echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" @echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" diff --git a/packages/babel-helper-create-class-features-plugin/src/fields.js b/packages/babel-helper-create-class-features-plugin/src/fields.js index 5a09308b4ae5..f48b6ba74a47 100644 --- a/packages/babel-helper-create-class-features-plugin/src/fields.js +++ b/packages/babel-helper-create-class-features-plugin/src/fields.js @@ -315,11 +315,22 @@ const privateNameHandlerSpec = { const { name } = member.node.property.id; const { id, static: isStatic } = privateNamesMap.get(name); if (isStatic) { + try { + // classStaticPrivateFieldDestructureSet was introduced in 7.99.0 + // eslint-disable-next-line no-var + var helper = file.addHelper("classStaticPrivateFieldDestructureSet"); + } catch { + throw new Error( + "Babel can not transpile `[C.#p] = [0]` with @babel/helper < 7.99.0, \n" + + "please update @babel/helper to the latest version", + ); + } return t.memberExpression( - t.callExpression( - file.addHelper("classStaticPrivateFieldDestructureSet"), - [this.receiver(member), t.cloneNode(classRef), t.cloneNode(id)], - ), + t.callExpression(helper, [ + this.receiver(member), + t.cloneNode(classRef), + t.cloneNode(id), + ]), t.identifier("value"), ); }