Skip to content

Commit fcb9672

Browse files
committed
feat: Add support for .esbuild.(js|jsx|ts|tsx) extensions
1 parent 5680b3f commit fcb9672

File tree

10 files changed

+165
-1
lines changed

10 files changed

+165
-1
lines changed

Diff for: index.js

+53-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ var path = require('path');
33
var endsInTs = /\.ts$/;
44
var endsInTsx = /\.tsx$/;
55
var endsInBabelJs = /\.babel\.[jt]s(x)$/;
6+
var endsInEsbuildJs = /\.esbuild\.js$/;
7+
var endsInEsbuildJsx = /\.esbuild\.jsx$/;
8+
var endsInEsbuildTs = /\.esbuild\.ts$/;
9+
var endsInEsbuildTsx = /\.esbuild\.tsx$/;
610

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

@@ -71,11 +75,59 @@ var extensions = {
7175
'.coffee.md': ['coffeescript/register', 'coffee-script/register', 'coffeescript', 'coffee-script'],
7276
'.csv': 'require-csv',
7377
'.eg': 'earlgrey/register',
78+
'.esbuild.js': {
79+
module: 'esbuild-register/dist/node',
80+
register: function(mod) {
81+
mod.register({
82+
extensions: ['.js'],
83+
target: 'node' + process.version.slice(1),
84+
hookMatcher: function(file) {
85+
return endsInEsbuildJs.test(file);
86+
},
87+
});
88+
},
89+
},
90+
'.esbuild.jsx': {
91+
module: 'esbuild-register/dist/node',
92+
register: function(mod) {
93+
mod.register({
94+
extensions: ['.jsx'],
95+
target: 'node' + process.version.slice(1),
96+
hookMatcher: function(file) {
97+
return endsInEsbuildJsx.test(file);
98+
},
99+
});
100+
},
101+
},
102+
'.esbuild.ts': {
103+
module: 'esbuild-register/dist/node',
104+
register: function(mod) {
105+
mod.register({
106+
extensions: ['.ts'],
107+
target: 'node' + process.version.slice(1),
108+
hookMatcher: function(file) {
109+
return endsInEsbuildTs.test(file);
110+
},
111+
});
112+
},
113+
},
114+
'.esbuild.tsx': {
115+
module: 'esbuild-register/dist/node',
116+
register: function(mod) {
117+
mod.register({
118+
extensions: ['.tsx'],
119+
target: 'node' + process.version.slice(1),
120+
hookMatcher: function(file) {
121+
return endsInEsbuildTsx.test(file);
122+
},
123+
});
124+
},
125+
},
74126
'.esm.js': {
75127
module: 'esm',
76128
register: function(hook) {
77129
// register on .js extension due to https://github.com/joyent/node/blob/v0.12.0/lib/module.js#L353
78-
// which only captures the final extension (.babel.js -> .js)
130+
// which only captures the final extension (.esm.js -> .js)
79131
var esmLoader = hook(module);
80132
require.extensions['.js'] = esmLoader('module')._extensions['.js'];
81133
},

Diff for: test/fixtures/esbuild.js/0/package.json

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"dependencies": {
3+
"esbuild": "^0.14.29",
4+
"esbuild-register": "^3.3.2"
5+
}
6+
}

Diff for: test/fixtures/esbuild.js/0/test.esbuild.js

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Foo {
2+
#x = 1
3+
#y = 2
4+
}
5+
6+
export default {
7+
data: {
8+
trueKey: true,
9+
falseKey: false,
10+
subKey: {
11+
subProp: 1,
12+
},
13+
},
14+
};

Diff for: test/fixtures/esbuild.jsx/0/package.json

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"dependencies": {
3+
"esbuild": "^0.14.29",
4+
"esbuild-register": "^3.3.2"
5+
}
6+
}

Diff for: test/fixtures/esbuild.jsx/0/test.esbuild.jsx

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
const React = {
2+
createElement(Component) {
3+
return Component()
4+
}
5+
}
6+
7+
class Foo {
8+
#x = 1
9+
#y = 2
10+
}
11+
12+
function Bar() {
13+
const foo = new Foo();
14+
15+
return foo;
16+
}
17+
18+
const a = <Bar />
19+
20+
export default {
21+
data: {
22+
trueKey: true,
23+
falseKey: false,
24+
subKey: {
25+
subProp: 1,
26+
},
27+
},
28+
};

Diff for: test/fixtures/esbuild.ts/0/package.json

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"dependencies": {
3+
"esbuild": "^0.14.29",
4+
"esbuild-register": "^3.3.2"
5+
}
6+
}

Diff for: test/fixtures/esbuild.ts/0/test.esbuild.ts

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Foo {
2+
#x: number = 1
3+
#y: number = 2
4+
}
5+
6+
export default {
7+
data: {
8+
trueKey: true as boolean,
9+
falseKey: false as boolean,
10+
subKey: {
11+
subProp: 1,
12+
},
13+
},
14+
} as const;

Diff for: test/fixtures/esbuild.tsx/0/package.json

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"dependencies": {
3+
"esbuild": "^0.14.29",
4+
"esbuild-register": "^3.3.2"
5+
}
6+
}

Diff for: test/fixtures/esbuild.tsx/0/test.esbuild.tsx

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
const React = {
2+
createElement(Component) {
3+
return Component()
4+
}
5+
}
6+
7+
class Foo {
8+
#x: number = 1
9+
#y: number = 2
10+
}
11+
12+
function Bar() {
13+
const foo = new Foo();
14+
15+
return foo;
16+
}
17+
18+
const a = <Bar />
19+
20+
export default {
21+
data: {
22+
trueKey: true as boolean,
23+
falseKey: false as boolean,
24+
subKey: {
25+
subProp: 1,
26+
},
27+
},
28+
} as const;

Diff for: test/index.js

+4
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,10 @@ describe('interpret.extensions', function() {
156156
case '.ts':
157157
case '.tsx':
158158
case '.esm.js':
159+
case '.esbuild.js':
160+
case '.esbuild.jsx':
161+
case '.esbuild.ts':
162+
case '.esbuild.tsx':
159163
expected = {
160164
default: {
161165
data: {

0 commit comments

Comments
 (0)