diff --git a/packages/babel-helpers/src/helpers-generated.ts b/packages/babel-helpers/src/helpers-generated.ts
--- a/packages/babel-helpers/src/helpers-generated.ts
+++ b/packages/babel-helpers/src/helpers-generated.ts
@@ -27,7 +27,11 @@ export default Object.freeze({
   ),
   applyDecs2203: helper(
     "7.19.0",
-    'function createAddInitializerMethod(initializers,decoratorFinishedRef){return function(initializer){assertNotFinished(decoratorFinishedRef,"addInitializer"),assertCallable(initializer,"An initializer"),initializers.push(initializer)}}function memberDec(dec,name,desc,initializers,kind,isStatic,isPrivate,value){var kindStr;switch(kind){case 1:kindStr="accessor";break;case 2:kindStr="method";break;case 3:kindStr="getter";break;case 4:kindStr="setter";break;default:kindStr="field"}var get,set,ctx={kind:kindStr,name:isPrivate?"#"+name:name,static:isStatic,private:isPrivate},decoratorFinishedRef={v:!1};0!==kind&&(ctx.addInitializer=createAddInitializerMethod(initializers,decoratorFinishedRef)),0===kind?isPrivate?(get=desc.get,set=desc.set):(get=function(){return this[name]},set=function(v){this[name]=v}):2===kind?get=function(){return desc.value}:(1!==kind&&3!==kind||(get=function(){return desc.get.call(this)}),1!==kind&&4!==kind||(set=function(v){desc.set.call(this,v)})),ctx.access=get&&set?{get:get,set:set}:get?{get:get}:{set:set};try{return dec(value,ctx)}finally{decoratorFinishedRef.v=!0}}function assertNotFinished(decoratorFinishedRef,fnName){if(decoratorFinishedRef.v)throw new Error("attempted to call "+fnName+" after decoration was finished")}function assertCallable(fn,hint){if("function"!=typeof fn)throw new TypeError(hint+" must be a function")}function assertValidReturnValue(kind,value){var type=typeof value;if(1===kind){if("object"!==type||null===value)throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");void 0!==value.get&&assertCallable(value.get,"accessor.get"),void 0!==value.set&&assertCallable(value.set,"accessor.set"),void 0!==value.init&&assertCallable(value.init,"accessor.init")}else if("function"!==type){var hint;throw hint=0===kind?"field":10===kind?"class":"method",new TypeError(hint+" decorators must return a function or void 0")}}function applyMemberDec(ret,base,decInfo,name,kind,isStatic,isPrivate,initializers){var desc,init,value,newValue,get,set,decs=decInfo[0];if(isPrivate?desc=0===kind||1===kind?{get:decInfo[3],set:decInfo[4]}:3===kind?{get:decInfo[3]}:4===kind?{set:decInfo[3]}:{value:decInfo[3]}:0!==kind&&(desc=Object.getOwnPropertyDescriptor(base,name)),1===kind?value={get:desc.get,set:desc.set}:2===kind?value=desc.value:3===kind?value=desc.get:4===kind&&(value=desc.set),"function"==typeof decs)void 0!==(newValue=memberDec(decs,name,desc,initializers,kind,isStatic,isPrivate,value))&&(assertValidReturnValue(kind,newValue),0===kind?init=newValue:1===kind?(init=newValue.init,get=newValue.get||value.get,set=newValue.set||value.set,value={get:get,set:set}):value=newValue);else for(var i=decs.length-1;i>=0;i--){var newInit;if(void 0!==(newValue=memberDec(decs[i],name,desc,initializers,kind,isStatic,isPrivate,value)))assertValidReturnValue(kind,newValue),0===kind?newInit=newValue:1===kind?(newInit=newValue.init,get=newValue.get||value.get,set=newValue.set||value.set,value={get:get,set:set}):value=newValue,void 0!==newInit&&(void 0===init?init=newInit:"function"==typeof init?init=[init,newInit]:init.push(newInit))}if(0===kind||1===kind){if(void 0===init)init=function(instance,init){return init};else if("function"!=typeof init){var ownInitializers=init;init=function(instance,init){for(var value=init,i=0;i<ownInitializers.length;i++)value=ownInitializers[i].call(instance,value);return value}}else{var originalInitializer=init;init=function(instance,init){return originalInitializer.call(instance,init)}}ret.push(init)}0!==kind&&(1===kind?(desc.get=value.get,desc.set=value.set):2===kind?desc.value=value:3===kind?desc.get=value:4===kind&&(desc.set=value),isPrivate?1===kind?(ret.push((function(instance,args){return value.get.call(instance,args)})),ret.push((function(instance,args){return value.set.call(instance,args)}))):2===kind?ret.push(value):ret.push((function(instance,args){return value.call(instance,args)})):Object.defineProperty(base,name,desc))}function applyMemberDecs(ret,Class,decInfos){for(var protoInitializers,staticInitializers,existingProtoNonFields=new Map,existingStaticNonFields=new Map,i=0;i<decInfos.length;i++){var decInfo=decInfos[i];if(Array.isArray(decInfo)){var base,initializers,kind=decInfo[1],name=decInfo[2],isPrivate=decInfo.length>3,isStatic=kind>=5;if(isStatic?(base=Class,0!==(kind-=5)&&(initializers=staticInitializers=staticInitializers||[])):(base=Class.prototype,0!==kind&&(initializers=protoInitializers=protoInitializers||[])),0!==kind&&!isPrivate){var existingNonFields=isStatic?existingStaticNonFields:existingProtoNonFields,existingKind=existingNonFields.get(name)||0;if(!0===existingKind||3===existingKind&&4!==kind||4===existingKind&&3!==kind)throw new Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: "+name);!existingKind&&kind>2?existingNonFields.set(name,kind):existingNonFields.set(name,!0)}applyMemberDec(ret,base,decInfo,name,kind,isStatic,isPrivate,initializers)}}pushInitializers(ret,protoInitializers),pushInitializers(ret,staticInitializers)}function pushInitializers(ret,initializers){initializers&&ret.push((function(instance){for(var i=0;i<initializers.length;i++)initializers[i].call(instance);return instance}))}function applyClassDecs(ret,targetClass,classDecs){if(classDecs.length>0){for(var initializers=[],newClass=targetClass,name=targetClass.name,i=classDecs.length-1;i>=0;i--){var decoratorFinishedRef={v:!1};try{var nextNewClass=classDecs[i](newClass,{kind:"class",name:name,addInitializer:createAddInitializerMethod(initializers,decoratorFinishedRef)})}finally{decoratorFinishedRef.v=!0}void 0!==nextNewClass&&(assertValidReturnValue(10,nextNewClass),newClass=nextNewClass)}ret.push(newClass,(function(){for(var i=0;i<initializers.length;i++)initializers[i].call(newClass)}))}}export default function applyDecs2203(targetClass,memberDecs,classDecs){var ret=[];return applyMemberDecs(ret,targetClass,memberDecs),applyClassDecs(ret,targetClass,classDecs),ret}',
+    'function applyDecs2203Factory(){function createAddInitializerMethod(initializers,decoratorFinishedRef){return function(initializer){!function(decoratorFinishedRef,fnName){if(decoratorFinishedRef.v)throw new Error("attempted to call "+fnName+" after decoration was finished")}(decoratorFinishedRef,"addInitializer"),assertCallable(initializer,"An initializer"),initializers.push(initializer)}}function memberDec(dec,name,desc,initializers,kind,isStatic,isPrivate,value){var kindStr;switch(kind){case 1:kindStr="accessor";break;case 2:kindStr="method";break;case 3:kindStr="getter";break;case 4:kindStr="setter";break;default:kindStr="field"}var get,set,ctx={kind:kindStr,name:isPrivate?"#"+name:name,static:isStatic,private:isPrivate},decoratorFinishedRef={v:!1};0!==kind&&(ctx.addInitializer=createAddInitializerMethod(initializers,decoratorFinishedRef)),0===kind?isPrivate?(get=desc.get,set=desc.set):(get=function(){return this[name]},set=function(v){this[name]=v}):2===kind?get=function(){return desc.value}:(1!==kind&&3!==kind||(get=function(){return desc.get.call(this)}),1!==kind&&4!==kind||(set=function(v){desc.set.call(this,v)})),ctx.access=get&&set?{get:get,set:set}:get?{get:get}:{set:set};try{return dec(value,ctx)}finally{decoratorFinishedRef.v=!0}}function assertCallable(fn,hint){if("function"!=typeof fn)throw new TypeError(hint+" must be a function")}function assertValidReturnValue(kind,value){var type=typeof value;if(1===kind){if("object"!==type||null===value)throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");void 0!==value.get&&assertCallable(value.get,"accessor.get"),void 0!==value.set&&assertCallable(value.set,"accessor.set"),void 0!==value.init&&assertCallable(value.init,"accessor.init")}else if("function"!==type){var hint;throw hint=0===kind?"field":10===kind?"class":"method",new TypeError(hint+" decorators must return a function or void 0")}}function applyMemberDec(ret,base,decInfo,name,kind,isStatic,isPrivate,initializers){var desc,init,value,newValue,get,set,decs=decInfo[0];if(isPrivate?desc=0===kind||1===kind?{get:decInfo[3],set:decInfo[4]}:3===kind?{get:decInfo[3]}:4===kind?{set:decInfo[3]}:{value:decInfo[3]}:0!==kind&&(desc=Object.getOwnPropertyDescriptor(base,name)),1===kind?value={get:desc.get,set:desc.set}:2===kind?value=desc.value:3===kind?value=desc.get:4===kind&&(value=desc.set),"function"==typeof decs)void 0!==(newValue=memberDec(decs,name,desc,initializers,kind,isStatic,isPrivate,value))&&(assertValidReturnValue(kind,newValue),0===kind?init=newValue:1===kind?(init=newValue.init,get=newValue.get||value.get,set=newValue.set||value.set,value={get:get,set:set}):value=newValue);else for(var i=decs.length-1;i>=0;i--){var newInit;if(void 0!==(newValue=memberDec(decs[i],name,desc,initializers,kind,isStatic,isPrivate,value)))assertValidReturnValue(kind,newValue),0===kind?newInit=newValue:1===kind?(newInit=newValue.init,get=newValue.get||value.get,set=newValue.set||value.set,value={get:get,set:set}):value=newValue,void 0!==newInit&&(void 0===init?init=newInit:"function"==typeof init?init=[init,newInit]:init.push(newInit))}if(0===kind||1===kind){if(void 0===init)init=function(instance,init){return init};else if("function"!=typeof init){var ownInitializers=init;init=function(instance,init){for(var value=init,i=0;i<ownInitializers.length;i++)value=ownInitializers[i].call(instance,value);return value}}else{var originalInitializer=init;init=function(instance,init){return originalInitializer.call(instance,init)}}ret.push(init)}0!==kind&&(1===kind?(desc.get=value.get,desc.set=value.set):2===kind?desc.value=value:3===kind?desc.get=value:4===kind&&(desc.set=value),isPrivate?1===kind?(ret.push((function(instance,args){return value.get.call(instance,args)})),ret.push((function(instance,args){return value.set.call(instance,args)}))):2===kind?ret.push(value):ret.push((function(instance,args){return value.call(instance,args)})):Object.defineProperty(base,name,desc))}function pushInitializers(ret,initializers){initializers&&ret.push((function(instance){for(var i=0;i<initializers.length;i++)initializers[i].call(instance);return instance}))}return function(targetClass,memberDecs,classDecs){var ret=[];return function(ret,Class,decInfos){for(var protoInitializers,staticInitializers,existingProtoNonFields=new Map,existingStaticNonFields=new Map,i=0;i<decInfos.length;i++){var decInfo=decInfos[i];if(Array.isArray(decInfo)){var base,initializers,kind=decInfo[1],name=decInfo[2],isPrivate=decInfo.length>3,isStatic=kind>=5;if(isStatic?(base=Class,0!=(kind-=5)&&(initializers=staticInitializers=staticInitializers||[])):(base=Class.prototype,0!==kind&&(initializers=protoInitializers=protoInitializers||[])),0!==kind&&!isPrivate){var existingNonFields=isStatic?existingStaticNonFields:existingProtoNonFields,existingKind=existingNonFields.get(name)||0;if(!0===existingKind||3===existingKind&&4!==kind||4===existingKind&&3!==kind)throw new Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: "+name);!existingKind&&kind>2?existingNonFields.set(name,kind):existingNonFields.set(name,!0)}applyMemberDec(ret,base,decInfo,name,kind,isStatic,isPrivate,initializers)}}pushInitializers(ret,protoInitializers),pushInitializers(ret,staticInitializers)}(ret,targetClass,memberDecs),function(ret,targetClass,classDecs){if(classDecs.length>0){for(var initializers=[],newClass=targetClass,name=targetClass.name,i=classDecs.length-1;i>=0;i--){var decoratorFinishedRef={v:!1};try{var nextNewClass=classDecs[i](newClass,{kind:"class",name:name,addInitializer:createAddInitializerMethod(initializers,decoratorFinishedRef)})}finally{decoratorFinishedRef.v=!0}void 0!==nextNewClass&&(assertValidReturnValue(10,nextNewClass),newClass=nextNewClass)}ret.push(newClass,(function(){for(var i=0;i<initializers.length;i++)initializers[i].call(newClass)}))}}(ret,targetClass,classDecs),ret}}var applyDecs2203Impl;export default function applyDecs2203(targetClass,memberDecs,classDecs){return(applyDecs2203Impl=applyDecs2203Impl||applyDecs2203Factory())(targetClass,memberDecs,classDecs)}',
+  ),
+  applyDecs2203R: helper(
+    "7.20.0",
+    'function createAddInitializerMethod(initializers,decoratorFinishedRef){return function(initializer){assertNotFinished(decoratorFinishedRef,"addInitializer"),assertCallable(initializer,"An initializer"),initializers.push(initializer)}}function memberDec(dec,name,desc,initializers,kind,isStatic,isPrivate,value){var kindStr;switch(kind){case 1:kindStr="accessor";break;case 2:kindStr="method";break;case 3:kindStr="getter";break;case 4:kindStr="setter";break;default:kindStr="field"}var get,set,ctx={kind:kindStr,name:isPrivate?"#"+name:name,static:isStatic,private:isPrivate},decoratorFinishedRef={v:!1};0!==kind&&(ctx.addInitializer=createAddInitializerMethod(initializers,decoratorFinishedRef)),0===kind?isPrivate?(get=desc.get,set=desc.set):(get=function(){return this[name]},set=function(v){this[name]=v}):2===kind?get=function(){return desc.value}:(1!==kind&&3!==kind||(get=function(){return desc.get.call(this)}),1!==kind&&4!==kind||(set=function(v){desc.set.call(this,v)})),ctx.access=get&&set?{get:get,set:set}:get?{get:get}:{set:set};try{return dec(value,ctx)}finally{decoratorFinishedRef.v=!0}}function assertNotFinished(decoratorFinishedRef,fnName){if(decoratorFinishedRef.v)throw new Error("attempted to call "+fnName+" after decoration was finished")}function assertCallable(fn,hint){if("function"!=typeof fn)throw new TypeError(hint+" must be a function")}function assertValidReturnValue(kind,value){var type=typeof value;if(1===kind){if("object"!==type||null===value)throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");void 0!==value.get&&assertCallable(value.get,"accessor.get"),void 0!==value.set&&assertCallable(value.set,"accessor.set"),void 0!==value.init&&assertCallable(value.init,"accessor.init")}else if("function"!==type){var hint;throw hint=0===kind?"field":10===kind?"class":"method",new TypeError(hint+" decorators must return a function or void 0")}}function applyMemberDec(ret,base,decInfo,name,kind,isStatic,isPrivate,initializers){var desc,init,value,newValue,get,set,decs=decInfo[0];if(isPrivate?desc=0===kind||1===kind?{get:decInfo[3],set:decInfo[4]}:3===kind?{get:decInfo[3]}:4===kind?{set:decInfo[3]}:{value:decInfo[3]}:0!==kind&&(desc=Object.getOwnPropertyDescriptor(base,name)),1===kind?value={get:desc.get,set:desc.set}:2===kind?value=desc.value:3===kind?value=desc.get:4===kind&&(value=desc.set),"function"==typeof decs)void 0!==(newValue=memberDec(decs,name,desc,initializers,kind,isStatic,isPrivate,value))&&(assertValidReturnValue(kind,newValue),0===kind?init=newValue:1===kind?(init=newValue.init,get=newValue.get||value.get,set=newValue.set||value.set,value={get:get,set:set}):value=newValue);else for(var i=decs.length-1;i>=0;i--){var newInit;if(void 0!==(newValue=memberDec(decs[i],name,desc,initializers,kind,isStatic,isPrivate,value)))assertValidReturnValue(kind,newValue),0===kind?newInit=newValue:1===kind?(newInit=newValue.init,get=newValue.get||value.get,set=newValue.set||value.set,value={get:get,set:set}):value=newValue,void 0!==newInit&&(void 0===init?init=newInit:"function"==typeof init?init=[init,newInit]:init.push(newInit))}if(0===kind||1===kind){if(void 0===init)init=function(instance,init){return init};else if("function"!=typeof init){var ownInitializers=init;init=function(instance,init){for(var value=init,i=0;i<ownInitializers.length;i++)value=ownInitializers[i].call(instance,value);return value}}else{var originalInitializer=init;init=function(instance,init){return originalInitializer.call(instance,init)}}ret.push(init)}0!==kind&&(1===kind?(desc.get=value.get,desc.set=value.set):2===kind?desc.value=value:3===kind?desc.get=value:4===kind&&(desc.set=value),isPrivate?1===kind?(ret.push((function(instance,args){return value.get.call(instance,args)})),ret.push((function(instance,args){return value.set.call(instance,args)}))):2===kind?ret.push(value):ret.push((function(instance,args){return value.call(instance,args)})):Object.defineProperty(base,name,desc))}function applyMemberDecs(Class,decInfos){for(var protoInitializers,staticInitializers,ret=[],existingProtoNonFields=new Map,existingStaticNonFields=new Map,i=0;i<decInfos.length;i++){var decInfo=decInfos[i];if(Array.isArray(decInfo)){var base,initializers,kind=decInfo[1],name=decInfo[2],isPrivate=decInfo.length>3,isStatic=kind>=5;if(isStatic?(base=Class,0!==(kind-=5)&&(initializers=staticInitializers=staticInitializers||[])):(base=Class.prototype,0!==kind&&(initializers=protoInitializers=protoInitializers||[])),0!==kind&&!isPrivate){var existingNonFields=isStatic?existingStaticNonFields:existingProtoNonFields,existingKind=existingNonFields.get(name)||0;if(!0===existingKind||3===existingKind&&4!==kind||4===existingKind&&3!==kind)throw new Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: "+name);!existingKind&&kind>2?existingNonFields.set(name,kind):existingNonFields.set(name,!0)}applyMemberDec(ret,base,decInfo,name,kind,isStatic,isPrivate,initializers)}}return pushInitializers(ret,protoInitializers),pushInitializers(ret,staticInitializers),ret}function pushInitializers(ret,initializers){initializers&&ret.push((function(instance){for(var i=0;i<initializers.length;i++)initializers[i].call(instance);return instance}))}function applyClassDecs(targetClass,classDecs){if(classDecs.length>0){for(var initializers=[],newClass=targetClass,name=targetClass.name,i=classDecs.length-1;i>=0;i--){var decoratorFinishedRef={v:!1};try{var nextNewClass=classDecs[i](newClass,{kind:"class",name:name,addInitializer:createAddInitializerMethod(initializers,decoratorFinishedRef)})}finally{decoratorFinishedRef.v=!0}void 0!==nextNewClass&&(assertValidReturnValue(10,nextNewClass),newClass=nextNewClass)}return[newClass,function(){for(var i=0;i<initializers.length;i++)initializers[i].call(newClass)}]}}export default function applyDecs2203R(targetClass,memberDecs,classDecs){return{e:applyMemberDecs(targetClass,memberDecs),get c(){return applyClassDecs(targetClass,classDecs)}}}',
   ),
   asyncGeneratorDelegate: helper(
     "7.0.0-beta.0",
diff --git a/packages/babel-helpers/src/helpers/applyDecs.js b/packages/babel-helpers/src/helpers/applyDecs.js
--- a/packages/babel-helpers/src/helpers/applyDecs.js
+++ b/packages/babel-helpers/src/helpers/applyDecs.js
@@ -2,7 +2,7 @@
 
 /**
  * NOTE: This is an old version of the helper, used for 2021-12 decorators.
- * Updates should be done in applyDecs2203.js.
+ * Updates should be done in applyDecs2203R.js.
  */
 
 /**
diff --git a/packages/babel-helpers/src/helpers/applyDecs2203.js b/packages/babel-helpers/src/helpers/applyDecs2203.js
--- a/packages/babel-helpers/src/helpers/applyDecs2203.js
+++ b/packages/babel-helpers/src/helpers/applyDecs2203.js
@@ -1,5 +1,10 @@
 /* @minVersion 7.19.0 */
 
+/**
+ * NOTE: This is an old version of the helper, used for 2022-03 decorators.
+ * Updates should be done in applyDecs2203R.js.
+ */
+
 /**
   Enums are used in this file, but not assigned to vars to avoid non-hoistable values
 
@@ -17,231 +22,203 @@
 
   CLASS = 10; // only used in assertValidReturnValue
 */
-
-function createAddInitializerMethod(initializers, decoratorFinishedRef) {
-  return function addInitializer(initializer) {
-    assertNotFinished(decoratorFinishedRef, "addInitializer");
-    assertCallable(initializer, "An initializer");
-    initializers.push(initializer);
-  };
-}
-
-function memberDec(
-  dec,
-  name,
-  desc,
-  initializers,
-  kind,
-  isStatic,
-  isPrivate,
-  value
-) {
-  var kindStr;
-
-  switch (kind) {
-    case 1 /* ACCESSOR */:
-      kindStr = "accessor";
-      break;
-    case 2 /* METHOD */:
-      kindStr = "method";
-      break;
-    case 3 /* GETTER */:
-      kindStr = "getter";
-      break;
-    case 4 /* SETTER */:
-      kindStr = "setter";
-      break;
-    default:
-      kindStr = "field";
+function applyDecs2203Factory() {
+  function createAddInitializerMethod(initializers, decoratorFinishedRef) {
+    return function addInitializer(initializer) {
+      assertNotFinished(decoratorFinishedRef, "addInitializer");
+      assertCallable(initializer, "An initializer");
+      initializers.push(initializer);
+    };
   }
 
-  var ctx = {
-    kind: kindStr,
-    name: isPrivate ? "#" + name : name,
-    static: isStatic,
-    private: isPrivate,
-  };
+  function memberDec(
+    dec,
+    name,
+    desc,
+    initializers,
+    kind,
+    isStatic,
+    isPrivate,
+    value
+  ) {
+    var kindStr;
+
+    switch (kind) {
+      case 1 /* ACCESSOR */:
+        kindStr = "accessor";
+        break;
+      case 2 /* METHOD */:
+        kindStr = "method";
+        break;
+      case 3 /* GETTER */:
+        kindStr = "getter";
+        break;
+      case 4 /* SETTER */:
+        kindStr = "setter";
+        break;
+      default:
+        kindStr = "field";
+    }
 
-  var decoratorFinishedRef = { v: false };
+    var ctx = {
+      kind: kindStr,
+      name: isPrivate ? "#" + name : name,
+      static: isStatic,
+      private: isPrivate,
+    };
 
-  if (kind !== 0 /* FIELD */) {
-    ctx.addInitializer = createAddInitializerMethod(
-      initializers,
-      decoratorFinishedRef
-    );
-  }
+    var decoratorFinishedRef = { v: false };
 
-  var get, set;
-  if (kind === 0 /* FIELD */) {
-    if (isPrivate) {
-      get = desc.get;
-      set = desc.set;
-    } else {
-      get = function () {
-        return this[name];
-      };
-      set = function (v) {
-        this[name] = v;
-      };
+    if (kind !== 0 /* FIELD */) {
+      ctx.addInitializer = createAddInitializerMethod(
+        initializers,
+        decoratorFinishedRef
+      );
     }
-  } else if (kind === 2 /* METHOD */) {
-    get = function () {
-      return desc.value;
-    };
-  } else {
-    // replace with values that will go through the final getter and setter
-    if (kind === 1 /* ACCESSOR */ || kind === 3 /* GETTER */) {
+
+    var get, set;
+    if (kind === 0 /* FIELD */) {
+      if (isPrivate) {
+        get = desc.get;
+        set = desc.set;
+      } else {
+        get = function () {
+          return this[name];
+        };
+        set = function (v) {
+          this[name] = v;
+        };
+      }
+    } else if (kind === 2 /* METHOD */) {
       get = function () {
-        return desc.get.call(this);
+        return desc.value;
       };
-    }
+    } else {
+      // replace with values that will go through the final getter and setter
+      if (kind === 1 /* ACCESSOR */ || kind === 3 /* GETTER */) {
+        get = function () {
+          return desc.get.call(this);
+        };
+      }
 
-    if (kind === 1 /* ACCESSOR */ || kind === 4 /* SETTER */) {
-      set = function (v) {
-        desc.set.call(this, v);
-      };
+      if (kind === 1 /* ACCESSOR */ || kind === 4 /* SETTER */) {
+        set = function (v) {
+          desc.set.call(this, v);
+        };
+      }
     }
-  }
-  ctx.access =
-    get && set ? { get: get, set: set } : get ? { get: get } : { set: set };
+    ctx.access =
+      get && set ? { get: get, set: set } : get ? { get: get } : { set: set };
 
-  try {
-    return dec(value, ctx);
-  } finally {
-    decoratorFinishedRef.v = true;
+    try {
+      return dec(value, ctx);
+    } finally {
+      decoratorFinishedRef.v = true;
+    }
   }
-}
 
-function assertNotFinished(decoratorFinishedRef, fnName) {
-  if (decoratorFinishedRef.v) {
-    throw new Error(
-      "attempted to call " + fnName + " after decoration was finished"
-    );
+  function assertNotFinished(decoratorFinishedRef, fnName) {
+    if (decoratorFinishedRef.v) {
+      throw new Error(
+        "attempted to call " + fnName + " after decoration was finished"
+      );
+    }
   }
-}
 
-function assertCallable(fn, hint) {
-  if (typeof fn !== "function") {
-    throw new TypeError(hint + " must be a function");
+  function assertCallable(fn, hint) {
+    if (typeof fn !== "function") {
+      throw new TypeError(hint + " must be a function");
+    }
   }
-}
 
-function assertValidReturnValue(kind, value) {
-  var type = typeof value;
+  function assertValidReturnValue(kind, value) {
+    var type = typeof value;
 
-  if (kind === 1 /* ACCESSOR */) {
-    if (type !== "object" || value === null) {
+    if (kind === 1 /* ACCESSOR */) {
+      if (type !== "object" || value === null) {
+        throw new TypeError(
+          "accessor decorators must return an object with get, set, or init properties or void 0"
+        );
+      }
+      if (value.get !== undefined) {
+        assertCallable(value.get, "accessor.get");
+      }
+      if (value.set !== undefined) {
+        assertCallable(value.set, "accessor.set");
+      }
+      if (value.init !== undefined) {
+        assertCallable(value.init, "accessor.init");
+      }
+    } else if (type !== "function") {
+      var hint;
+      if (kind === 0 /* FIELD */) {
+        hint = "field";
+      } else if (kind === 10 /* CLASS */) {
+        hint = "class";
+      } else {
+        hint = "method";
+      }
       throw new TypeError(
-        "accessor decorators must return an object with get, set, or init properties or void 0"
+        hint + " decorators must return a function or void 0"
       );
     }
-    if (value.get !== undefined) {
-      assertCallable(value.get, "accessor.get");
-    }
-    if (value.set !== undefined) {
-      assertCallable(value.set, "accessor.set");
-    }
-    if (value.init !== undefined) {
-      assertCallable(value.init, "accessor.init");
-    }
-  } else if (type !== "function") {
-    var hint;
-    if (kind === 0 /* FIELD */) {
-      hint = "field";
-    } else if (kind === 10 /* CLASS */) {
-      hint = "class";
-    } else {
-      hint = "method";
-    }
-    throw new TypeError(hint + " decorators must return a function or void 0");
   }
-}
 
-function applyMemberDec(
-  ret,
-  base,
-  decInfo,
-  name,
-  kind,
-  isStatic,
-  isPrivate,
-  initializers
-) {
-  var decs = decInfo[0];
-
-  var desc, init, value;
-
-  if (isPrivate) {
-    if (kind === 0 /* FIELD */ || kind === 1 /* ACCESSOR */) {
-      desc = {
-        get: decInfo[3],
-        set: decInfo[4],
-      };
-    } else if (kind === 3 /* GETTER */) {
-      desc = {
-        get: decInfo[3],
-      };
-    } else if (kind === 4 /* SETTER */) {
-      desc = {
-        set: decInfo[3],
-      };
-    } else {
-      desc = {
-        value: decInfo[3],
-      };
-    }
-  } else if (kind !== 0 /* FIELD */) {
-    desc = Object.getOwnPropertyDescriptor(base, name);
-  }
-
-  if (kind === 1 /* ACCESSOR */) {
-    value = {
-      get: desc.get,
-      set: desc.set,
-    };
-  } else if (kind === 2 /* METHOD */) {
-    value = desc.value;
-  } else if (kind === 3 /* GETTER */) {
-    value = desc.get;
-  } else if (kind === 4 /* SETTER */) {
-    value = desc.set;
-  }
-
-  var newValue, get, set;
-
-  if (typeof decs === "function") {
-    newValue = memberDec(
-      decs,
-      name,
-      desc,
-      initializers,
-      kind,
-      isStatic,
-      isPrivate,
-      value
-    );
+  function applyMemberDec(
+    ret,
+    base,
+    decInfo,
+    name,
+    kind,
+    isStatic,
+    isPrivate,
+    initializers
+  ) {
+    var decs = decInfo[0];
 
-    if (newValue !== void 0) {
-      assertValidReturnValue(kind, newValue);
-
-      if (kind === 0 /* FIELD */) {
-        init = newValue;
-      } else if (kind === 1 /* ACCESSOR */) {
-        init = newValue.init;
-        get = newValue.get || value.get;
-        set = newValue.set || value.set;
+    var desc, init, value;
 
-        value = { get: get, set: set };
+    if (isPrivate) {
+      if (kind === 0 /* FIELD */ || kind === 1 /* ACCESSOR */) {
+        desc = {
+          get: decInfo[3],
+          set: decInfo[4],
+        };
+      } else if (kind === 3 /* GETTER */) {
+        desc = {
+          get: decInfo[3],
+        };
+      } else if (kind === 4 /* SETTER */) {
+        desc = {
+          set: decInfo[3],
+        };
       } else {
-        value = newValue;
+        desc = {
+          value: decInfo[3],
+        };
       }
+    } else if (kind !== 0 /* FIELD */) {
+      desc = Object.getOwnPropertyDescriptor(base, name);
     }
-  } else {
-    for (var i = decs.length - 1; i >= 0; i--) {
-      var dec = decs[i];
 
+    if (kind === 1 /* ACCESSOR */) {
+      value = {
+        get: desc.get,
+        set: desc.set,
+      };
+    } else if (kind === 2 /* METHOD */) {
+      value = desc.value;
+    } else if (kind === 3 /* GETTER */) {
+      value = desc.get;
+    } else if (kind === 4 /* SETTER */) {
+      value = desc.set;
+    }
+
+    var newValue, get, set;
+
+    if (typeof decs === "function") {
       newValue = memberDec(
-        dec,
+        decs,
         name,
         desc,
         initializers,
@@ -253,12 +230,11 @@ function applyMemberDec(
 
       if (newValue !== void 0) {
         assertValidReturnValue(kind, newValue);
-        var newInit;
 
         if (kind === 0 /* FIELD */) {
-          newInit = newValue;
+          init = newValue;
         } else if (kind === 1 /* ACCESSOR */) {
-          newInit = newValue.init;
+          init = newValue.init;
           get = newValue.get || value.get;
           set = newValue.set || value.set;
 
@@ -266,207 +242,238 @@ function applyMemberDec(
         } else {
           value = newValue;
         }
+      }
+    } else {
+      for (var i = decs.length - 1; i >= 0; i--) {
+        var dec = decs[i];
+
+        newValue = memberDec(
+          dec,
+          name,
+          desc,
+          initializers,
+          kind,
+          isStatic,
+          isPrivate,
+          value
+        );
+
+        if (newValue !== void 0) {
+          assertValidReturnValue(kind, newValue);
+          var newInit;
+
+          if (kind === 0 /* FIELD */) {
+            newInit = newValue;
+          } else if (kind === 1 /* ACCESSOR */) {
+            newInit = newValue.init;
+            get = newValue.get || value.get;
+            set = newValue.set || value.set;
 
-        if (newInit !== void 0) {
-          if (init === void 0) {
-            init = newInit;
-          } else if (typeof init === "function") {
-            init = [init, newInit];
+            value = { get: get, set: set };
           } else {
-            init.push(newInit);
+            value = newValue;
+          }
+
+          if (newInit !== void 0) {
+            if (init === void 0) {
+              init = newInit;
+            } else if (typeof init === "function") {
+              init = [init, newInit];
+            } else {
+              init.push(newInit);
+            }
           }
         }
       }
     }
-  }
-
-  if (kind === 0 /* FIELD */ || kind === 1 /* ACCESSOR */) {
-    if (init === void 0) {
-      // If the initializer was void 0, sub in a dummy initializer
-      init = function (instance, init) {
-        return init;
-      };
-    } else if (typeof init !== "function") {
-      var ownInitializers = init;
 
-      init = function (instance, init) {
-        var value = init;
-
-        for (var i = 0; i < ownInitializers.length; i++) {
-          value = ownInitializers[i].call(instance, value);
-        }
-
-        return value;
-      };
-    } else {
-      var originalInitializer = init;
+    if (kind === 0 /* FIELD */ || kind === 1 /* ACCESSOR */) {
+      if (init === void 0) {
+        // If the initializer was void 0, sub in a dummy initializer
+        init = function (instance, init) {
+          return init;
+        };
+      } else if (typeof init !== "function") {
+        var ownInitializers = init;
+
+        init = function (instance, init) {
+          var value = init;
+
+          for (var i = 0; i < ownInitializers.length; i++) {
+            value = ownInitializers[i].call(instance, value);
+          }
 
-      init = function (instance, init) {
-        return originalInitializer.call(instance, init);
-      };
-    }
+          return value;
+        };
+      } else {
+        var originalInitializer = init;
 
-    ret.push(init);
-  }
+        init = function (instance, init) {
+          return originalInitializer.call(instance, init);
+        };
+      }
 
-  if (kind !== 0 /* FIELD */) {
-    if (kind === 1 /* ACCESSOR */) {
-      desc.get = value.get;
-      desc.set = value.set;
-    } else if (kind === 2 /* METHOD */) {
-      desc.value = value;
-    } else if (kind === 3 /* GETTER */) {
-      desc.get = value;
-    } else if (kind === 4 /* SETTER */) {
-      desc.set = value;
+      ret.push(init);
     }
 
-    if (isPrivate) {
+    if (kind !== 0 /* FIELD */) {
       if (kind === 1 /* ACCESSOR */) {
-        ret.push(function (instance, args) {
-          return value.get.call(instance, args);
-        });
-        ret.push(function (instance, args) {
-          return value.set.call(instance, args);
-        });
+        desc.get = value.get;
+        desc.set = value.set;
       } else if (kind === 2 /* METHOD */) {
-        ret.push(value);
+        desc.value = value;
+      } else if (kind === 3 /* GETTER */) {
+        desc.get = value;
+      } else if (kind === 4 /* SETTER */) {
+        desc.set = value;
+      }
+
+      if (isPrivate) {
+        if (kind === 1 /* ACCESSOR */) {
+          ret.push(function (instance, args) {
+            return value.get.call(instance, args);
+          });
+          ret.push(function (instance, args) {
+            return value.set.call(instance, args);
+          });
+        } else if (kind === 2 /* METHOD */) {
+          ret.push(value);
+        } else {
+          ret.push(function (instance, args) {
+            return value.call(instance, args);
+          });
+        }
       } else {
-        ret.push(function (instance, args) {
-          return value.call(instance, args);
-        });
+        Object.defineProperty(base, name, desc);
       }
-    } else {
-      Object.defineProperty(base, name, desc);
     }
   }
-}
 
-function applyMemberDecs(ret, Class, decInfos) {
-  var protoInitializers;
-  var staticInitializers;
+  function applyMemberDecs(ret, Class, decInfos) {
+    var protoInitializers;
+    var staticInitializers;
 
-  var existingProtoNonFields = new Map();
-  var existingStaticNonFields = new Map();
+    var existingProtoNonFields = new Map();
+    var existingStaticNonFields = new Map();
 
-  for (var i = 0; i < decInfos.length; i++) {
-    var decInfo = decInfos[i];
+    for (var i = 0; i < decInfos.length; i++) {
+      var decInfo = decInfos[i];
 
-    // skip computed property names
-    if (!Array.isArray(decInfo)) continue;
+      // skip computed property names
+      if (!Array.isArray(decInfo)) continue;
 
-    var kind = decInfo[1];
-    var name = decInfo[2];
-    var isPrivate = decInfo.length > 3;
+      var kind = decInfo[1];
+      var name = decInfo[2];
+      var isPrivate = decInfo.length > 3;
 
-    var isStatic = kind >= 5; /* STATIC */
-    var base;
-    var initializers;
+      var isStatic = kind >= 5; /* STATIC */
+      var base;
+      var initializers;
 
-    if (isStatic) {
-      base = Class;
-      kind = kind - 5 /* STATIC */;
-      // initialize staticInitializers when we see a non-field static member
-      if (kind !== 0 /* FIELD */) {
-        staticInitializers = staticInitializers || [];
-        initializers = staticInitializers;
-      }
-    } else {
-      base = Class.prototype;
-      // initialize protoInitializers when we see a non-field member
-      if (kind !== 0 /* FIELD */) {
-        protoInitializers = protoInitializers || [];
-        initializers = protoInitializers;
+      if (isStatic) {
+        base = Class;
+        kind = kind - 5 /* STATIC */;
+        // initialize staticInitializers when we see a non-field static member
+        if (kind !== 0 /* FIELD */) {
+          staticInitializers = staticInitializers || [];
+          initializers = staticInitializers;
+        }
+      } else {
+        base = Class.prototype;
+        // initialize protoInitializers when we see a non-field member
+        if (kind !== 0 /* FIELD */) {
+          protoInitializers = protoInitializers || [];
+          initializers = protoInitializers;
+        }
       }
-    }
 
-    if (kind !== 0 /* FIELD */ && !isPrivate) {
-      var existingNonFields = isStatic
-        ? existingStaticNonFields
-        : existingProtoNonFields;
-
-      var existingKind = existingNonFields.get(name) || 0;
-
-      if (
-        existingKind === true ||
-        (existingKind === 3 /* GETTER */ && kind !== 4) /* SETTER */ ||
-        (existingKind === 4 /* SETTER */ && kind !== 3) /* GETTER */
-      ) {
-        throw new Error(
-          "Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " +
-            name
-        );
-      } else if (!existingKind && kind > 2 /* METHOD */) {
-        existingNonFields.set(name, kind);
-      } else {
-        existingNonFields.set(name, true);
+      if (kind !== 0 /* FIELD */ && !isPrivate) {
+        var existingNonFields = isStatic
+          ? existingStaticNonFields
+          : existingProtoNonFields;
+
+        var existingKind = existingNonFields.get(name) || 0;
+
+        if (
+          existingKind === true ||
+          (existingKind === 3 /* GETTER */ && kind !== 4) /* SETTER */ ||
+          (existingKind === 4 /* SETTER */ && kind !== 3) /* GETTER */
+        ) {
+          throw new Error(
+            "Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " +
+              name
+          );
+        } else if (!existingKind && kind > 2 /* METHOD */) {
+          existingNonFields.set(name, kind);
+        } else {
+          existingNonFields.set(name, true);
+        }
       }
+
+      applyMemberDec(
+        ret,
+        base,
+        decInfo,
+        name,
+        kind,
+        isStatic,
+        isPrivate,
+        initializers
+      );
     }
 
-    applyMemberDec(
-      ret,
-      base,
-      decInfo,
-      name,
-      kind,
-      isStatic,
-      isPrivate,
-      initializers
-    );
+    pushInitializers(ret, protoInitializers);
+    pushInitializers(ret, staticInitializers);
   }
 
-  pushInitializers(ret, protoInitializers);
-  pushInitializers(ret, staticInitializers);
-}
-
-function pushInitializers(ret, initializers) {
-  if (initializers) {
-    ret.push(function (instance) {
-      for (var i = 0; i < initializers.length; i++) {
-        initializers[i].call(instance);
-      }
-      return instance;
-    });
+  function pushInitializers(ret, initializers) {
+    if (initializers) {
+      ret.push(function (instance) {
+        for (var i = 0; i < initializers.length; i++) {
+          initializers[i].call(instance);
+        }
+        return instance;
+      });
+    }
   }
-}
 
-function applyClassDecs(ret, targetClass, classDecs) {
-  if (classDecs.length > 0) {
-    var initializers = [];
-    var newClass = targetClass;
-    var name = targetClass.name;
-
-    for (var i = classDecs.length - 1; i >= 0; i--) {
-      var decoratorFinishedRef = { v: false };
-
-      try {
-        var nextNewClass = classDecs[i](newClass, {
-          kind: "class",
-          name: name,
-          addInitializer: createAddInitializerMethod(
-            initializers,
-            decoratorFinishedRef
-          ),
-        });
-      } finally {
-        decoratorFinishedRef.v = true;
-      }
+  function applyClassDecs(ret, targetClass, classDecs) {
+    if (classDecs.length > 0) {
+      var initializers = [];
+      var newClass = targetClass;
+      var name = targetClass.name;
+
+      for (var i = classDecs.length - 1; i >= 0; i--) {
+        var decoratorFinishedRef = { v: false };
+
+        try {
+          var nextNewClass = classDecs[i](newClass, {
+            kind: "class",
+            name: name,
+            addInitializer: createAddInitializerMethod(
+              initializers,
+              decoratorFinishedRef
+            ),
+          });
+        } finally {
+          decoratorFinishedRef.v = true;
+        }
 
-      if (nextNewClass !== undefined) {
-        assertValidReturnValue(10 /* CLASS */, nextNewClass);
-        newClass = nextNewClass;
+        if (nextNewClass !== undefined) {
+          assertValidReturnValue(10 /* CLASS */, nextNewClass);
+          newClass = nextNewClass;
+        }
       }
-    }
 
-    ret.push(newClass, function () {
-      for (var i = 0; i < initializers.length; i++) {
-        initializers[i].call(newClass);
-      }
-    });
+      ret.push(newClass, function () {
+        for (var i = 0; i < initializers.length; i++) {
+          initializers[i].call(newClass);
+        }
+      });
+    }
   }
-}
 
-/**
+  /**
   Basic usage:
 
   applyDecs(
@@ -611,9 +618,18 @@ function applyClassDecs(ret, targetClass, classDecs) {
 
   initializeClass(Class);
  */
+
+  return function applyDecs2203Impl(targetClass, memberDecs, classDecs) {
+    var ret = [];
+    applyMemberDecs(ret, targetClass, memberDecs);
+    applyClassDecs(ret, targetClass, classDecs);
+    return ret;
+  };
+}
+
+var applyDecs2203Impl;
+
 export default function applyDecs2203(targetClass, memberDecs, classDecs) {
-  var ret = [];
-  applyMemberDecs(ret, targetClass, memberDecs);
-  applyClassDecs(ret, targetClass, classDecs);
-  return ret;
+  applyDecs2203Impl = applyDecs2203Impl || applyDecs2203Factory();
+  return applyDecs2203Impl(targetClass, memberDecs, classDecs);
 }
diff --git a/packages/babel-helpers/src/helpers/applyDecs2203R.js b/packages/babel-helpers/src/helpers/applyDecs2203R.js
new file mode 100644
--- /dev/null
+++ b/packages/babel-helpers/src/helpers/applyDecs2203R.js
@@ -0,0 +1,629 @@
+/* @minVersion 7.20.0 */
+
+/**
+  Enums are used in this file, but not assigned to vars to avoid non-hoistable values
+
+  CONSTRUCTOR = 0;
+  PUBLIC = 1;
+  PRIVATE = 2;
+
+  FIELD = 0;
+  ACCESSOR = 1;
+  METHOD = 2;
+  GETTER = 3;
+  SETTER = 4;
+
+  STATIC = 5;
+
+  CLASS = 10; // only used in assertValidReturnValue
+*/
+
+function createAddInitializerMethod(initializers, decoratorFinishedRef) {
+  return function addInitializer(initializer) {
+    assertNotFinished(decoratorFinishedRef, "addInitializer");
+    assertCallable(initializer, "An initializer");
+    initializers.push(initializer);
+  };
+}
+
+function memberDec(
+  dec,
+  name,
+  desc,
+  initializers,
+  kind,
+  isStatic,
+  isPrivate,
+  value
+) {
+  var kindStr;
+
+  switch (kind) {
+    case 1 /* ACCESSOR */:
+      kindStr = "accessor";
+      break;
+    case 2 /* METHOD */:
+      kindStr = "method";
+      break;
+    case 3 /* GETTER */:
+      kindStr = "getter";
+      break;
+    case 4 /* SETTER */:
+      kindStr = "setter";
+      break;
+    default:
+      kindStr = "field";
+  }
+
+  var ctx = {
+    kind: kindStr,
+    name: isPrivate ? "#" + name : name,
+    static: isStatic,
+    private: isPrivate,
+  };
+
+  var decoratorFinishedRef = { v: false };
+
+  if (kind !== 0 /* FIELD */) {
+    ctx.addInitializer = createAddInitializerMethod(
+      initializers,
+      decoratorFinishedRef
+    );
+  }
+
+  var get, set;
+  if (kind === 0 /* FIELD */) {
+    if (isPrivate) {
+      get = desc.get;
+      set = desc.set;
+    } else {
+      get = function () {
+        return this[name];
+      };
+      set = function (v) {
+        this[name] = v;
+      };
+    }
+  } else if (kind === 2 /* METHOD */) {
+    get = function () {
+      return desc.value;
+    };
+  } else {
+    // replace with values that will go through the final getter and setter
+    if (kind === 1 /* ACCESSOR */ || kind === 3 /* GETTER */) {
+      get = function () {
+        return desc.get.call(this);
+      };
+    }
+
+    if (kind === 1 /* ACCESSOR */ || kind === 4 /* SETTER */) {
+      set = function (v) {
+        desc.set.call(this, v);
+      };
+    }
+  }
+  ctx.access =
+    get && set ? { get: get, set: set } : get ? { get: get } : { set: set };
+
+  try {
+    return dec(value, ctx);
+  } finally {
+    decoratorFinishedRef.v = true;
+  }
+}
+
+function assertNotFinished(decoratorFinishedRef, fnName) {
+  if (decoratorFinishedRef.v) {
+    throw new Error(
+      "attempted to call " + fnName + " after decoration was finished"
+    );
+  }
+}
+
+function assertCallable(fn, hint) {
+  if (typeof fn !== "function") {
+    throw new TypeError(hint + " must be a function");
+  }
+}
+
+function assertValidReturnValue(kind, value) {
+  var type = typeof value;
+
+  if (kind === 1 /* ACCESSOR */) {
+    if (type !== "object" || value === null) {
+      throw new TypeError(
+        "accessor decorators must return an object with get, set, or init properties or void 0"
+      );
+    }
+    if (value.get !== undefined) {
+      assertCallable(value.get, "accessor.get");
+    }
+    if (value.set !== undefined) {
+      assertCallable(value.set, "accessor.set");
+    }
+    if (value.init !== undefined) {
+      assertCallable(value.init, "accessor.init");
+    }
+  } else if (type !== "function") {
+    var hint;
+    if (kind === 0 /* FIELD */) {
+      hint = "field";
+    } else if (kind === 10 /* CLASS */) {
+      hint = "class";
+    } else {
+      hint = "method";
+    }
+    throw new TypeError(hint + " decorators must return a function or void 0");
+  }
+}
+
+function applyMemberDec(
+  ret,
+  base,
+  decInfo,
+  name,
+  kind,
+  isStatic,
+  isPrivate,
+  initializers
+) {
+  var decs = decInfo[0];
+
+  var desc, init, value;
+
+  if (isPrivate) {
+    if (kind === 0 /* FIELD */ || kind === 1 /* ACCESSOR */) {
+      desc = {
+        get: decInfo[3],
+        set: decInfo[4],
+      };
+    } else if (kind === 3 /* GETTER */) {
+      desc = {
+        get: decInfo[3],
+      };
+    } else if (kind === 4 /* SETTER */) {
+      desc = {
+        set: decInfo[3],
+      };
+    } else {
+      desc = {
+        value: decInfo[3],
+      };
+    }
+  } else if (kind !== 0 /* FIELD */) {
+    desc = Object.getOwnPropertyDescriptor(base, name);
+  }
+
+  if (kind === 1 /* ACCESSOR */) {
+    value = {
+      get: desc.get,
+      set: desc.set,
+    };
+  } else if (kind === 2 /* METHOD */) {
+    value = desc.value;
+  } else if (kind === 3 /* GETTER */) {
+    value = desc.get;
+  } else if (kind === 4 /* SETTER */) {
+    value = desc.set;
+  }
+
+  var newValue, get, set;
+
+  if (typeof decs === "function") {
+    newValue = memberDec(
+      decs,
+      name,
+      desc,
+      initializers,
+      kind,
+      isStatic,
+      isPrivate,
+      value
+    );
+
+    if (newValue !== void 0) {
+      assertValidReturnValue(kind, newValue);
+
+      if (kind === 0 /* FIELD */) {
+        init = newValue;
+      } else if (kind === 1 /* ACCESSOR */) {
+        init = newValue.init;
+        get = newValue.get || value.get;
+        set = newValue.set || value.set;
+
+        value = { get: get, set: set };
+      } else {
+        value = newValue;
+      }
+    }
+  } else {
+    for (var i = decs.length - 1; i >= 0; i--) {
+      var dec = decs[i];
+
+      newValue = memberDec(
+        dec,
+        name,
+        desc,
+        initializers,
+        kind,
+        isStatic,
+        isPrivate,
+        value
+      );
+
+      if (newValue !== void 0) {
+        assertValidReturnValue(kind, newValue);
+        var newInit;
+
+        if (kind === 0 /* FIELD */) {
+          newInit = newValue;
+        } else if (kind === 1 /* ACCESSOR */) {
+          newInit = newValue.init;
+          get = newValue.get || value.get;
+          set = newValue.set || value.set;
+
+          value = { get: get, set: set };
+        } else {
+          value = newValue;
+        }
+
+        if (newInit !== void 0) {
+          if (init === void 0) {
+            init = newInit;
+          } else if (typeof init === "function") {
+            init = [init, newInit];
+          } else {
+            init.push(newInit);
+          }
+        }
+      }
+    }
+  }
+
+  if (kind === 0 /* FIELD */ || kind === 1 /* ACCESSOR */) {
+    if (init === void 0) {
+      // If the initializer was void 0, sub in a dummy initializer
+      init = function (instance, init) {
+        return init;
+      };
+    } else if (typeof init !== "function") {
+      var ownInitializers = init;
+
+      init = function (instance, init) {
+        var value = init;
+
+        for (var i = 0; i < ownInitializers.length; i++) {
+          value = ownInitializers[i].call(instance, value);
+        }
+
+        return value;
+      };
+    } else {
+      var originalInitializer = init;
+
+      init = function (instance, init) {
+        return originalInitializer.call(instance, init);
+      };
+    }
+
+    ret.push(init);
+  }
+
+  if (kind !== 0 /* FIELD */) {
+    if (kind === 1 /* ACCESSOR */) {
+      desc.get = value.get;
+      desc.set = value.set;
+    } else if (kind === 2 /* METHOD */) {
+      desc.value = value;
+    } else if (kind === 3 /* GETTER */) {
+      desc.get = value;
+    } else if (kind === 4 /* SETTER */) {
+      desc.set = value;
+    }
+
+    if (isPrivate) {
+      if (kind === 1 /* ACCESSOR */) {
+        ret.push(function (instance, args) {
+          return value.get.call(instance, args);
+        });
+        ret.push(function (instance, args) {
+          return value.set.call(instance, args);
+        });
+      } else if (kind === 2 /* METHOD */) {
+        ret.push(value);
+      } else {
+        ret.push(function (instance, args) {
+          return value.call(instance, args);
+        });
+      }
+    } else {
+      Object.defineProperty(base, name, desc);
+    }
+  }
+}
+
+function applyMemberDecs(Class, decInfos) {
+  var ret = [];
+  var protoInitializers;
+  var staticInitializers;
+
+  var existingProtoNonFields = new Map();
+  var existingStaticNonFields = new Map();
+
+  for (var i = 0; i < decInfos.length; i++) {
+    var decInfo = decInfos[i];
+
+    // skip computed property names
+    if (!Array.isArray(decInfo)) continue;
+
+    var kind = decInfo[1];
+    var name = decInfo[2];
+    var isPrivate = decInfo.length > 3;
+
+    var isStatic = kind >= 5; /* STATIC */
+    var base;
+    var initializers;
+
+    if (isStatic) {
+      base = Class;
+      kind = kind - 5 /* STATIC */;
+      // initialize staticInitializers when we see a non-field static member
+      if (kind !== 0 /* FIELD */) {
+        staticInitializers = staticInitializers || [];
+        initializers = staticInitializers;
+      }
+    } else {
+      base = Class.prototype;
+      // initialize protoInitializers when we see a non-field member
+      if (kind !== 0 /* FIELD */) {
+        protoInitializers = protoInitializers || [];
+        initializers = protoInitializers;
+      }
+    }
+
+    if (kind !== 0 /* FIELD */ && !isPrivate) {
+      var existingNonFields = isStatic
+        ? existingStaticNonFields
+        : existingProtoNonFields;
+
+      var existingKind = existingNonFields.get(name) || 0;
+
+      if (
+        existingKind === true ||
+        (existingKind === 3 /* GETTER */ && kind !== 4) /* SETTER */ ||
+        (existingKind === 4 /* SETTER */ && kind !== 3) /* GETTER */
+      ) {
+        throw new Error(
+          "Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " +
+            name
+        );
+      } else if (!existingKind && kind > 2 /* METHOD */) {
+        existingNonFields.set(name, kind);
+      } else {
+        existingNonFields.set(name, true);
+      }
+    }
+
+    applyMemberDec(
+      ret,
+      base,
+      decInfo,
+      name,
+      kind,
+      isStatic,
+      isPrivate,
+      initializers
+    );
+  }
+
+  pushInitializers(ret, protoInitializers);
+  pushInitializers(ret, staticInitializers);
+  return ret;
+}
+
+function pushInitializers(ret, initializers) {
+  if (initializers) {
+    ret.push(function (instance) {
+      for (var i = 0; i < initializers.length; i++) {
+        initializers[i].call(instance);
+      }
+      return instance;
+    });
+  }
+}
+
+function applyClassDecs(targetClass, classDecs) {
+  if (classDecs.length > 0) {
+    var initializers = [];
+    var newClass = targetClass;
+    var name = targetClass.name;
+
+    for (var i = classDecs.length - 1; i >= 0; i--) {
+      var decoratorFinishedRef = { v: false };
+
+      try {
+        var nextNewClass = classDecs[i](newClass, {
+          kind: "class",
+          name: name,
+          addInitializer: createAddInitializerMethod(
+            initializers,
+            decoratorFinishedRef
+          ),
+        });
+      } finally {
+        decoratorFinishedRef.v = true;
+      }
+
+      if (nextNewClass !== undefined) {
+        assertValidReturnValue(10 /* CLASS */, nextNewClass);
+        newClass = nextNewClass;
+      }
+    }
+
+    return [
+      newClass,
+      function () {
+        for (var i = 0; i < initializers.length; i++) {
+          initializers[i].call(newClass);
+        }
+      },
+    ];
+  }
+  // The transformer will not emit assignment when there are no class decorators,
+  // so we don't have to return an empty array here.
+}
+
+/**
+  Basic usage:
+
+  applyDecs(
+    Class,
+    [
+      // member decorators
+      [
+        dec,                // dec or array of decs
+        0,                  // kind of value being decorated
+        'prop',             // name of public prop on class containing the value being decorated,
+        '#p',               // the name of the private property (if is private, void 0 otherwise),
+      ]
+    ],
+    [
+      // class decorators
+      dec1, dec2
+    ]
+  )
+  ```
+
+  Fully transpiled example:
+
+  ```js
+  @dec
+  class Class {
+    @dec
+    a = 123;
+
+    @dec
+    #a = 123;
+
+    @dec
+    @dec2
+    accessor b = 123;
+
+    @dec
+    accessor #b = 123;
+
+    @dec
+    c() { console.log('c'); }
+
+    @dec
+    #c() { console.log('privC'); }
+
+    @dec
+    get d() { console.log('d'); }
+
+    @dec
+    get #d() { console.log('privD'); }
+
+    @dec
+    set e(v) { console.log('e'); }
+
+    @dec
+    set #e(v) { console.log('privE'); }
+  }
+
+
+  // becomes
+  let initializeInstance;
+  let initializeClass;
+
+  let initA;
+  let initPrivA;
+
+  let initB;
+  let initPrivB, getPrivB, setPrivB;
+
+  let privC;
+  let privD;
+  let privE;
+
+  let Class;
+  class _Class {
+    static {
+      let ret = applyDecs(
+        this,
+        [
+          [dec, 0, 'a'],
+          [dec, 0, 'a', (i) => i.#a, (i, v) => i.#a = v],
+          [[dec, dec2], 1, 'b'],
+          [dec, 1, 'b', (i) => i.#privBData, (i, v) => i.#privBData = v],
+          [dec, 2, 'c'],
+          [dec, 2, 'c', () => console.log('privC')],
+          [dec, 3, 'd'],
+          [dec, 3, 'd', () => console.log('privD')],
+          [dec, 4, 'e'],
+          [dec, 4, 'e', () => console.log('privE')],
+        ],
+        [
+          dec
+        ]
+      )
+
+      initA = ret[0];
+
+      initPrivA = ret[1];
+
+      initB = ret[2];
+
+      initPrivB = ret[3];
+      getPrivB = ret[4];
+      setPrivB = ret[5];
+
+      privC = ret[6];
+
+      privD = ret[7];
+
+      privE = ret[8];
+
+      initializeInstance = ret[9];
+
+      Class = ret[10]
+
+      initializeClass = ret[11];
+    }
+
+    a = (initializeInstance(this), initA(this, 123));
+
+    #a = initPrivA(this, 123);
+
+    #bData = initB(this, 123);
+    get b() { return this.#bData }
+    set b(v) { this.#bData = v }
+
+    #privBData = initPrivB(this, 123);
+    get #b() { return getPrivB(this); }
+    set #b(v) { setPrivB(this, v); }
+
+    c() { console.log('c'); }
+
+    #c(...args) { return privC(this, ...args) }
+
+    get d() { console.log('d'); }
+
+    get #d() { return privD(this); }
+
+    set e(v) { console.log('e'); }
+
+    set #e(v) { privE(this, v); }
+  }
+
+  initializeClass(Class);
+ */
+export default function applyDecs2203R(targetClass, memberDecs, classDecs) {
+  return {
+    e: applyMemberDecs(targetClass, memberDecs),
+    // Lazily apply class decorations so that member init locals can be properly bound.
+    get c() {
+      return applyClassDecs(targetClass, classDecs);
+    },
+  };
+}
diff --git a/packages/babel-plugin-proposal-decorators/src/transformer-2022-03.ts b/packages/babel-plugin-proposal-decorators/src/transformer-2022-03.ts
--- a/packages/babel-plugin-proposal-decorators/src/transformer-2022-03.ts
+++ b/packages/babel-plugin-proposal-decorators/src/transformer-2022-03.ts
@@ -20,6 +20,8 @@ type ClassElement =
   | t.TSIndexSignature
   | t.StaticBlock;
 
+type DecoratorVersionKind = "2022-03" | "2021-12";
+
 function incrementId(id: number[], idx = id.length - 1): void {
   // If index is -1, id needs an additional character, unshift A
   if (idx === -1) {
@@ -487,7 +489,7 @@ function transformClass(
   path: NodePath<t.ClassExpression | t.ClassDeclaration>,
   state: PluginPass,
   constantSuper: boolean,
-  version: "2022-03" | "2021-12",
+  version: DecoratorVersionKind,
 ): NodePath {
   const body = path.get("body.body");
 
@@ -536,7 +538,7 @@ function transformClass(
   let protoInitLocal: t.Identifier,
     staticInitLocal: t.Identifier,
     classInitLocal: t.Identifier,
-    classLocal: t.Identifier;
+    classIdLocal: t.Identifier;
   const assignments: t.AssignmentExpression[] = [];
   const scopeParent: Scope = path.scope.parent;
 
@@ -549,9 +551,9 @@ function transformClass(
   if (classDecorators) {
     classInitLocal = scopeParent.generateDeclaredUidIdentifier("initClass");
 
-    const [localId, classPath] = replaceClassWithVar(path);
+    const [classId, classPath] = replaceClassWithVar(path);
     path = classPath;
-    classLocal = localId;
+    classIdLocal = classId;
 
     path.node.decorators = null;
 
@@ -567,7 +569,7 @@ function transformClass(
     if (!path.node.id) {
       path.node.id = path.scope.generateUidIdentifier("Class");
     }
-    classLocal = t.cloneNode(path.node.id);
+    classIdLocal = t.cloneNode(path.node.id);
   }
 
   if (hasElementDecorators) {
@@ -688,10 +690,10 @@ function transformClass(
           const replaceSupers = new ReplaceSupers({
             constantSuper,
             methodPath: element as NodePath<t.ClassPrivateMethod>,
-            objectRef: classLocal,
+            objectRef: classIdLocal,
             superRef: path.node.superClass,
             file: state.file,
-            refToPreserve: classLocal,
+            refToPreserve: classIdLocal,
           });
 
           replaceSupers.replace();
@@ -781,12 +783,12 @@ function transformClass(
     (classDecorators || []).map(d => d.expression),
   );
 
-  const locals: t.Identifier[] =
+  const elementLocals: t.Identifier[] =
     extractElementLocalAssignments(elementDecoratorInfo);
 
   if (requiresProtoInit) {
     protoInitLocal = scopeParent.generateDeclaredUidIdentifier("initProto");
-    locals.push(protoInitLocal);
+    elementLocals.push(protoInitLocal);
 
     const protoInitCall = t.callExpression(t.cloneNode(protoInitLocal), [
       t.thisExpression(),
@@ -847,7 +849,7 @@ function transformClass(
 
   if (requiresStaticInit) {
     staticInitLocal = scopeParent.generateDeclaredUidIdentifier("initStatic");
-    locals.push(staticInitLocal);
+    elementLocals.push(staticInitLocal);
   }
 
   if (decoratedPrivateMethods.size > 0) {
@@ -884,6 +886,7 @@ function transformClass(
     });
   }
 
+  const classLocals: t.Identifier[] = [];
   let classInitInjected = false;
   const classInitCall =
     classInitLocal && t.callExpression(t.cloneNode(classInitLocal), []);
@@ -891,7 +894,7 @@ function transformClass(
   const originalClass = path.node;
 
   if (classDecorators) {
-    locals.push(classLocal, classInitLocal);
+    classLocals.push(classIdLocal, classInitLocal);
     const statics: (
       | t.ClassProperty
       | t.ClassPrivateProperty
@@ -954,7 +957,7 @@ function transformClass(
       }
       if (constructorBody.length > 0) {
         constructorBody.unshift(
-          t.callExpression(t.super(), [t.cloneNode(classLocal)]),
+          t.callExpression(t.super(), [t.cloneNode(classIdLocal)]),
         );
 
         staticsClass.body.body.push(
@@ -968,7 +971,7 @@ function transformClass(
           ),
         );
       } else {
-        newExpr.arguments.push(t.cloneNode(classLocal));
+        newExpr.arguments.push(t.cloneNode(classIdLocal));
       }
 
       path.replaceWith(newExpr);
@@ -984,15 +987,13 @@ function transformClass(
     t.staticBlock(
       [
         t.expressionStatement(
-          t.assignmentExpression(
-            "=",
-            t.arrayPattern(locals),
-            t.callExpression(
-              state.addHelper(
-                version === "2021-12" ? "applyDecs" : "applyDecs2203",
-              ),
-              [t.thisExpression(), elementDecorations, classDecorations],
-            ),
+          createLocalsAssignment(
+            elementLocals,
+            classLocals,
+            elementDecorations,
+            classDecorations,
+            state,
+            version,
           ),
         ),
         requiresStaticInit &&
@@ -1015,6 +1016,52 @@ function transformClass(
   return path;
 }
 
+function createLocalsAssignment(
+  elementLocals: t.Identifier[],
+  classLocals: t.Identifier[],
+  elementDecorations: t.ArrayExpression,
+  classDecorations: t.ArrayExpression,
+  state: PluginPass,
+  version: DecoratorVersionKind,
+) {
+  let lhs, rhs;
+  // TODO(Babel 8): Only keep the else branch
+  if (
+    version === "2021-12" ||
+    (version === "2022-03" && !state.availableHelper("applyDecs2203R"))
+  ) {
+    lhs = t.arrayPattern([...elementLocals, ...classLocals]);
+    rhs = t.callExpression(
+      state.addHelper(version === "2021-12" ? "applyDecs" : "applyDecs2203"),
+      [t.thisExpression(), elementDecorations, classDecorations],
+    );
+  } else {
+    rhs = t.callExpression(state.addHelper("applyDecs2203R"), [
+      t.thisExpression(),
+      elementDecorations,
+      classDecorations,
+    ]);
+    // optimize `{ c: [classLocals] } = applyapplyDecs2203R(...)` to
+    // `[classLocals] = applyapplyDecs2203R(...).c`
+    if (elementLocals.length > 0) {
+      if (classLocals.length > 0) {
+        lhs = t.objectPattern([
+          t.objectProperty(t.identifier("e"), t.arrayPattern(elementLocals)),
+          t.objectProperty(t.identifier("c"), t.arrayPattern(classLocals)),
+        ]);
+      } else {
+        lhs = t.arrayPattern(elementLocals);
+        rhs = t.memberExpression(rhs, t.identifier("e"), false, false);
+      }
+    } else {
+      // invariant: classLocals.length > 0
+      lhs = t.arrayPattern(classLocals);
+      rhs = t.memberExpression(rhs, t.identifier("c"), false, false);
+    }
+  }
+  return t.assignmentExpression("=", lhs, rhs);
+}
+
 export default function (
   { assertVersion, assumption }: PluginAPI,
   { loose }: Options,

diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors--to-es2015/private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors--to-es2015/private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors--to-es2015/private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors--to-es2015/private/output.js
@@ -36,7 +36,7 @@ function _set_b2(v) {
 function _get_b2() {
   return _get_b(this);
 }
-[_init_a, _get_a, _set_a, _init_b, _get_b, _set_b, _initProto] = babelHelpers.applyDecs2203(Foo, [[dec, 1, "a", function () {
+[_init_a, _get_a, _set_a, _init_b, _get_b, _set_b, _initProto] = babelHelpers.applyDecs2203R(Foo, [[dec, 1, "a", function () {
   return babelHelpers.classPrivateFieldGet(this, _A);
 }, function (value) {
   babelHelpers.classPrivateFieldSet(this, _A, value);
@@ -44,4 +44,4 @@ function _get_b2() {
   return babelHelpers.classPrivateFieldGet(this, _B);
 }, function (value) {
   babelHelpers.classPrivateFieldSet(this, _B, value);
-}]], []);
+}]], []).e;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors--to-es2015/public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors--to-es2015/public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors--to-es2015/public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors--to-es2015/public/output.js
@@ -38,4 +38,4 @@ class Foo {
     babelHelpers.classPrivateFieldSet(this, _C, v);
   }
 }
-[_init_a, _init_b, _init_computedKey, _initProto] = babelHelpers.applyDecs2203(Foo, [[dec, 1, "a"], [dec, 1, "b"], [dec, 1, _computedKey]], []);
+[_init_a, _init_b, _init_computedKey, _initProto] = babelHelpers.applyDecs2203R(Foo, [[dec, 1, "a"], [dec, 1, "b"], [dec, 1, _computedKey]], []).e;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors--to-es2015/static-private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors--to-es2015/static-private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors--to-es2015/static-private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors--to-es2015/static-private/output.js
@@ -27,7 +27,7 @@ function _get_b2() {
   return _get_b(this);
 }
 (() => {
-  [_init_a, _get_a, _set_a, _init_b, _get_b, _set_b, _initStatic] = babelHelpers.applyDecs2203(Foo, [[dec, 6, "a", function () {
+  [_init_a, _get_a, _set_a, _init_b, _get_b, _set_b, _initStatic] = babelHelpers.applyDecs2203R(Foo, [[dec, 6, "a", function () {
     return babelHelpers.classStaticPrivateFieldSpecGet(this, Foo, _A);
   }, function (value) {
     babelHelpers.classStaticPrivateFieldSpecSet(this, Foo, _A, value);
@@ -35,7 +35,7 @@ function _get_b2() {
     return babelHelpers.classStaticPrivateFieldSpecGet(this, Foo, _B);
   }, function (value) {
     babelHelpers.classStaticPrivateFieldSpecSet(this, Foo, _B, value);
-  }]], []);
+  }]], []).e;
   _initStatic(Foo);
 })();
 var _A = {
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors--to-es2015/static-public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors--to-es2015/static-public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors--to-es2015/static-public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors--to-es2015/static-public/output.js
@@ -22,7 +22,7 @@ class Foo {
   }
 }
 (() => {
-  [_init_a, _init_b, _init_computedKey, _initStatic] = babelHelpers.applyDecs2203(Foo, [[dec, 6, "a"], [dec, 6, "b"], [dec, 6, _computedKey]], []);
+  [_init_a, _init_b, _init_computedKey, _initStatic] = babelHelpers.applyDecs2203R(Foo, [[dec, 6, "a"], [dec, 6, "b"], [dec, 6, _computedKey]], []).e;
   _initStatic(Foo);
 })();
 var _A = {
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors/private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors/private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors/private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors/private/output.js
@@ -2,7 +2,7 @@ var _init_a, _get_a, _set_a, _init_b, _get_b, _set_b, _initProto;
 const dec = () => {};
 class Foo {
   static {
-    [_init_a, _get_a, _set_a, _init_b, _get_b, _set_b, _initProto] = babelHelpers.applyDecs2203(this, [[dec, 1, "a", function () {
+    [_init_a, _get_a, _set_a, _init_b, _get_b, _set_b, _initProto] = babelHelpers.applyDecs2203R(this, [[dec, 1, "a", function () {
       return this.#A;
     }, function (value) {
       this.#A = value;
@@ -10,7 +10,7 @@ class Foo {
       return this.#B;
     }, function (value) {
       this.#B = value;
-    }]], []);
+    }]], []).e;
   }
   #A = (_initProto(this), _init_a(this));
   set #a(v) {
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors/public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors/public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors/public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors/public/output.js
@@ -3,7 +3,7 @@ const dec = () => {};
 _computedKey = 'c';
 class Foo {
   static {
-    [_init_a, _init_b, _init_computedKey, _initProto] = babelHelpers.applyDecs2203(this, [[dec, 1, "a"], [dec, 1, "b"], [dec, 1, _computedKey]], []);
+    [_init_a, _init_b, _init_computedKey, _initProto] = babelHelpers.applyDecs2203R(this, [[dec, 1, "a"], [dec, 1, "b"], [dec, 1, _computedKey]], []).e;
   }
   #A = (_initProto(this), _init_a(this));
   get a() {
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors/static-private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors/static-private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors/static-private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors/static-private/output.js
@@ -2,7 +2,7 @@ var _init_a, _get_a, _set_a, _init_b, _get_b, _set_b, _initStatic;
 const dec = () => {};
 class Foo {
   static {
-    [_init_a, _get_a, _set_a, _init_b, _get_b, _set_b, _initStatic] = babelHelpers.applyDecs2203(this, [[dec, 6, "a", function () {
+    [_init_a, _get_a, _set_a, _init_b, _get_b, _set_b, _initStatic] = babelHelpers.applyDecs2203R(this, [[dec, 6, "a", function () {
       return this.#A;
     }, function (value) {
       this.#A = value;
@@ -10,7 +10,7 @@ class Foo {
       return this.#B;
     }, function (value) {
       this.#B = value;
-    }]], []);
+    }]], []).e;
     _initStatic(this);
   }
   static #A = _init_a(this);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors/static-public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors/static-public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors/static-public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-accessors/static-public/output.js
@@ -3,7 +3,7 @@ const dec = () => {};
 _computedKey = 'c';
 class Foo {
   static {
-    [_init_a, _init_b, _init_computedKey, _initStatic] = babelHelpers.applyDecs2203(this, [[dec, 6, "a"], [dec, 6, "b"], [dec, 6, _computedKey]], []);
+    [_init_a, _init_b, _init_computedKey, _initStatic] = babelHelpers.applyDecs2203R(this, [[dec, 6, "a"], [dec, 6, "b"], [dec, 6, _computedKey]], []).e;
     _initStatic(this);
   }
   static #A = _init_a(this);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-assumption-constantSuper/super-in-nested-constructor-expression/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-assumption-constantSuper/super-in-nested-constructor-expression/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-assumption-constantSuper/super-in-nested-constructor-expression/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-assumption-constantSuper/super-in-nested-constructor-expression/output.js
@@ -3,7 +3,7 @@ const dec = () => {};
 let _Foo;
 class Foo extends Bar {
   static {
-    [_Foo, _initClass] = babelHelpers.applyDecs2203(this, [], [dec]);
+    [_Foo, _initClass] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
   }
   constructor() {
     let foo = super();
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-assumption-constantSuper/super-in-private-accessor/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-assumption-constantSuper/super-in-private-accessor/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-assumption-constantSuper/super-in-private-accessor/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-assumption-constantSuper/super-in-private-accessor/output.js
@@ -2,9 +2,9 @@ var _call_x, _initProto;
 const dec = () => {};
 class Foo extends Bar {
   static {
-    [_call_x, _initProto] = babelHelpers.applyDecs2203(this, [[dec, 3, "x", function () {
+    [_call_x, _initProto] = babelHelpers.applyDecs2203R(this, [[dec, 3, "x", function () {
       return Bar.prototype.foo.call(this);
-    }]], []);
+    }]], []).e;
   }
   constructor(...args) {
     super(...args);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-assumption-constantSuper/super-in-private-method/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-assumption-constantSuper/super-in-private-method/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-assumption-constantSuper/super-in-private-method/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-assumption-constantSuper/super-in-private-method/output.js
@@ -2,9 +2,9 @@ var _call_x, _initProto;
 const dec = () => {};
 class Foo extends Bar {
   static {
-    [_call_x, _initProto] = babelHelpers.applyDecs2203(this, [[dec, 2, "x", function () {
+    [_call_x, _initProto] = babelHelpers.applyDecs2203R(this, [[dec, 2, "x", function () {
       return Bar.prototype.foo.call(this);
-    }]], []);
+    }]], []).e;
   }
   constructor(...args) {
     super(...args);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/decorator-access-modified-fields/exec.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/decorator-access-modified-fields/exec.js
new file mode 100644
--- /dev/null
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/decorator-access-modified-fields/exec.js
@@ -0,0 +1,14 @@
+var value;
+const classDec = (Class) => {
+  value = (new Class).m;
+  return Class
+};
+
+const memberDec = () => () => 42;
+
+@classDec
+class C {
+  @memberDec m;
+}
+
+expect(value).toBe(42);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/decorator-access-modified-fields/input.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/decorator-access-modified-fields/input.js
new file mode 100644
--- /dev/null
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/decorator-access-modified-fields/input.js
@@ -0,0 +1,12 @@
+var value;
+const classDec = (Class) => {
+  value = (new Class).p;
+  return Class
+};
+
+const memberDec = () => () => 42;
+
+@classDec
+class C {
+  @memberDec m;
+}
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/decorator-access-modified-fields/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/decorator-access-modified-fields/output.js
new file mode 100644
--- /dev/null
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/decorator-access-modified-fields/output.js
@@ -0,0 +1,18 @@
+var _initClass, _init_m;
+var value;
+const classDec = Class => {
+  value = new Class().p;
+  return Class;
+};
+const memberDec = () => () => 42;
+let _C;
+class C {
+  constructor() {
+    babelHelpers.defineProperty(this, "m", _init_m(this));
+  }
+}
+({
+  e: [_init_m],
+  c: [_C, _initClass]
+} = babelHelpers.applyDecs2203R(C, [[memberDec, 0, "m"]], [classDec]));
+_initClass();
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/decorator-access-modified-methods/exec.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/decorator-access-modified-methods/exec.js
new file mode 100644
--- /dev/null
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/decorator-access-modified-methods/exec.js
@@ -0,0 +1,14 @@
+var value;
+const classDec = (Class) => {
+  value = (new Class).m();
+  return Class
+};
+
+const memberDec = () => () => 42;
+
+@classDec
+class C {
+  @memberDec m() {};
+}
+
+expect(value).toBe(42);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/decorator-access-modified-methods/input.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/decorator-access-modified-methods/input.js
new file mode 100644
--- /dev/null
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/decorator-access-modified-methods/input.js
@@ -0,0 +1,12 @@
+var value;
+const classDec = (Class) => {
+  value = (new Class).m();
+  return Class
+};
+
+const memberDec = () => () => 42;
+
+@classDec
+class C {
+  @memberDec m() {};
+}
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/decorator-access-modified-methods/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/decorator-access-modified-methods/output.js
new file mode 100644
--- /dev/null
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/decorator-access-modified-methods/output.js
@@ -0,0 +1,19 @@
+var _initClass, _initProto;
+var value;
+const classDec = Class => {
+  value = new Class().m();
+  return Class;
+};
+const memberDec = () => () => 42;
+let _C;
+class C {
+  constructor(...args) {
+    _initProto(this);
+  }
+  m() {}
+}
+({
+  e: [_initProto],
+  c: [_C, _initClass]
+} = babelHelpers.applyDecs2203R(C, [[memberDec, 2, "m"]], [classDec]));
+_initClass();
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/expressions-static-blocks/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/expressions-static-blocks/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/expressions-static-blocks/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/expressions-static-blocks/output.js
@@ -6,7 +6,7 @@ const A = (new (_temp = class extends babelHelpers.identity {
   }
 }, (() => {
   class A {}
-  [_A, _initClass] = babelHelpers.applyDecs2203(A, [], [dec]);
+  [_A, _initClass] = babelHelpers.applyDecs2203R(A, [], [dec]).c;
 })(), _temp)(), _A);
 const B = (new (_temp2 = class extends babelHelpers.identity {
   constructor() {
@@ -14,7 +14,7 @@ const B = (new (_temp2 = class extends babelHelpers.identity {
   }
 }, (() => {
   class C {}
-  [_C, _initClass2] = babelHelpers.applyDecs2203(C, [], [dec]);
+  [_C, _initClass2] = babelHelpers.applyDecs2203R(C, [], [dec]).c;
 })(), _temp2)(), _C);
 const D = (new (_temp3 = class extends babelHelpers.identity {
   constructor() {
@@ -22,32 +22,32 @@ const D = (new (_temp3 = class extends babelHelpers.identity {
   }
 }, (() => {
   class D {}
-  [_D, _initClass3] = babelHelpers.applyDecs2203(D, [], [dec]);
+  [_D, _initClass3] = babelHelpers.applyDecs2203R(D, [], [dec]).c;
 })(), _temp3)(), _D);
 const E = ((new (_temp4 = class extends babelHelpers.identity {
   constructor() {
     super(_decorated_class), (() => {})(), _initClass4();
   }
-}, (_class2 = class {}, [_decorated_class, _initClass4] = babelHelpers.applyDecs2203(_class2, [], [dec])), _temp4)(), _decorated_class), 123);
+}, (_class2 = class {}, [_decorated_class, _initClass4] = babelHelpers.applyDecs2203R(_class2, [], [dec]).c), _temp4)(), _decorated_class), 123);
 const F = [(new (_temp5 = class extends babelHelpers.identity {
   constructor() {
     super(_G), (() => {})(), _initClass5();
   }
 }, (() => {
   class G {}
-  [_G, _initClass5] = babelHelpers.applyDecs2203(G, [], [dec]);
+  [_G, _initClass5] = babelHelpers.applyDecs2203R(G, [], [dec]).c;
 })(), _temp5)(), _G), (new (_temp6 = class extends babelHelpers.identity {
   constructor() {
     super(_decorated_class2), (() => {})(), _initClass6();
   }
-}, (_class3 = class {}, [_decorated_class2, _initClass6] = babelHelpers.applyDecs2203(_class3, [], [dec])), _temp6)(), _decorated_class2)];
+}, (_class3 = class {}, [_decorated_class2, _initClass6] = babelHelpers.applyDecs2203R(_class3, [], [dec]).c), _temp6)(), _decorated_class2)];
 const H = (new (_temp7 = class extends babelHelpers.identity {
   constructor() {
     super(_H), (() => {})(), _initClass7();
   }
 }, (() => {
   class H extends I {}
-  [_H, _initClass7] = babelHelpers.applyDecs2203(H, [], [dec]);
+  [_H, _initClass7] = babelHelpers.applyDecs2203R(H, [], [dec]).c;
 })(), _temp7)(), _H);
 const J = (new (_temp8 = class extends babelHelpers.identity {
   constructor() {
@@ -55,7 +55,7 @@ const J = (new (_temp8 = class extends babelHelpers.identity {
   }
 }, (() => {
   class K extends L {}
-  [_K, _initClass8] = babelHelpers.applyDecs2203(K, [], [dec]);
+  [_K, _initClass8] = babelHelpers.applyDecs2203R(K, [], [dec]).c;
 })(), _temp8)(), _K);
 function classFactory() {
   var _initClass9, _decorated_class3, _temp9, _class5;
@@ -63,5 +63,5 @@ function classFactory() {
     constructor() {
       super(_decorated_class3), (() => {})(), _initClass9();
     }
-  }, (_class5 = class {}, [_decorated_class3, _initClass9] = babelHelpers.applyDecs2203(_class5, [], [dec])), _temp9)(), _decorated_class3;
+  }, (_class5 = class {}, [_decorated_class3, _initClass9] = babelHelpers.applyDecs2203R(_class5, [], [dec]).c), _temp9)(), _decorated_class3;
 }
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/expressions/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/expressions/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/expressions/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/expressions/output.js
@@ -1,13 +1,13 @@
 var _initClass, _A, _class, _initClass2, _C, _class2, _initClass3, _D, _class3, _initClass4, _decorated_class, _class4, _initClass5, _G, _class5, _initClass6, _decorated_class2, _class6, _initClass7, _H, _class7, _initClass8, _K, _class8;
 const dec = () => {};
-const A = ((_class = class A {}, [_A, _initClass] = babelHelpers.applyDecs2203(_class, [], [dec]), _initClass()), _A);
-const B = ((_class2 = class C {}, [_C, _initClass2] = babelHelpers.applyDecs2203(_class2, [], [dec]), _initClass2()), _C);
-const D = ((_class3 = class D {}, [_D, _initClass3] = babelHelpers.applyDecs2203(_class3, [], [dec]), _initClass3()), _D);
-const E = (((_class4 = class {}, [_decorated_class, _initClass4] = babelHelpers.applyDecs2203(_class4, [], [dec]), _initClass4()), _decorated_class), 123);
-const F = [((_class5 = class G {}, [_G, _initClass5] = babelHelpers.applyDecs2203(_class5, [], [dec]), _initClass5()), _G), ((_class6 = class {}, [_decorated_class2, _initClass6] = babelHelpers.applyDecs2203(_class6, [], [dec]), _initClass6()), _decorated_class2)];
-const H = ((_class7 = class H extends I {}, [_H, _initClass7] = babelHelpers.applyDecs2203(_class7, [], [dec]), _initClass7()), _H);
-const J = ((_class8 = class K extends L {}, [_K, _initClass8] = babelHelpers.applyDecs2203(_class8, [], [dec]), _initClass8()), _K);
+const A = ((_class = class A {}, [_A, _initClass] = babelHelpers.applyDecs2203R(_class, [], [dec]).c, _initClass()), _A);
+const B = ((_class2 = class C {}, [_C, _initClass2] = babelHelpers.applyDecs2203R(_class2, [], [dec]).c, _initClass2()), _C);
+const D = ((_class3 = class D {}, [_D, _initClass3] = babelHelpers.applyDecs2203R(_class3, [], [dec]).c, _initClass3()), _D);
+const E = (((_class4 = class {}, [_decorated_class, _initClass4] = babelHelpers.applyDecs2203R(_class4, [], [dec]).c, _initClass4()), _decorated_class), 123);
+const F = [((_class5 = class G {}, [_G, _initClass5] = babelHelpers.applyDecs2203R(_class5, [], [dec]).c, _initClass5()), _G), ((_class6 = class {}, [_decorated_class2, _initClass6] = babelHelpers.applyDecs2203R(_class6, [], [dec]).c, _initClass6()), _decorated_class2)];
+const H = ((_class7 = class H extends I {}, [_H, _initClass7] = babelHelpers.applyDecs2203R(_class7, [], [dec]).c, _initClass7()), _H);
+const J = ((_class8 = class K extends L {}, [_K, _initClass8] = babelHelpers.applyDecs2203R(_class8, [], [dec]).c, _initClass8()), _K);
 function classFactory() {
   var _initClass9, _decorated_class3, _class9;
-  return (_class9 = class {}, [_decorated_class3, _initClass9] = babelHelpers.applyDecs2203(_class9, [], [dec]), _initClass9()), _decorated_class3;
+  return (_class9 = class {}, [_decorated_class3, _initClass9] = babelHelpers.applyDecs2203R(_class9, [], [dec]).c, _initClass9()), _decorated_class3;
 }
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/inheritance/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/inheritance/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/inheritance/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/inheritance/output.js
@@ -3,9 +3,9 @@ const dec1 = () => {};
 const dec2 = () => {};
 let _Bar;
 class Bar {}
-[_Bar, _initClass] = babelHelpers.applyDecs2203(Bar, [], [dec1]);
+[_Bar, _initClass] = babelHelpers.applyDecs2203R(Bar, [], [dec1]).c;
 _initClass();
 let _Foo;
 class Foo extends _Bar {}
-[_Foo, _initClass2] = babelHelpers.applyDecs2203(Foo, [], [dec2]);
+[_Foo, _initClass2] = babelHelpers.applyDecs2203R(Foo, [], [dec2]).c;
 _initClass2();
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/initializers/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/initializers/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/initializers/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/initializers/output.js
@@ -7,7 +7,7 @@ new (_temp = class extends babelHelpers.identity {
   }
 }, (() => {
   class Foo {}
-  [_Foo, _initClass] = babelHelpers.applyDecs2203(Foo, [], [dec]);
+  [_Foo, _initClass] = babelHelpers.applyDecs2203R(Foo, [], [dec]).c;
 })(), _temp)();
 let _Bar;
 new (_temp2 = class extends babelHelpers.identity {
@@ -18,5 +18,5 @@ new (_temp2 = class extends babelHelpers.identity {
   }
 }, (() => {
   class Bar extends _Foo {}
-  [_Bar, _initClass2] = babelHelpers.applyDecs2203(Bar, [], [dec]);
+  [_Bar, _initClass2] = babelHelpers.applyDecs2203R(Bar, [], [dec]).c;
 })(), _temp2)();
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/replacement-static-installed-on-correct-class/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/replacement-static-installed-on-correct-class/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/replacement-static-installed-on-correct-class/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/replacement-static-installed-on-correct-class/output.js
@@ -16,6 +16,6 @@ new (_x = /*#__PURE__*/new WeakMap(), _m = /*#__PURE__*/new WeakSet(), (_temp =
   class Foo {
     static m() {}
   }
-  [_Foo, _initClass] = babelHelpers.applyDecs2203(Foo, [], [dec]);
+  [_Foo, _initClass] = babelHelpers.applyDecs2203R(Foo, [], [dec]).c;
 })(), _temp))();
 function _m2() {}
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/replacement-static-this/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/replacement-static-this/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/replacement-static-this/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/replacement-static-this/output.js
@@ -11,5 +11,5 @@ new (_temp = class extends babelHelpers.identity {
   }
 }, (() => {
   class Foo {}
-  [_Foo, _initClass] = babelHelpers.applyDecs2203(Foo, [], [dec]);
+  [_Foo, _initClass] = babelHelpers.applyDecs2203R(Foo, [], [dec]).c;
 })(), _temp)();
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/replacement-with-expr/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/replacement-with-expr/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/replacement-with-expr/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/replacement-with-expr/output.js
@@ -4,5 +4,5 @@ const Foo = ((_class = class Bar {
   constructor() {
     babelHelpers.defineProperty(this, "bar", new _Bar());
   }
-}, [_Bar, _initClass] = babelHelpers.applyDecs2203(_class, [], [dec]), _initClass()), _Bar);
+}, [_Bar, _initClass] = babelHelpers.applyDecs2203R(_class, [], [dec]).c, _initClass()), _Bar);
 const foo = new Foo();
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/replacement/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/replacement/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/replacement/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes--to-es2015/replacement/output.js
@@ -7,6 +7,6 @@ new (_temp = class extends babelHelpers.identity {
   }
 }, (() => {
   class Foo {}
-  [_Foo, _initClass] = babelHelpers.applyDecs2203(Foo, [], [dec]);
+  [_Foo, _initClass] = babelHelpers.applyDecs2203R(Foo, [], [dec]).c;
 })(), _temp)();
 const foo = new _Foo();
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-fields/exec.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-fields/exec.js
new file mode 100644
--- /dev/null
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-fields/exec.js
@@ -0,0 +1,14 @@
+var value;
+const classDec = (Class) => {
+  value = (new Class).m;
+  return Class
+};
+
+const memberDec = () => () => 42;
+
+@classDec
+class C {
+  @memberDec m;
+}
+
+expect(value).toBe(42);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-fields/input.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-fields/input.js
new file mode 100644
--- /dev/null
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-fields/input.js
@@ -0,0 +1,12 @@
+var value;
+const classDec = (Class) => {
+  value = (new Class).p;
+  return Class
+};
+
+const memberDec = () => () => 42;
+
+@classDec
+class C {
+  @memberDec m;
+}
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-fields/options.json b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-fields/options.json
new file mode 100644
--- /dev/null
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-fields/options.json
@@ -0,0 +1,3 @@
+{
+  "minNodeVersion": "16.11.0"
+}
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-fields/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-fields/output.js
new file mode 100644
--- /dev/null
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-fields/output.js
@@ -0,0 +1,20 @@
+var _initClass, _init_m;
+var value;
+const classDec = Class => {
+  value = new Class().p;
+  return Class;
+};
+const memberDec = () => () => 42;
+let _C;
+class C {
+  static {
+    ({
+      e: [_init_m],
+      c: [_C, _initClass]
+    } = babelHelpers.applyDecs2203R(this, [[memberDec, 0, "m"]], [classDec]));
+  }
+  m = _init_m(this);
+  static {
+    _initClass();
+  }
+}
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-methods/exec.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-methods/exec.js
new file mode 100644
--- /dev/null
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-methods/exec.js
@@ -0,0 +1,14 @@
+var value;
+const classDec = (Class) => {
+  value = (new Class).m();
+  return Class
+};
+
+const memberDec = () => () => 42;
+
+@classDec
+class C {
+  @memberDec m() {};
+}
+
+expect(value).toBe(42);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-methods/input.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-methods/input.js
new file mode 100644
--- /dev/null
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-methods/input.js
@@ -0,0 +1,12 @@
+var value;
+const classDec = (Class) => {
+  value = (new Class).m();
+  return Class
+};
+
+const memberDec = () => () => 42;
+
+@classDec
+class C {
+  @memberDec m() {};
+}
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-methods/options.json b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-methods/options.json
new file mode 100644
--- /dev/null
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-methods/options.json
@@ -0,0 +1,3 @@
+{
+  "minNodeVersion": "16.11.0"
+}
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-methods/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-methods/output.js
new file mode 100644
--- /dev/null
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/decorator-access-modified-methods/output.js
@@ -0,0 +1,23 @@
+var _initClass, _initProto;
+var value;
+const classDec = Class => {
+  value = new Class().m();
+  return Class;
+};
+const memberDec = () => () => 42;
+let _C;
+class C {
+  static {
+    ({
+      e: [_initProto],
+      c: [_C, _initClass]
+    } = babelHelpers.applyDecs2203R(this, [[memberDec, 2, "m"]], [classDec]));
+  }
+  constructor(...args) {
+    _initProto(this);
+  }
+  m() {}
+  static {
+    _initClass();
+  }
+}
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/expressions-static-blocks/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/expressions-static-blocks/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/expressions-static-blocks/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/expressions-static-blocks/output.js
@@ -4,7 +4,7 @@ const A = (new class extends babelHelpers.identity {
   static {
     class A {
       static {
-        [_A, _initClass] = babelHelpers.applyDecs2203(this, [], [dec]);
+        [_A, _initClass] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
       }
     }
   }
@@ -16,7 +16,7 @@ const B = (new class extends babelHelpers.identity {
   static {
     class C {
       static {
-        [_C, _initClass2] = babelHelpers.applyDecs2203(this, [], [dec]);
+        [_C, _initClass2] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
       }
     }
   }
@@ -28,7 +28,7 @@ const D = (new class extends babelHelpers.identity {
   static {
     class D {
       static {
-        [_D, _initClass3] = babelHelpers.applyDecs2203(this, [], [dec]);
+        [_D, _initClass3] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
       }
     }
   }
@@ -40,7 +40,7 @@ const E = ((new class extends babelHelpers.identity {
   static {
     (class {
       static {
-        [_decorated_class, _initClass4] = babelHelpers.applyDecs2203(this, [], [dec]);
+        [_decorated_class, _initClass4] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
       }
     });
   }
@@ -52,7 +52,7 @@ const F = [(new class extends babelHelpers.identity {
   static {
     class G {
       static {
-        [_G, _initClass5] = babelHelpers.applyDecs2203(this, [], [dec]);
+        [_G, _initClass5] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
       }
     }
   }
@@ -63,7 +63,7 @@ const F = [(new class extends babelHelpers.identity {
   static {
     (class {
       static {
-        [_decorated_class2, _initClass6] = babelHelpers.applyDecs2203(this, [], [dec]);
+        [_decorated_class2, _initClass6] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
       }
     });
   }
@@ -75,7 +75,7 @@ const H = (new class extends babelHelpers.identity {
   static {
     class H extends I {
       static {
-        [_H, _initClass7] = babelHelpers.applyDecs2203(this, [], [dec]);
+        [_H, _initClass7] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
       }
     }
   }
@@ -87,7 +87,7 @@ const J = (new class extends babelHelpers.identity {
   static {
     class K extends L {
       static {
-        [_K, _initClass8] = babelHelpers.applyDecs2203(this, [], [dec]);
+        [_K, _initClass8] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
       }
     }
   }
@@ -101,7 +101,7 @@ function classFactory() {
     static {
       (class {
         static {
-          [_decorated_class3, _initClass9] = babelHelpers.applyDecs2203(this, [], [dec]);
+          [_decorated_class3, _initClass9] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
         }
       });
     }
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/expressions/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/expressions/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/expressions/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/expressions/output.js
@@ -2,7 +2,7 @@ var _initClass, _A, _initClass2, _C, _initClass3, _D, _initClass4, _decorated_cl
 const dec = () => {};
 const A = (class A {
   static {
-    [_A, _initClass] = babelHelpers.applyDecs2203(this, [], [dec]);
+    [_A, _initClass] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
   }
   static {
     _initClass();
@@ -10,7 +10,7 @@ const A = (class A {
 }, _A);
 const B = (class C {
   static {
-    [_C, _initClass2] = babelHelpers.applyDecs2203(this, [], [dec]);
+    [_C, _initClass2] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
   }
   static {
     _initClass2();
@@ -18,7 +18,7 @@ const B = (class C {
 }, _C);
 const D = (class D {
   static {
-    [_D, _initClass3] = babelHelpers.applyDecs2203(this, [], [dec]);
+    [_D, _initClass3] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
   }
   static {
     _initClass3();
@@ -26,7 +26,7 @@ const D = (class D {
 }, _D);
 const E = ((class {
   static {
-    [_decorated_class, _initClass4] = babelHelpers.applyDecs2203(this, [], [dec]);
+    [_decorated_class, _initClass4] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
   }
   static {
     _initClass4();
@@ -34,14 +34,14 @@ const E = ((class {
 }, _decorated_class), 123);
 const F = [(class G {
   static {
-    [_G, _initClass5] = babelHelpers.applyDecs2203(this, [], [dec]);
+    [_G, _initClass5] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
   }
   static {
     _initClass5();
   }
 }, _G), (class {
   static {
-    [_decorated_class2, _initClass6] = babelHelpers.applyDecs2203(this, [], [dec]);
+    [_decorated_class2, _initClass6] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
   }
   static {
     _initClass6();
@@ -49,7 +49,7 @@ const F = [(class G {
 }, _decorated_class2)];
 const H = (class H extends I {
   static {
-    [_H, _initClass7] = babelHelpers.applyDecs2203(this, [], [dec]);
+    [_H, _initClass7] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
   }
   static {
     _initClass7();
@@ -57,7 +57,7 @@ const H = (class H extends I {
 }, _H);
 const J = (class K extends L {
   static {
-    [_K, _initClass8] = babelHelpers.applyDecs2203(this, [], [dec]);
+    [_K, _initClass8] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
   }
   static {
     _initClass8();
@@ -67,7 +67,7 @@ function classFactory() {
   var _initClass9, _decorated_class3;
   return class {
     static {
-      [_decorated_class3, _initClass9] = babelHelpers.applyDecs2203(this, [], [dec]);
+      [_decorated_class3, _initClass9] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
     }
     static {
       _initClass9();
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/inheritance/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/inheritance/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/inheritance/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/inheritance/output.js
@@ -4,7 +4,7 @@ let _Bar;
 _dec = dec1;
 class Bar {
   static {
-    [_Bar, _initClass] = babelHelpers.applyDecs2203(this, [], [_dec]);
+    [_Bar, _initClass] = babelHelpers.applyDecs2203R(this, [], [_dec]).c;
   }
   static {
     _initClass();
@@ -14,7 +14,7 @@ let _Foo;
 _dec2 = dec2;
 class Foo extends _Bar {
   static {
-    [_Foo, _initClass2] = babelHelpers.applyDecs2203(this, [], [_dec2]);
+    [_Foo, _initClass2] = babelHelpers.applyDecs2203R(this, [], [_dec2]).c;
   }
   static {
     _initClass2();
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/initializers/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/initializers/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/initializers/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/initializers/output.js
@@ -5,7 +5,7 @@ new class extends babelHelpers.identity {
   static {
     class Foo {
       static {
-        [_Foo, _initClass] = babelHelpers.applyDecs2203(this, [], [dec]);
+        [_Foo, _initClass] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
       }
     }
   }
@@ -19,7 +19,7 @@ new class extends babelHelpers.identity {
   static {
     class Bar extends _Foo {
       static {
-        [_Bar, _initClass2] = babelHelpers.applyDecs2203(this, [], [dec]);
+        [_Bar, _initClass2] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
       }
     }
   }
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/replacement-static-installed-on-correct-class/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/replacement-static-installed-on-correct-class/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/replacement-static-installed-on-correct-class/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/replacement-static-installed-on-correct-class/output.js
@@ -6,7 +6,7 @@ new class extends babelHelpers.identity {
   static {
     class Foo {
       static {
-        [_Foo, _initClass] = babelHelpers.applyDecs2203(this, [], [dec]);
+        [_Foo, _initClass] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
       }
       static m() {}
     }
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/replacement-static-this/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/replacement-static-this/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/replacement-static-this/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/replacement-static-this/output.js
@@ -5,7 +5,7 @@ new class extends babelHelpers.identity {
   static {
     class Foo {
       static {
-        [_Foo, _initClass] = babelHelpers.applyDecs2203(this, [], [dec]);
+        [_Foo, _initClass] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
       }
     }
   }
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/replacement-with-expr/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/replacement-with-expr/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/replacement-with-expr/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/replacement-with-expr/output.js
@@ -2,7 +2,7 @@ var _initClass, _Bar;
 const dec = () => {};
 const Foo = (class Bar {
   static {
-    [_Bar, _initClass] = babelHelpers.applyDecs2203(this, [], [dec]);
+    [_Bar, _initClass] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
   }
   bar = new _Bar();
   static {
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/replacement/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/replacement/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/replacement/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-classes/replacement/output.js
@@ -5,7 +5,7 @@ new class extends babelHelpers.identity {
   static {
     class Foo {
       static {
-        [_Foo, _initClass] = babelHelpers.applyDecs2203(this, [], [dec]);
+        [_Foo, _initClass] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
       }
     }
   }
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys--to-es2015/computed-keys-same-ast/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys--to-es2015/computed-keys-same-ast/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys--to-es2015/computed-keys-same-ast/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys--to-es2015/computed-keys-same-ast/output.js
@@ -13,4 +13,4 @@ class Foo {
     return 2;
   }
 }
-[_initProto] = babelHelpers.applyDecs2203(Foo, [[dec, 2, _computedKey], [dec, 2, _computedKey2]], []);
+[_initProto] = babelHelpers.applyDecs2203R(Foo, [[dec, 2, _computedKey], [dec, 2, _computedKey2]], []).e;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys--to-es2015/computed-keys-same-value/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys--to-es2015/computed-keys-same-value/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys--to-es2015/computed-keys-same-value/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys--to-es2015/computed-keys-same-value/output.js
@@ -13,4 +13,4 @@ class Foo {
     return 2;
   }
 }
-[_initProto] = babelHelpers.applyDecs2203(Foo, [[dec, 2, _computedKey], [dec, 2, _computedKey2]], []);
+[_initProto] = babelHelpers.applyDecs2203R(Foo, [[dec, 2, _computedKey], [dec, 2, _computedKey2]], []).e;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys--to-es2015/method-and-field/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys--to-es2015/method-and-field/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys--to-es2015/method-and-field/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys--to-es2015/method-and-field/output.js
@@ -8,4 +8,4 @@ class Foo {
     return 1;
   }
 }
-[_init_a, _initProto] = babelHelpers.applyDecs2203(Foo, [[dec, 2, "a"], [dec, 0, "a"]], []);
+[_init_a, _initProto] = babelHelpers.applyDecs2203R(Foo, [[dec, 2, "a"], [dec, 0, "a"]], []).e;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys--to-es2015/methods-with-same-key/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys--to-es2015/methods-with-same-key/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys--to-es2015/methods-with-same-key/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys--to-es2015/methods-with-same-key/output.js
@@ -11,4 +11,4 @@ class Foo {
     return 2;
   }
 }
-[_initProto] = babelHelpers.applyDecs2203(Foo, [[dec, 2, "a"], [dec, 2, "a"]], []);
+[_initProto] = babelHelpers.applyDecs2203R(Foo, [[dec, 2, "a"], [dec, 2, "a"]], []).e;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys/computed-keys-same-ast/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys/computed-keys-same-ast/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys/computed-keys-same-ast/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys/computed-keys-same-ast/output.js
@@ -4,7 +4,7 @@ _computedKey = getKey();
 _computedKey2 = getKey();
 class Foo {
   static {
-    [_initProto] = babelHelpers.applyDecs2203(this, [[dec, 2, _computedKey], [dec, 2, _computedKey2]], []);
+    [_initProto] = babelHelpers.applyDecs2203R(this, [[dec, 2, _computedKey], [dec, 2, _computedKey2]], []).e;
   }
   constructor(...args) {
     _initProto(this);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys/computed-keys-same-value/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys/computed-keys-same-value/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys/computed-keys-same-value/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys/computed-keys-same-value/output.js
@@ -4,7 +4,7 @@ _computedKey = getKeyI();
 _computedKey2 = getKeyJ();
 class Foo {
   static {
-    [_initProto] = babelHelpers.applyDecs2203(this, [[dec, 2, _computedKey], [dec, 2, _computedKey2]], []);
+    [_initProto] = babelHelpers.applyDecs2203R(this, [[dec, 2, _computedKey], [dec, 2, _computedKey2]], []).e;
   }
   constructor(...args) {
     _initProto(this);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys/method-and-field/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys/method-and-field/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys/method-and-field/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys/method-and-field/output.js
@@ -2,7 +2,7 @@ var _init_a, _initProto;
 const dec = () => {};
 class Foo {
   static {
-    [_init_a, _initProto] = babelHelpers.applyDecs2203(this, [[dec, 2, "a"], [dec, 0, "a"]], []);
+    [_init_a, _initProto] = babelHelpers.applyDecs2203R(this, [[dec, 2, "a"], [dec, 0, "a"]], []).e;
   }
   a = (_initProto(this), _init_a(this, 123));
   a() {
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys/methods-with-same-key/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys/methods-with-same-key/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys/methods-with-same-key/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-duplicated-keys/methods-with-same-key/output.js
@@ -2,7 +2,7 @@ var _initProto;
 const dec = () => {};
 class Foo {
   static {
-    [_initProto] = babelHelpers.applyDecs2203(this, [[dec, 2, "a"], [dec, 2, "a"]], []);
+    [_initProto] = babelHelpers.applyDecs2203R(this, [[dec, 2, "a"], [dec, 2, "a"]], []).e;
   }
   constructor(...args) {
     _initProto(this);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-exported/default-anonymous/output.mjs b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-exported/default-anonymous/output.mjs
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-exported/default-anonymous/output.mjs
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-exported/default-anonymous/output.mjs
@@ -3,7 +3,7 @@ let _A;
 _dec = dec;
 class A {
   static {
-    [_A, _initClass] = babelHelpers.applyDecs2203(this, [], [_dec]);
+    [_A, _initClass] = babelHelpers.applyDecs2203R(this, [], [_dec]).c;
   }
   static {
     _initClass();
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-exported/default-named/output.mjs b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-exported/default-named/output.mjs
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-exported/default-named/output.mjs
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-exported/default-named/output.mjs
@@ -3,7 +3,7 @@ let _default2;
 _dec = dec;
 class _default {
   static {
-    [_default2, _initClass] = babelHelpers.applyDecs2203(this, [], [_dec]);
+    [_default2, _initClass] = babelHelpers.applyDecs2203R(this, [], [_dec]).c;
   }
   static {
     _initClass();
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-exported/member-decorator/output.mjs b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-exported/member-decorator/output.mjs
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-exported/member-decorator/output.mjs
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-exported/member-decorator/output.mjs
@@ -2,7 +2,7 @@ var _dec, _init_x;
 _dec = dec;
 export class A {
   static {
-    [_init_x] = babelHelpers.applyDecs2203(this, [[_dec, 0, "x"]], []);
+    [_init_x] = babelHelpers.applyDecs2203R(this, [[_dec, 0, "x"]], []).e;
   }
   x = _init_x(this);
 }
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-exported/named/output.mjs b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-exported/named/output.mjs
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-exported/named/output.mjs
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-exported/named/output.mjs
@@ -3,7 +3,7 @@ let _A;
 _dec = dec;
 class A {
   static {
-    [_A, _initClass] = babelHelpers.applyDecs2203(this, [], [_dec]);
+    [_A, _initClass] = babelHelpers.applyDecs2203R(this, [], [_dec]).c;
   }
   static {
     _initClass();
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields--to-es2015/private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields--to-es2015/private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields--to-es2015/private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields--to-es2015/private/output.js
@@ -14,7 +14,7 @@ class Foo {
     });
   }
 }
-[_init_a, _init_b] = babelHelpers.applyDecs2203(Foo, [[dec, 0, "a", function () {
+[_init_a, _init_b] = babelHelpers.applyDecs2203R(Foo, [[dec, 0, "a", function () {
   return babelHelpers.classPrivateFieldGet(this, _a);
 }, function (value) {
   babelHelpers.classPrivateFieldSet(this, _a, value);
@@ -22,4 +22,4 @@ class Foo {
   return babelHelpers.classPrivateFieldGet(this, _b);
 }, function (value) {
   babelHelpers.classPrivateFieldSet(this, _b, value);
-}]], []);
+}]], []).e;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields--to-es2015/public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields--to-es2015/public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields--to-es2015/public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields--to-es2015/public/output.js
@@ -8,4 +8,4 @@ class Foo {
     babelHelpers.defineProperty(this, _computedKey, _init_computedKey(this, 456));
   }
 }
-[_init_a, _init_b, _init_computedKey] = babelHelpers.applyDecs2203(Foo, [[dec, 0, "a"], [dec, 0, "b"], [dec, 0, _computedKey]], []);
+[_init_a, _init_b, _init_computedKey] = babelHelpers.applyDecs2203R(Foo, [[dec, 0, "a"], [dec, 0, "b"], [dec, 0, _computedKey]], []).e;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields--to-es2015/static-private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields--to-es2015/static-private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields--to-es2015/static-private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields--to-es2015/static-private/output.js
@@ -1,7 +1,7 @@
 var _init_a, _init_b;
 const dec = () => {};
 class Foo {}
-[_init_a, _init_b] = babelHelpers.applyDecs2203(Foo, [[dec, 5, "a", function () {
+[_init_a, _init_b] = babelHelpers.applyDecs2203R(Foo, [[dec, 5, "a", function () {
   return babelHelpers.classStaticPrivateFieldSpecGet(this, Foo, _a);
 }, function (value) {
   babelHelpers.classStaticPrivateFieldSpecSet(this, Foo, _a, value);
@@ -9,7 +9,7 @@ class Foo {}
   return babelHelpers.classStaticPrivateFieldSpecGet(this, Foo, _b);
 }, function (value) {
   babelHelpers.classStaticPrivateFieldSpecSet(this, Foo, _b, value);
-}]], []);
+}]], []).e;
 var _a = {
   writable: true,
   value: _init_a(Foo)
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields--to-es2015/static-public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields--to-es2015/static-public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields--to-es2015/static-public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields--to-es2015/static-public/output.js
@@ -2,7 +2,7 @@ var _init_a, _init_b, _computedKey, _init_computedKey;
 const dec = () => {};
 _computedKey = 'c';
 class Foo {}
-[_init_a, _init_b, _init_computedKey] = babelHelpers.applyDecs2203(Foo, [[dec, 5, "a"], [dec, 5, "b"], [dec, 5, _computedKey]], []);
+[_init_a, _init_b, _init_computedKey] = babelHelpers.applyDecs2203R(Foo, [[dec, 5, "a"], [dec, 5, "b"], [dec, 5, _computedKey]], []).e;
 babelHelpers.defineProperty(Foo, "a", _init_a(Foo));
 babelHelpers.defineProperty(Foo, "b", _init_b(Foo, 123));
 babelHelpers.defineProperty(Foo, _computedKey, _init_computedKey(Foo, 456));
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields/private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields/private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields/private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields/private/output.js
@@ -2,7 +2,7 @@ var _init_a, _init_b;
 const dec = () => {};
 class Foo {
   static {
-    [_init_a, _init_b] = babelHelpers.applyDecs2203(this, [[dec, 0, "a", function () {
+    [_init_a, _init_b] = babelHelpers.applyDecs2203R(this, [[dec, 0, "a", function () {
       return this.#a;
     }, function (value) {
       this.#a = value;
@@ -10,7 +10,7 @@ class Foo {
       return this.#b;
     }, function (value) {
       this.#b = value;
-    }]], []);
+    }]], []).e;
   }
   #a = _init_a(this);
   #b = _init_b(this, 123);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields/public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields/public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields/public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields/public/output.js
@@ -3,7 +3,7 @@ const dec = () => {};
 _computedKey = 'c';
 class Foo {
   static {
-    [_init_a, _init_b, _init_computedKey] = babelHelpers.applyDecs2203(this, [[dec, 0, "a"], [dec, 0, "b"], [dec, 0, _computedKey]], []);
+    [_init_a, _init_b, _init_computedKey] = babelHelpers.applyDecs2203R(this, [[dec, 0, "a"], [dec, 0, "b"], [dec, 0, _computedKey]], []).e;
   }
   a = _init_a(this);
   b = _init_b(this, 123);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields/static-private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields/static-private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields/static-private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields/static-private/output.js
@@ -2,7 +2,7 @@ var _init_a, _init_b;
 const dec = () => {};
 class Foo {
   static {
-    [_init_a, _init_b] = babelHelpers.applyDecs2203(this, [[dec, 5, "a", function () {
+    [_init_a, _init_b] = babelHelpers.applyDecs2203R(this, [[dec, 5, "a", function () {
       return this.#a;
     }, function (value) {
       this.#a = value;
@@ -10,7 +10,7 @@ class Foo {
       return this.#b;
     }, function (value) {
       this.#b = value;
-    }]], []);
+    }]], []).e;
   }
   static #a = _init_a(this);
   static #b = _init_b(this, 123);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields/static-public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields/static-public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields/static-public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-fields/static-public/output.js
@@ -3,7 +3,7 @@ const dec = () => {};
 _computedKey = 'c';
 class Foo {
   static {
-    [_init_a, _init_b, _init_computedKey] = babelHelpers.applyDecs2203(this, [[dec, 5, "a"], [dec, 5, "b"], [dec, 5, _computedKey]], []);
+    [_init_a, _init_b, _init_computedKey] = babelHelpers.applyDecs2203R(this, [[dec, 5, "a"], [dec, 5, "b"], [dec, 5, _computedKey]], []).e;
   }
   static a = _init_a(this);
   static b = _init_b(this, 123);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters--to-es2015/private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters--to-es2015/private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters--to-es2015/private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters--to-es2015/private/output.js
@@ -17,6 +17,6 @@ class Foo {
 function _get_a() {
   return _call_a(this);
 }
-[_call_a, _initProto] = babelHelpers.applyDecs2203(Foo, [[dec, 3, "a", function () {
+[_call_a, _initProto] = babelHelpers.applyDecs2203R(Foo, [[dec, 3, "a", function () {
   return this.value;
-}]], []);
+}]], []).e;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters--to-es2015/public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters--to-es2015/public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters--to-es2015/public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters--to-es2015/public/output.js
@@ -13,4 +13,4 @@ class Foo {
     return this.value;
   }
 }
-[_initProto] = babelHelpers.applyDecs2203(Foo, [[dec, 3, "a"], [dec, 3, _computedKey]], []);
+[_initProto] = babelHelpers.applyDecs2203R(Foo, [[dec, 3, "a"], [dec, 3, _computedKey]], []).e;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters--to-es2015/static-private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters--to-es2015/static-private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters--to-es2015/static-private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters--to-es2015/static-private/output.js
@@ -13,9 +13,9 @@ var _a = {
   set: void 0
 };
 (() => {
-  [_call_a, _initStatic] = babelHelpers.applyDecs2203(Foo, [[dec, 8, "a", function () {
+  [_call_a, _initStatic] = babelHelpers.applyDecs2203R(Foo, [[dec, 8, "a", function () {
     return this.value;
-  }]], []);
+  }]], []).e;
   _initStatic(Foo);
 })();
 babelHelpers.defineProperty(Foo, "value", 1);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters--to-es2015/static-public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters--to-es2015/static-public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters--to-es2015/static-public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters--to-es2015/static-public/output.js
@@ -10,7 +10,7 @@ class Foo {
   }
 }
 (() => {
-  [_initStatic] = babelHelpers.applyDecs2203(Foo, [[dec, 8, "a"], [dec, 8, _computedKey]], []);
+  [_initStatic] = babelHelpers.applyDecs2203R(Foo, [[dec, 8, "a"], [dec, 8, _computedKey]], []).e;
   _initStatic(Foo);
 })();
 babelHelpers.defineProperty(Foo, "value", 1);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters--to-es2015/private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters--to-es2015/private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters--to-es2015/private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters--to-es2015/private/output.js
@@ -23,8 +23,8 @@ function _get_a() {
 function _set_a(v) {
   _call_a2(this, v);
 }
-[_call_a, _call_a2, _initProto] = babelHelpers.applyDecs2203(Foo, [[dec, 3, "a", function () {
+[_call_a, _call_a2, _initProto] = babelHelpers.applyDecs2203R(Foo, [[dec, 3, "a", function () {
   return this.value;
 }], [dec, 4, "a", function (v) {
   this.value = v;
-}]], []);
+}]], []).e;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters--to-es2015/public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters--to-es2015/public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters--to-es2015/public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters--to-es2015/public/output.js
@@ -20,4 +20,4 @@ class Foo {
     this.value = v;
   }
 }
-[_initProto] = babelHelpers.applyDecs2203(Foo, [[dec, 3, "a"], [dec, 4, "a"], [dec, 3, _computedKey], [dec, 4, _computedKey2]], []);
+[_initProto] = babelHelpers.applyDecs2203R(Foo, [[dec, 3, "a"], [dec, 4, "a"], [dec, 3, _computedKey], [dec, 4, _computedKey2]], []).e;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters--to-es2015/static-private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters--to-es2015/static-private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters--to-es2015/static-private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters--to-es2015/static-private/output.js
@@ -19,11 +19,11 @@ var _a = {
   set: _set_a
 };
 (() => {
-  [_call_a, _call_a2, _initStatic] = babelHelpers.applyDecs2203(Foo, [[dec, 8, "a", function () {
+  [_call_a, _call_a2, _initStatic] = babelHelpers.applyDecs2203R(Foo, [[dec, 8, "a", function () {
     return this.value;
   }], [dec, 9, "a", function (v) {
     this.value = v;
-  }]], []);
+  }]], []).e;
   _initStatic(Foo);
 })();
 babelHelpers.defineProperty(Foo, "value", 1);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters--to-es2015/static-public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters--to-es2015/static-public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters--to-es2015/static-public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters--to-es2015/static-public/output.js
@@ -17,7 +17,7 @@ class Foo {
   }
 }
 (() => {
-  [_initStatic] = babelHelpers.applyDecs2203(Foo, [[dec, 8, "a"], [dec, 9, "a"], [dec, 8, _computedKey], [dec, 9, _computedKey2]], []);
+  [_initStatic] = babelHelpers.applyDecs2203R(Foo, [[dec, 8, "a"], [dec, 9, "a"], [dec, 8, _computedKey], [dec, 9, _computedKey2]], []).e;
   _initStatic(Foo);
 })();
 babelHelpers.defineProperty(Foo, "value", 1);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters/private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters/private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters/private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters/private/output.js
@@ -2,11 +2,11 @@ var _call_a, _call_a2, _initProto;
 const dec = () => {};
 class Foo {
   static {
-    [_call_a, _call_a2, _initProto] = babelHelpers.applyDecs2203(this, [[dec, 3, "a", function () {
+    [_call_a, _call_a2, _initProto] = babelHelpers.applyDecs2203R(this, [[dec, 3, "a", function () {
       return this.value;
     }], [dec, 4, "a", function (v) {
       this.value = v;
-    }]], []);
+    }]], []).e;
   }
   constructor(...args) {
     _initProto(this);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters/public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters/public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters/public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters/public/output.js
@@ -4,7 +4,7 @@ _computedKey = 'b';
 _computedKey2 = 'b';
 class Foo {
   static {
-    [_initProto] = babelHelpers.applyDecs2203(this, [[dec, 3, "a"], [dec, 4, "a"], [dec, 3, _computedKey], [dec, 4, _computedKey2]], []);
+    [_initProto] = babelHelpers.applyDecs2203R(this, [[dec, 3, "a"], [dec, 4, "a"], [dec, 3, _computedKey], [dec, 4, _computedKey2]], []).e;
   }
   constructor(...args) {
     _initProto(this);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters/static-private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters/static-private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters/static-private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters/static-private/output.js
@@ -2,11 +2,11 @@ var _call_a, _call_a2, _initStatic;
 const dec = () => {};
 class Foo {
   static {
-    [_call_a, _call_a2, _initStatic] = babelHelpers.applyDecs2203(this, [[dec, 8, "a", function () {
+    [_call_a, _call_a2, _initStatic] = babelHelpers.applyDecs2203R(this, [[dec, 8, "a", function () {
       return this.value;
     }], [dec, 9, "a", function (v) {
       this.value = v;
-    }]], []);
+    }]], []).e;
     _initStatic(this);
   }
   static value = 1;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters/static-public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters/static-public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters/static-public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters-and-setters/static-public/output.js
@@ -4,7 +4,7 @@ _computedKey = 'b';
 _computedKey2 = 'b';
 class Foo {
   static {
-    [_initStatic] = babelHelpers.applyDecs2203(this, [[dec, 8, "a"], [dec, 9, "a"], [dec, 8, _computedKey], [dec, 9, _computedKey2]], []);
+    [_initStatic] = babelHelpers.applyDecs2203R(this, [[dec, 8, "a"], [dec, 9, "a"], [dec, 8, _computedKey], [dec, 9, _computedKey2]], []).e;
     _initStatic(this);
   }
   static value = 1;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters/private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters/private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters/private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters/private/output.js
@@ -2,9 +2,9 @@ var _call_a, _initProto;
 const dec = () => {};
 class Foo {
   static {
-    [_call_a, _initProto] = babelHelpers.applyDecs2203(this, [[dec, 3, "a", function () {
+    [_call_a, _initProto] = babelHelpers.applyDecs2203R(this, [[dec, 3, "a", function () {
       return this.value;
-    }]], []);
+    }]], []).e;
   }
   constructor(...args) {
     _initProto(this);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters/public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters/public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters/public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters/public/output.js
@@ -3,7 +3,7 @@ const dec = () => {};
 _computedKey = 'b';
 class Foo {
   static {
-    [_initProto] = babelHelpers.applyDecs2203(this, [[dec, 3, "a"], [dec, 3, _computedKey]], []);
+    [_initProto] = babelHelpers.applyDecs2203R(this, [[dec, 3, "a"], [dec, 3, _computedKey]], []).e;
   }
   constructor(...args) {
     _initProto(this);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters/static-private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters/static-private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters/static-private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters/static-private/output.js
@@ -2,9 +2,9 @@ var _call_a, _initStatic;
 const dec = () => {};
 class Foo {
   static {
-    [_call_a, _initStatic] = babelHelpers.applyDecs2203(this, [[dec, 8, "a", function () {
+    [_call_a, _initStatic] = babelHelpers.applyDecs2203R(this, [[dec, 8, "a", function () {
       return this.value;
-    }]], []);
+    }]], []).e;
     _initStatic(this);
   }
   static value = 1;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters/static-public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters/static-public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters/static-public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-getters/static-public/output.js
@@ -3,7 +3,7 @@ const dec = () => {};
 _computedKey = 'b';
 class Foo {
   static {
-    [_initStatic] = babelHelpers.applyDecs2203(this, [[dec, 8, "a"], [dec, 8, _computedKey]], []);
+    [_initStatic] = babelHelpers.applyDecs2203R(this, [[dec, 8, "a"], [dec, 8, _computedKey]], []).e;
     _initStatic(this);
   }
   static value = 1;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods--to-es2015/private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods--to-es2015/private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods--to-es2015/private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods--to-es2015/private/output.js
@@ -14,6 +14,6 @@ class Foo {
     return babelHelpers.classPrivateFieldGet(this, _a).call(this);
   }
 }
-[_call_a, _initProto] = babelHelpers.applyDecs2203(Foo, [[dec, 2, "a", function () {
+[_call_a, _initProto] = babelHelpers.applyDecs2203R(Foo, [[dec, 2, "a", function () {
   return this.value;
-}]], []);
+}]], []).e;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods--to-es2015/public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods--to-es2015/public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods--to-es2015/public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods--to-es2015/public/output.js
@@ -13,4 +13,4 @@ class Foo {
     return this.value;
   }
 }
-[_initProto] = babelHelpers.applyDecs2203(Foo, [[dec, 2, "a"], [dec, 2, _computedKey]], []);
+[_initProto] = babelHelpers.applyDecs2203R(Foo, [[dec, 2, "a"], [dec, 2, _computedKey]], []).e;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods--to-es2015/static-private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods--to-es2015/static-private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods--to-es2015/static-private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods--to-es2015/static-private/output.js
@@ -6,9 +6,9 @@ class Foo {
   }
 }
 (() => {
-  [_call_a, _initStatic] = babelHelpers.applyDecs2203(Foo, [[dec, 7, "a", function () {
+  [_call_a, _initStatic] = babelHelpers.applyDecs2203R(Foo, [[dec, 7, "a", function () {
     return this.value;
-  }]], []);
+  }]], []).e;
   _initStatic(Foo);
 })();
 var _a = {
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods--to-es2015/static-public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods--to-es2015/static-public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods--to-es2015/static-public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods--to-es2015/static-public/output.js
@@ -10,7 +10,7 @@ class Foo {
   }
 }
 (() => {
-  [_initStatic] = babelHelpers.applyDecs2203(Foo, [[dec, 7, "a"], [dec, 7, _computedKey]], []);
+  [_initStatic] = babelHelpers.applyDecs2203R(Foo, [[dec, 7, "a"], [dec, 7, _computedKey]], []).e;
   _initStatic(Foo);
 })();
 babelHelpers.defineProperty(Foo, "value", 1);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods/private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods/private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods/private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods/private/output.js
@@ -2,9 +2,9 @@ var _call_a, _initProto;
 const dec = () => {};
 class Foo {
   static {
-    [_call_a, _initProto] = babelHelpers.applyDecs2203(this, [[dec, 2, "a", function () {
+    [_call_a, _initProto] = babelHelpers.applyDecs2203R(this, [[dec, 2, "a", function () {
       return this.value;
-    }]], []);
+    }]], []).e;
   }
   constructor(...args) {
     _initProto(this);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods/public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods/public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods/public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods/public/output.js
@@ -3,7 +3,7 @@ const dec = () => {};
 _computedKey = 'b';
 class Foo {
   static {
-    [_initProto] = babelHelpers.applyDecs2203(this, [[dec, 2, "a"], [dec, 2, _computedKey]], []);
+    [_initProto] = babelHelpers.applyDecs2203R(this, [[dec, 2, "a"], [dec, 2, _computedKey]], []).e;
   }
   constructor(...args) {
     _initProto(this);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods/static-private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods/static-private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods/static-private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods/static-private/output.js
@@ -2,9 +2,9 @@ var _call_a, _initStatic;
 const dec = () => {};
 class Foo {
   static {
-    [_call_a, _initStatic] = babelHelpers.applyDecs2203(this, [[dec, 7, "a", function () {
+    [_call_a, _initStatic] = babelHelpers.applyDecs2203R(this, [[dec, 7, "a", function () {
       return this.value;
-    }]], []);
+    }]], []).e;
     _initStatic(this);
   }
   static #a = _call_a;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods/static-public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods/static-public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods/static-public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-methods/static-public/output.js
@@ -3,7 +3,7 @@ const dec = () => {};
 _computedKey = 'b';
 class Foo {
   static {
-    [_initStatic] = babelHelpers.applyDecs2203(this, [[dec, 7, "a"], [dec, 7, _computedKey]], []);
+    [_initStatic] = babelHelpers.applyDecs2203R(this, [[dec, 7, "a"], [dec, 7, _computedKey]], []).e;
     _initStatic(this);
   }
   static value = 1;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc--to-es2015/initProto-existing-derived-constructor/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc--to-es2015/initProto-existing-derived-constructor/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc--to-es2015/initProto-existing-derived-constructor/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc--to-es2015/initProto-existing-derived-constructor/output.js
@@ -9,4 +9,4 @@ class A extends B {
   }
   method() {}
 }
-[_initProto] = babelHelpers.applyDecs2203(A, [[_dec, 2, "method"]], []);
+[_initProto] = babelHelpers.applyDecs2203R(A, [[_dec, 2, "method"]], []).e;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc--to-es2015/valid-expression-formats/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc--to-es2015/valid-expression-formats/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc--to-es2015/valid-expression-formats/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc--to-es2015/valid-expression-formats/output.js
@@ -25,8 +25,11 @@ class Foo {
       constructor() {
         babelHelpers.defineProperty(this, "bar", _init_bar(this));
       }
-    }, [_init_bar] = babelHelpers.applyDecs2203(_class, [[_dec9, 0, "bar"]], []), _class);
+    }, [_init_bar] = babelHelpers.applyDecs2203R(_class, [[_dec9, 0, "bar"]], []).e, _class);
   }
 }
-[_initProto, _Foo, _initClass] = babelHelpers.applyDecs2203(Foo, [[[dec, _dec5, _dec6, _dec7, _dec8], 2, "method"]], [dec, _dec, _dec2, _dec3, _dec4]);
+({
+  e: [_initProto],
+  c: [_Foo, _initClass]
+} = babelHelpers.applyDecs2203R(Foo, [[[dec, _dec5, _dec6, _dec7, _dec8], 2, "method"]], [dec, _dec, _dec2, _dec3, _dec4]));
 _initClass();
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/all-decorators/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/all-decorators/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/all-decorators/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/all-decorators/output.js
@@ -5,7 +5,10 @@ new class extends babelHelpers.identity {
   static {
     class Class {
       static {
-        [_init_m, _call_o, _call_p, _call_q, _init_r, _get_r, _set_r, _init_d, _call_f, _call_g, _call_g2, _init_h, _get_h, _set_h, _init_i, _init_n, _init_a, _init_e, _initProto, _initStatic, _Class, _initClass] = babelHelpers.applyDecs2203(this, [[dec, 7, "j"], [dec, 8, "k"], [dec, 9, "l"], [dec, 6, "m"], [dec, 7, "o", function () {}], [dec, 8, "p", function () {}], [dec, 9, "q", function (v) {}], [dec, 6, "r", function () {
+        ({
+          e: [_init_m, _call_o, _call_p, _call_q, _init_r, _get_r, _set_r, _init_d, _call_f, _call_g, _call_g2, _init_h, _get_h, _set_h, _init_i, _init_n, _init_a, _init_e, _initProto, _initStatic],
+          c: [_Class, _initClass]
+        } = babelHelpers.applyDecs2203R(this, [[dec, 7, "j"], [dec, 8, "k"], [dec, 9, "l"], [dec, 6, "m"], [dec, 7, "o", function () {}], [dec, 8, "p", function () {}], [dec, 9, "q", function (v) {}], [dec, 6, "r", function () {
           return this.#D;
         }, function (value) {
           this.#D = value;
@@ -21,7 +24,7 @@ new class extends babelHelpers.identity {
           return this.#e;
         }, function (value) {
           this.#e = value;
-        }]], [dec]);
+        }]], [dec]));
         _initStatic(this);
       }
       #f = _call_f;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/initProto-existing-derived-constructor-multiple-super/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/initProto-existing-derived-constructor-multiple-super/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/initProto-existing-derived-constructor-multiple-super/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/initProto-existing-derived-constructor-multiple-super/output.js
@@ -3,7 +3,7 @@ const dec = () => {};
 _dec = deco;
 class A extends B {
   static {
-    [_initProto] = babelHelpers.applyDecs2203(this, [[_dec, 2, "method"]], []);
+    [_initProto] = babelHelpers.applyDecs2203R(this, [[_dec, 2, "method"]], []).e;
   }
   constructor() {
     if (Math.random() > 0.5) {
@@ -17,7 +17,7 @@ class A extends B {
 _dec2 = deco;
 class C extends B {
   static {
-    [_initProto2] = babelHelpers.applyDecs2203(this, [[_dec2, 2, "method"]], []);
+    [_initProto2] = babelHelpers.applyDecs2203R(this, [[_dec2, 2, "method"]], []).e;
   }
   constructor() {
     try {
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/initProto-existing-derived-constructor/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/initProto-existing-derived-constructor/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/initProto-existing-derived-constructor/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/initProto-existing-derived-constructor/output.js
@@ -2,7 +2,7 @@ var _initProto;
 const dec = () => {};
 class A extends B {
   static {
-    [_initProto] = babelHelpers.applyDecs2203(this, [[dec, 2, "method"]], []);
+    [_initProto] = babelHelpers.applyDecs2203R(this, [[dec, 2, "method"]], []).e;
   }
   constructor() {
     let a = 2;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/super-in-nested-constructor-expression/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/super-in-nested-constructor-expression/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/super-in-nested-constructor-expression/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/super-in-nested-constructor-expression/output.js
@@ -3,7 +3,7 @@ const dec = () => {};
 let _Foo;
 class Foo extends Bar {
   static {
-    [_Foo, _initClass] = babelHelpers.applyDecs2203(this, [], [dec]);
+    [_Foo, _initClass] = babelHelpers.applyDecs2203R(this, [], [dec]).c;
   }
   constructor() {
     let foo = super();
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/super-in-private-accessor/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/super-in-private-accessor/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/super-in-private-accessor/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/super-in-private-accessor/output.js
@@ -2,9 +2,9 @@ var _call_x, _initProto;
 const dec = () => {};
 class Foo extends Bar {
   static {
-    [_call_x, _initProto] = babelHelpers.applyDecs2203(this, [[dec, 3, "x", function () {
+    [_call_x, _initProto] = babelHelpers.applyDecs2203R(this, [[dec, 3, "x", function () {
       return babelHelpers.get(babelHelpers.getPrototypeOf(Foo), "foo", this).call(this);
-    }]], []);
+    }]], []).e;
   }
   constructor(...args) {
     super(...args);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/super-in-private-method/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/super-in-private-method/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/super-in-private-method/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/super-in-private-method/output.js
@@ -2,9 +2,9 @@ var _call_x, _initProto;
 const dec = () => {};
 class Foo extends Bar {
   static {
-    [_call_x, _initProto] = babelHelpers.applyDecs2203(this, [[dec, 2, "x", function () {
+    [_call_x, _initProto] = babelHelpers.applyDecs2203R(this, [[dec, 2, "x", function () {
       return babelHelpers.get(babelHelpers.getPrototypeOf(Foo), "foo", this).call(this);
-    }]], []);
+    }]], []).e;
   }
   constructor(...args) {
     super(...args);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/valid-expression-formats/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/valid-expression-formats/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/valid-expression-formats/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-misc/valid-expression-formats/output.js
@@ -11,7 +11,10 @@ _dec7 = arbitrary + expr;
 _dec8 = array[expr];
 class Foo {
   static {
-    [_initProto, _Foo, _initClass] = babelHelpers.applyDecs2203(this, [[[dec, _dec5, _dec6, _dec7, _dec8], 2, "method"]], [dec, _dec, _dec2, _dec3, _dec4]);
+    ({
+      e: [_initProto],
+      c: [_Foo, _initClass]
+    } = babelHelpers.applyDecs2203R(this, [[[dec, _dec5, _dec6, _dec7, _dec8], 2, "method"]], [dec, _dec, _dec2, _dec3, _dec4]));
   }
   constructor(...args) {
     _initProto(this);
@@ -22,7 +25,7 @@ class Foo {
     var _dec9, _init_bar;
     return _dec9 = this.#a, class Nested {
       static {
-        [_init_bar] = babelHelpers.applyDecs2203(this, [[_dec9, 0, "bar"]], []);
+        [_init_bar] = babelHelpers.applyDecs2203R(this, [[_dec9, 0, "bar"]], []).e;
       }
       bar = _init_bar(this);
     };
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters--to-es2015/private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters--to-es2015/private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters--to-es2015/private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters--to-es2015/private/output.js
@@ -17,6 +17,6 @@ class Foo {
 function _set_a(v) {
   _call_a(this, v);
 }
-[_call_a, _initProto] = babelHelpers.applyDecs2203(Foo, [[dec, 4, "a", function (v) {
+[_call_a, _initProto] = babelHelpers.applyDecs2203R(Foo, [[dec, 4, "a", function (v) {
   return this.value = v;
-}]], []);
+}]], []).e;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters--to-es2015/public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters--to-es2015/public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters--to-es2015/public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters--to-es2015/public/output.js
@@ -13,4 +13,4 @@ class Foo {
     return this.value = v;
   }
 }
-[_initProto] = babelHelpers.applyDecs2203(Foo, [[dec, 4, "a"], [dec, 4, _computedKey]], []);
+[_initProto] = babelHelpers.applyDecs2203R(Foo, [[dec, 4, "a"], [dec, 4, _computedKey]], []).e;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters--to-es2015/static-private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters--to-es2015/static-private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters--to-es2015/static-private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters--to-es2015/static-private/output.js
@@ -13,9 +13,9 @@ var _a = {
   set: _set_a
 };
 (() => {
-  [_call_a, _initStatic] = babelHelpers.applyDecs2203(Foo, [[dec, 9, "a", function (v) {
+  [_call_a, _initStatic] = babelHelpers.applyDecs2203R(Foo, [[dec, 9, "a", function (v) {
     return this.value = v;
-  }]], []);
+  }]], []).e;
   _initStatic(Foo);
 })();
 babelHelpers.defineProperty(Foo, "value", 1);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters--to-es2015/static-public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters--to-es2015/static-public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters--to-es2015/static-public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters--to-es2015/static-public/output.js
@@ -10,7 +10,7 @@ class Foo {
   }
 }
 (() => {
-  [_initStatic] = babelHelpers.applyDecs2203(Foo, [[dec, 9, "a"], [dec, 9, _computedKey]], []);
+  [_initStatic] = babelHelpers.applyDecs2203R(Foo, [[dec, 9, "a"], [dec, 9, _computedKey]], []).e;
   _initStatic(Foo);
 })();
 babelHelpers.defineProperty(Foo, "value", 1);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters/private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters/private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters/private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters/private/output.js
@@ -2,9 +2,9 @@ var _call_a, _initProto;
 const dec = () => {};
 class Foo {
   static {
-    [_call_a, _initProto] = babelHelpers.applyDecs2203(this, [[dec, 4, "a", function (v) {
+    [_call_a, _initProto] = babelHelpers.applyDecs2203R(this, [[dec, 4, "a", function (v) {
       return this.value = v;
-    }]], []);
+    }]], []).e;
   }
   constructor(...args) {
     _initProto(this);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters/public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters/public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters/public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters/public/output.js
@@ -3,7 +3,7 @@ const dec = () => {};
 _computedKey = 'b';
 class Foo {
   static {
-    [_initProto] = babelHelpers.applyDecs2203(this, [[dec, 4, "a"], [dec, 4, _computedKey]], []);
+    [_initProto] = babelHelpers.applyDecs2203R(this, [[dec, 4, "a"], [dec, 4, _computedKey]], []).e;
   }
   constructor(...args) {
     _initProto(this);
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters/static-private/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters/static-private/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters/static-private/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters/static-private/output.js
@@ -2,9 +2,9 @@ var _call_a, _initStatic;
 const dec = () => {};
 class Foo {
   static {
-    [_call_a, _initStatic] = babelHelpers.applyDecs2203(this, [[dec, 9, "a", function (v) {
+    [_call_a, _initStatic] = babelHelpers.applyDecs2203R(this, [[dec, 9, "a", function (v) {
       return this.value = v;
-    }]], []);
+    }]], []).e;
     _initStatic(this);
   }
   static value = 1;
diff --git a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters/static-public/output.js b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters/static-public/output.js
--- a/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters/static-public/output.js
+++ b/packages/babel-plugin-proposal-decorators/test/fixtures/2022-03-setters/static-public/output.js
@@ -3,7 +3,7 @@ const dec = () => {};
 _computedKey = 'b';
 class Foo {
   static {
-    [_initStatic] = babelHelpers.applyDecs2203(this, [[dec, 9, "a"], [dec, 9, _computedKey]], []);
+    [_initStatic] = babelHelpers.applyDecs2203R(this, [[dec, 9, "a"], [dec, 9, _computedKey]], []).e;
     _initStatic(this);
   }
   static value = 1;

[Bug]: Stage 3 decorators: initializers are undefined in Custom Element constructors
### 💻

- [ ] Would you like to work on a fix?

### How are you using Babel?

babel-loader (webpack)

### Input code

```js
const el = document.createElement('foo-el')

document.body.append(el)

function element(name) {
  return (Class) => {
    customElements.define(name, Class) // Uncaught TypeError: undefined is not a function
  }
}

function attribute(_, ctx) {
  return (initial) => initial
}

@element('foo-el')
class Foo extends HTMLElement {
  @attribute foo = 123
}
```

### Configuration file name

babel.config.json

### Configuration

```js
module.exports = {
	plugins: [
		['@babel/plugin-transform-typescript', {allowDeclareFields: true}],
		['@babel/plugin-proposal-decorators', {version: '2022-03'}],
		['@babel/plugin-proposal-class-static-block'],
	],

	presets: [
		['@babel/preset-typescript', {isTSX: true, allExtensions: true, onlyRemoveTypeImports: true}],
		['babel-preset-solid'],
	]
}
```

### Current and expected behavior

Initializers in the output are `undefined` when `constructor` runs during the `customElements.define()` call (element upgrade) inside the `@element` decorator.

### Environment

```
  System:
    OS: macOS 13.0.1
  Binaries:
    Node: 18.12.1 - ~/.n-node-versions/bin/node
    npm: 8.19.3 - ~/.npm-packages/bin/npm
  npmPackages:
    @babel/cli: 7.18.10 => 7.18.10 
    @babel/core: 7.19.1 => 7.19.1 
    @babel/plugin-proposal-class-static-block: 7.18.6 => 7.18.6 
    @babel/plugin-proposal-decorators: 7.19.1 => 7.19.1 
    @babel/preset-typescript: 7.18.6 => 7.18.6 
    @babel/runtime: 7.19.0 => 7.19.0 
    babel-loader: 8.2.5 => 8.2.5 
    babel-preset-solid: 1.5.4 => 1.5.4 
    webpack: 5.74.0 => 5.74.0 
```

### Possible solution

_No response_

### Additional context

_No response_

Hey @trusktr! We really appreciate you taking the time to report an issue. The collaborators on this project attempt to help as many people as possible, but we're a limited number of volunteers, so it's possible this won't be addressed swiftly.

If you need any help, or just have general Babel or JavaScript questions, we have a vibrant [Slack community](https://babeljs.slack.com) that typically always has someone willing to help. You can sign-up [here](https://slack.babeljs.io/) for an invite.
Unable to make a simple reproduction yet. Here's my attempt:

https://codesandbox.io/s/babel-7-decorators-boilerplate-forked-cy2i01?file=/.babelrc

but it gives the error

```
Class fields are not enabled
```
I can't [reproduce in repl](https://babeljs.io/repl#?browsers=chrome%20100&build=&builtIns=false&corejs=3.21&spec=false&loose=false&code_lz=MYewdgzgLgBApgGxgXhgExMArgWzmKAOmACc4BDKOAUQTjwIAoByAMxBAFpFmBKAKH4ZsDIgCMQaAJ6FyABzn40jRAP6ssYYFACW4eHVGMw5PLxgBvfjBhkoWEmBiMAwgnIQI55AD5L1mxhsaBAcWnp8KAhCNDhWHTA4Y1M4ABoYNw8vAIBffjz1TW09J0ooEh0xLCpGAH107QAPcysbOwcnRgSdXXIEbz9u3oR8wQABRAimNg5uBD4YAHpF201dPHgSEhASfmB3TxgAMQ54RqowNAgYAAkAFQBZABlw0X8bMbKKqqoYdhAUDAAIwAJgAzPkgA&debug=false&forceAllTransforms=false&shippedProposals=false&circleciRepo=&evaluate=false&fileSize=false&timeTravel=false&sourceType=module&lineWrap=true&presets=env%2Cstage-3%2Ctypescript&prettier=false&targets=&version=7.20.12&externalPlugins=%40babel%2Fplugin-proposal-decorators%407.20.7&assumptions=%7B%7D), unable to set options for plugins.
https://babeljs.io/repl#?browsers=chrome%20100&build=&builtIns=false&corejs=3.21&spec=false&loose=false&code_lz=MYewdgzgLgBApgGxgXhgExMArgWzmKAOmACc4BDKOAUQTjwIAoByAMxBAFpFmBKAKH4ZsDIgCMQaAJ6FyABzn40jRAP6ssYYFACW4eHVGMw5PLxgBvfjBhkoWEmBiMAwgnIQI55AD5L1mxhsaBAcWnp8KAhCNDhWHTA4Y1M4ABoYNw8vAIBffjz1TW09J0ooEh0xLCpGAH107QAPcysbOwcnRgSdXXIEbz9u3oR8wQABRAimNg5uBD4YAHpF201dPHgSEhASfmB3TxgAMQ54RqowNAgYAAkAFQBZABlw0X8bMbKKqqoYdhAUDAAIwAJgAzPkgA&debug=false&forceAllTransforms=false&shippedProposals=false&circleciRepo=&evaluate=false&fileSize=false&timeTravel=false&sourceType=module&lineWrap=true&presets=stage-2&prettier=false&targets=&version=7.20.12&externalPlugins=&assumptions=%7B%7D

It seems so?
Here is a reproduction without `customElements`:

```js
function classDec(Class) {
  return new Class, Class;
}

function memberDec(value) {
  return value;
}

@classDec 
class Foo {
  @memberDec foo
}
```

Currently it is transpiled as:
```js
/* other helpers omitted */
function _applyDecs(targetClass, memberDecs, classDecs) {
  var ret = [];
  return applyMemberDecs(ret, targetClass, memberDecs), applyClassDecs(ret, targetClass, classDecs), ret;
}

function classDec(Class) {
  return new Class, Class;
}

function memberDec(value) {
  return value;
}

let _Foo;
class Foo {
  constructor() {
    _defineProperty(this, "foo", _init_foo(this));
  }
}
[_init_foo, _Foo, _initClass] = _applyDecs(Foo, [[memberDec, 0, "foo"]], [classDec]);
_initClass();
```

Evaluating this script will throw "_init_foo is undefined" because we are invoking the initializer in the `Foo` constructor, which is invoked by the class decorator. At this point, the actual `foo` initializer is already in the `ret` of `_applyDecs`, but it is not yet bound to the `_init_foo` because `ret` is not yet returned from `_applyDecs`.

To address this issue, we can make `_applyDecs` a 2-pass iterator, which yielded the prepared initializers, and then modified classes. etc. Alternatively we can adopt the TS approach, which emits a member decorator applying pass and a class pass.
I wonder if there is a workaround I can use for now. I'm trying to convert a custom element library to stage 3 decorators, and have some unit tests to ensure that pre-upgrade JS properties are handled properly when upgrade happens.

Something like this:

```js
		const fooEl = document.createElement('foo-element') as FooElement
		expect(fooEl).toBeInstanceOf(HTMLElement)

		document.body.append(fooEl)
		fooEl.foo = 1
		fooEl.setAttribute('bar', 2)

		@element('foo-element')
		class FooElement extends Element {
			@attribute foo = 3
			@attribute bar = 4
		}

		expect(fooEl).toBeInstanceOf(FooElement)
		// ... some other checks to ensure things were handled well ...
```

One thing I can do is use `queueMicrotask` to delay the `customElements.define()` call, and mention a temporary caveat that elements won't be defined until next microtask, requiring existing apps to await a microtask for DOM APIs to be available. This is not ideal of course, and might cause unforseen code ordering issues, but a temporary solution.
> One thing I can do is use queueMicrotask to delay the customElements.define() call, and mention a temporary caveat that elements won't be defined until next microtask, requiring existing apps to await a microtask for DOM APIs to be available.

That could work, though of course as you may agree that it is hacky. No worry, I can assure you that bugs in proposal transform will get fixed soon.
> I can assure you that bugs in proposal transform will get fixed soon.

Thank you! 🙏 

Aiming to ship something today nonetheless.

I tried the following but for some reason the error is not caught, still makes it to console:

```js
function element(...) {
  // ...
  try {
    customElements.define(tagName, ElementDecoratorFinisher)
  } catch (e) {
    // this is not reached!
    queueMicrotask(() => customElements.define(tagName, ElementDecoratorFinisher))
  }
}
```

Looks like browsers are doing something funky. This code in Chrome console never logs the catch block:

```js
class MyEl extends HTMLElement {
	foo = __init__foo(123)
}
document.body.append(document.createElement('my-el'))
try {
	console.log('try!')
	customElements.define('my-el', MyEl)
} catch(e) {
	console.log('caught!') // not reached!

	queueMicrotask(() => {
		console.log('try again!')
		window.__init__foo = n => n
		customElements.define('my-el', MyEl)
	})
}
```

But! If we delete the `queueMicrotask`, then the log runs:

```js
class MyEl extends HTMLElement {
	foo = __init__foo(123)
}
document.body.append(document.createElement('my-el'))
try {
	console.log('try!')
	customElements.define('my-el', MyEl)
} catch(e) {
	console.log('caught!') // now it runs!
}
```


packages/babel-plugin-proposal-decorators/test/index.js