Skip to content
This repository was archived by the owner on Oct 18, 2023. It is now read-only.

Commit 98221a8

Browse files
fix: preserve unused variables (#29)
1 parent 4eee59e commit 98221a8

File tree

2 files changed

+28
-18
lines changed

2 files changed

+28
-18
lines changed

src/transform/get-esbuild-options.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@ export const getEsbuildOptions = (
2121
*
2222
* minifyIdentifiers is disabled because debuggers don't use the
2323
* `names` property from the source map
24+
*
25+
* minifySyntax is disabled because it does some tree-shaking
26+
* eg. unused try-catch error variable
2427
*/
25-
minifySyntax: true,
2628
minifyWhitespace: true,
2729
keepNames: true,
2830

tests/specs/transform.ts

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,22 @@ const base64Module = (code: string) => `data:text/javascript;base64,${Buffer.fro
77

88
const fixtures = {
99
ts: `
10+
try {
11+
const unusedVariable1 = 1;
12+
} catch (unusedError) {
13+
const unusedVariable2 = 2;
14+
}
1015
export default 'default value' as string;
1116
export const named: string = 'named';
1217
export const functionName: string = (function named() {}).name;
1318
`,
1419

1520
esm: `
21+
try {
22+
const unusedVariable1 = 1;
23+
} catch (unusedError) {
24+
const unusedVariable2 = 2;
25+
}
1626
export default 'default value';
1727
export const named = 'named';
1828
export const functionName = (function named() {}).name;
@@ -26,11 +36,13 @@ export default testSuite(({ describe }) => {
2636
const transformed = transformSync(
2737
fixtures.esm,
2838
'file.js',
29-
{
30-
format: 'cjs',
31-
},
39+
{ format: 'cjs' },
3240
);
3341

42+
// For debuggers
43+
expect(transformed.code).toMatch('unusedVariable1');
44+
expect(transformed.code).toMatch('unusedVariable2');
45+
3446
const fsRequire = createFsRequire(Volume.fromJSON({
3547
'/file.js': transformed.code,
3648
}));
@@ -50,9 +62,7 @@ export default testSuite(({ describe }) => {
5062
import('fs');
5163
${fixtures.esm}`,
5264
'file.js',
53-
{
54-
format: 'cjs',
55-
},
65+
{ format: 'cjs' },
5666
),
5767
).not.toThrow();
5868
});
@@ -62,9 +72,7 @@ export default testSuite(({ describe }) => {
6272
const transformed = transformSync(
6373
fixtures.ts,
6474
fileName,
65-
{
66-
format: 'esm',
67-
},
75+
{ format: 'esm' },
6876
);
6977

7078
expect(transformed.map).not.toBe('');
@@ -73,7 +81,7 @@ export default testSuite(({ describe }) => {
7381

7482
expect(map.sources.length).toBe(1);
7583
expect(map.sources[0]).toBe(fileName);
76-
expect(map.names).toStrictEqual([]);
84+
expect(map.names).toStrictEqual(['named']);
7785
});
7886
});
7987

@@ -82,11 +90,13 @@ export default testSuite(({ describe }) => {
8290
const transformed = await transform(
8391
fixtures.ts,
8492
'file.ts',
85-
{
86-
format: 'esm',
87-
},
93+
{ format: 'esm' },
8894
);
8995

96+
// For debuggers
97+
expect(transformed.code).toMatch('unusedVariable1');
98+
expect(transformed.code).toMatch('unusedVariable2');
99+
90100
const imported = await import(base64Module(transformed.code));
91101
expect({ ...imported }).toStrictEqual({
92102
default: 'default value',
@@ -100,9 +110,7 @@ export default testSuite(({ describe }) => {
100110
const transformed = await transform(
101111
fixtures.ts,
102112
fileName,
103-
{
104-
format: 'esm',
105-
},
113+
{ format: 'esm' },
106114
);
107115

108116
expect(transformed.map).not.toBe('');
@@ -111,7 +119,7 @@ export default testSuite(({ describe }) => {
111119

112120
expect(map.sources.length).toBe(1);
113121
expect(map.sources[0]).toBe(fileName);
114-
expect(map.names).toStrictEqual([]);
122+
expect(map.names).toStrictEqual(['named']);
115123
});
116124
});
117125
});

0 commit comments

Comments
 (0)