Skip to content

Commit 8a1dec9

Browse files
committed
Support ESM in the fixture server
1 parent c857135 commit 8a1dec9

File tree

8 files changed

+74
-14
lines changed

8 files changed

+74
-14
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"type": "module"
3+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import babel from '@babel/core';
2+
3+
const babelOptions = {
4+
babelrc: false,
5+
ignore: [/\/(build|node_modules)\//],
6+
plugins: [
7+
'@babel/plugin-syntax-import-meta',
8+
'@babel/plugin-transform-react-jsx',
9+
],
10+
};
11+
12+
export async function load(url, context, defaultLoad) {
13+
if (url.endsWith('.css')) {
14+
return {source: 'export default {}', format: 'module', shortCircuit: true};
15+
}
16+
const {format} = context;
17+
const result = await defaultLoad(url, context, defaultLoad);
18+
if (result.format === 'module') {
19+
const opt = Object.assign({filename: url}, babelOptions);
20+
const newResult = await babel.transformAsync(result.source, opt);
21+
if (!newResult) {
22+
if (typeof result.source === 'string') {
23+
return result;
24+
}
25+
return {
26+
source: Buffer.from(result.source).toString('utf8'),
27+
format: 'module',
28+
};
29+
}
30+
return {source: newResult.code, format: 'module'};
31+
}
32+
return defaultLoad(url, context, defaultLoad);
33+
}
34+
35+
async function babelTransformSource(source, context, defaultTransformSource) {
36+
const {format} = context;
37+
if (format === 'module') {
38+
const opt = Object.assign({filename: context.url}, babelOptions);
39+
const newResult = await babel.transformAsync(source, opt);
40+
if (!newResult) {
41+
if (typeof source === 'string') {
42+
return {source};
43+
}
44+
return {
45+
source: Buffer.from(source).toString('utf8'),
46+
};
47+
}
48+
return {source: newResult.code};
49+
}
50+
return defaultTransformSource(source, context, defaultTransformSource);
51+
}
52+
53+
export const transformSource =
54+
process.version < 'v16' ? babelTransformSource : undefined;

fixtures/view-transition/package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
"express": "^4.14.0",
1414
"ignore-styles": "^5.0.1",
1515
"react": "^19.0.0",
16-
"react-dom": "^19.0.0"
16+
"react-dom": "^19.0.0",
17+
"animation-timelines": "^0.0.1"
1718
},
1819
"eslintConfig": {
1920
"extends": [
@@ -27,8 +28,8 @@
2728
"prebuild": "cp -r ../../build/oss-experimental/* ./node_modules/ && rm -rf node_modules/.cache;",
2829
"dev": "concurrently \"npm run dev:server\" \"npm run dev:client\"",
2930
"dev:client": "BROWSER=none PORT=3001 react-scripts start",
30-
"dev:server": "NODE_ENV=development node server",
31-
"start": "react-scripts build && NODE_ENV=production node server",
31+
"dev:server": "NODE_ENV=development node --experimental-loader ./loader/server.js server",
32+
"start": "react-scripts build && NODE_ENV=production node --experimental-loader ./loader/server.js server",
3233
"build": "react-scripts build",
3334
"test": "react-scripts test --env=jsdom",
3435
"eject": "react-scripts eject"

fixtures/view-transition/server/index.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,15 @@ if (process.env.NODE_ENV === 'development') {
2020
for (var key in require.cache) {
2121
delete require.cache[key];
2222
}
23-
const render = require('./render').default;
24-
render(req.url, res);
23+
import('./render.js').then(({default: render}) => {
24+
render(req.url, res);
25+
});
2526
});
2627
} else {
27-
const render = require('./render').default;
28-
app.get('/', function (req, res) {
29-
render(req.url, res);
28+
import('./render.js').then(({default: render}) => {
29+
app.get('/', function (req, res) {
30+
render(req.url, res);
31+
});
3032
});
3133
}
3234

fixtures/view-transition/server/render.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React from 'react';
22
import {renderToPipeableStream} from 'react-dom/server';
33

4-
import App from '../src/components/App';
4+
import App from '../src/components/App.js';
55

66
let assets;
77
if (process.env.NODE_ENV === 'development') {

fixtures/view-transition/src/components/App.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import React, {
77
use,
88
} from 'react';
99

10-
import Chrome from './Chrome';
11-
import Page from './Page';
10+
import Chrome from './Chrome.js';
11+
import Page from './Page.js';
1212

1313
const enableNavigationAPI = typeof navigation === 'object';
1414

fixtures/view-transition/src/components/Page.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ import React, {
1313

1414
import {createPortal} from 'react-dom';
1515

16-
import SwipeRecognizer from './SwipeRecognizer';
16+
import SwipeRecognizer from './SwipeRecognizer.js';
1717

1818
import './Page.css';
1919

2020
import transitions from './Transitions.module.css';
21-
import NestedReveal from './NestedReveal';
21+
import NestedReveal from './NestedReveal.js';
2222

2323
async function sleep(ms) {
2424
return new Promise(resolve => setTimeout(resolve, ms));

fixtures/view-transition/src/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React from 'react';
22
import {hydrateRoot} from 'react-dom/client';
33

4-
import App from './components/App';
4+
import App from './components/App.js';
55

66
hydrateRoot(
77
document,

0 commit comments

Comments
 (0)