Skip to content

Commit

Permalink
Disallow rest object destructuring of null/undefined (#14985)
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolo-ribaudo committed Sep 29, 2022
1 parent 593fd9e commit 4748947
Show file tree
Hide file tree
Showing 29 changed files with 117 additions and 51 deletions.
2 changes: 1 addition & 1 deletion packages/babel-helpers/src/helpers.ts
Expand Up @@ -425,7 +425,7 @@ helpers.newArrowCheck = helper("7.0.0-beta.0")`

helpers.objectDestructuringEmpty = helper("7.0.0-beta.0")`
export default function _objectDestructuringEmpty(obj) {
if (obj == null) throw new TypeError("Cannot destructure undefined");
if (obj == null) throw new TypeError("Cannot destructure " + obj);
}
`;

Expand Down
Expand Up @@ -18,7 +18,7 @@ babelHelpers.defineProperty(C, "c", "c");
var _C;

let x, y, z;
x = babelHelpers.classStaticPrivateFieldSpecGet(C, C, _x), y = babelHelpers.classStaticPrivateFieldSpecGet(C, C, _y), (_C = C, ({} = _C), z = Object.assign({}, _C), _C);
x = babelHelpers.classStaticPrivateFieldSpecGet(C, C, _x), y = babelHelpers.classStaticPrivateFieldSpecGet(C, C, _y), (_C = C, ({} = _C), z = Object.assign({}, (babelHelpers.objectDestructuringEmpty(_C), _C)), _C);
result = {
x,
y,
Expand Down
Expand Up @@ -17,7 +17,7 @@ babelHelpers.defineProperty(C, "c", "c");
(() => {
var x = babelHelpers.classStaticPrivateFieldSpecGet(C, C, _x),
y = babelHelpers.classStaticPrivateFieldSpecGet(C, C, _y),
z = Object.assign({}, C);
z = Object.assign({}, (babelHelpers.objectDestructuringEmpty(C), C));
result = {
x,
y,
Expand Down
Expand Up @@ -199,7 +199,12 @@ export default declare((api, opts: Options) => {
restElement.argument,
t.callExpression(getExtendsHelper(file), [
t.objectExpression([]),
t.cloneNode(objRef),
t.sequenceExpression([
t.callExpression(file.addHelper("objectDestructuringEmpty"), [
t.cloneNode(objRef),
]),
t.cloneNode(objRef),
]),
]),
];
}
Expand Down
@@ -1,13 +1,13 @@
(_ref, a) => {
let R = babelHelpers.extends({}, _ref);
let R = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref), _ref));

if (a === void 0) {
a = R;
}
};

(_ref2, e, c = 2, a, f) => {
let R = babelHelpers.extends({}, _ref2);
let R = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref2), _ref2));

if (a === void 0) {
a = R;
Expand All @@ -23,7 +23,7 @@
};

(_ref3, a) => {
let R = babelHelpers.extends({}, _ref3);
let R = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref3), _ref3));

if (a === void 0) {
a = f(R);
Expand Down
Expand Up @@ -3,7 +3,7 @@ const _excluded = ["a1"],
_excluded3 = ["c3"];

try {} catch (_ref) {
let a34 = babelHelpers.extends({}, _ref);
let a34 = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref), _ref));
}

try {} catch (_ref2) {
Expand Down
Expand Up @@ -3,5 +3,5 @@ it("es7.objectRestSpread", () => {
a: 1,
b: 2
};
let copy = babelHelpers.extends({}, original);
let copy = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(original), original));
});
Expand Up @@ -2,9 +2,9 @@ var _ref3;

const {
[_ref => {
let rest = babelHelpers.extends({}, _ref);
let rest = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref), _ref));
let _ref2 = {},
b = babelHelpers.extends({}, _ref2);
b = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref2), _ref2));
}]: a,
[(_ref3 = {}, ({} = _ref3), d = babelHelpers.extends({}, _ref3), _ref3)]: c
[(_ref3 = {}, ({} = _ref3), d = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref3), _ref3)), _ref3)]: c
} = {};
Expand Up @@ -2,9 +2,9 @@ var _ref3;

const {
a = _ref => {
let rest = babelHelpers.extends({}, _ref);
let rest = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref), _ref));
let _ref2 = {},
b = babelHelpers.extends({}, _ref2);
b = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref2), _ref2));
},
c = (_ref3 = {}, ({} = _ref3), d = babelHelpers.extends({}, _ref3), _ref3)
c = (_ref3 = {}, ({} = _ref3), d = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref3), _ref3)), _ref3)
} = {};
@@ -1,3 +1,3 @@
const bar = babelHelpers.extends({}, obj.a),
baz = babelHelpers.extends({}, obj.b),
foo = babelHelpers.extends({}, obj);
const bar = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(obj.a), obj.a)),
baz = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(obj.b), obj.b)),
foo = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(obj), obj));
@@ -0,0 +1,7 @@
expect(() => {
var { ...x } = null;
}).toThrow(/null/);

expect(() => {
var { x, ...y } = null;
}).toThrow(/null/);
@@ -0,0 +1,7 @@
expect(() => {
var { ...x } = null;
}).toThrow(/null/);

expect(() => {
var { x, ...y } = null;
}).toThrow(/null/);
@@ -0,0 +1,6 @@
{
"plugins": ["proposal-object-rest-spread", "transform-destructuring"],
"targets": {
"browsers": "ie 6"
}
}
@@ -0,0 +1,10 @@
const _excluded = ["x"];
expect(() => {
var _ref = null,
x = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref), _ref));
}).toThrow(/null/);
expect(() => {
var _ref2 = null,
x = _ref2.x,
y = babelHelpers.objectWithoutProperties(_ref2, _excluded);
}).toThrow(/null/);
@@ -0,0 +1,7 @@
expect(() => {
var { ...x } = null;
}).toThrow(/null/);

expect(() => {
var { x, ...y } = null;
}).toThrow(/null/);
@@ -0,0 +1,7 @@
expect(() => {
var { ...x } = null;
}).toThrow(/null/);

expect(() => {
var { x, ...y } = null;
}).toThrow(/null/);
@@ -0,0 +1,12 @@
const _excluded = ["x"];
expect(() => {
var _ref = null,
x = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref), _ref));
}).toThrow(/null/);
expect(() => {
var _ref2 = null,
{
x
} = _ref2,
y = babelHelpers.objectWithoutProperties(_ref2, _excluded);
}).toThrow(/null/);
@@ -1,7 +1,7 @@
const _excluded = ["X"];

_ref => {
let R = babelHelpers.extends({}, _ref);
let R = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref), _ref));
let a = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : R;
};

Expand All @@ -22,11 +22,11 @@ _ref => {

let _ref4 = arguments.length > 1 ? arguments[1] : undefined;

let R = babelHelpers.extends({}, _ref4);
let R = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref4), _ref4));
};

(_ref5, e, c = 2) => {
let R = babelHelpers.extends({}, _ref5);
let R = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref5), _ref5));
let a = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : R;
let f = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : q;
return function () {
Expand All @@ -35,12 +35,12 @@ _ref => {
};

_ref6 => {
let R = babelHelpers.extends({}, _ref6);
let R = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref6), _ref6));
let a = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : f(R);
};

(_ref7, _ref8) => {
let R = babelHelpers.extends({}, _ref7);
let R = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref7), _ref7));
let {
[R.key]: a = 42
} = _ref8;
Expand All @@ -51,13 +51,13 @@ _ref6 => {
R: b
}
}) => {
let R = babelHelpers.extends({}, _ref9);
let R = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref9), _ref9));
};

(_ref10, {
a = R => R
} = {
b: R => R
}) => {
let R = babelHelpers.extends({}, _ref10);
let R = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref10), _ref10));
};
Expand Up @@ -9,7 +9,7 @@ const _excluded = ["a1"],
_excluded9 = ["a1"];

function a(_ref) {
let a34 = babelHelpers.extends({}, _ref);
let a34 = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref), _ref));
}

function a2(_ref2) {
Expand Down Expand Up @@ -67,7 +67,7 @@ function a7(_ref8 = {}) {
}

function a8([_ref9]) {
let a1 = babelHelpers.extends({}, _ref9);
let a1 = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref9), _ref9));
}

function a9([_ref10]) {
Expand All @@ -78,7 +78,7 @@ function a9([_ref10]) {
}

function a10([a1, _ref11]) {
let a2 = babelHelpers.extends({}, _ref11);
let a2 = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref11), _ref11));
} // Unchanged


Expand Down
@@ -1,6 +1,6 @@
const _z = z(),
{} = _z,
y15 = babelHelpers.extends({}, _z.x15);
y15 = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_z.x15), _z.x15));

let {
x: {
Expand All @@ -9,12 +9,12 @@ let {
}
} = complex,
asdf = babelHelpers.objectWithoutProperties(complex.x, ["a", d].map(babelHelpers.toPropertyKey)),
d = babelHelpers.extends({}, complex.y),
d = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(complex.y), complex.y)),
g = babelHelpers.objectWithoutProperties(complex, ["x"]);

let _z2 = z(),
{} = _z2,
y4 = babelHelpers.extends({}, _z2.x4);
y4 = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_z2.x4), _z2.x4));

let _z3 = z(),
{
Expand Down Expand Up @@ -105,14 +105,14 @@ const _z11 = z(),

const _z12 = z(),
{} = _z12,
y16 = babelHelpers.extends({}, _z12.x15);
y16 = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_z12.x15), _z12.x15));

const {
x16: []
} = z();
const [...[...y17]] = z();
const [..._ref] = z();
const y18 = babelHelpers.extends({}, _ref);
const y18 = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref), _ref));
const [..._ref2] = z();
const {
a19
Expand All @@ -121,7 +121,7 @@ const {

const _z13 = z(),
{} = _z13,
y20 = babelHelpers.extends({}, _z13.x20);
y20 = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_z13.x20), _z13.x20));

const _z14 = z(),
{
Expand All @@ -133,7 +133,7 @@ const _z14 = z(),

const [[...y23] = []] = z();
const [_ref3 = []] = z();
const y24 = babelHelpers.extends({}, _ref3);
const y24 = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref3), _ref3));
const {
x25: [...y25] = []
} = z();
Expand All @@ -145,7 +145,7 @@ const [,, x27] = z();

const _z15 = z(),
{} = _z15,
y28 = babelHelpers.extends({}, _z15.x28);
y28 = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_z15.x28), _z15.x28));

const _z16 = z(),
{
Expand All @@ -161,16 +161,16 @@ const {
} = _ref4,
x30 = babelHelpers.objectWithoutProperties(_ref4, ["y30"]);
const [,, _ref5] = z();
const x31 = babelHelpers.extends({}, _ref5);
const x31 = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref5), _ref5));

const _z17 = z(),
{
x32: {}
} = _z17,
y32 = babelHelpers.extends({}, _z17.w32);
y32 = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_z17.w32), _z17.w32));

const [,, {}, _ref6] = z();
const q32 = babelHelpers.extends({}, _ref6);
const q32 = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref6), _ref6));

const _z18 = z(),
y33 = babelHelpers.extends({}, _z18);
y33 = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_z18), _z18));
@@ -1,13 +1,13 @@
(_ref, a) => {
let R = babelHelpers.extends({}, _ref);
let R = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref), _ref));

if (a === void 0) {
a = R;
}
};

(_ref2, e, c = 2, a, f) => {
let R = babelHelpers.extends({}, _ref2);
let R = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref2), _ref2));

if (a === void 0) {
a = R;
Expand All @@ -23,7 +23,7 @@
};

(_ref3, a) => {
let R = babelHelpers.extends({}, _ref3);
let R = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref3), _ref3));

if (a === void 0) {
a = f(R);
Expand Down
Expand Up @@ -5,6 +5,6 @@ var _props = babelHelpers.interopRequireDefault(require("props"));
console.log(_props.default);

(function () {
const props = babelHelpers.extends({}, this.props);
const props = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(this.props), this.props));
console.log(props);
})();
Expand Up @@ -3,7 +3,7 @@ const {
} = a,
y = babelHelpers.objectWithoutProperties(a, ["x"]),
z = foo(y);
const s = babelHelpers.extends({}, r),
const s = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(r), r)),
t = foo(s); // ordering is preserved

var l = foo(),
Expand Down
Expand Up @@ -7,7 +7,7 @@ exports.default = void 0;

class _default {
method(_ref) {
let object = babelHelpers.extends({}, _ref);
let object = babelHelpers.extends({}, (babelHelpers.objectDestructuringEmpty(_ref), _ref));
}

}
Expand Down

0 comments on commit 4748947

Please sign in to comment.