Skip to content

Commit

Permalink
WIP experimental swc compiler
Browse files Browse the repository at this point in the history
  • Loading branch information
cspotcode committed Nov 22, 2020
1 parent 8b9489a commit 19990d4
Show file tree
Hide file tree
Showing 4 changed files with 108 additions and 1 deletion.
1 change: 1 addition & 0 deletions compilers/swc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
module.exports = require('../dist/compilers/swc')
47 changes: 47 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 7 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@
"./esm": "./esm.mjs",
"./esm.mjs": "./esm.mjs",
"./esm/transpile-only": "./esm/transpile-only.mjs",
"./esm/transpile-only.mjs": "./esm/transpile-only.mjs"
"./esm/transpile-only.mjs": "./esm/transpile-only.mjs",
"./compilers/swc": "./compilers/swc.js"
},
"types": "dist/index.d.ts",
"bin": {
Expand Down Expand Up @@ -107,9 +108,14 @@
"util.promisify": "^1.0.1"
},
"peerDependencies": {
"@swc/core": ">=1.2.38",
"typescript": ">=2.7"
},
"optionalDependencies": {
"@swc/core": ">=1.2.38"
},
"dependencies": {
"@swc/core": ">=1.2.38",
"arg": "^4.1.0",
"diff": "^4.0.1",
"make-error": "^1.1.1",
Expand Down
53 changes: 53 additions & 0 deletions src/compilers/swc.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import type * as ts from 'typescript'
import * as swc from '@swc/core'
import { JscTarget } from '@swc/core'

export const transpileModule: typeof ts.transpileModule = (input: string, transpileOptions: ts.TranspileOptions): ts.TranspileOutput => {
const compilerOptions = transpileOptions.compilerOptions!
const { fileName } = transpileOptions
const { esModuleInterop, sourceMap, importHelpers, experimentalDecorators, emitDecoratorMetadata, target, jsxFactory, jsxFragmentFactory } = compilerOptions
const { code, map } = swc.transformSync(input, {
filename: fileName,
sourceMaps: sourceMap,
// isModule: true,
module: {
type: 'commonjs',
noInterop: !esModuleInterop
},
swcrc: false,
jsc: {
externalHelpers: importHelpers,
parser: {
syntax: 'typescript',
tsx: fileName!.endsWith('.tsx') || fileName!.endsWith('.jsx'),
decorators: experimentalDecorators,
dynamicImport: true
},
target: targetMapping.get(target!) ?? 'es3',
transform: {
decoratorMetadata: emitDecoratorMetadata,
legacyDecorator: true,
react: {
throwIfNamespace: false,
development: false,
useBuiltins: false,
pragma: jsxFactory!,
pragmaFrag: jsxFragmentFactory!,
}
}
}
})
return { outputText: code, sourceMapText: map }
}

const targetMapping = new Map<ts.ScriptTarget, JscTarget>()
targetMapping.set(/* ts.ScriptTarget.ES3 */ 0, 'es3')
targetMapping.set(/* ts.ScriptTarget.ES5 */ 1, 'es5')
targetMapping.set(/* ts.ScriptTarget.ES2015 */ 2, 'es2015')
targetMapping.set(/* ts.ScriptTarget.ES2016 */ 3, 'es2016')
targetMapping.set(/* ts.ScriptTarget.ES2017 */ 4, 'es2017')
targetMapping.set(/* ts.ScriptTarget.ES2018 */ 5, 'es2018')
targetMapping.set(/* ts.ScriptTarget.ES2019 */ 6, 'es2019')
targetMapping.set(/* ts.ScriptTarget.ES2020 */ 7, 'es2019')
targetMapping.set(/* ts.ScriptTarget.ESNext */ 99, 'es2019')
targetMapping.set(/* ts.ScriptTarget.Latest */ 99, 'es2019')

0 comments on commit 19990d4

Please sign in to comment.