546 lines
12 KiB
JavaScript
546 lines
12 KiB
JavaScript
destructuring_arrays: {
|
|
input: {
|
|
{const [aa, bb] = cc;}
|
|
{const [aa, [bb, cc]] = dd;}
|
|
{let [aa, bb] = cc;}
|
|
{let [aa, [bb, cc]] = dd;}
|
|
var [aa, bb] = cc;
|
|
var [aa, [bb, cc]] = dd;
|
|
var [,[,,,,,],,,zz,] = xx; // Trailing comma
|
|
var [,,zzz,,] = xxx; // Trailing comma after hole
|
|
}
|
|
expect: {
|
|
{const [aa, bb] = cc;}
|
|
{const [aa, [bb, cc]] = dd;}
|
|
{let [aa, bb] = cc;}
|
|
{let [aa, [bb, cc]] = dd;}
|
|
var [aa, bb] = cc;
|
|
var [aa, [bb, cc]] = dd;
|
|
var [,[,,,,,],,,zz] = xx;
|
|
var [,,zzz,,] = xxx;
|
|
}
|
|
}
|
|
|
|
destructuring_arrays_holes: {
|
|
input: {
|
|
var [,,,,] = a;
|
|
var [,,b,] = c;
|
|
var [d,,] = e;
|
|
}
|
|
expect_exact: "var[,,,,]=a;var[,,b]=c;var[d,,]=e;"
|
|
}
|
|
|
|
destructuring_objects: {
|
|
input: {
|
|
{const {aa, bb} = {aa:1, bb:2};}
|
|
{const {aa, bb: {cc, dd}} = {aa:1, bb: {cc:2, dd: 3}};}
|
|
{let {aa, bb} = {aa:1, bb:2};}
|
|
{let {aa, bb: {cc, dd}} = {aa:1, bb: {cc:2, dd: 3}};}
|
|
var {aa, bb} = {aa:1, bb:2};
|
|
var {aa, bb: {cc, dd}} = {aa:1, bb: {cc:2, dd: 3}};
|
|
}
|
|
expect: {
|
|
{const {aa, bb} = {aa:1, bb:2};}
|
|
{const {aa, bb: {cc, dd}} = {aa:1, bb: {cc:2, dd: 3}};}
|
|
{let {aa, bb} = {aa:1, bb:2};}
|
|
{let {aa, bb: {cc, dd}} = {aa:1, bb: {cc:2, dd: 3}};}
|
|
var {aa, bb} = {aa:1, bb:2};
|
|
var {aa, bb: {cc, dd}} = {aa:1, bb: {cc:2, dd: 3}};
|
|
}
|
|
}
|
|
|
|
destructuring_objects_trailing_elision: {
|
|
beautify = {
|
|
ecma: 6
|
|
}
|
|
input: {
|
|
var {cc,} = foo;
|
|
}
|
|
expect_exact: "var{cc}=foo;"
|
|
}
|
|
|
|
nested_destructuring_objects: {
|
|
beautify = {
|
|
ecma: 6
|
|
}
|
|
input: {
|
|
const [{a},b] = c;
|
|
let [{a},b] = c;
|
|
var [{a},b] = c;
|
|
}
|
|
expect_exact: 'const[{a},b]=c;let[{a},b]=c;var[{a},b]=c;';
|
|
}
|
|
|
|
destructuring_constdef_in_loops: {
|
|
beautify = {
|
|
ecma: 6
|
|
}
|
|
input: {
|
|
for (const [x,y] in pairs);
|
|
for (const [a] = 0;;);
|
|
for (const {c} of cees);
|
|
}
|
|
expect_exact: "for(const[x,y]in pairs);for(const[a]=0;;);for(const{c}of cees);"
|
|
}
|
|
|
|
destructuring_letdef_in_loops: {
|
|
beautify = {
|
|
ecma: 6
|
|
}
|
|
input: {
|
|
for (let [x,y] in pairs);
|
|
for (let [a] = 0;;);
|
|
for (let {c} of cees);
|
|
}
|
|
expect_exact: "for(let[x,y]in pairs);for(let[a]=0;;);for(let{c}of cees);"
|
|
}
|
|
|
|
destructuring_vardef_in_loops: {
|
|
beautify = {
|
|
ecma: 6
|
|
}
|
|
input: {
|
|
for (var [x,y] in pairs);
|
|
for (var [a] = 0;;);
|
|
for (var {c} of cees);
|
|
}
|
|
expect_exact: "for(var[x,y]in pairs);for(var[a]=0;;);for(var{c}of cees);"
|
|
}
|
|
|
|
destructuring_expressions: {
|
|
beautify = {
|
|
ecma: 6
|
|
}
|
|
input: {
|
|
({a, b});
|
|
[{a}];
|
|
f({x});
|
|
}
|
|
expect_exact: "({a,b});[{a}];f({x});"
|
|
}
|
|
|
|
destructuring_remove_unused_1: {
|
|
options = {
|
|
unused: true
|
|
}
|
|
input: {
|
|
function a() {
|
|
var unused = "foo";
|
|
var a = [1];
|
|
var [b] = a;
|
|
f(b);
|
|
}
|
|
function b() {
|
|
var unused = "foo";
|
|
var a = {b: 1};
|
|
var {b} = a;
|
|
f(b);
|
|
}
|
|
function c() {
|
|
var unused = "foo";
|
|
var a = [[1]];
|
|
var [[b]] = a;
|
|
f(b);
|
|
}
|
|
function d() {
|
|
var unused = "foo";
|
|
var a = {b: {b:1}};
|
|
var {b:{b}} = a;
|
|
f(b);
|
|
}
|
|
function e() {
|
|
var unused = "foo";
|
|
var a = [1, 2, 3, 4, 5];
|
|
var x = [[1, 2, 3]];
|
|
var y = {h: 1};
|
|
var [b, ...c] = a;
|
|
var [...[e, f]] = x;
|
|
var [...{g: h}] = y;
|
|
f(b, c, e, f, g);
|
|
}
|
|
}
|
|
expect: {
|
|
function a() {
|
|
var a = [1];
|
|
var [b] = a;
|
|
f(b);
|
|
}
|
|
function b() {
|
|
var a = {b: 1};
|
|
var {b} = a;
|
|
f(b);
|
|
}
|
|
function c() {
|
|
var a = [[1]];
|
|
var [[b]] = a;
|
|
f(b);
|
|
}
|
|
function d() {
|
|
var a = {b: {b:1}};
|
|
var {b:{b}} = a;
|
|
f(b);
|
|
}
|
|
function e() {
|
|
var a = [1, 2, 3, 4, 5];
|
|
var x = [[1, 2, 3]];
|
|
var y = {h: 1};
|
|
var [b, ...c] = a;
|
|
var [...[e, f]] = x;
|
|
var [...{g: h}] = y;
|
|
f(b, c, e, f, g);
|
|
}
|
|
}
|
|
}
|
|
|
|
destructuring_remove_unused_2: {
|
|
options = {
|
|
unused: true
|
|
}
|
|
input: {
|
|
function a() {
|
|
var unused = "foo";
|
|
var a = [,,1];
|
|
var [b] = a;
|
|
f(b);
|
|
}
|
|
function b() {
|
|
var unused = "foo";
|
|
var a = [{a: [1]}];
|
|
var [{b: a}] = a;
|
|
f(b);
|
|
}
|
|
}
|
|
expect: {
|
|
function a() {
|
|
var a = [,,1];
|
|
var [b] = a;
|
|
f(b);
|
|
}
|
|
function b() {
|
|
var a = [{a: [1]}];
|
|
var [{b: a}] = a;
|
|
f(b);
|
|
}
|
|
}
|
|
}
|
|
|
|
object_destructuring_may_need_parentheses: {
|
|
beautify = {
|
|
ecma: 6
|
|
}
|
|
input: {
|
|
({a, b} = {a: 1, b: 2});
|
|
}
|
|
expect_exact: "({a,b}={a:1,b:2});"
|
|
}
|
|
|
|
destructuring_with_undefined_as_default_assignment: {
|
|
options = {
|
|
evaluate: true
|
|
}
|
|
input: {
|
|
[foo = undefined] = bar;
|
|
[foo = void 0] = bar;
|
|
}
|
|
expect: {
|
|
[foo] = bar;
|
|
[foo] = bar;
|
|
}
|
|
}
|
|
|
|
destructuring_dont_evaluate_with_undefined_as_default_assignment: {
|
|
options = {
|
|
evaluate: false
|
|
}
|
|
input: {
|
|
[foo = undefined] = bar;
|
|
}
|
|
expect: {
|
|
[foo = void 0] = bar;
|
|
}
|
|
}
|
|
|
|
reduce_vars: {
|
|
options = {
|
|
reduce_vars: true,
|
|
}
|
|
input: {
|
|
{const [aa, [bb, cc]] = dd;}
|
|
{let [aa, [bb, cc]] = dd;}
|
|
var [aa, [bb, cc]] = dd;
|
|
[aa, [bb, cc]] = dd;
|
|
{const {aa, bb: {cc, dd}} = {aa:1, bb: {cc:2, dd: 3}};}
|
|
{let {aa, bb: {cc, dd}} = {aa:1, bb: {cc:2, dd: 3}};}
|
|
var {aa, bb: {cc, dd}} = {aa:1, bb: {cc:2, dd: 3}};
|
|
({aa, bb: {cc, dd}} = {aa:1, bb: {cc:2, dd: 3}});
|
|
const [{a},b] = c;
|
|
let [{a},b] = c;
|
|
var [{a},b] = c;
|
|
[{a},b] = c;
|
|
for (const [x,y] in pairs);
|
|
for (let [x,y] in pairs);
|
|
for (var [x,y] in pairs);
|
|
for ([x,y] in pairs);
|
|
}
|
|
expect: {
|
|
{const [aa, [bb, cc]] = dd;}
|
|
{let [aa, [bb, cc]] = dd;}
|
|
var [aa, [bb, cc]] = dd;
|
|
[aa, [bb, cc]] = dd;
|
|
{const {aa, bb: {cc, dd}} = {aa:1, bb: {cc:2, dd: 3}};}
|
|
{let {aa, bb: {cc, dd}} = {aa:1, bb: {cc:2, dd: 3}};}
|
|
var {aa, bb: {cc, dd}} = {aa:1, bb: {cc:2, dd: 3}};
|
|
({aa, bb: {cc, dd}} = {aa:1, bb: {cc:2, dd: 3}});
|
|
const [{a},b] = c;
|
|
let [{a},b] = c;
|
|
var [{a},b] = c;
|
|
[{a},b] = c;
|
|
for (const [x,y] in pairs);
|
|
for (let [x,y] in pairs);
|
|
for (var [x,y] in pairs);
|
|
for ([x,y] in pairs);
|
|
}
|
|
}
|
|
|
|
unused: {
|
|
options = {
|
|
unused: true,
|
|
}
|
|
input: {
|
|
let { foo: [, , ...a] } = { foo: [1, 2, 3, 4], bar: 5 };
|
|
console.log(a);
|
|
}
|
|
expect: {
|
|
let { foo: [, , ...a] } = { foo: [1, 2, 3, 4], bar: 5 };
|
|
console.log(a);
|
|
}
|
|
}
|
|
|
|
issue_1886: {
|
|
options = {
|
|
collapse_vars: true,
|
|
}
|
|
input: {
|
|
let [a] = [1];
|
|
console.log(a);
|
|
}
|
|
expect: {
|
|
let [a] = [1];
|
|
console.log(a);
|
|
}
|
|
}
|
|
|
|
destructuring_decl_of_numeric_key: {
|
|
options = {
|
|
evaluate: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
let { 3: x } = { [1 + 2]: 42 };
|
|
console.log(x);
|
|
}
|
|
expect: {
|
|
let { 3: x } = { [3]: 42 };
|
|
console.log(x);
|
|
}
|
|
expect_stdout: "42"
|
|
node_version: ">=6"
|
|
}
|
|
|
|
destructuring_decl_of_computed_key: {
|
|
options = {
|
|
evaluate: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
let four = 4;
|
|
let { [7 - four]: x } = { [1 + 2]: 42 };
|
|
console.log(x);
|
|
}
|
|
expect: {
|
|
let four = 4;
|
|
let { [7 - four]: x } = { [3]: 42 };
|
|
console.log(x);
|
|
}
|
|
expect_stdout: "42"
|
|
node_version: ">=6"
|
|
}
|
|
|
|
destructuring_assign_of_numeric_key: {
|
|
options = {
|
|
evaluate: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
let x;
|
|
({ 3: x } = { [1 + 2]: 42 });
|
|
console.log(x);
|
|
}
|
|
expect: {
|
|
let x;
|
|
({ 3: x } = { [3]: 42 });
|
|
console.log(x);
|
|
}
|
|
expect_stdout: "42"
|
|
node_version: ">=6"
|
|
}
|
|
|
|
destructuring_assign_of_computed_key: {
|
|
options = {
|
|
evaluate: true,
|
|
unused: true,
|
|
}
|
|
input: {
|
|
let x;
|
|
let four = 4;
|
|
({ [(5 + 2) - four]: x } = { [1 + 2]: 42 });
|
|
console.log(x);
|
|
}
|
|
expect: {
|
|
let x;
|
|
let four = 4;
|
|
({ [7 - four]: x } = { [3]: 42 });
|
|
console.log(x);
|
|
}
|
|
expect_stdout: "42"
|
|
node_version: ">=6"
|
|
}
|
|
|
|
mangle_destructuring_decl: {
|
|
options = {
|
|
evaluate: true,
|
|
unused: true,
|
|
}
|
|
mangle = {
|
|
}
|
|
input: {
|
|
function test(opts) {
|
|
let a = opts.a || { e: 7, n: 8 };
|
|
let { t, e, n, s = 5 + 4, o, r } = a;
|
|
console.log(t, e, n, s, o, r);
|
|
}
|
|
test({a: { t: 1, e: 2, n: 3, s: 4, o: 5, r: 6 }});
|
|
test({});
|
|
}
|
|
expect: {
|
|
function test(t) {
|
|
let e = t.a || { e: 7, n: 8 };
|
|
let {t: n, e: o, n: s, s: a = 9, o: c, r: l} = e;
|
|
console.log(n, o, s, a, c, l);
|
|
}
|
|
test({ a: { t: 1, e: 2, n: 3, s: 4, o: 5, r: 6 } });
|
|
test({});
|
|
}
|
|
expect_stdout: [
|
|
"1 2 3 4 5 6",
|
|
"undefined 7 8 9 undefined undefined",
|
|
]
|
|
node_version: ">=6"
|
|
}
|
|
|
|
mangle_destructuring_assign_toplevel_true: {
|
|
options = {
|
|
toplevel: true,
|
|
evaluate: true,
|
|
unused: true,
|
|
}
|
|
mangle = {
|
|
toplevel: true,
|
|
}
|
|
beautify = {
|
|
ecma: 6
|
|
}
|
|
input: {
|
|
function test(opts) {
|
|
let s, o, r;
|
|
let a = opts.a || { e: 7, n: 8 };
|
|
({ t, e, n, s = 5 + 4, o, r } = a);
|
|
console.log(t, e, n, s, o, r);
|
|
}
|
|
let t, e, n;
|
|
test({a: { t: 1, e: 2, n: 3, s: 4, o: 5, r: 6 }});
|
|
test({});
|
|
}
|
|
expect: {
|
|
function n(n) {
|
|
let t, a, c;
|
|
let l = n.a || { e: 7, n: 8 };
|
|
({t: o, e, n: s, s: t = 9, o: a, r: c} = l);
|
|
console.log(o, e, s, t, a, c);
|
|
}
|
|
let o, e, s;
|
|
n({ a: { t: 1, e: 2, n: 3, s: 4, o: 5, r: 6 } });
|
|
n({});
|
|
}
|
|
expect_stdout: [
|
|
"1 2 3 4 5 6",
|
|
"undefined 7 8 9 undefined undefined",
|
|
]
|
|
node_version: ">=6"
|
|
}
|
|
|
|
mangle_destructuring_assign_toplevel_false: {
|
|
options = {
|
|
toplevel: false,
|
|
evaluate: true,
|
|
unused: true,
|
|
}
|
|
mangle = {
|
|
toplevel: false,
|
|
}
|
|
beautify = {
|
|
ecma: 6
|
|
}
|
|
input: {
|
|
function test(opts) {
|
|
let s, o, r;
|
|
let a = opts.a || { e: 7, n: 8 };
|
|
({ t, e, n, s = 9, o, r } = a);
|
|
console.log(t, e, n, s, o, r);
|
|
}
|
|
let t, e, n;
|
|
test({a: { t: 1, e: 2, n: 3, s: 4, o: 5, r: 6 }});
|
|
test({});
|
|
}
|
|
expect: {
|
|
function test(o) {
|
|
let s, a, c;
|
|
let l = o.a || { e: 7, n: 8 };
|
|
({t, e, n, s = 9, o: a, r: c} = l);
|
|
console.log(t, e, n, s, a, c);
|
|
}
|
|
let t, e, n;
|
|
test({ a: { t: 1, e: 2, n: 3, s: 4, o: 5, r: 6 } });
|
|
test({});
|
|
}
|
|
expect_stdout: [
|
|
"1 2 3 4 5 6",
|
|
"undefined 7 8 9 undefined undefined",
|
|
]
|
|
node_version: ">=6"
|
|
}
|
|
|
|
mangle_destructuring_decl_array: {
|
|
options = {
|
|
evaluate: true,
|
|
unused: true,
|
|
toplevel: true,
|
|
}
|
|
mangle = {
|
|
toplevel: true,
|
|
}
|
|
beautify = {
|
|
ecma: 6
|
|
}
|
|
input: {
|
|
var [, t, e, n, s, o = 2, r = [ 1 + 2 ]] = [ 9, 8, 7, 6 ];
|
|
console.log(t, e, n, s, o, r);
|
|
}
|
|
expect: {
|
|
var [, o, l, a, c, e = 2, g = [ 3 ]] = [ 9, 8, 7, 6 ];
|
|
console.log(o, l, a, c, e, g);
|
|
}
|
|
expect_stdout: "8 7 6 undefined 2 [ 3 ]"
|
|
node_version: ">=6"
|
|
}
|