TestBase64LoaderRemoveUnused
---------- /out.js ----------
// entry.js
console.log("unused import");
================================================================================
TestConstValueInliningBundle
---------- /out/exported-entry.js ----------
// exported-entry.js
var y_keep = 2;
console.log(
1,
2
);
export {
y_keep
};
---------- /out/re-exported-entry.js ----------
// re-exported-constants.js
var y_keep = 2;
// re-exported-entry.js
console.log(1, 2);
export {
y_keep
};
---------- /out/re-exported-2-entry.js ----------
// re-exported-2-constants.js
var y_keep = 2;
export {
y_keep
};
---------- /out/re-exported-star-entry.js ----------
// re-exported-star-constants.js
var x_keep = 1, y_keep = 2;
export {
x_keep,
y_keep
};
---------- /out/cross-module-entry.js ----------
// cross-module-constants.js
foo();
var y_keep = 1;
function foo() {
return [1, y_keep];
}
// cross-module-entry.js
console.log(1, y_keep);
---------- /out/print-shorthand-entry.js ----------
// print-shorthand-entry.js
console.log({ foo: 123, a: -321 });
---------- /out/circular-import-entry.js ----------
// circular-import-cycle.js
console.log(bar());
// circular-import-constants.js
var foo = 123;
function bar() {
return foo;
}
---------- /out/circular-re-export-entry.js ----------
// circular-re-export-cycle.js
var baz = 0;
console.log(bar());
// circular-re-export-constants.js
var foo = 123;
function bar() {
return foo;
}
// circular-re-export-entry.js
console.log(baz);
---------- /out/circular-re-export-star-entry.js ----------
// circular-re-export-star-cycle.js
console.log(bar());
// circular-re-export-star-constants.js
var foo = 123;
function bar() {
return foo;
}
---------- /out/non-circular-export-entry.js ----------
// non-circular-export-constants.js
function bar() {
return 123;
}
// non-circular-export-entry.js
console.log(123, bar());
================================================================================
TestConstValueInliningDirectEval
---------- /out/top-level-no-eval.js ----------
const x = 1;
console.log(1, evil("x"));
---------- /out/top-level-eval.js ----------
const x = 1;
console.log(1, eval("x"));
---------- /out/nested-no-eval.js ----------
console.log(1, evil("x"));
---------- /out/nested-eval.js ----------
(() => {
const x = 1;
console.log(1, eval("x"));
})();
---------- /out/ts-namespace-no-eval.js ----------
var y;
((y2) => (y2.x = 1, console.log(1, evil("x"))))(y ||= {});
---------- /out/ts-namespace-eval.js ----------
var z;
((z) => (z.x = 1, console.log(1, eval("x"))))(z ||= {});
---------- /out/issue-4055.js ----------
const variable = !1;
(function() {
eval("var variable = true"), console.log(variable);
})();
================================================================================
TestConstValueInliningNoBundle
---------- /out/top-level.js ----------
const n_keep = null, u_keep = void 0, i_keep = 1234567, f_keep = 123.456, s_keep = "abc";
console.log(
// These are doubled to avoid the "inline const/let into next statement if used once" optimization
null,
null,
void 0,
void 0,
1234567,
1234567,
123.456,
123.456,
"abc",
"abc"
);
---------- /out/nested-block.js ----------
{
const s_keep = "Long strings are not inlined as constants";
console.log(
// These are doubled to avoid the "inline const/let into next statement if used once" optimization
null,
null,
void 0,
void 0,
1234567,
1234567,
123.456,
123.456,
"abc",
"abc",
s_keep,
s_keep
);
}
---------- /out/nested-function.js ----------
function nested() {
const s_keep = "Long strings are not inlined as constants";
console.log(
// These are doubled to avoid the "inline const/let into next statement if used once" optimization
null,
null,
void 0,
void 0,
1234567,
1234567,
123.456,
123.456,
"abc",
"abc",
s_keep,
s_keep
);
}
---------- /out/namespace-export.js ----------
var ns;
((ns2) => (ns2.y_keep = 2, console.log(
1,
1,
2,
2
)))(ns ||= {});
---------- /out/comment-before.js ----------
{
//! comment
x = [1, 1];
}
---------- /out/directive-before.js ----------
function nested() {
"directive";
x = [1, 1];
}
---------- /out/semicolon-before.js ----------
x = [1, 1];
---------- /out/debugger-before.js ----------
{
debugger;
x = [1, 1];
}
---------- /out/type-before.js ----------
x = [1, 1];
---------- /out/exprs-before.js ----------
function nested() {
const x = [, "", {}, 0n, /./, function() {
}, () => {
}];
function foo() {
return 1;
}
}
---------- /out/disabled-tdz.js ----------
foo();
const x_keep = 1;
function foo() {
return x_keep;
}
---------- /out/backwards-reference-top-level.js ----------
const x = y, y = 1;
console.log(
x,
x,
y,
y
);
---------- /out/backwards-reference-nested-function.js ----------
function foo() {
const x = y, y = 1;
console.log(
x,
x,
y,
y
);
}
---------- /out/issue-3125.js ----------
function foo() {
const f = () => x, x = 0;
return f();
}
================================================================================
TestCrossModuleConstantFoldingComputedPropertyName
---------- /out/enum-entry.js ----------
// enum-entry.ts
console.log({
123: 123 /* a */,
abc: "abc" /* b */
});
var Foo = class {
["__proto__"] = {};
["prototype"] = {};
["constructor"]() {
}
};
---------- /out/const-entry.js ----------
// const-constants.js
var proto = "__proto__", ptype = "prototype", ctor = "constructor";
// const-entry.js
console.log({
456: 456,
xyz: "xyz"
});
var Foo = class {
[proto] = {};
[ptype] = {};
[ctor]() {
}
};
================================================================================
TestCrossModuleConstantFoldingNumber
---------- /out/enum-entry.js ----------
// enum-entry.ts
console.log([
6,
-6,
-7,
!6 /* b */,
typeof 6 /* b */
], [
9,
-3,
18,
3 /* a */ / 6 /* b */,
3 /* a */ % 6 /* b */,
3 /* a */ ** 6 /* b */
], [
!0,
!1,
!0,
!1,
!1,
!0,
!1,
!0
], [
12,
3,
3
], [
2,
7,
5
], [
6 /* b */,
3 /* a */,
3 /* a */,
"y",
"n"
]);
---------- /out/const-entry.js ----------
// const-entry.js
console.log([
6,
-6,
-7,
!6,
typeof 6
], [
9,
-3,
18,
3 / 6,
3 % 6,
3 ** 6
], [
!0,
!1,
!0,
!1,
!1,
!0,
!1,
!0
], [
12,
3,
3
], [
2,
7,
5
], [
6,
3,
3,
"y",
"n"
]);
---------- /out/nested-entry.js ----------
// nested-entry.ts
console.log({
"should be 4": 4,
"should be 32": 32
});
================================================================================
TestCrossModuleConstantFoldingString
---------- /out/enum-entry.js ----------
// enum-entry.ts
console.log([
typeof "bar" /* b */
], [
"foobar"
], [
!1,
!0,
!1,
!0,
!1,
!0,
!1,
!0
], [
"bar" /* b */,
"foo" /* a */,
"foo" /* a */,
"y",
"n"
]);
---------- /out/const-entry.js ----------
// const-entry.js
console.log([
typeof "bar"
], [
"foobar"
], [
!1,
!0,
!1,
!0,
!1,
!0,
!1,
!0
], [
"bar",
"foo",
"foo",
"y",
"n"
]);
---------- /out/nested-entry.js ----------
// nested-entry.ts
console.log({
"should be foobarbaz": "foobarbaz",
"should be FOOBARBAZ": "FOOBARBAZ"
});
================================================================================
TestDCEClassStaticBlocks
---------- /out.js ----------
// entry.ts
var A_keep = class {
static {
foo;
}
};
var B_keep = class {
static {
this.foo;
}
};
var C_keep = class {
static {
try {
foo;
} catch {
}
}
};
var D_keep = class {
static {
try {
} finally {
foo;
}
}
};
================================================================================
TestDCEClassStaticBlocksMinifySyntax
---------- /out.js ----------
// entry.ts
var A_keep = class {
static {
foo;
}
}, B_keep = class {
static {
this.foo;
}
}, C_keep = class {
static {
try {
foo;
} catch {
}
}
}, D_keep = class {
static {
foo;
}
};
================================================================================
TestDCEOfDecorators
---------- /out/keep-these.js ----------
// decorator.js
var fn = () => {
console.log("side effect");
};
// keep-these.js
var Class = @fn class {
};
var Field = class {
@fn field;
};
var Method = class {
@fn method() {
}
};
var Accessor = class {
@fn accessor accessor;
};
var StaticField = class {
@fn static field;
};
var StaticMethod = class {
@fn static method() {
}
};
var StaticAccessor = class {
@fn static accessor accessor;
};
================================================================================
TestDCEOfDestructuring
---------- /out/entry.js ----------
// entry.js
var KEEP1 = x;
var [KEEP2] = [x];
var [KEEP3] = [...{}];
var { KEEP4 } = {};
================================================================================
TestDCEOfExperimentalDecorators
---------- /out/keep-these.js ----------
// decorator.ts
var fn = () => {
console.log("side effect");
};
// keep-these.ts
var Class = class {
};
Class = __decorateClass([
fn
], Class);
var Field = class {
field;
};
__decorateClass([
fn
], Field.prototype, "field", 2);
var Method = class {
method() {
}
};
__decorateClass([
fn
], Method.prototype, "method", 1);
var Accessor = class {
accessor accessor;
};
__decorateClass([
fn
], Accessor.prototype, "accessor", 1);
var Parameter = class {
foo(bar) {
}
};
__decorateClass([
__decorateParam(0, fn)
], Parameter.prototype, "foo", 1);
var StaticField = class {
static field;
};
__decorateClass([
fn
], StaticField, "field", 2);
var StaticMethod = class {
static method() {
}
};
__decorateClass([
fn
], StaticMethod, "method", 1);
var StaticAccessor = class {
static accessor accessor;
};
__decorateClass([
fn
], StaticAccessor, "accessor", 1);
var StaticParameter = class {
static foo(bar) {
}
};
__decorateClass([
__decorateParam(0, fn)
], StaticParameter, "foo", 1);
================================================================================
TestDCEOfExprAfterKeepNamesIssue3195
---------- /out.js ----------
(() => {
function f() {
}
__name(f, "f"), firstImportantSideEffect(void 0);
})(), (() => {
function g() {
}
__name(g, "g");
debugger;
secondImportantSideEffect(void 0);
})();
================================================================================
TestDCEOfIIFE
---------- /out/remove-these.js ----------
keepThisButRemoveTheIIFE;
---------- /out/keep-these.js ----------
undef = void 0;
keepMe();
((x = keepMe()) => {
})();
var someVar;
(([y]) => {
})(someVar);
(({ z }) => {
})(someVar);
var keepThis = stuff();
keepThis();
((_ = keepMe()) => {
})();
var isPure = /* @__PURE__ */ ((x, y) => 123)();
use(isPure);
var isNotPure = ((x = foo, y = bar) => 123)();
use(isNotPure);
(async () => ({ get then() {
notPure();
} }))();
(async function() {
return { get then() {
notPure();
} };
})();
================================================================================
TestDCEOfIteratorSuperclassIssue4310
---------- /out/entry.js ----------
// entry.js
var Keep = class extends NotIterator {
};
================================================================================
TestDCEOfNegatedBigints
---------- /out/entry.js ----------
================================================================================
TestDCEOfSymbolCtorCall
---------- /out.js ----------
// entry.js
var n0 = Symbol({});
var n1 = Symbol(/./);
var n2 = Symbol(() => 0);
var n3 = Symbol(x);
var n4 = new Symbol("abc");
var n5 = Symbol(1, 2, 3);
var n6 = /* @__PURE__ */ Symbol((() => Math.random() < 0.5)() ? "x" : "y");
================================================================================
TestDCEOfSymbolForCall
---------- /out.js ----------
// entry.js
var n0 = Symbol.for();
var n1 = Symbol.for({});
var n2 = Symbol.for(/./);
var n3 = Symbol.for(() => 0);
var n4 = Symbol.for(x);
var n5 = new Symbol.for("abc");
var n6 = Symbol.for(1, 2, 3);
var n7 = /* @__PURE__ */ Symbol.for((() => Math.random() < 0.5)() ? "x" : "y");
================================================================================
TestDCEOfSymbolInstances
---------- /out/class.js ----------
// class.js
var Keep1 = class {
*[Symbol.iterator]() {
}
[keep];
};
var Keep2 = class {
[keep];
*[Symbol.iterator]() {
}
};
var Keep3 = class {
*[Symbol.wtf]() {
}
};
---------- /out/object.js ----------
// object.js
var keep1 = { *[Symbol.iterator]() {
}, [keep]: null };
var keep2 = { [keep]: null, *[Symbol.iterator]() {
} };
var keep3 = { *[Symbol.wtf]() {
} };
================================================================================
TestDCEOfUsingDeclarations
---------- /out/entry.js ----------
// entry.js
using null_keep = null;
await using await_null_keep = null;
using throw_keep = {};
using dispose_keep = { [Symbol.dispose]() {
console.log("side effect");
} };
await using await_asyncDispose_keep = { [Symbol.asyncDispose]() {
console.log("side effect");
} };
using undef_keep = void 0;
await using await_undef_keep = void 0;
console.log(
null_keep,
undef_keep
);
================================================================================
TestDCETemplateLiteral
---------- /out/entry.js ----------
// entry.js
var alsoKeep;
var a = `${keep}`;
var c = `${keep ? 1 : 2n}`;
var e = `${alsoKeep}`;
================================================================================
TestDCETypeOf
---------- /out.js ----------
================================================================================
TestDCETypeOfCompareStringGuardCondition
---------- /out.js ----------
(() => {
// entry.js
var keep_1 = typeof x <= "u" ? y : null;
var keep_1 = typeof x < "u" ? y : null;
var keep_1 = typeof x >= "u" ? null : y;
var keep_1 = typeof x > "u" ? null : y;
var keep_1 = typeof x <= "u" && y;
var keep_1 = typeof x < "u" && y;
var keep_1 = typeof x >= "u" || y;
var keep_1 = typeof x > "u" || y;
var keep_1 = "u" >= typeof x ? y : null;
var keep_1 = "u" > typeof x ? y : null;
var keep_1 = "u" <= typeof x ? null : y;
var keep_1 = "u" < typeof x ? null : y;
var keep_1 = "u" >= typeof x && y;
var keep_1 = "u" > typeof x && y;
var keep_1 = "u" <= typeof x || y;
var keep_1 = "u" < typeof x || y;
var keep_2 = typeof x <= "u" ? null : x;
var keep_2 = typeof x < "u" ? null : x;
var keep_2 = typeof x >= "u" ? x : null;
var keep_2 = typeof x > "u" ? x : null;
var keep_2 = typeof x <= "u" || x;
var keep_2 = typeof x < "u" || x;
var keep_2 = typeof x >= "u" && x;
var keep_2 = typeof x > "u" && x;
var keep_2 = "u" >= typeof x ? null : x;
var keep_2 = "u" > typeof x ? null : x;
var keep_2 = "u" <= typeof x ? x : null;
var keep_2 = "u" < typeof x ? x : null;
var keep_2 = "u" >= typeof x || x;
var keep_2 = "u" > typeof x || x;
var keep_2 = "u" <= typeof x && x;
var keep_2 = "u" < typeof x && x;
})();
================================================================================
TestDCETypeOfEqualsString
---------- /out.js ----------
(() => {
// entry.js
if (false) console.log(hasBar);
})();
================================================================================
TestDCETypeOfEqualsStringGuardCondition
---------- /out.js ----------
(() => {
// entry.js
var keep_1 = typeof x !== "object" ? x : null;
var keep_1 = typeof x != "object" ? x : null;
var keep_1 = typeof x === "object" ? null : x;
var keep_1 = typeof x == "object" ? null : x;
var keep_1 = typeof x !== "object" && x;
var keep_1 = typeof x != "object" && x;
var keep_1 = typeof x === "object" || x;
var keep_1 = typeof x == "object" || x;
var keep_1 = "object" !== typeof x ? x : null;
var keep_1 = "object" != typeof x ? x : null;
var keep_1 = "object" === typeof x ? null : x;
var keep_1 = "object" == typeof x ? null : x;
var keep_1 = "object" !== typeof x && x;
var keep_1 = "object" != typeof x && x;
var keep_1 = "object" === typeof x || x;
var keep_1 = "object" == typeof x || x;
var keep_2 = typeof x !== "undefined" ? y : null;
var keep_2 = typeof x != "undefined" ? y : null;
var keep_2 = typeof x === "undefined" ? null : y;
var keep_2 = typeof x == "undefined" ? null : y;
var keep_2 = typeof x !== "undefined" && y;
var keep_2 = typeof x != "undefined" && y;
var keep_2 = typeof x === "undefined" || y;
var keep_2 = typeof x == "undefined" || y;
var keep_2 = "undefined" !== typeof x ? y : null;
var keep_2 = "undefined" != typeof x ? y : null;
var keep_2 = "undefined" === typeof x ? null : y;
var keep_2 = "undefined" == typeof x ? null : y;
var keep_2 = "undefined" !== typeof x && y;
var keep_2 = "undefined" != typeof x && y;
var keep_2 = "undefined" === typeof x || y;
var keep_2 = "undefined" == typeof x || y;
var keep_3 = typeof x !== "undefined" ? null : x;
var keep_3 = typeof x != "undefined" ? null : x;
var keep_3 = typeof x === "undefined" ? x : null;
var keep_3 = typeof x == "undefined" ? x : null;
var keep_3 = typeof x !== "undefined" || x;
var keep_3 = typeof x != "undefined" || x;
var keep_3 = typeof x === "undefined" && x;
var keep_3 = typeof x == "undefined" && x;
var keep_3 = "undefined" !== typeof x ? null : x;
var keep_3 = "undefined" != typeof x ? null : x;
var keep_3 = "undefined" === typeof x ? x : null;
var keep_3 = "undefined" == typeof x ? x : null;
var keep_3 = "undefined" !== typeof x || x;
var keep_3 = "undefined" != typeof x || x;
var keep_3 = "undefined" === typeof x && x;
var keep_3 = "undefined" == typeof x && x;
})();
================================================================================
TestDCETypeOfEqualsStringMangle
---------- /out.js ----------
(() => {
})();
================================================================================
TestDCEVarExports
---------- /out/a.js ----------
// a.js
var require_a = __commonJS({
"a.js"(exports, module) {
var foo = { bar: 123 };
module.exports = foo;
}
});
export default require_a();
---------- /out/b.js ----------
// b.js
var require_b = __commonJS({
"b.js"(exports, module) {
var exports = { bar: 123 };
module.exports = exports;
}
});
export default require_b();
---------- /out/c.js ----------
// c.js
var require_c = __commonJS({
"c.js"(exports, module) {
var module = { bar: 123 };
exports.foo = module;
}
});
export default require_c();
================================================================================
TestDataURLLoaderRemoveUnused
---------- /out.js ----------
// entry.js
console.log("unused import");
================================================================================
TestDeadCodeFollowingJump
---------- /out.js ----------
// entry.js
function testReturn() {
return y + z();
if (x)
var y;
function z() {
KEEP_ME();
}
}
function testThrow() {
throw y + z();
if (x)
var y;
function z() {
KEEP_ME();
}
}
function testBreak() {
for (; ; ) {
let z2 = function() {
KEEP_ME();
};
var z = z2;
y + z2();
break;
if (x)
var y;
}
}
function testContinue() {
for (; ; ) {
let z2 = function() {
KEEP_ME();
};
var z = z2;
y + z2();
continue;
if (x)
var y;
}
}
function testStmts() {
return [a, b, c, d, e, f, g, h, i];
for (; x; )
var a;
do
var b;
while (x);
for (var c; ; ) ;
for (var d in x) ;
for (var e of x) ;
if (x)
var f;
if (!x) var g;
var h, i;
}
testReturn();
testThrow();
testBreak();
testContinue();
testStmts();
================================================================================
TestDeadCodeInsideEmptyTry
---------- /out.js ----------
// a.js
var require_a = __commonJS({
"a.js"() {
}
});
// b.js
var require_b = __commonJS({
"b.js"() {
}
});
// d.js
var require_d = __commonJS({
"d.js"() {
}
});
// entry.js
try {
foo();
} catch {
require_a();
} finally {
require_b();
}
try {
} catch {
} finally {
require_d();
}
================================================================================
TestDeadCodeInsideUnusedCases
---------- /out.js ----------
// a.js
var require_a = __commonJS({
"a.js"() {
}
});
// b.js
var require_b = __commonJS({
"b.js"() {
}
});
// entry.js
switch (x) {
case 0:
_ = require_a();
break;
case 1:
_ = require_b();
break;
}
switch (1) {
case 0:
_ = null;
break;
case 1:
_ = require_a();
break;
case 1:
_ = null;
break;
case 2:
_ = null;
break;
}
switch (0) {
case 1:
_ = null;
break;
default:
_ = require_a();
break;
}
switch (1) {
case 1:
_ = require_a();
break;
default:
_ = null;
break;
}
switch (0) {
case 1:
_ = null;
break;
default:
_ = null;
break;
case 0:
_ = require_a();
break;
}
switch (1) {
case x:
_ = require_a();
break;
case 1:
_ = require_b();
break;
case x:
_ = null;
break;
default:
_ = null;
break;
}
for (const x2 of y)
switch (1) {
case 0:
_ = null;
continue;
case 1:
_ = require_a();
continue;
case 2:
_ = null;
continue;
}
x = () => {
switch (1) {
case 0:
_ = null;
return;
case 1:
_ = require_a();
return;
case 2:
_ = null;
return;
}
};
switch ("b") {
case "a":
_ = null;
case "b":
_ = require_a();
case "c":
_ = require_b();
break;
case "d":
_ = null;
}
switch ("b") {
case "a":
_ = null;
case "b":
case "c":
_ = require_a();
case "d":
_ = require_b();
break;
case "e":
_ = null;
}
================================================================================
TestDisableTreeShaking
---------- /out.js ----------
// keep-me/index.js
console.log("side effects");
// entry.jsx
function KeepMe1() {
}
var keepMe2 = React.createElement(KeepMe1, null);
function keepMe3() {
console.log("side effects");
}
var keepMe4 = keepMe3();
var keepMe5 = pure();
var keepMe6 = some.fn();
================================================================================
TestDropLabelTreeShakingBugIssue3311
---------- /out.js ----------
// entry.js
var myFunc = () => {
console.log("keep");
};
var entry_default = myFunc;
export {
entry_default as default
};
================================================================================
TestDropLabels
---------- /out.js ----------
// entry.js
keep_1: require("foo1");
exports.bar = function() {
if (x) ;
if (y) keep_2: require("bar2");
};
================================================================================
TestFileLoaderRemoveUnused
---------- /out.js ----------
// entry.js
console.log("unused import");
================================================================================
TestImportReExportOfNamespaceImport
---------- /out.js ----------
// Users/user/project/node_modules/pkg/foo.js
var require_foo = __commonJS({
"Users/user/project/node_modules/pkg/foo.js"(exports, module) {
module.exports = 123;
}
});
// Users/user/project/node_modules/pkg/index.js
var import_foo = __toESM(require_foo());
// Users/user/project/entry.js
console.log(import_foo.default);
================================================================================
TestInlineEmptyFunctionCalls
---------- /out/empty.js ----------
// empty.js
console.log((foo(), bar(), void 0));
console.log((foo(), void 0));
console.log((foo(), void 0));
console.log(void 0);
console.log(void 0);
foo(), bar();
foo();
foo();
---------- /out/empty-comma.js ----------
// empty-comma.js
console.log(foo());
console.log((foo(), void 0));
console.log((foo(), void 0));
for (; void 0; ) ;
foo();
foo();
foo();
---------- /out/empty-if-else.js ----------
// empty-if-else.js
if (foo) {
let bar = baz();
bar(), bar();
}
---------- /out/empty-last.js ----------
// empty-last.js
console.log(void 0);
---------- /out/empty-cross-module.js ----------
// empty-cross-module.js
console.log(void 0);
---------- /out/empty-first.js ----------
// empty-first.js
function keep() {
return x;
}
console.log(keep());
keep(foo());
keep(1);
---------- /out/empty-generator.js ----------
// empty-generator.js
function* keep() {
}
console.log(keep());
keep(foo());
keep(1);
---------- /out/empty-async.js ----------
// empty-async.js
async function keep() {
}
console.log(keep());
keep(foo());
keep(1);
---------- /out/reassign.js ----------
// reassign.js
function keep() {
}
keep = reassigned;
console.log(keep());
keep(foo());
keep(1);
---------- /out/reassign-inc.js ----------
// reassign-inc.js
function keep() {
}
keep++;
console.log(keep(1));
keep(foo());
keep(1);
---------- /out/reassign-div.js ----------
// reassign-div.js
function keep() {
}
keep /= reassigned;
console.log(keep(1));
keep(foo());
keep(1);
---------- /out/reassign-array.js ----------
// reassign-array.js
function keep() {
}
[keep] = reassigned;
console.log(keep(1));
keep(foo());
keep(1);
---------- /out/reassign-object.js ----------
// reassign-object.js
function keep() {
}
({ keep } = reassigned);
console.log(keep(1));
keep(foo());
keep(1);
================================================================================
TestInlineFunctionCallBehaviorChanges
---------- /out/entry.js ----------
function empty() {
}
function id(x) {
return x;
}
export let shouldBeWrapped = [
(0, foo.bar)(),
(0, foo[bar])(),
(0, foo?.bar)(),
(0, foo?.[bar])(),
(0, foo.bar)(),
(0, foo[bar])(),
(0, foo?.bar)(),
(0, foo?.[bar])(),
(0, eval)(),
(0, eval)?.(),
(0, eval)(),
(0, eval)?.(),
(0, foo.bar)``,
(0, foo[bar])``,
(0, foo?.bar)``,
(0, foo?.[bar])``,
(0, foo.bar)``,
(0, foo[bar])``,
(0, foo?.bar)``,
(0, foo?.[bar])``,
delete (0, foo),
delete (0, foo.bar),
delete (0, foo[bar]),
delete (0, foo?.bar),
delete (0, foo?.[bar]),
delete (0, foo),
delete (0, foo.bar),
delete (0, foo[bar]),
delete (0, foo?.bar),
delete (0, foo?.[bar]),
delete (0, void 0)
], shouldNotBeWrapped = [
foo(),
foo(),
foo``,
foo``
], shouldNotBeDoubleWrapped = [
delete (foo(), bar()),
delete (foo(), bar())
];
================================================================================
TestInlineFunctionCallForInitDecl
---------- /out/entry.js ----------
// entry.js
for (y = void 0; !1; ) ;
var y;
for (z = 123; !1; ) ;
var z;
================================================================================
TestInlineIdentityFunctionCalls
---------- /out/identity.js ----------
// identity.js
console.log(1);
foo();
---------- /out/identity-last.js ----------
// identity-last.js
console.log(1);
foo();
---------- /out/identity-first.js ----------
// identity-first.js
function keep(x) {
return [x];
}
console.log(keep(1));
keep(foo());
keep(1);
---------- /out/identity-generator.js ----------
// identity-generator.js
function* keep(x) {
return x;
}
console.log(keep(1));
keep(foo());
keep(1);
---------- /out/identity-async.js ----------
// identity-async.js
async function keep(x) {
return x;
}
console.log(keep(1));
keep(foo());
keep(1);
---------- /out/identity-cross-module.js ----------
// identity-cross-module.js
console.log(1);
foo();
---------- /out/identity-no-args.js ----------
// identity-no-args.js
function keep(x) {
return x;
}
console.log(keep());
keep();
---------- /out/identity-two-args.js ----------
// identity-two-args.js
function keep(x) {
return x;
}
console.log(keep(1, 2));
keep(1, 2);
---------- /out/reassign.js ----------
// reassign.js
function keep(x) {
return x;
}
keep = reassigned;
console.log(keep(1));
keep(foo());
keep(1);
---------- /out/reassign-inc.js ----------
// reassign-inc.js
function keep(x) {
return x;
}
keep++;
console.log(keep(1));
keep(foo());
keep(1);
---------- /out/reassign-div.js ----------
// reassign-div.js
function keep(x) {
return x;
}
keep /= reassigned;
console.log(keep(1));
keep(foo());
keep(1);
---------- /out/reassign-array.js ----------
// reassign-array.js
function keep(x) {
return x;
}
[keep] = reassigned;
console.log(keep(1));
keep(foo());
keep(1);
---------- /out/reassign-object.js ----------
// reassign-object.js
function keep(x) {
return x;
}
({ keep } = reassigned);
console.log(keep(1));
keep(foo());
keep(1);
---------- /out/not-identity-two-args.js ----------
// not-identity-two-args.js
function keep(x, y) {
return x;
}
console.log(keep(1));
keep(foo());
keep(1);
---------- /out/not-identity-default.js ----------
// not-identity-default.js
function keep(x = foo()) {
return x;
}
console.log(keep(1));
keep(foo());
keep(1);
---------- /out/not-identity-array.js ----------
// not-identity-array.js
function keep([x]) {
return x;
}
console.log(keep(1));
keep(foo());
keep(1);
---------- /out/not-identity-object.js ----------
// not-identity-object.js
function keep({ x }) {
return x;
}
console.log(keep(1));
keep(foo());
keep(1);
---------- /out/not-identity-rest.js ----------
// not-identity-rest.js
function keep(...x) {
return x;
}
console.log(keep(1));
keep(foo());
keep(1);
---------- /out/not-identity-return.js ----------
// not-identity-return.js
function keep(x) {
return [x];
}
console.log(keep(1));
keep(foo());
keep(1);
---------- /out/identity-simplify-unused-issue-4287.js ----------
// identity-simplify-unused-issue-4287.js
foo();
void 0;
================================================================================
TestJSONLoaderRemoveUnused
---------- /out.js ----------
// entry.js
console.log("unused import");
================================================================================
TestMultipleDeclarationTreeShaking
---------- /out/var2.js ----------
// var2.js
var x = 1;
console.log(x);
var x = 2;
---------- /out/var3.js ----------
// var3.js
var x = 1;
console.log(x);
var x = 2;
console.log(x);
var x = 3;
---------- /out/function2.js ----------
// function2.js
function x() {
return 1;
}
console.log(x());
function x() {
return 2;
}
---------- /out/function3.js ----------
// function3.js
function x() {
return 1;
}
console.log(x());
function x() {
return 2;
}
console.log(x());
function x() {
return 3;
}
================================================================================
TestMultipleDeclarationTreeShakingMinifySyntax
---------- /out/var2.js ----------
// var2.js
var x = 1;
console.log(x);
var x = 2;
---------- /out/var3.js ----------
// var3.js
var x = 1;
console.log(x);
var x = 2;
console.log(x);
var x = 3;
---------- /out/function2.js ----------
// function2.js
console.log(x());
function x() {
return 2;
}
---------- /out/function3.js ----------
// function3.js
console.log(x());
console.log(x());
function x() {
return 3;
}
================================================================================
TestNestedFunctionInliningWithSpread
---------- /out/entry.js ----------
// entry.js
function identity1(x) {
return x;
}
function identity3(x) {
return x;
}
check(
void 0,
(args, void 0),
([...args], void 0),
identity1(),
args,
identity3(...args)
);
---------- /out/entry-outer.js ----------
// inner.js
function identity1(x) {
return x;
}
function identity3(x) {
return x;
}
// entry-outer.js
check(
void 0,
(args, void 0),
([...args], void 0),
identity1(),
args,
identity3(...args)
);
================================================================================
TestNoSideEffectsComment
---------- /out/expr-fn.js ----------
//! These should all have "no side effects"
x([
/* @__NO_SIDE_EFFECTS__ */ function() {
},
/* @__NO_SIDE_EFFECTS__ */ function y() {
},
/* @__NO_SIDE_EFFECTS__ */ function* () {
},
/* @__NO_SIDE_EFFECTS__ */ function* y2() {
},
/* @__NO_SIDE_EFFECTS__ */ async function() {
},
/* @__NO_SIDE_EFFECTS__ */ async function y3() {
},
/* @__NO_SIDE_EFFECTS__ */ async function* () {
},
/* @__NO_SIDE_EFFECTS__ */ async function* y4() {
}
]);
---------- /out/expr-arrow.js ----------
//! These should all have "no side effects"
x([
/* @__NO_SIDE_EFFECTS__ */ (y) => y,
/* @__NO_SIDE_EFFECTS__ */ () => {
},
/* @__NO_SIDE_EFFECTS__ */ (y) => y,
/* @__NO_SIDE_EFFECTS__ */ async (y) => y,
/* @__NO_SIDE_EFFECTS__ */ async () => {
},
/* @__NO_SIDE_EFFECTS__ */ async (y) => y
]);
---------- /out/stmt-fn.js ----------
//! These should all have "no side effects"
// @__NO_SIDE_EFFECTS__
function a() {
}
// @__NO_SIDE_EFFECTS__
function* b() {
}
// @__NO_SIDE_EFFECTS__
async function c() {
}
// @__NO_SIDE_EFFECTS__
async function* d() {
}
---------- /out/stmt-export-fn.js ----------
//! These should all have "no side effects"
// @__NO_SIDE_EFFECTS__
export function a() {
}
// @__NO_SIDE_EFFECTS__
export function* b() {
}
// @__NO_SIDE_EFFECTS__
export async function c() {
}
// @__NO_SIDE_EFFECTS__
export async function* d() {
}
---------- /out/stmt-local.js ----------
//! Only "c0" and "c2" should have "no side effects" (Rollup only respects "const" and only for the first one)
var v0 = function() {
}, v1 = function() {
};
let l0 = function() {
}, l1 = function() {
};
const c0 = /* @__NO_SIDE_EFFECTS__ */ function() {
}, c1 = function() {
};
var v2 = () => {
}, v3 = () => {
};
let l2 = () => {
}, l3 = () => {
};
const c2 = /* @__NO_SIDE_EFFECTS__ */ () => {
}, c3 = () => {
};
---------- /out/stmt-export-local.js ----------
//! Only "c0" and "c2" should have "no side effects" (Rollup only respects "const" and only for the first one)
export var v0 = function() {
}, v1 = function() {
};
export let l0 = function() {
}, l1 = function() {
};
export const c0 = /* @__NO_SIDE_EFFECTS__ */ function() {
}, c1 = function() {
};
export var v2 = () => {
}, v3 = () => {
};
export let l2 = () => {
}, l3 = () => {
};
export const c2 = /* @__NO_SIDE_EFFECTS__ */ () => {
}, c3 = () => {
};
---------- /out/ns-export-fn.js ----------
var ns;
((ns2) => {
//! These should all have "no side effects"
// @__NO_SIDE_EFFECTS__
function a() {
}
ns2.a = a;
// @__NO_SIDE_EFFECTS__
function* b() {
}
ns2.b = b;
// @__NO_SIDE_EFFECTS__
async function c() {
}
ns2.c = c;
// @__NO_SIDE_EFFECTS__
async function* d() {
}
ns2.d = d;
})(ns || (ns = {}));
---------- /out/ns-export-local.js ----------
var ns;
((ns2) => {
//! Only "c0" and "c2" should have "no side effects" (Rollup only respects "const" and only for the first one)
ns2.v0 = function() {
};
ns2.v1 = function() {
};
ns2.l0 = function() {
};
ns2.l1 = function() {
};
ns2.c0 = /* @__NO_SIDE_EFFECTS__ */ function() {
};
ns2.c1 = function() {
};
ns2.v2 = () => {
};
ns2.v3 = () => {
};
ns2.l2 = () => {
};
ns2.l3 = () => {
};
ns2.c2 = /* @__NO_SIDE_EFFECTS__ */ () => {
};
ns2.c3 = () => {
};
})(ns || (ns = {}));
---------- /out/stmt-export-default-before-fn-anon.js ----------
/*! This should have "no side effects" */
// @__NO_SIDE_EFFECTS__
export default function() {
}
---------- /out/stmt-export-default-before-fn-name.js ----------
/*! This should have "no side effects" */
// @__NO_SIDE_EFFECTS__
export default function f() {
}
---------- /out/stmt-export-default-before-gen-fn-anon.js ----------
/*! This should have "no side effects" */
// @__NO_SIDE_EFFECTS__
export default function* () {
}
---------- /out/stmt-export-default-before-gen-fn-name.js ----------
/*! This should have "no side effects" */
// @__NO_SIDE_EFFECTS__
export default function* f() {
}
---------- /out/stmt-export-default-before-async-fn-anon.js ----------
/*! This should have "no side effects" */
// @__NO_SIDE_EFFECTS__
export default async function() {
}
---------- /out/stmt-export-default-before-async-fn-name.js ----------
/*! This should have "no side effects" */
// @__NO_SIDE_EFFECTS__
export default async function f() {
}
---------- /out/stmt-export-default-before-async-gen-fn-anon.js ----------
/*! This should have "no side effects" */
// @__NO_SIDE_EFFECTS__
export default async function* () {
}
---------- /out/stmt-export-default-before-async-gen-fn-name.js ----------
/*! This should have "no side effects" */
// @__NO_SIDE_EFFECTS__
export default async function* f() {
}
---------- /out/stmt-export-default-after-fn-anon.js ----------
/*! This should have "no side effects" */
// @__NO_SIDE_EFFECTS__
export default function() {
}
---------- /out/stmt-export-default-after-fn-name.js ----------
/*! This should have "no side effects" */
// @__NO_SIDE_EFFECTS__
export default function f() {
}
---------- /out/stmt-export-default-after-gen-fn-anon.js ----------
/*! This should have "no side effects" */
// @__NO_SIDE_EFFECTS__
export default function* () {
}
---------- /out/stmt-export-default-after-gen-fn-name.js ----------
/*! This should have "no side effects" */
// @__NO_SIDE_EFFECTS__
export default function* f() {
}
---------- /out/stmt-export-default-after-async-fn-anon.js ----------
/*! This should have "no side effects" */
// @__NO_SIDE_EFFECTS__
export default async function() {
}
---------- /out/stmt-export-default-after-async-fn-name.js ----------
/*! This should have "no side effects" */
// @__NO_SIDE_EFFECTS__
export default async function f() {
}
---------- /out/stmt-export-default-after-async-gen-fn-anon.js ----------
/*! This should have "no side effects" */
// @__NO_SIDE_EFFECTS__
export default async function* () {
}
---------- /out/stmt-export-default-after-async-gen-fn-name.js ----------
/*! This should have "no side effects" */
// @__NO_SIDE_EFFECTS__
export default async function* f() {
}
================================================================================
TestNoSideEffectsCommentIgnoreAnnotations
---------- /out/expr-fn.js ----------
x([
function() {
},
function y() {
},
function* () {
},
function* y2() {
},
async function() {
},
async function y3() {
},
async function* () {
},
async function* y4() {
}
]);
---------- /out/expr-arrow.js ----------
x([
(y) => y,
() => {
},
(y) => y,
async (y) => y,
async () => {
},
async (y) => y
]);
---------- /out/stmt-fn.js ----------
function a() {
}
function* b() {
}
async function c() {
}
async function* d() {
}
---------- /out/stmt-export-fn.js ----------
export function a() {
}
export function* b() {
}
export async function c() {
}
export async function* d() {
}
---------- /out/stmt-local.js ----------
var v0 = function() {
}, v1 = function() {
};
let l0 = function() {
}, l1 = function() {
};
const c0 = function() {
}, c1 = function() {
};
var v2 = () => {
}, v3 = () => {
};
let l2 = () => {
}, l3 = () => {
};
const c2 = () => {
}, c3 = () => {
};
---------- /out/stmt-export-local.js ----------
export var v0 = function() {
}, v1 = function() {
};
export let l0 = function() {
}, l1 = function() {
};
export const c0 = function() {
}, c1 = function() {
};
export var v2 = () => {
}, v3 = () => {
};
export let l2 = () => {
}, l3 = () => {
};
export const c2 = () => {
}, c3 = () => {
};
---------- /out/ns-export-fn.js ----------
var ns;
((ns2) => {
function a() {
}
ns2.a = a;
function* b() {
}
ns2.b = b;
async function c() {
}
ns2.c = c;
async function* d() {
}
ns2.d = d;
})(ns || (ns = {}));
---------- /out/ns-export-local.js ----------
var ns;
((ns2) => {
ns2.v0 = function() {
};
ns2.v1 = function() {
};
ns2.l0 = function() {
};
ns2.l1 = function() {
};
ns2.c0 = function() {
};
ns2.c1 = function() {
};
ns2.v2 = () => {
};
ns2.v3 = () => {
};
ns2.l2 = () => {
};
ns2.l3 = () => {
};
ns2.c2 = () => {
};
ns2.c3 = () => {
};
})(ns || (ns = {}));
---------- /out/stmt-export-default-before-fn-anon.js ----------
export default function() {
}
---------- /out/stmt-export-default-before-fn-name.js ----------
export default function f() {
}
---------- /out/stmt-export-default-before-gen-fn-anon.js ----------
export default function* () {
}
---------- /out/stmt-export-default-before-gen-fn-name.js ----------
export default function* f() {
}
---------- /out/stmt-export-default-before-async-fn-anon.js ----------
export default async function() {
}
---------- /out/stmt-export-default-before-async-fn-name.js ----------
export default async function f() {
}
---------- /out/stmt-export-default-before-async-gen-fn-anon.js ----------
export default async function* () {
}
---------- /out/stmt-export-default-before-async-gen-fn-name.js ----------
export default async function* f() {
}
---------- /out/stmt-export-default-after-fn-anon.js ----------
export default function() {
}
---------- /out/stmt-export-default-after-fn-name.js ----------
export default function f() {
}
---------- /out/stmt-export-default-after-gen-fn-anon.js ----------
export default function* () {
}
---------- /out/stmt-export-default-after-gen-fn-name.js ----------
export default function* f() {
}
---------- /out/stmt-export-default-after-async-fn-anon.js ----------
export default async function() {
}
---------- /out/stmt-export-default-after-async-fn-name.js ----------
export default async function f() {
}
---------- /out/stmt-export-default-after-async-gen-fn-anon.js ----------
export default async function* () {
}
---------- /out/stmt-export-default-after-async-gen-fn-name.js ----------
export default async function* f() {
}
================================================================================
TestNoSideEffectsCommentMinifyWhitespace
---------- /out/expr-fn.js ----------
x([function(){},function y(){},function*(){},function*y2(){},async function(){},async function y3(){},async function*(){},async function*y4(){}]);
---------- /out/expr-arrow.js ----------
x([y=>y,()=>{},y=>y,async y=>y,async()=>{},async y=>y]);
---------- /out/stmt-fn.js ----------
function a(){}function*b(){}async function c(){}async function*d(){}
---------- /out/stmt-export-fn.js ----------
export function a(){}export function*b(){}export async function c(){}export async function*d(){}
---------- /out/stmt-local.js ----------
var v0=function(){},v1=function(){};let l0=function(){},l1=function(){};const c0=function(){},c1=function(){};var v2=()=>{},v3=()=>{};let l2=()=>{},l3=()=>{};const c2=()=>{},c3=()=>{};
---------- /out/stmt-export-local.js ----------
export var v0=function(){},v1=function(){};export let l0=function(){},l1=function(){};export const c0=function(){},c1=function(){};export var v2=()=>{},v3=()=>{};export let l2=()=>{},l3=()=>{};export const c2=()=>{},c3=()=>{};
---------- /out/ns-export-fn.js ----------
var ns;(ns2=>{function a(){}ns2.a=a;function*b(){}ns2.b=b;async function c(){}ns2.c=c;async function*d(){}ns2.d=d})(ns||(ns={}));
---------- /out/ns-export-local.js ----------
var ns;(ns2=>{ns2.v0=function(){};ns2.v1=function(){};ns2.l0=function(){};ns2.l1=function(){};ns2.c0=function(){};ns2.c1=function(){};ns2.v2=()=>{};ns2.v3=()=>{};ns2.l2=()=>{};ns2.l3=()=>{};ns2.c2=()=>{};ns2.c3=()=>{}})(ns||(ns={}));
---------- /out/stmt-export-default-before-fn-anon.js ----------
export default function(){}
---------- /out/stmt-export-default-before-fn-name.js ----------
export default function f(){}
---------- /out/stmt-export-default-before-gen-fn-anon.js ----------
export default function*(){}
---------- /out/stmt-export-default-before-gen-fn-name.js ----------
export default function*f(){}
---------- /out/stmt-export-default-before-async-fn-anon.js ----------
export default async function(){}
---------- /out/stmt-export-default-before-async-fn-name.js ----------
export default async function f(){}
---------- /out/stmt-export-default-before-async-gen-fn-anon.js ----------
export default async function*(){}
---------- /out/stmt-export-default-before-async-gen-fn-name.js ----------
export default async function*f(){}
---------- /out/stmt-export-default-after-fn-anon.js ----------
export default function(){}
---------- /out/stmt-export-default-after-fn-name.js ----------
export default function f(){}
---------- /out/stmt-export-default-after-gen-fn-anon.js ----------
export default function*(){}
---------- /out/stmt-export-default-after-gen-fn-name.js ----------
export default function*f(){}
---------- /out/stmt-export-default-after-async-fn-anon.js ----------
export default async function(){}
---------- /out/stmt-export-default-after-async-fn-name.js ----------
export default async function f(){}
---------- /out/stmt-export-default-after-async-gen-fn-anon.js ----------
export default async function*(){}
---------- /out/stmt-export-default-after-async-gen-fn-name.js ----------
export default async function*f(){}
================================================================================
TestNoSideEffectsCommentTypeScriptDeclare
---------- /out/entry.js ----------
var ns;
((ns2) => {
})(ns || (ns = {}));
================================================================================
TestNoSideEffectsCommentUnusedCalls
---------- /out/stmt-fn.js ----------
// @__NO_SIDE_EFFECTS__
function f(y) {
sideEffect(y);
}
// @__NO_SIDE_EFFECTS__
function* g(y) {
sideEffect(y);
}
onlyKeepThisIdentifier;
onlyKeepThisIdentifier;
x(/* @__PURE__ */ f("keepThisCall"));
x(/* @__PURE__ */ g("keepThisCall"));
---------- /out/stmt-local.js ----------
const f = /* @__NO_SIDE_EFFECTS__ */ function(y) {
sideEffect(y);
}, g = /* @__NO_SIDE_EFFECTS__ */ function* (y) {
sideEffect(y);
};
onlyKeepThisIdentifier;
onlyKeepThisIdentifier;
x(/* @__PURE__ */ f("keepThisCall"));
x(/* @__PURE__ */ g("keepThisCall"));
---------- /out/expr-fn.js ----------
const f = /* @__NO_SIDE_EFFECTS__ */ function(y) {
sideEffect(y);
}, g = /* @__NO_SIDE_EFFECTS__ */ function* (y) {
sideEffect(y);
};
onlyKeepThisIdentifier;
onlyKeepThisIdentifier;
x(/* @__PURE__ */ f("keepThisCall"));
x(/* @__PURE__ */ g("keepThisCall"));
---------- /out/stmt-export-default-fn.js ----------
// @__NO_SIDE_EFFECTS__
export default function f(y) {
sideEffect(y);
}
onlyKeepThisIdentifier;
x(/* @__PURE__ */ f("keepThisCall"));
================================================================================
TestPackageJsonSideEffectsArrayGlob
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/keep/this/file.js
console.log("this should be kept");
================================================================================
TestPackageJsonSideEffectsArrayKeep
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/index.js
console.log("hello");
// Users/user/project/src/entry.js
console.log("unused import");
================================================================================
TestPackageJsonSideEffectsArrayKeepMainImplicitMain
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/index-main.js
var index_main_exports = {};
__export(index_main_exports, {
foo: () => foo
});
var foo;
var init_index_main = __esm({
"Users/user/project/node_modules/demo-pkg/index-main.js"() {
foo = 123;
console.log("this should be kept");
}
});
// Users/user/project/src/entry.js
init_index_main();
// Users/user/project/src/require-demo-pkg.js
init_index_main();
// Users/user/project/src/entry.js
console.log("unused import");
================================================================================
TestPackageJsonSideEffectsArrayKeepMainImplicitModule
---------- /out.js ----------
// Users/user/project/src/entry.js
console.log("unused import");
================================================================================
TestPackageJsonSideEffectsArrayKeepMainUseMain
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/index-main.js
console.log("this should be kept");
// Users/user/project/src/entry.js
console.log("unused import");
================================================================================
TestPackageJsonSideEffectsArrayKeepMainUseModule
---------- /out.js ----------
// Users/user/project/src/entry.js
console.log("unused import");
================================================================================
TestPackageJsonSideEffectsArrayKeepModuleImplicitMain
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/index-main.js
var index_main_exports = {};
__export(index_main_exports, {
foo: () => foo
});
var foo;
var init_index_main = __esm({
"Users/user/project/node_modules/demo-pkg/index-main.js"() {
foo = 123;
console.log("this should be kept");
}
});
// Users/user/project/src/require-demo-pkg.js
init_index_main();
// Users/user/project/src/entry.js
console.log("unused import");
================================================================================
TestPackageJsonSideEffectsArrayKeepModuleImplicitModule
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/index-module.js
console.log("this should be kept");
// Users/user/project/src/entry.js
console.log("unused import");
================================================================================
TestPackageJsonSideEffectsArrayKeepModuleUseMain
---------- /out.js ----------
// Users/user/project/src/entry.js
console.log("unused import");
================================================================================
TestPackageJsonSideEffectsArrayKeepModuleUseModule
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/index-module.js
console.log("this should be kept");
// Users/user/project/src/entry.js
console.log("unused import");
================================================================================
TestPackageJsonSideEffectsArrayRemove
---------- /out.js ----------
// Users/user/project/src/entry.js
console.log("unused import");
================================================================================
TestPackageJsonSideEffectsFalseAllFork
---------- /out.js ----------
// Users/user/project/node_modules/c/index.js
var foo;
var init_c = __esm({
"Users/user/project/node_modules/c/index.js"() {
foo = "foo";
}
});
// Users/user/project/node_modules/b/index.js
var init_b = __esm({
"Users/user/project/node_modules/b/index.js"() {
init_c();
}
});
// Users/user/project/node_modules/a/index.js
var a_exports = {};
__export(a_exports, {
foo: () => foo
});
var init_a = __esm({
"Users/user/project/node_modules/a/index.js"() {
init_b();
}
});
// Users/user/project/src/entry.js
Promise.resolve().then(() => (init_a(), a_exports)).then((x) => assert(x.foo === "foo"));
================================================================================
TestPackageJsonSideEffectsFalseCrossPlatformSlash
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/foo.js
console.log("foo");
// Users/user/project/node_modules/demo-pkg/bar/index.js
console.log("bar");
================================================================================
TestPackageJsonSideEffectsFalseIntermediateFilesChainAll
---------- /out.js ----------
// Users/user/project/node_modules/d/index.js
var foo = 123;
// Users/user/project/node_modules/b/index.js
throw "keep this";
// Users/user/project/src/entry.js
console.log(foo);
================================================================================
TestPackageJsonSideEffectsFalseIntermediateFilesChainOne
---------- /out.js ----------
// Users/user/project/node_modules/d/index.js
var foo = 123;
// Users/user/project/node_modules/b/index.js
throw "keep this";
// Users/user/project/src/entry.js
console.log(foo);
================================================================================
TestPackageJsonSideEffectsFalseIntermediateFilesDiamond
---------- /out.js ----------
// Users/user/project/node_modules/d/index.js
var foo = 123;
// Users/user/project/node_modules/b1/index.js
throw "keep this 1";
// Users/user/project/node_modules/b2/index.js
throw "keep this 2";
// Users/user/project/src/entry.js
console.log(foo);
================================================================================
TestPackageJsonSideEffectsFalseIntermediateFilesUnused
---------- /out.js ----------
================================================================================
TestPackageJsonSideEffectsFalseIntermediateFilesUsed
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/foo.js
var foo = 123;
// Users/user/project/node_modules/demo-pkg/index.js
throw "keep this";
// Users/user/project/src/entry.js
console.log(foo);
================================================================================
TestPackageJsonSideEffectsFalseKeepBareImportAndRequireCommonJS
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/index.js
var require_demo_pkg = __commonJS({
"Users/user/project/node_modules/demo-pkg/index.js"(exports) {
exports.foo = 123;
console.log("hello");
}
});
// Users/user/project/src/entry.js
require_demo_pkg();
console.log("unused import");
================================================================================
TestPackageJsonSideEffectsFalseKeepBareImportAndRequireES6
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/index.js
var demo_pkg_exports = {};
__export(demo_pkg_exports, {
foo: () => foo
});
var foo;
var init_demo_pkg = __esm({
"Users/user/project/node_modules/demo-pkg/index.js"() {
foo = 123;
console.log("hello");
}
});
// Users/user/project/src/entry.js
init_demo_pkg();
console.log("unused import");
================================================================================
TestPackageJsonSideEffectsFalseKeepNamedImportCommonJS
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/index.js
var require_demo_pkg = __commonJS({
"Users/user/project/node_modules/demo-pkg/index.js"(exports) {
exports.foo = 123;
console.log("hello");
}
});
// Users/user/project/src/entry.js
var import_demo_pkg = __toESM(require_demo_pkg());
console.log(import_demo_pkg.foo);
================================================================================
TestPackageJsonSideEffectsFalseKeepNamedImportES6
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/index.js
var foo = 123;
console.log("hello");
// Users/user/project/src/entry.js
console.log(foo);
================================================================================
TestPackageJsonSideEffectsFalseKeepStarImportCommonJS
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/index.js
var require_demo_pkg = __commonJS({
"Users/user/project/node_modules/demo-pkg/index.js"(exports) {
exports.foo = 123;
console.log("hello");
}
});
// Users/user/project/src/entry.js
var ns = __toESM(require_demo_pkg());
console.log(ns);
================================================================================
TestPackageJsonSideEffectsFalseKeepStarImportES6
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/index.js
var demo_pkg_exports = {};
__export(demo_pkg_exports, {
foo: () => foo
});
var foo = 123;
console.log("hello");
// Users/user/project/src/entry.js
console.log(demo_pkg_exports);
================================================================================
TestPackageJsonSideEffectsFalseNoWarningInNodeModulesIssue999
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/index.js
console.log("unused import");
// Users/user/project/src/entry.js
console.log("used import");
================================================================================
TestPackageJsonSideEffectsFalseOneFork
---------- /out.js ----------
// Users/user/project/node_modules/c/index.js
var foo;
var init_c = __esm({
"Users/user/project/node_modules/c/index.js"() {
foo = "foo";
}
});
// Users/user/project/node_modules/d/index.js
var init_d = __esm({
"Users/user/project/node_modules/d/index.js"() {
}
});
// Users/user/project/node_modules/b/index.js
var init_b = __esm({
"Users/user/project/node_modules/b/index.js"() {
init_c();
init_d();
}
});
// Users/user/project/node_modules/a/index.js
var a_exports = {};
__export(a_exports, {
foo: () => foo
});
var init_a = __esm({
"Users/user/project/node_modules/a/index.js"() {
init_b();
}
});
// Users/user/project/src/entry.js
Promise.resolve().then(() => (init_a(), a_exports)).then((x) => assert(x.foo === "foo"));
================================================================================
TestPackageJsonSideEffectsFalseRemoveBareImportCommonJS
---------- /out.js ----------
// Users/user/project/src/entry.js
console.log("unused import");
================================================================================
TestPackageJsonSideEffectsFalseRemoveBareImportES6
---------- /out.js ----------
// Users/user/project/src/entry.js
console.log("unused import");
================================================================================
TestPackageJsonSideEffectsFalseRemoveNamedImportCommonJS
---------- /out.js ----------
// Users/user/project/src/entry.js
console.log("unused import");
================================================================================
TestPackageJsonSideEffectsFalseRemoveNamedImportES6
---------- /out.js ----------
// Users/user/project/src/entry.js
console.log("unused import");
================================================================================
TestPackageJsonSideEffectsFalseRemoveStarImportCommonJS
---------- /out.js ----------
// Users/user/project/src/entry.js
console.log("unused import");
================================================================================
TestPackageJsonSideEffectsFalseRemoveStarImportES6
---------- /out.js ----------
// Users/user/project/src/entry.js
console.log("unused import");
================================================================================
TestPackageJsonSideEffectsKeepExportDefaultExpr
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/index.js
var demo_pkg_default = exprWithSideEffects();
// Users/user/project/src/entry.js
console.log(demo_pkg_default);
================================================================================
TestPackageJsonSideEffectsNestedDirectoryRemove
---------- /out.js ----------
// Users/user/project/src/entry.js
console.log("unused import");
================================================================================
TestPackageJsonSideEffectsTrueKeepCommonJS
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/index.js
var require_demo_pkg = __commonJS({
"Users/user/project/node_modules/demo-pkg/index.js"(exports) {
exports.foo = 123;
console.log("hello");
}
});
// Users/user/project/src/entry.js
var import_demo_pkg = __toESM(require_demo_pkg());
console.log("unused import");
================================================================================
TestPackageJsonSideEffectsTrueKeepES6
---------- /out.js ----------
// Users/user/project/node_modules/demo-pkg/index.js
console.log("hello");
// Users/user/project/src/entry.js
console.log("unused import");
================================================================================
TestPreserveDirectivesMinifyBundle
---------- /out.js ----------
"use 1";
"use 2";
"use 3";
(() => {
// nested.js
//! A
//! B
//! C
nested();
//! D
//! E
//! F
// entry.js
//! 1
//! 2
//! 3
entry();
//! 4
//! 5
//! 6
})();
================================================================================
TestPreserveDirectivesMinifyIIFE
---------- /out.js ----------
"use 1";
"use 2";
"use 3";
(() => {
//! 1
//! 2
//! 3
entry();
//! 4
//! 5
//! 6
})();
================================================================================
TestPreserveDirectivesMinifyPassThrough
---------- /out.js ----------
"use 1";
"use 2";
"use 3";
//! 1
//! 2
//! 3
entry();
//! 4
//! 5
//! 6
================================================================================
TestPureCallsWithSpread
---------- /out.js ----------
// entry.js
[...args];
[...args];
================================================================================
TestRemoveCodeAfterLabelWithReturn
---------- /out.js ----------
function earlyReturn() {
onlyWithKeep();
}
function loop() {
if (foo()) {
bar();
return;
}
}
================================================================================
TestRemoveTrailingReturn
---------- /out.js ----------
// entry.js
function foo() {
a && b();
}
function bar() {
return a && b(), KEEP_ME;
}
var entry_default = [
foo,
bar,
function() {
a && b();
},
function() {
return a && b(), KEEP_ME;
},
() => {
a && b();
},
() => (a && b(), KEEP_ME)
];
export {
entry_default as default
};
================================================================================
TestRemoveUnusedImportMeta
---------- /out.js ----------
// entry.js
console.log("foo is unused");
================================================================================
TestRemoveUnusedImports
---------- /out.js ----------
import "a";
import "b";
import "c";
================================================================================
TestRemoveUnusedImportsEval
---------- /out.js ----------
import a from "a";
import * as b from "b";
import { c } from "c";
eval("foo(a, b, c)");
================================================================================
TestRemoveUnusedImportsEvalTS
---------- /out.js ----------
eval("foo(a, b, c)");
================================================================================
TestRemoveUnusedNoSideEffectsTaggedTemplates
---------- /out.js ----------
// entry.js
// @__NO_SIDE_EFFECTS__
function foo() {
}
use(foo`keep`);
keep, alsoKeep;
`${keep}${alsoKeep}`;
================================================================================
TestRemoveUnusedPureCommentCalls
---------- /out.js ----------
// entry.js
function bar() {
}
var bare = foo(bar);
var at_no = /* @__PURE__ */ foo(bar());
var new_at_no = /* @__PURE__ */ new foo(bar());
var nospace_at_no = /* @__PURE__ */ foo(bar());
var nospace_new_at_no = /* @__PURE__ */ new foo(bar());
var num_no = /* @__PURE__ */ foo(bar());
var new_num_no = /* @__PURE__ */ new foo(bar());
var nospace_num_no = /* @__PURE__ */ foo(bar());
var nospace_new_num_no = /* @__PURE__ */ new foo(bar());
var dot_no = /* @__PURE__ */ foo(sideEffect()).dot(bar());
var new_dot_no = /* @__PURE__ */ new foo(sideEffect()).dot(bar());
var nested_no = [1, /* @__PURE__ */ foo(bar()), 2];
var new_nested_no = [1, /* @__PURE__ */ new foo(bar()), 2];
var single_at_no = /* @__PURE__ */ foo(bar());
var new_single_at_no = /* @__PURE__ */ new foo(bar());
var single_num_no = /* @__PURE__ */ foo(bar());
var new_single_num_no = /* @__PURE__ */ new foo(bar());
var bad_no = (
/* __PURE__ */
foo(bar)
);
var new_bad_no = (
/* __PURE__ */
new foo(bar)
);
var parens_no = foo(bar);
var new_parens_no = new foo(bar);
var exp_no = /* @__PURE__ */ foo() ** foo();
var new_exp_no = /* @__PURE__ */ new foo() ** foo();
================================================================================
TestTextLoaderRemoveUnused
---------- /out.js ----------
// entry.js
console.log("unused import");
================================================================================
TestTopLevelFunctionInliningWithSpread
---------- /out/entry.js ----------
// entry.js
function identity1(x) {
return x;
}
function identity3(x) {
return x;
}
args;
[...args];
identity1();
args;
identity3(...args);
---------- /out/entry-outer.js ----------
// inner.js
function identity1(x) {
return x;
}
function identity3(x) {
return x;
}
// entry-outer.js
args;
[...args];
identity1();
args;
identity3(...args);
================================================================================
TestTreeShakingBinaryOperators
---------- /out.js ----------
// entry.js
var keep;
var keep2;
keep + keep2;
keep - keep2;
keep * keep2;
keep / keep2;
keep % keep2;
keep ** keep2;
keep < keep2;
keep <= keep2;
keep > keep2;
keep >= keep2;
keep in keep2;
keep instanceof keep2;
keep << keep2;
keep >> keep2;
keep >>> keep2;
keep == keep2;
keep != keep2;
keep | keep2;
keep & keep2;
keep ^ keep2;
keep = keep2;
keep += keep2;
keep -= keep2;
keep *= keep2;
keep /= keep2;
keep %= keep2;
keep **= keep2;
keep <<= keep2;
keep >>= keep2;
keep >>>= keep2;
keep |= keep2;
keep &= keep2;
keep ^= keep2;
keep ??= keep2;
keep ||= keep2;
keep &&= keep2;
================================================================================
TestTreeShakingClassProperty
---------- /out.js ----------
let keep1 = class {
[x] = "x";
};
let keep2 = class {
[x]() {
}
};
let keep3 = class {
get [x]() {
}
};
let keep4 = class {
set [x](_) {
}
};
let keep5 = class {
async [x]() {
}
};
let keep6 = class {
[{ toString() {
} }] = "x";
};
================================================================================
TestTreeShakingClassStaticProperty
---------- /out.js ----------
let keep1 = class {
static x = x;
};
let keep2 = class {
static ["x"] = x;
};
let keep3 = class {
static [x] = "x";
};
let keep4 = class {
static [x]() {
}
};
let keep5 = class {
static get [x]() {
}
};
let keep6 = class {
static set [x](_) {
}
};
let keep7 = class {
static async [x]() {
}
};
let keep8 = class {
static [{ toString() {
} }] = "x";
};
================================================================================
TestTreeShakingImportIdentifier
---------- /out.js ----------
// b.js
var Base = class {
};
// a.js
var Keep = class extends Base {
};
// entry.js
new Keep();
================================================================================
TestTreeShakingInESMWrapper
---------- /out.js ----------
// lib.js
var keep1, keep2;
var init_lib = __esm({
"lib.js"() {
keep1 = () => "keep1";
keep2 = () => "keep2";
}
});
// cjs.js
var cjs_exports = {};
__export(cjs_exports, {
default: () => cjs_default
});
var cjs_default;
var init_cjs = __esm({
"cjs.js"() {
init_lib();
cjs_default = keep2();
}
});
// entry.js
init_lib();
console.log(keep1(), (init_cjs(), __toCommonJS(cjs_exports)));
================================================================================
TestTreeShakingJSWithAssociatedCSS
---------- /out/test.js ----------
// project/node_modules/pkg/button.js
var Button;
// project/test.jsx
render(/* @__PURE__ */ React.createElement(Button, null));
---------- /out/test.css ----------
/* project/node_modules/pkg/button.css */
button {
color: red;
}
/* project/node_modules/pkg/menu.css */
menu {
color: red;
}
================================================================================
TestTreeShakingJSWithAssociatedCSSExportStarSideEffectsFalse
---------- /out/test.js ----------
// project/node_modules/pkg/button.css
var require_button = __commonJS({
"project/node_modules/pkg/button.css"(exports, module) {
module.exports = {};
}
});
// project/node_modules/pkg/components.jsx
require_button();
var Button = () => /* @__PURE__ */ React.createElement("button", null);
// project/test.jsx
render(/* @__PURE__ */ React.createElement(Button, null));
---------- /out/test.css ----------
/* project/node_modules/pkg/button.css */
button {
color: red;
}
================================================================================
TestTreeShakingJSWithAssociatedCSSExportStarSideEffectsFalseOnlyJS
---------- /out/test.js ----------
// project/node_modules/pkg/button.css
var require_button = __commonJS({
"project/node_modules/pkg/button.css"(exports, module) {
module.exports = {};
}
});
// project/node_modules/pkg/components.jsx
require_button();
var Button = () => /* @__PURE__ */ React.createElement("button", null);
// project/test.jsx
render(/* @__PURE__ */ React.createElement(Button, null));
---------- /out/test.css ----------
/* project/node_modules/pkg/button.css */
button {
color: red;
}
================================================================================
TestTreeShakingJSWithAssociatedCSSReExportSideEffectsFalse
---------- /out/test.js ----------
// project/node_modules/pkg/button.css
var require_button = __commonJS({
"project/node_modules/pkg/button.css"(exports, module) {
module.exports = {};
}
});
// project/node_modules/pkg/components.jsx
require_button();
var Button = () => /* @__PURE__ */ React.createElement("button", null);
// project/test.jsx
render(/* @__PURE__ */ React.createElement(Button, null));
---------- /out/test.css ----------
/* project/node_modules/pkg/button.css */
button {
color: red;
}
================================================================================
TestTreeShakingJSWithAssociatedCSSReExportSideEffectsFalseOnlyJS
---------- /out/test.js ----------
// project/node_modules/pkg/button.css
var require_button = __commonJS({
"project/node_modules/pkg/button.css"(exports, module) {
module.exports = {};
}
});
// project/node_modules/pkg/components.jsx
require_button();
var Button = () => /* @__PURE__ */ React.createElement("button", null);
// project/test.jsx
render(/* @__PURE__ */ React.createElement(Button, null));
---------- /out/test.css ----------
/* project/node_modules/pkg/button.css */
button {
color: red;
}
================================================================================
TestTreeShakingJSWithAssociatedCSSUnusedNestedImportSideEffectsFalse
---------- /out/test.js ----------
// project/node_modules/pkg/button.jsx
var Button = () => /* @__PURE__ */ React.createElement("button", null);
// project/test.jsx
render(/* @__PURE__ */ React.createElement(Button, null));
---------- /out/test.css ----------
/* project/node_modules/pkg/styles.css */
button {
color: red;
}
================================================================================
TestTreeShakingJSWithAssociatedCSSUnusedNestedImportSideEffectsFalseOnlyJS
---------- /out/test.js ----------
// project/node_modules/pkg/button.jsx
var Button = () => /* @__PURE__ */ React.createElement("button", null);
// project/test.jsx
render(/* @__PURE__ */ React.createElement(Button, null));
---------- /out/test.css ----------
/* project/node_modules/pkg/styles.css */
button {
color: red;
}
================================================================================
TestTreeShakingLoweredClassStaticField
---------- /out/entry.js ----------
// entry.js
var KeepMe1 = class {
};
__publicField(KeepMe1, "x", "x");
__publicField(KeepMe1, "y", sideEffects());
__publicField(KeepMe1, "z", "z");
var KeepMe2 = class {
};
__publicField(KeepMe2, "x", "x");
__publicField(KeepMe2, "y", "y");
__publicField(KeepMe2, "z", "z");
new KeepMe2();
================================================================================
TestTreeShakingLoweredClassStaticFieldAssignment
---------- /out/entry.js ----------
// entry.ts
var KeepMe1 = class {
};
KeepMe1.x = "x";
KeepMe1.y = "y";
KeepMe1.z = "z";
var KeepMe2 = class {
};
KeepMe2.x = "x";
KeepMe2.y = sideEffects();
KeepMe2.z = "z";
var KeepMe3 = class {
};
KeepMe3.x = "x";
KeepMe3.y = "y";
KeepMe3.z = "z";
new KeepMe3();
================================================================================
TestTreeShakingLoweredClassStaticFieldMinified
---------- /out/entry.js ----------
// entry.js
var KeepMe1 = class {
};
__publicField(KeepMe1, "x", "x"), __publicField(KeepMe1, "y", sideEffects()), __publicField(KeepMe1, "z", "z");
var KeepMe2 = class {
};
__publicField(KeepMe2, "x", "x"), __publicField(KeepMe2, "y", "y"), __publicField(KeepMe2, "z", "z");
new KeepMe2();
================================================================================
TestTreeShakingNoBundleCJS
---------- /out.js ----------
function keep() {
}
function unused() {
}
keep();
================================================================================
TestTreeShakingNoBundleESM
---------- /out.js ----------
function keep() {
}
function unused() {
}
keep();
================================================================================
TestTreeShakingNoBundleIIFE
---------- /out.js ----------
(() => {
function keep() {
}
keep();
})();
================================================================================
TestTreeShakingObjectProperty
---------- /out.js ----------
let keep1 = { x };
let keep2 = { x };
let keep3 = { ...x };
let keep4 = { [x]: "x" };
let keep5 = { [x]() {
} };
let keep6 = { get [x]() {
} };
let keep7 = { set [x](_) {
} };
let keep8 = { async [x]() {
} };
let keep9 = { [{ toString() {
} }]: "x" };
================================================================================
TestTreeShakingReactElements
---------- /out.js ----------
// entry.jsx
function Foo() {
}
var d = /* @__PURE__ */ React.createElement("div", null);
var e = /* @__PURE__ */ React.createElement(Foo, null, d);
var f = /* @__PURE__ */ React.createElement(React.Fragment, null, e);
console.log(f);
================================================================================
TestTreeShakingUnaryOperators
---------- /out.js ----------
(() => {
// entry.js
var keep;
+keep;
-keep;
~keep;
delete keep;
++keep;
--keep;
keep++;
keep--;
})();