Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Disallow rest object destructuring of null/undefined #14985

Merged
merged 1 commit into from Sep 29, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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