Skip to content

Commit

Permalink
feat: Support .babel.(jsx|tsx) extensions
Browse files Browse the repository at this point in the history
  • Loading branch information
phated committed Apr 2, 2022
1 parent 81ed502 commit 1e3d0f8
Show file tree
Hide file tree
Showing 9 changed files with 111 additions and 0 deletions.
22 changes: 22 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ var endsInJsx = /\.jsx$/;
var endsInTs = /\.ts$/;
var endsInTsx = /\.tsx$/;
var endsInBabelJs = /\.babel\.js$/;
var endsInBabelJsx = /\.babel\.jsx$/;
var endsInBabelTs = /\.babel\.ts$/;
var endsInBabelTsx = /\.babel\.tsx$/;
var endsInEsbuildJs = /\.esbuild\.js$/;
var endsInEsbuildJsx = /\.esbuild\.jsx$/;
var endsInEsbuildTs = /\.esbuild\.ts$/;
Expand Down Expand Up @@ -57,6 +59,16 @@ var extensions = {
},
},
],
'.babel.jsx': {
module: '@babel/register',
register: function(hook) {
hook({
extensions: '.jsx',
rootMode: 'upward-optional',
overrides: [{ only: [endsInBabelJsx] }],
});
},
},
'.babel.ts': [
{
module: '@babel/register',
Expand All @@ -69,6 +81,16 @@ var extensions = {
},
},
],
'.babel.tsx': {
module: '@babel/register',
register: function(hook) {
hook({
extensions: '.tsx',
rootMode: 'upward-optional',
overrides: [{ only: [endsInBabelTsx] }],
});
},
},
'.buble.js': 'buble/register',
'.cirru': 'cirru-script/lib/register',
'.cjsx': 'node-cjsx/register',
Expand Down
3 changes: 3 additions & 0 deletions test/fixtures/babel.jsx/0/.babelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"presets": ["@babel/preset-react"],
}
7 changes: 7 additions & 0 deletions test/fixtures/babel.jsx/0/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"dependencies": {
"@babel/core": "^7.2.2",
"@babel/preset-react": "^7.0.0",
"@babel/register": "^7.0.0"
}
}
17 changes: 17 additions & 0 deletions test/fixtures/babel.jsx/0/test.babel.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
const React = {
createElement: function (Component) {
return Component();
}
};

// Test harmony arrow functions
const Component = () => {
var trueKey = true;
var falseKey = false;
var subKey = { subProp: 1 };
// Test harmony object short notation
return { data: { trueKey, falseKey, subKey } };
};

// Test JSX syntax
module.exports = <Component />;
13 changes: 13 additions & 0 deletions test/fixtures/babel.tsx/0/.babelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"presets": [
"@babel/preset-env",
"@babel/preset-react",
[
"@babel/preset-typescript",
{
"isTSX": true,
"allExtensions": true
}
]
]
}
19 changes: 19 additions & 0 deletions test/fixtures/babel.tsx/0/data.babel.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
var test: {
data: {
trueKey: boolean,
falseKey: boolean,
subKey: {
subProp: number
}
}
} = {
data: {
trueKey: true,
falseKey: false,
subKey: {
subProp: 1
}
}
}

export default test
9 changes: 9 additions & 0 deletions test/fixtures/babel.tsx/0/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"dependencies": {
"@babel/core": "^7.2.2",
"@babel/preset-env": "^7.2.3",
"@babel/preset-react": "^7.0.0",
"@babel/preset-typescript": "^7.1.0",
"@babel/register": "^7.0.0"
}
}
20 changes: 20 additions & 0 deletions test/fixtures/babel.tsx/0/test.babel.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import data from "./data.babel"

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 {...data} />
1 change: 1 addition & 0 deletions test/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,7 @@ describe('interpret.extensions', function() {
case '.ts':
case '.tsx':
case '.esm.js':
case '.babel.tsx':
case '.esbuild.js':
case '.esbuild.jsx':
case '.esbuild.ts':
Expand Down

0 comments on commit 1e3d0f8

Please sign in to comment.