Skip to content

Commit ee22036

Browse files
Merge pull request #2 from vinny-silveira/copilot/add-jsx-runtime-support
Address review feedback and improve test coverage
2 parents a410ca1 + 2020450 commit ee22036

7 files changed

Lines changed: 54 additions & 8 deletions

File tree

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import foo = require('foo');
2+
3+
export default foo;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default () => <div id="foo">hello world</div>
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
/* eslint-disable import/extensions */
2+
import example from './example.jsx';
3+
4+
t.snapshot(example.toString());
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export default function loadModule(name) {
2+
return import(name);
3+
}

packages/sucrase/test/snapshots/test.js.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ Generated by [AVA](https://avajs.dev).
88

99
> Snapshot 1
1010
11-
'() => React.createElement(\'div\', { id: "foo", __self: this, __source: {fileName: _jsxFileName, lineNumber: 1}}, "hello world" )'
11+
'() => React.createElement(\'div\', { id: "foo", __self: undefined, __source: {fileName: _jsxFileName, lineNumber: 1}}, "hello world" )'
1212

1313
## converts jsx with custom jsxPragma
1414

1515
> Snapshot 1
1616
17-
'() => FakeReactCreateElement(\'div\', { id: "foo", __self: this, __source: {fileName: _jsxFileName, lineNumber: 1}}, "hello world" )'
17+
'() => FakeReactCreateElement(\'div\', { id: "foo", __self: undefined, __source: {fileName: _jsxFileName, lineNumber: 1}}, "hello world" )'
1818

1919
## converts typescript
2020

@@ -54,20 +54,20 @@ Generated by [AVA](https://avajs.dev).
5454

5555
> Snapshot 1
5656
57-
'() => React.createElement(\'div\', { id: "foo", __self: this, __source: {fileName: _jsxFileName$4, lineNumber: 1}}, "hello world" )'
57+
'() => React.createElement(\'div\', { id: "foo", __self: undefined, __source: {fileName: _jsxFileName$4, lineNumber: 1}}, "hello world" )'
5858

5959
> Snapshot 2
6060
61-
'() => React.createElement(\'div\', { id: "example-b", __self: this, __source: {fileName: _jsxFileName$3, lineNumber: 1}}, "hello world (a second time)" )'
61+
'() => React.createElement(\'div\', { id: "example-b", __self: undefined, __source: {fileName: _jsxFileName$3, lineNumber: 1}}, "hello world (a second time)" )'
6262

6363
> Snapshot 3
6464
65-
'() => React.createElement(\'div\', { id: "foo", __self: this, __source: {fileName: _jsxFileName$2, lineNumber: 1}}, "hello world" )'
65+
'() => React.createElement(\'div\', { id: "foo", __self: undefined, __source: {fileName: _jsxFileName$2, lineNumber: 1}}, "hello world" )'
6666

6767
> Snapshot 4
6868
69-
'() => React.createElement(\'div\', { id: "foo", __self: this, __source: {fileName: _jsxFileName$1, lineNumber: 1}}, "hello world" )'
69+
'() => React.createElement(\'div\', { id: "foo", __self: undefined, __source: {fileName: _jsxFileName$1, lineNumber: 1}}, "hello world" )'
7070

7171
> Snapshot 5
7272
73-
'() => React.createElement(\'div\', { id: "foo", __self: this, __source: {fileName: _jsxFileName, lineNumber: 1}}, "hello world" )'
73+
'() => React.createElement(\'div\', { id: "foo", __self: undefined, __source: {fileName: _jsxFileName, lineNumber: 1}}, "hello world" )'
4 Bytes
Binary file not shown.

packages/sucrase/test/test.js

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ process.chdir(__dirname);
1717
function getBundle(input, sucraseOptions, rollupOptions) {
1818
return rollup({
1919
input,
20-
context: 'this',
2120
plugins: [sucrase(sucraseOptions)],
2221
...rollupOptions
2322
});
@@ -108,3 +107,39 @@ test('converts typescript jsx ("tsx")', async (t) => {
108107

109108
return testBundle(t, bundle);
110109
});
110+
111+
test('converts jsx with jsxImportSource', async (t) => {
112+
const bundle = await getBundle(
113+
'fixtures/jsx-import-source/main.js',
114+
{ transforms: ['jsx'], jsxRuntime: 'automatic', jsxImportSource: 'preact' },
115+
{ external: ['preact/jsx-dev-runtime'] }
116+
);
117+
const { output } = await bundle.generate({ format: 'cjs', exports: 'auto' });
118+
const [{ code }] = output;
119+
t.regex(code, /require\(['"]preact\/jsx-dev-runtime['"]\)/);
120+
t.notRegex(code, /['"]react\/jsx-dev-runtime['"]/);
121+
});
122+
123+
test('preserveDynamicImport keeps import() expression', async (t) => {
124+
const bundle = await getBundle('fixtures/preserve-dynamic-import/main.js', {
125+
transforms: ['imports'],
126+
preserveDynamicImport: true
127+
});
128+
const { output } = await bundle.generate({ format: 'es' });
129+
const [{ code }] = output;
130+
t.regex(code, /import\(/);
131+
});
132+
133+
test('injectCreateRequireForImportRequire emits createRequire', async (t) => {
134+
const bundle = await getBundle(
135+
'fixtures/inject-create-require/main.ts',
136+
{
137+
transforms: ['typescript'],
138+
injectCreateRequireForImportRequire: true
139+
},
140+
{ external: ['foo', 'module'] }
141+
);
142+
const { output } = await bundle.generate({ format: 'es' });
143+
const [{ code }] = output;
144+
t.regex(code, /createRequire/);
145+
});

0 commit comments

Comments
 (0)