Skip to content

Commit

Permalink
Do not define ctx.access.set for setter decorators
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolo-ribaudo committed Feb 6, 2024
1 parent b5fa25e commit 34f7688
Show file tree
Hide file tree
Showing 14 changed files with 47 additions and 5 deletions.
4 changes: 2 additions & 2 deletions packages/babel-helpers/src/helpers-generated.ts
Expand Up @@ -48,10 +48,10 @@ export default Object.freeze({
"7.21.0",
'import checkInRHS from"checkInRHS";import setFunctionName from"setFunctionName";import toPropertyKey from"toPropertyKey";export default function applyDecs2305(e,t,r,n,o,a){function i(e,t,r){return function(n,o){return r&&r(n),e[t].call(n,o)}}function c(e,t){for(var r=0;r<e.length;r++)e[r].call(t);return t}function s(e,t,r,n){if("function"!=typeof e&&(n||void 0!==e))throw new TypeError(t+" must "+(r||"be")+" a function"+(n?"":" or undefined"));return e}function applyDec(e,t,r,n,o,a,c,u,l,f,p,d,h){function m(e){if(!h(e))throw new TypeError("Attempted to access private element on non-instance")}var y,v=t[0],g=t[3],b=!u;if(!b){r||Array.isArray(v)||(v=[v]);var w={},S=[],A=3===o?"get":4===o||d?"set":"value";f?(p||d?w={get:setFunctionName((function(){return g(this)}),n,"get"),set:function(e){t[4](this,e)}}:w[A]=g,p||setFunctionName(w[A],n,2===o?"":A)):p||(w=Object.getOwnPropertyDescriptor(e,n))}for(var P=e,j=v.length-1;j>=0;j-=r?2:1){var D=v[j],E=r?v[j-1]:void 0,I={},O={kind:["field","accessor","method","getter","setter","class"][o],name:n,metadata:a,addInitializer:function(e,t){if(e.v)throw new Error("attempted to call addInitializer after decoration was finished");s(t,"An initializer","be",!0),c.push(t)}.bind(null,I)};try{if(b)(y=s(D.call(E,P,O),"class decorators","return"))&&(P=y);else{var k,F;O.static=l,O.private=f,f?2===o?k=function(e){return m(e),w.value}:(o<4&&(k=i(w,"get",m)),3!==o&&(F=i(w,"set",m))):(k=function(e){return e[n]},(o<2||4===o)&&(F=function(e,t){e[n]=t}));var N=O.access={has:f?h.bind():function(e){return n in e}};if(k&&(N.get=k),F&&(N.set=F),P=D.call(E,d?{get:w.get,set:w.set}:w[A],O),d){if("object"==typeof P&&P)(y=s(P.get,"accessor.get"))&&(w.get=y),(y=s(P.set,"accessor.set"))&&(w.set=y),(y=s(P.init,"accessor.init"))&&S.push(y);else if(void 0!==P)throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0")}else s(P,(p?"field":"method")+" decorators","return")&&(p?S.push(P):w[A]=P)}}finally{I.v=!0}}return(p||d)&&u.push((function(e,t){for(var r=S.length-1;r>=0;r--)t=S[r].call(e,t);return t})),p||b||(f?d?u.push(i(w,"get"),i(w,"set")):u.push(2===o?w[A]:i.call.bind(w[A])):Object.defineProperty(e,n,w)),P}function u(e,t){return Object.defineProperty(e,Symbol.metadata||Symbol.for("Symbol.metadata"),{configurable:!0,enumerable:!0,value:t})}if(arguments.length>=6)var l=a[Symbol.metadata||Symbol.for("Symbol.metadata")];var f=Object.create(null==l?null:l),p=function(e,t,r,n){var o,a,i=[],s=function(t){return checkInRHS(t)===e},u=new Map;function l(e){e&&i.push(c.bind(null,e))}for(var f=0;f<t.length;f++){var p=t[f];if(Array.isArray(p)){var d=p[1],h=p[2],m=p.length>3,y=16&d,v=!!(8&d),g=0==(d&=7),b=h+"/"+v;if(!g&&!m){var w=u.get(b);if(!0===w||3===w&&4!==d||4===w&&3!==d)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: "+h);u.set(b,!(d>2)||d)}applyDec(v?e:e.prototype,p,y,m?"#"+h:toPropertyKey(h),d,n,v?a=a||[]:o=o||[],i,v,m,g,1===d,v&&m?s:r)}}return l(o),l(a),i}(e,t,o,f);return r.length||u(e,f),{e:p,get c(){var t=[];return r.length&&[u(applyDec(e,[r],n,e.name,5,f,t),f),c.bind(null,t,e)]}}}',
),
// size: 2777, gzip size: 1412
// size: 2786, gzip size: 1415
applyDecs2311: helper(
"7.23.0",
'import checkInRHS from"checkInRHS";import setFunctionName from"setFunctionName";import toPropertyKey from"toPropertyKey";export default function applyDecs2311(e,t,n,r,o,i){var a,c,u=Symbol.metadata||Symbol.for("Symbol.metadata"),s=Object.defineProperty,l=n.length;function f(e,t,n,r){for(var o=0;o<e.length;o++)r=e[o].apply(n,t?[r]:[]);return t?r:n}function p(e,t,n,r){if("function"!=typeof e&&(r||void 0!==e))throw new TypeError(t+" must "+(n||"be")+" a function"+(r?"":" or undefined"));return e}function applyDec(e,t,n,r,o,i,u,l,d,m,h,v){function y(e){if(!v(e))throw new TypeError("Attempted to access private element on non-instance")}var g=[].concat(t[0]),b=t[3],w=!u;function S(e,t){return function(n,r){return t&&t(n),j[e].call(n,r)}}if(!w){var j={},D=[],I=3===o?"get":4===o||h?"set":"value";d?(m||h?j={get:setFunctionName((function(){return b(this)}),r,"get"),set:function(e){t[4](this,e)}}:j[I]=b,m||setFunctionName(j[I],r,2===o?"":I)):m||(j=Object.getOwnPropertyDescriptor(e,r))}for(var P=e,k=g.length-1;k>=0;k-=n?2:1){var E=g[k],F=n?g[k-1]:void 0,N={},O={kind:["field","accessor","method","getter","setter","class"][o],name:r,metadata:a,addInitializer:function(e,t){if(e.v)throw new Error("attempted to call addInitializer after decoration was finished");p(t,"An initializer","be",!0),i.push(t)}.bind(null,N)};if(w)c=E.call(F,P,O),N.v=1,p(c,"class decorators","return")&&(P=c);else{var z,H;O.static=l,O.private=d,d?2===o?z=function(e){return y(e),j.value}:(o<4&&(z=S("get",y)),3!==o&&(H=S("set",y))):(z=function(e){return e[r]},(o<2||4===o)&&(H=function(e,t){e[r]=t}));var K=O.access={has:d?v.bind():function(e){return r in e}};if(z&&(K.get=z),H&&(K.set=H),P=E.call(F,h?{get:j.get,set:j.set}:j[I],O),N.v=1,h){if("object"==typeof P&&P)(c=p(P.get,"accessor.get"))&&(j.get=c),(c=p(P.set,"accessor.set"))&&(j.set=c),(c=p(P.init,"accessor.init"))&&D.unshift(c);else if(void 0!==P)throw new TypeError("accessor decorators must return an object with get, set, or init properties or undefined")}else p(P,(m?"field":"method")+" decorators","return")&&(m?D.unshift(P):j[I]=P)}}return(m||h)&&u.push(f.bind(null,D,1),f.bind(null,i,0)),m||w||(d?h?u.splice(-1,0,S("get"),S("set")):u.push(2===o?j[I]:f.call.bind(j[I])):s(e,r,j)),P}function d(e){return s(e,u,{configurable:!0,enumerable:!0,value:a})}return void 0!==i&&(a=i[u]),a=Object.create(null==a?null:a),c=function(){var n,r,i=[];function a(e){e&&i.push(f.bind(null,e,0))}for(var c=0;c<t.length;c++){var u=t[c],s=u[1],l=u[2],p=!!u[3],d=16&s,m=!!(8&s),h=0==(s&=7),v=1===s;applyDec(m?e:e.prototype,u,d,p?"#"+l:toPropertyKey(l),s,h||v?[]:m?r=r||[]:n=n||[],i,m,p,h,v,m&&p?function(t){return checkInRHS(t)===e}:o)}return a(n),a(r),i}(),l||d(e),{e:c,get c(){var t=[];return l&&[d(applyDec(e,[n],r,e.name,5,t)),f.bind(null,t,0,e)]}}}',
'import checkInRHS from"checkInRHS";import setFunctionName from"setFunctionName";import toPropertyKey from"toPropertyKey";export default function applyDecs2311(e,t,n,r,o,i){var a,c,u=Symbol.metadata||Symbol.for("Symbol.metadata"),s=Object.defineProperty,l=n.length;function f(e,t,n,r){for(var o=0;o<e.length;o++)r=e[o].apply(n,t?[r]:[]);return t?r:n}function p(e,t,n,r){if("function"!=typeof e&&(r||void 0!==e))throw new TypeError(t+" must "+(n||"be")+" a function"+(r?"":" or undefined"));return e}function applyDec(e,t,n,r,o,i,u,l,d,m,h,v){function y(e){if(!v(e))throw new TypeError("Attempted to access private element on non-instance")}var g=[].concat(t[0]),b=t[3],w=!u;function S(e,t){return function(n,r){return t&&t(n),j[e].call(n,r)}}if(!w){var j={},D=[],I=3===o?"get":4===o||h?"set":"value";d?(m||h?j={get:setFunctionName((function(){return b(this)}),r,"get"),set:function(e){t[4](this,e)}}:j[I]=b,m||setFunctionName(j[I],r,2===o?"":I)):m||(j=Object.getOwnPropertyDescriptor(e,r))}for(var P=e,k=g.length-1;k>=0;k-=n?2:1){var E=g[k],F=n?g[k-1]:void 0,N={},O={kind:["field","accessor","method","getter","setter","class"][o],name:r,metadata:a,addInitializer:function(e,t){if(e.v)throw new Error("attempted to call addInitializer after decoration was finished");p(t,"An initializer","be",!0),i.push(t)}.bind(null,N)};if(w)c=E.call(F,P,O),N.v=1,p(c,"class decorators","return")&&(P=c);else{var z,H;O.static=l,O.private=d,d?2===o?z=function(e){return y(e),j.value}:(o<4&&(z=S("get",y)),3!==o&&(H=S("set",y))):(4!==o&&(z=function(e){return e[r]}),(o<2||4===o)&&(H=function(e,t){e[r]=t}));var K=O.access={has:d?v.bind():function(e){return r in e}};if(z&&(K.get=z),H&&(K.set=H),P=E.call(F,h?{get:j.get,set:j.set}:j[I],O),N.v=1,h){if("object"==typeof P&&P)(c=p(P.get,"accessor.get"))&&(j.get=c),(c=p(P.set,"accessor.set"))&&(j.set=c),(c=p(P.init,"accessor.init"))&&D.unshift(c);else if(void 0!==P)throw new TypeError("accessor decorators must return an object with get, set, or init properties or undefined")}else p(P,(m?"field":"method")+" decorators","return")&&(m?D.unshift(P):j[I]=P)}}return(m||h)&&u.push(f.bind(null,D,1),f.bind(null,i,0)),m||w||(d?h?u.splice(-1,0,S("get"),S("set")):u.push(2===o?j[I]:f.call.bind(j[I])):s(e,r,j)),P}function d(e){return s(e,u,{configurable:!0,enumerable:!0,value:a})}return void 0!==i&&(a=i[u]),a=Object.create(null==a?null:a),c=function(){var n,r,i=[];function a(e){e&&i.push(f.bind(null,e,0))}for(var c=0;c<t.length;c++){var u=t[c],s=u[1],l=u[2],p=!!u[3],d=16&s,m=!!(8&s),h=0==(s&=7),v=1===s;applyDec(m?e:e.prototype,u,d,p?"#"+l:toPropertyKey(l),s,h||v?[]:m?r=r||[]:n=n||[],i,m,p,h,v,m&&p?function(t){return checkInRHS(t)===e}:o)}return a(n),a(r),i}(),l||d(e),{e:c,get c(){var t=[];return l&&[d(applyDec(e,[n],r,e.name,5,t)),f.bind(null,t,0,e)]}}}',
),
// size: 544, gzip size: 300
asyncGeneratorDelegate: helper(
Expand Down
8 changes: 5 additions & 3 deletions packages/babel-helpers/src/helpers/applyDecs2311.ts
Expand Up @@ -353,9 +353,11 @@ export default /* @no-mangle */ function applyDecs2311(

var get, set;
if (!isPrivate) {
get = function (target: any) {
return target[name];
};
if (kind !== PROP_KIND.SETTER) {
get = function (target: any) {
return target[name];
};
}
if (kind < PROP_KIND.METHOD || kind === PROP_KIND.SETTER) {
set = function (target: any, v: any) {
target[name] = v;
Expand Down
Expand Up @@ -26,6 +26,8 @@ let foo = new Foo();

const aContext = foo['#aContext'];

expect(aContext.access).not.toHaveProperty("set");

expect(aContext.access.has(foo)).toBe(true);
expect(aContext.access.has({})).toBe(false);
expect(aContext.access.has(Object.create(foo))).toBe(false);
Expand Down
Expand Up @@ -28,6 +28,9 @@ let foo = new Foo();
const aContext = foo['aContext'];
const bContext = foo['bContext'];

expect(aContext.access).not.toHaveProperty("set");
expect(bContext.access).not.toHaveProperty("set");

expect(aContext.access.has(foo)).toBe(true);
expect(aContext.access.has({})).toBe(false);
expect(aContext.access.has(Object.create(foo))).toBe(true);
Expand Down
Expand Up @@ -24,6 +24,8 @@ class Foo {

const aContext = Foo['#aContext'];

expect(aContext.access).not.toHaveProperty("set");

expect(aContext.access.has(Foo)).toBe(true);
expect(aContext.access.has({})).toBe(false);
expect(aContext.access.has(Object.create(Foo))).toBe(false);
Expand Down
Expand Up @@ -26,6 +26,9 @@ class Foo {
const aContext = Foo['aContext'];
const bContext = Foo['bContext'];

expect(aContext.access).not.toHaveProperty("set");
expect(bContext.access).not.toHaveProperty("set");

expect(aContext.access.has(Foo)).toBe(true);
expect(aContext.access.has({})).toBe(false);
expect(aContext.access.has(Object.create(Foo))).toBe(true);
Expand Down
@@ -1,5 +1,8 @@
let aContext;

function dec(fn, context) {
expect(fn.name).toEqual(context.name);
if (!aContext) aContext = context;
return function () {
return fn.call(this) + 1;
}
Expand All @@ -20,6 +23,8 @@ class Foo {

let foo = new Foo();

expect(aContext.access).not.toHaveProperty("set");

expect(foo.callA()).toBe(2);
foo.value = 123;
expect(foo.callA()).toBe(124);
@@ -1,5 +1,8 @@
let aContext;

function dec(fn, context) {
expect(fn.name).toEqual(context.name);
if (!aContext) aContext = context;
return function () {
return fn.call(this) + 1;
}
Expand All @@ -21,6 +24,8 @@ class Foo {

let foo = new Foo();

expect(aContext.access).not.toHaveProperty("set");

expect(foo.a()).toBe(2);
expect(foo.b()).toBe(2);
foo.value = 123;
Expand Down
@@ -1,5 +1,8 @@
let aContext;

function dec(fn, context) {
expect(fn.name).toEqual(context.name);
if (!aContext) aContext = context;
return function () {
return fn.call(this) + 1;
}
Expand All @@ -18,6 +21,8 @@ class Foo {
}
}

expect(aContext.access).not.toHaveProperty("set");

expect(Foo.callA()).toBe(2);
Foo.value = 123;
expect(Foo.callA()).toBe(124);
@@ -1,5 +1,8 @@
let aContext;

function dec(fn, context) {
expect(fn.name).toEqual(context.name);
if (!aContext) aContext = context;
return function () {
return fn.call(this) + 1;
}
Expand All @@ -19,6 +22,8 @@ class Foo {
}
}

expect(aContext.access).not.toHaveProperty("set");

expect(Foo.a()).toBe(2);
expect(Foo.b()).toBe(2);
Foo.value = 123;
Expand Down
Expand Up @@ -26,6 +26,8 @@ let foo = new Foo();

const aContext = foo['#aContext'];

expect(aContext.access).not.toHaveProperty("get");

expect(aContext.access.has(foo)).toBe(true);
expect(aContext.access.has({})).toBe(false);
expect(aContext.access.has(Object.create(foo))).toBe(false);
Expand Down
Expand Up @@ -28,6 +28,9 @@ let foo = new Foo();
const aContext = foo['aContext'];
const bContext = foo['bContext'];

expect(aContext.access).not.toHaveProperty("get");
expect(bContext.access).not.toHaveProperty("get");

expect(aContext.access.has(foo)).toBe(true);
expect(aContext.access.has({})).toBe(false);
expect(aContext.access.has(Object.create(foo))).toBe(true);
Expand Down
Expand Up @@ -24,6 +24,8 @@ class Foo {

const aContext = Foo['#aContext'];

expect(aContext.access).not.toHaveProperty("get");

expect(aContext.access.has(Foo)).toBe(true);
expect(aContext.access.has({})).toBe(false);
expect(aContext.access.has(Object.create(Foo))).toBe(false);
Expand Down
Expand Up @@ -26,6 +26,9 @@ class Foo {
const aContext = Foo['aContext'];
const bContext = Foo['bContext'];

expect(aContext.access).not.toHaveProperty("get");
expect(bContext.access).not.toHaveProperty("get");

expect(aContext.access.has(Foo)).toBe(true);
expect(aContext.access.has({})).toBe(false);
expect(aContext.access.has(Object.create(Foo))).toBe(true);
Expand Down

0 comments on commit 34f7688

Please sign in to comment.