Skip to content

Commit 72a9fc1

Browse files
committed
feat: rebase main
1 parent 085cfed commit 72a9fc1

File tree

13 files changed

+111
-20
lines changed

13 files changed

+111
-20
lines changed

packages/document/main-doc/docs/en/guides/advanced-features/web-server.mdx

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -252,10 +252,6 @@ const time: UnstableMiddleware = async (c: UnstableMiddlewareContext, next) => {
252252
export const unstableMiddleware: UnstableMiddleware[] = [time];
253253
```
254254

255-
:::info
256-
For detailed API and more usage, see [UnstableMiddleware](/apis/app/runtime/web-server/unstable_middleware).
257-
:::
258-
259255
### Hooks
260256

261257
:::warning
@@ -287,10 +283,6 @@ Best practices when using Hooks:
287283
2. Handle Rewrite and Redirect in afterMatch.
288284
3. Inject HTML content in afterRender.
289285

290-
:::info
291-
For detailed API and more usage, see [Hook](/apis/app/runtime/web-server/hook).
292-
:::
293-
294286
## Migrate to the New Version of Custom Web Server
295287

296288
### Migration Background
@@ -443,11 +435,11 @@ type AfterRenderContext = {
443435

444436
Hook Context is mostly consistent with Middleware Context, so we need to pay extra attention to the additional parts of different Hooks.
445437

446-
| UnstableMiddleware | Hono | Description |
447-
| :----------------- | :----------- | :----------------------------------------------------------------------------------------- |
448-
| `router.redirect` | `c.redirect` | Refer to [Hono Context redirect](https://hono.dev/docs/api/context#redirect) documentation |
449-
| `router.rewrite` | - | No corresponding capability provided at the moment |
450-
| template API | `c.res` | Refer to [Hono Context res](https://hono.dev/docs/api/context#res) documentation |
438+
| UnstableMiddleware | Hono | Description |
439+
| :----------------- | :----------------- | :----------------------------------------------------------------------------------------- |
440+
| `router.redirect` | `c.redirect` | Refer to [Hono Context redirect](https://hono.dev/docs/api/context#redirect) documentation |
441+
| `router.rewrite` | `c.rewriteByEntry` | Rewrite to the specified entry. Routing or external urls are not supported |
442+
| template API | `c.res` | Refer to [Hono Context res](https://hono.dev/docs/api/context#res) documentation |
451443

452444
### Differences in Next API
453445

packages/document/main-doc/docs/zh/guides/advanced-features/web-server.mdx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -429,11 +429,11 @@ type AfterRenderContext = {
429429

430430
Hook Context 大部分和 Middleware Context 一致,因此我们要额外关注不同 Hook 多余的部分。
431431

432-
| UnstableMiddleware | Hono | 说明 |
433-
| :----------------- | :----------- | :---------------------------------------------------------------------------- |
434-
| `router.redirect` | `c.redirect` | 参考 [Hono Context redirect](https://hono.dev/docs/api/context#redirect) 文档 |
435-
| `router.rewrite` | - | 暂时没有提供对应的能力 |
436-
| template API | `c.res` | 参考 [Hono Context res](https://hono.dev/docs/api/context#res) 文档 |
432+
| UnstableMiddleware | Hono | 说明 |
433+
| :----------------- | :----------------- | :---------------------------------------------------------------------------- |
434+
| `router.redirect` | `c.redirect` | 参考 [Hono Context redirect](https://hono.dev/docs/api/context#redirect) 文档 |
435+
| `router.rewrite` | `c.rewriteByEntry` | rewrite 到指定 entry,不支持路由或外部 url |
436+
| template API | `c.res` | 参考 [Hono Context res](https://hono.dev/docs/api/context#res) 文档 |
437437

438438
### Next API 差异
439439

packages/server/core/src/plugins/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@ export {
1414
} from './default';
1515
export { compatPlugin, handleSetupResult } from './compat';
1616
export { injectConfigMiddlewarePlugin } from './middlewares';
17+
export { routerRewritePlugin } from './rewrite';
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import type { Context, Next } from 'hono';
2+
import type { ServerPlugin } from '../types';
3+
4+
declare module 'hono' {
5+
interface Context {
6+
rewriteByEntry: (entry: string) => void;
7+
}
8+
}
9+
10+
export const routerRewritePlugin = (): ServerPlugin => ({
11+
name: '@Modern-js/plugin-router-rewrite-plugin',
12+
setup(api) {
13+
api.onPrepare(() => {
14+
const { middlewares, routes } = api.getServerContext();
15+
if (!routes) {
16+
return;
17+
}
18+
19+
middlewares.push({
20+
name: 'router-rewrite',
21+
order: 'pre',
22+
handler: async (c: Context, next: Next) => {
23+
c.rewriteByEntry = (entry: string) => {
24+
const rewriteRoute = routes
25+
.filter(route => !route.isApi)
26+
.find(route => route.entryName === entry);
27+
28+
if (rewriteRoute) {
29+
c.set('matchPathname', rewriteRoute.urlPath);
30+
c.set('matchEntryName', entry);
31+
}
32+
};
33+
await next();
34+
},
35+
});
36+
});
37+
},
38+
});

packages/server/prod-server/src/apply.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
injectConfigMiddlewarePlugin,
1010
onError,
1111
renderPlugin,
12+
routerRewritePlugin,
1213
} from '@modern-js/server-core';
1314
import {
1415
injectNodeSeverPlugin,
@@ -59,6 +60,7 @@ export async function applyPlugins(
5960
const { middlewares, renderMiddlewares } = options.serverConfig || {};
6061

6162
const plugins = [
63+
routerRewritePlugin(),
6264
...(nodeServer ? [injectNodeSeverPlugin({ nodeServer })] : []),
6365
...createDefaultPlugins({
6466
cacheConfig,

pnpm-lock.yaml

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/integration/routes/modern.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export default defineConfig({
2626
loaderFailureMode: 'clientRender',
2727
},
2828
four: false,
29+
rewrite: false,
2930
},
3031
},
3132
});

tests/integration/routes/package.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@
1515
"@modern-js/runtime": "workspace:*",
1616
"fs-extra": "^10.1.0",
1717
"react": "^19.1.1",
18-
"react-dom": "^19.1.1"
18+
"react-dom": "^19.1.1",
19+
"@modern-js/server-runtime": "workspace:*",
20+
"ts-node": "^10.9.2",
21+
"tsconfig-paths": "~3.14.1"
1922
},
2023
"devDependencies": {
2124
"@modern-js/app-tools": "workspace:*",
@@ -24,6 +27,7 @@
2427
"@types/node": "^20",
2528
"@types/react": "^19.1.8",
2629
"@types/react-dom": "^19.1.6",
30+
2731
"typescript": "^5"
2832
}
2933
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
module.exports = {
2+
root: true,
3+
plugins: ['prettier'],
4+
rules: {
5+
// eslint-disable-next-line
6+
'prettier/prettier': 'error',
7+
},
8+
overrides: [
9+
{
10+
files: ['*.js', '*.jsx'],
11+
extends: '@byted/eslint-config-standard',
12+
},
13+
{
14+
files: ['*.ts', '*.tsx'],
15+
extends: '@byted/eslint-config-standard-ts',
16+
},
17+
],
18+
};
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import {
2+
type MiddlewareHandler,
3+
defineServerConfig,
4+
} from '@modern-js/server-runtime';
5+
6+
const renderTiming: MiddlewareHandler = async (c, next) => {
7+
if (c.req.path === '/rewrite') {
8+
c.rewriteByEntry('one');
9+
}
10+
11+
await next();
12+
};
13+
14+
export default defineServerConfig({
15+
renderMiddlewares: [
16+
{
17+
name: 'render-timing',
18+
handler: renderTiming,
19+
},
20+
],
21+
});

0 commit comments

Comments
 (0)