Skip to content

Commit aba4ae6

Browse files
authored
Set swc option keepClassNames whenever possible (#1344)
* set swc option keepClassNames whenever possible * increase minimum swc version to 1.2.50 to support keepClassNames * update package-lock.json * add test * lint-fix * Fix tests so they actually fail without the bugfix * remove log statement from tests * compat with ts 2.7
1 parent 34ce778 commit aba4ae6

File tree

8 files changed

+6550
-73
lines changed

8 files changed

+6550
-73
lines changed

package-lock.json

+6,520-60
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@
112112
},
113113
"devDependencies": {
114114
"@microsoft/api-extractor": "^7.15.2",
115-
"@swc/core": ">=1.2.45",
116-
"@swc/wasm": ">=1.2.45",
115+
"@swc/core": ">=1.2.50",
116+
"@swc/wasm": ">=1.2.50",
117117
"@types/chai": "^4.0.4",
118118
"@types/diff": "^4.0.2",
119119
"@types/lodash": "^4.14.151",
@@ -143,8 +143,8 @@
143143
"util.promisify": "^1.0.1"
144144
},
145145
"peerDependencies": {
146-
"@swc/core": ">=1.2.45",
147-
"@swc/wasm": ">=1.2.45",
146+
"@swc/core": ">=1.2.50",
147+
"@swc/wasm": ">=1.2.50",
148148
"@types/node": "*",
149149
"typescript": ">=2.7"
150150
},

src/test/index.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -345,15 +345,15 @@ test.suite('ts-node', (test) => {
345345
`${cmdNoProject} --transpiler ts-node/transpilers/swc-experimental transpile-only-swc`
346346
);
347347
expect(err).to.equal(null);
348-
expect(stdout).to.contain('hello world');
348+
expect(stdout).to.contain('Hello World!');
349349
});
350350

351351
test('should support third-party transpilers via tsconfig', async () => {
352352
const { err, stdout } = await exec(
353353
`${cmdNoProject} transpile-only-swc-via-tsconfig`
354354
);
355355
expect(err).to.equal(null);
356-
expect(stdout).to.contain('hello world');
356+
expect(stdout).to.contain('Hello World!');
357357
});
358358

359359
test('should pipe into `ts-node` and evaluate', async () => {

src/transpilers/swc.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ export function create(createOptions: SwcTranspilerOptions): Transpiler {
5555
const nonTsxOptions = createSwcOptions(false);
5656
const tsxOptions = createSwcOptions(true);
5757
function createSwcOptions(isTsx: boolean): swcTypes.Options {
58+
const swcTarget = targetMapping.get(target!) ?? 'es3';
59+
const keepClassNames = target! >= /* ts.ScriptTarget.ES2016 */ 3;
5860
return {
5961
sourceMaps: sourceMap,
6062
// isModule: true,
@@ -71,7 +73,7 @@ export function create(createOptions: SwcTranspilerOptions): Transpiler {
7173
decorators: experimentalDecorators,
7274
dynamicImport: true,
7375
},
74-
target: targetMapping.get(target!) ?? 'es3',
76+
target: swcTarget,
7577
transform: {
7678
decoratorMetadata: emitDecoratorMetadata,
7779
legacyDecorator: true,
@@ -81,9 +83,10 @@ export function create(createOptions: SwcTranspilerOptions): Transpiler {
8183
useBuiltins: false,
8284
pragma: jsxFactory!,
8385
pragmaFrag: jsxFragmentFactory!,
84-
},
86+
} as swcTypes.ReactConfig,
8587
},
86-
},
88+
keepClassNames,
89+
} as swcTypes.JscConfig,
8790
};
8891
}
8992

Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1+
// Test for #1343
2+
const Decorator = function () {};
3+
@Decorator
4+
class World {}
5+
16
// intentional type errors to check transpile-only ESM loader skips type checking
27
parseInt(1101, 2);
3-
const x: number = 'hello world';
8+
const x: number = `Hello ${World.name}!`;
49
console.log(x);

tests/transpile-only-swc-via-tsconfig/tsconfig.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
"transpiler": "ts-node/transpilers/swc-experimental"
55
},
66
"compilerOptions": {
7+
"target": "ES2018",
78
"module": "ESNext",
89
"allowJs": true,
9-
"jsx": "react"
10+
"jsx": "react",
11+
"experimentalDecorators": true
1012
}
1113
}

tests/transpile-only-swc/index.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1+
// Test for #1343
2+
const Decorator = function () {};
3+
@Decorator
4+
class World {}
5+
16
// intentional type errors to check transpile-only ESM loader skips type checking
27
parseInt(1101, 2);
3-
const x: number = 'hello world';
8+
const x: number = `Hello ${World.name}!`;
49
console.log(x);
+3-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
{
22
"compilerOptions": {
3+
"target": "ES2018",
34
"module": "ESNext",
45
"allowJs": true,
5-
"jsx": "react"
6+
"jsx": "react",
7+
"experimentalDecorators": true
68
}
79
}

0 commit comments

Comments
 (0)