Skip to content

Commit

Permalink
feat: Add support for .swc.(js|jsx|ts|tsx) extensions
Browse files Browse the repository at this point in the history
  • Loading branch information
phated committed Apr 7, 2022
1 parent ad4d697 commit c054cf2
Show file tree
Hide file tree
Showing 14 changed files with 204 additions and 0 deletions.
60 changes: 60 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,18 @@ function endsInSucraseTs(filename) {
function endsInSucraseTsx(filename) {
return filename.endsWith('.sucrase.tsx');
}
function endsInSwcJs(filename) {
return filename.endsWith('.swc.js');
}
function endsInSwcJsx(filename) {
return filename.endsWith('.swc.jsx');
}
function endsInSwcTs(filename) {
return filename.endsWith('.swc.ts');
}
function endsInSwcTsx(filename) {
return filename.endsWith('.swc.tsx');
}

var mjsStub = path.join(__dirname, 'mjs-stub');

Expand Down Expand Up @@ -199,6 +211,46 @@ var extensions = {
});
},
},
'.swc.js': {
module: '@swc/register',
register: function (hook) {
hook({
extensions: '.js',
only: [endsInSwcJs],
ignore: [isNodeModules],
});
},
},
'.swc.jsx': {
module: '@swc/register',
register: function (hook) {
hook({
extensions: '.jsx',
only: [endsInSwcJsx],
ignore: [isNodeModules],
});
},
},
'.swc.ts': {
module: '@swc/register',
register: function (hook) {
hook({
extensions: '.ts',
only: [endsInSwcTs],
ignore: [isNodeModules],
});
},
},
'.swc.tsx': {
module: '@swc/register',
register: function (hook) {
hook({
extensions: '.tsx',
only: [endsInSwcTsx],
ignore: [isNodeModules],
});
},
},
'.toml': {
module: 'toml-require',
register: function (hook) {
Expand Down Expand Up @@ -293,6 +345,14 @@ var jsVariantExtensions = [
'.jsx',
'.litcoffee',
'.mjs',
'.sucrase.js',
'.sucrase.jsx',
'.sucrase.ts',
'.sucrase.tsx',
'.swc.js',
'.swc.jsx',
'.swc.ts',
'.swc.tsx',
'.ts',
'.tsx',
];
Expand Down
10 changes: 10 additions & 0 deletions test/fixtures/swc.js/0/.swcrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"jsc": {
"parser": {
"syntax": "ecmascript"
}
},
"module": {
"type": "commonjs"
}
}
6 changes: 6 additions & 0 deletions test/fixtures/swc.js/0/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"dependencies": {
"@swc/core": "^1.2.110",
"@swc/register": "^0.1.7"
}
}
14 changes: 14 additions & 0 deletions test/fixtures/swc.js/0/test.swc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
class Foo {
#x = 1;
#y = 2;
}

export default {
data: {
trueKey: true,
falseKey: false,
subKey: {
subProp: 1,
},
},
};
11 changes: 11 additions & 0 deletions test/fixtures/swc.jsx/0/.swcrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"jsc": {
"parser": {
"syntax": "ecmascript",
"jsx": true
}
},
"module": {
"type": "commonjs"
}
}
6 changes: 6 additions & 0 deletions test/fixtures/swc.jsx/0/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"dependencies": {
"@swc/core": "^1.2.110",
"@swc/register": "^0.1.7"
}
}
28 changes: 28 additions & 0 deletions test/fixtures/swc.jsx/0/test.swc.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
const React = {
createElement(Component) {
return Component();
},
};

class Foo {
#x = 1;
#y = 2;
}

function Bar() {
const foo = new Foo();

return foo;
}

const a = <Bar />;

export default {
data: {
trueKey: true,
falseKey: false,
subKey: {
subProp: 1,
},
},
};
10 changes: 10 additions & 0 deletions test/fixtures/swc.ts/0/.swcrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"jsc": {
"parser": {
"syntax": "typescript"
}
},
"module": {
"type": "commonjs"
}
}
6 changes: 6 additions & 0 deletions test/fixtures/swc.ts/0/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"dependencies": {
"@swc/core": "^1.2.110",
"@swc/register": "^0.1.7"
}
}
14 changes: 14 additions & 0 deletions test/fixtures/swc.ts/0/test.swc.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
class Foo {
#x: number = 1;
#y: number = 2;
}

export default {
data: {
trueKey: true as boolean,
falseKey: false as boolean,
subKey: {
subProp: 1,
},
},
} as const;
11 changes: 11 additions & 0 deletions test/fixtures/swc.tsx/0/.swcrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"jsc": {
"parser": {
"syntax": "typescript",
"tsx": true
}
},
"module": {
"type": "commonjs"
}
}
6 changes: 6 additions & 0 deletions test/fixtures/swc.tsx/0/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"dependencies": {
"@swc/core": "^1.2.110",
"@swc/register": "^0.1.7"
}
}
18 changes: 18 additions & 0 deletions test/fixtures/swc.tsx/0/test.swc.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
const React = {
createElement(Component: () => any) {
return Component();
},
};

// Test harmony arrow functions.
const Component = () => {
var trueKey: boolean = true;
var falseKey: boolean = false;
var subKey = { subProp: 1 };

// Test harmony object short notation.
return { data: { trueKey, falseKey, subKey } };
};

// Test TSX syntax.
export default <Component />;
4 changes: 4 additions & 0 deletions test/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,10 @@ describe('interpret.extensions', function () {
case '.sucrase.jsx':
case '.sucrase.ts':
case '.sucrase.tsx':
case '.swc.js':
case '.swc.jsx':
case '.swc.ts':
case '.swc.tsx':
expected = {
default: {
data: {
Expand Down

0 comments on commit c054cf2

Please sign in to comment.