@modern-js/server-core 2.69.4 → 3.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/adapters/node/helper/index.js +52 -39
- package/dist/cjs/adapters/node/helper/loadCache.js +52 -47
- package/dist/cjs/adapters/node/helper/loadConfig.js +69 -85
- package/dist/cjs/adapters/node/helper/loadEnv.js +60 -50
- package/dist/cjs/adapters/node/helper/loadPlugin.js +40 -32
- package/dist/cjs/adapters/node/helper/utils.js +33 -28
- package/dist/cjs/adapters/node/hono.js +87 -99
- package/dist/cjs/adapters/node/index.js +84 -60
- package/dist/cjs/adapters/node/node.js +164 -190
- package/dist/cjs/adapters/node/plugins/index.js +69 -23
- package/dist/cjs/adapters/node/plugins/nodeServer.js +39 -34
- package/dist/cjs/adapters/node/plugins/resource.js +186 -181
- package/dist/cjs/adapters/node/plugins/static.js +152 -164
- package/dist/cjs/constants.js +70 -57
- package/dist/cjs/context.js +37 -28
- package/dist/cjs/helper.js +40 -33
- package/dist/cjs/hono.js +46 -0
- package/dist/cjs/index.js +236 -57
- package/dist/cjs/plugins/compat/hooks.js +71 -83
- package/dist/cjs/plugins/compat/index.js +59 -60
- package/dist/cjs/plugins/default.js +52 -47
- package/dist/cjs/plugins/favicon.js +43 -39
- package/dist/cjs/plugins/index.js +73 -54
- package/dist/cjs/plugins/log.js +82 -87
- package/dist/cjs/plugins/middlewares.js +43 -37
- package/dist/cjs/plugins/monitors.js +178 -187
- package/dist/cjs/plugins/processedBy.js +45 -39
- package/dist/cjs/plugins/render/csrRscRender.js +70 -71
- package/dist/cjs/plugins/render/dataHandler.js +49 -45
- package/dist/cjs/plugins/render/index.js +152 -126
- package/dist/cjs/plugins/render/inject.js +84 -86
- package/dist/cjs/plugins/render/render.js +244 -271
- package/dist/cjs/plugins/render/renderRscHandler.js +68 -69
- package/dist/cjs/plugins/render/serverActionHandler.js +45 -44
- package/dist/cjs/plugins/render/ssrCache.js +173 -191
- package/dist/cjs/plugins/render/ssrRender.js +89 -94
- package/dist/cjs/plugins/render/utils.js +44 -36
- package/dist/cjs/plugins/route.js +60 -57
- package/dist/cjs/serverBase.js +164 -162
- package/dist/cjs/types/config/bff.js +17 -15
- package/dist/cjs/types/config/dev.js +17 -15
- package/dist/cjs/types/config/html.js +17 -15
- package/dist/cjs/types/config/index.js +90 -29
- package/dist/cjs/types/config/output.js +17 -15
- package/dist/cjs/types/config/security.js +17 -15
- package/dist/cjs/types/config/server.js +17 -15
- package/dist/cjs/types/config/share.js +17 -15
- package/dist/cjs/types/config/source.js +17 -15
- package/dist/cjs/types/config/tools.js +17 -15
- package/dist/cjs/types/index.js +76 -25
- package/dist/cjs/types/plugins/base.js +17 -15
- package/dist/cjs/types/plugins/index.js +55 -21
- package/dist/cjs/types/plugins/plugin.js +18 -0
- package/dist/cjs/types/render.js +17 -15
- package/dist/cjs/types/requestHandler.js +17 -15
- package/dist/cjs/types/server.js +17 -15
- package/dist/cjs/utils/entry.js +37 -32
- package/dist/cjs/utils/env.js +46 -40
- package/dist/cjs/utils/error.js +56 -50
- package/dist/cjs/utils/index.js +111 -33
- package/dist/cjs/utils/middlewareCollector.js +58 -49
- package/dist/cjs/utils/publicDir.js +92 -0
- package/dist/cjs/utils/request.js +73 -65
- package/dist/cjs/utils/serverConfig.js +39 -31
- package/dist/cjs/utils/storage.js +58 -68
- package/dist/cjs/utils/transformStream.js +57 -53
- package/dist/cjs/utils/warmup.js +34 -27
- package/dist/esm/adapters/node/helper/index.mjs +6 -0
- package/dist/esm/adapters/node/helper/loadCache.mjs +14 -0
- package/dist/esm/adapters/node/helper/loadConfig.mjs +31 -0
- package/dist/esm/adapters/node/helper/loadEnv.mjs +22 -0
- package/dist/esm/adapters/node/helper/loadPlugin.mjs +13 -0
- package/dist/esm/adapters/node/helper/utils.mjs +2 -0
- package/dist/esm/adapters/node/hono.mjs +53 -0
- package/dist/esm/adapters/node/index.mjs +5 -0
- package/dist/esm/adapters/node/node.mjs +129 -0
- package/dist/esm/adapters/node/plugins/nodeServer.mjs +9 -0
- package/dist/esm/adapters/node/plugins/resource.mjs +138 -0
- package/dist/esm/adapters/node/plugins/static.mjs +118 -0
- package/dist/esm/constants.mjs +28 -0
- package/dist/{esm-node/context.js → esm/context.mjs} +1 -4
- package/dist/esm/helper.mjs +11 -0
- package/dist/esm/hono.mjs +3 -0
- package/dist/esm/index.mjs +13 -0
- package/dist/esm/plugins/compat/hooks.mjs +40 -0
- package/dist/esm/plugins/compat/index.mjs +27 -0
- package/dist/esm/plugins/default.mjs +25 -0
- package/dist/esm/plugins/favicon.mjs +14 -0
- package/dist/{esm-node/plugins/index.js → esm/plugins/index.mjs} +2 -15
- package/dist/esm/plugins/log.mjs +58 -0
- package/dist/esm/plugins/middlewares.mjs +15 -0
- package/dist/esm/plugins/monitors.mjs +149 -0
- package/dist/esm/plugins/processedBy.mjs +16 -0
- package/dist/esm/plugins/render/csrRscRender.mjs +43 -0
- package/dist/esm/plugins/render/dataHandler.mjs +19 -0
- package/dist/esm/plugins/render/index.mjs +84 -0
- package/dist/esm/plugins/render/inject.mjs +55 -0
- package/dist/esm/plugins/render/render.mjs +226 -0
- package/dist/esm/plugins/render/renderRscHandler.mjs +41 -0
- package/dist/esm/plugins/render/serverActionHandler.mjs +18 -0
- package/dist/esm/plugins/render/ssrCache.mjs +158 -0
- package/dist/esm/plugins/render/ssrRender.mjs +62 -0
- package/dist/esm/plugins/render/utils.mjs +15 -0
- package/dist/esm/plugins/route.mjs +34 -0
- package/dist/esm/serverBase.mjs +136 -0
- package/dist/esm/types/plugins/index.mjs +1 -0
- package/dist/esm/utils/entry.mjs +3 -0
- package/dist/esm/utils/env.mjs +14 -0
- package/dist/esm/utils/error.mjs +53 -0
- package/dist/{esm-node/utils/index.js → esm/utils/index.mjs} +1 -0
- package/dist/esm/utils/middlewareCollector.mjs +26 -0
- package/dist/esm/utils/publicDir.mjs +33 -0
- package/dist/esm/utils/request.mjs +40 -0
- package/dist/esm/utils/serverConfig.mjs +9 -0
- package/dist/esm/utils/storage.mjs +30 -0
- package/dist/esm/utils/transformStream.mjs +28 -0
- package/dist/esm/utils/warmup.mjs +6 -0
- package/dist/esm-node/adapters/node/helper/index.mjs +6 -0
- package/dist/esm-node/adapters/node/helper/loadCache.mjs +14 -0
- package/dist/esm-node/adapters/node/helper/loadConfig.mjs +31 -0
- package/dist/esm-node/adapters/node/helper/loadEnv.mjs +22 -0
- package/dist/esm-node/adapters/node/helper/loadPlugin.mjs +13 -0
- package/dist/esm-node/adapters/node/helper/utils.mjs +2 -0
- package/dist/esm-node/adapters/node/hono.mjs +53 -0
- package/dist/esm-node/adapters/node/index.mjs +5 -0
- package/dist/esm-node/adapters/node/node.mjs +129 -0
- package/dist/esm-node/adapters/node/plugins/index.mjs +3 -0
- package/dist/esm-node/adapters/node/plugins/nodeServer.mjs +9 -0
- package/dist/esm-node/adapters/node/plugins/resource.mjs +138 -0
- package/dist/esm-node/adapters/node/plugins/static.mjs +118 -0
- package/dist/esm-node/constants.mjs +28 -0
- package/dist/esm-node/context.mjs +3 -0
- package/dist/esm-node/helper.mjs +11 -0
- package/dist/esm-node/hono.mjs +3 -0
- package/dist/esm-node/index.mjs +13 -0
- package/dist/esm-node/plugins/compat/hooks.mjs +40 -0
- package/dist/esm-node/plugins/compat/index.mjs +27 -0
- package/dist/esm-node/plugins/default.mjs +25 -0
- package/dist/esm-node/plugins/favicon.mjs +14 -0
- package/dist/esm-node/plugins/index.mjs +9 -0
- package/dist/esm-node/plugins/log.mjs +58 -0
- package/dist/esm-node/plugins/middlewares.mjs +15 -0
- package/dist/esm-node/plugins/monitors.mjs +149 -0
- package/dist/esm-node/plugins/processedBy.mjs +16 -0
- package/dist/esm-node/plugins/render/csrRscRender.mjs +43 -0
- package/dist/esm-node/plugins/render/dataHandler.mjs +19 -0
- package/dist/esm-node/plugins/render/index.mjs +84 -0
- package/dist/esm-node/plugins/render/inject.mjs +55 -0
- package/dist/esm-node/plugins/render/render.mjs +226 -0
- package/dist/esm-node/plugins/render/renderRscHandler.mjs +41 -0
- package/dist/esm-node/plugins/render/serverActionHandler.mjs +18 -0
- package/dist/esm-node/plugins/render/ssrCache.mjs +158 -0
- package/dist/esm-node/plugins/render/ssrRender.mjs +62 -0
- package/dist/esm-node/plugins/render/utils.mjs +15 -0
- package/dist/esm-node/plugins/route.mjs +34 -0
- package/dist/esm-node/serverBase.mjs +136 -0
- package/dist/esm-node/types/config/index.mjs +6 -0
- package/dist/esm-node/types/index.mjs +4 -0
- package/dist/esm-node/types/plugins/index.mjs +1 -0
- package/dist/esm-node/utils/entry.mjs +3 -0
- package/dist/esm-node/utils/env.mjs +14 -0
- package/dist/esm-node/utils/error.mjs +53 -0
- package/dist/esm-node/utils/index.mjs +9 -0
- package/dist/esm-node/utils/middlewareCollector.mjs +26 -0
- package/dist/esm-node/utils/publicDir.mjs +33 -0
- package/dist/esm-node/utils/request.mjs +40 -0
- package/dist/esm-node/utils/serverConfig.mjs +9 -0
- package/dist/esm-node/utils/storage.mjs +30 -0
- package/dist/esm-node/utils/transformStream.mjs +28 -0
- package/dist/esm-node/utils/warmup.mjs +6 -0
- package/dist/types/adapters/node/helper/loadConfig.d.ts +1 -1
- package/dist/types/adapters/node/plugins/nodeServer.d.ts +2 -2
- package/dist/types/adapters/node/plugins/resource.d.ts +3 -3
- package/dist/types/adapters/node/plugins/static.d.ts +3 -2
- package/dist/types/hono.d.ts +3 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/types/plugins/compat/hooks.d.ts +1 -1
- package/dist/types/plugins/default.d.ts +2 -2
- package/dist/types/plugins/favicon.d.ts +2 -2
- package/dist/types/plugins/log.d.ts +2 -2
- package/dist/types/plugins/middlewares.d.ts +2 -2
- package/dist/types/plugins/monitors.d.ts +4 -4
- package/dist/types/plugins/processedBy.d.ts +2 -2
- package/dist/types/plugins/render/dataHandler.d.ts +1 -1
- package/dist/types/plugins/render/index.d.ts +2 -2
- package/dist/types/plugins/render/inject.d.ts +2 -2
- package/dist/types/plugins/render/ssrRender.d.ts +3 -5
- package/dist/types/plugins/route.d.ts +2 -2
- package/dist/types/serverBase.d.ts +14 -20
- package/dist/types/types/config/bff.d.ts +0 -2
- package/dist/types/types/config/html.d.ts +0 -1
- package/dist/types/types/config/index.d.ts +0 -6
- package/dist/types/types/config/output.d.ts +2 -8
- package/dist/types/types/config/server.d.ts +1 -1
- package/dist/types/types/plugins/base.d.ts +5 -26
- package/dist/types/types/plugins/index.d.ts +1 -2
- package/dist/types/types/plugins/{new.d.ts → plugin.d.ts} +6 -4
- package/dist/types/types/render.d.ts +2 -5
- package/dist/types/types/requestHandler.d.ts +3 -7
- package/dist/types/types/server.d.ts +2 -1
- package/dist/types/utils/index.d.ts +1 -0
- package/dist/types/utils/publicDir.d.ts +40 -0
- package/dist/types/utils/transformStream.d.ts +1 -1
- package/package.json +25 -29
- package/rslib.config.mts +4 -0
- package/rstest.config.ts +7 -0
- package/dist/cjs/plugins/customServer/base.js +0 -186
- package/dist/cjs/plugins/customServer/context.js +0 -70
- package/dist/cjs/plugins/customServer/index.js +0 -210
- package/dist/cjs/plugins/customServer/routerApi.js +0 -44
- package/dist/cjs/plugins/customServer/template.js +0 -58
- package/dist/cjs/types/plugins/new.js +0 -16
- package/dist/cjs/types/plugins/old.js +0 -16
- package/dist/esm/adapters/node/helper/index.js +0 -13
- package/dist/esm/adapters/node/helper/loadCache.js +0 -44
- package/dist/esm/adapters/node/helper/loadConfig.js +0 -157
- package/dist/esm/adapters/node/helper/loadEnv.js +0 -73
- package/dist/esm/adapters/node/helper/loadPlugin.js +0 -59
- package/dist/esm/adapters/node/helper/utils.js +0 -7
- package/dist/esm/adapters/node/hono.js +0 -148
- package/dist/esm/adapters/node/index.js +0 -23
- package/dist/esm/adapters/node/node.js +0 -357
- package/dist/esm/adapters/node/plugins/index.js +0 -3
- package/dist/esm/adapters/node/plugins/nodeServer.js +0 -18
- package/dist/esm/adapters/node/plugins/resource.js +0 -543
- package/dist/esm/adapters/node/plugins/static.js +0 -245
- package/dist/esm/constants.js +0 -35
- package/dist/esm/context.js +0 -6
- package/dist/esm/helper.js +0 -14
- package/dist/esm/index.js +0 -22
- package/dist/esm/plugins/compat/hooks.js +0 -70
- package/dist/esm/plugins/compat/index.js +0 -45
- package/dist/esm/plugins/customServer/base.js +0 -218
- package/dist/esm/plugins/customServer/context.js +0 -66
- package/dist/esm/plugins/customServer/index.js +0 -369
- package/dist/esm/plugins/customServer/routerApi.js +0 -26
- package/dist/esm/plugins/customServer/template.js +0 -47
- package/dist/esm/plugins/default.js +0 -31
- package/dist/esm/plugins/favicon.js +0 -34
- package/dist/esm/plugins/index.js +0 -22
- package/dist/esm/plugins/log.js +0 -106
- package/dist/esm/plugins/middlewares.js +0 -22
- package/dist/esm/plugins/monitors.js +0 -287
- package/dist/esm/plugins/processedBy.js +0 -42
- package/dist/esm/plugins/render/csrRscRender.js +0 -88
- package/dist/esm/plugins/render/dataHandler.js +0 -48
- package/dist/esm/plugins/render/index.js +0 -215
- package/dist/esm/plugins/render/inject.js +0 -126
- package/dist/esm/plugins/render/render.js +0 -572
- package/dist/esm/plugins/render/renderRscHandler.js +0 -81
- package/dist/esm/plugins/render/serverActionHandler.js +0 -49
- package/dist/esm/plugins/render/ssrCache.js +0 -305
- package/dist/esm/plugins/render/ssrRender.js +0 -124
- package/dist/esm/plugins/render/utils.js +0 -17
- package/dist/esm/plugins/route.js +0 -92
- package/dist/esm/serverBase.js +0 -248
- package/dist/esm/types/config/index.js +0 -6
- package/dist/esm/types/index.js +0 -4
- package/dist/esm/types/plugins/index.js +0 -2
- package/dist/esm/types/requestHandler.js +0 -0
- package/dist/esm/types/server.js +0 -0
- package/dist/esm/utils/entry.js +0 -10
- package/dist/esm/utils/env.js +0 -20
- package/dist/esm/utils/error.js +0 -33
- package/dist/esm/utils/index.js +0 -8
- package/dist/esm/utils/middlewareCollector.js +0 -31
- package/dist/esm/utils/request.js +0 -51
- package/dist/esm/utils/serverConfig.js +0 -13
- package/dist/esm/utils/storage.js +0 -38
- package/dist/esm/utils/transformStream.js +0 -104
- package/dist/esm/utils/warmup.js +0 -9
- package/dist/esm-node/adapters/node/helper/index.js +0 -13
- package/dist/esm-node/adapters/node/helper/loadCache.js +0 -19
- package/dist/esm-node/adapters/node/helper/loadConfig.js +0 -59
- package/dist/esm-node/adapters/node/helper/loadEnv.js +0 -22
- package/dist/esm-node/adapters/node/helper/loadPlugin.js +0 -15
- package/dist/esm-node/adapters/node/helper/utils.js +0 -7
- package/dist/esm-node/adapters/node/hono.js +0 -79
- package/dist/esm-node/adapters/node/index.js +0 -23
- package/dist/esm-node/adapters/node/node.js +0 -169
- package/dist/esm-node/adapters/node/plugins/nodeServer.js +0 -14
- package/dist/esm-node/adapters/node/plugins/resource.js +0 -159
- package/dist/esm-node/adapters/node/plugins/static.js +0 -144
- package/dist/esm-node/constants.js +0 -35
- package/dist/esm-node/helper.js +0 -14
- package/dist/esm-node/index.js +0 -22
- package/dist/esm-node/plugins/compat/hooks.js +0 -66
- package/dist/esm-node/plugins/compat/index.js +0 -40
- package/dist/esm-node/plugins/customServer/base.js +0 -162
- package/dist/esm-node/plugins/customServer/context.js +0 -43
- package/dist/esm-node/plugins/customServer/index.js +0 -185
- package/dist/esm-node/plugins/customServer/routerApi.js +0 -20
- package/dist/esm-node/plugins/customServer/template.js +0 -34
- package/dist/esm-node/plugins/default.js +0 -30
- package/dist/esm-node/plugins/favicon.js +0 -20
- package/dist/esm-node/plugins/log.js +0 -73
- package/dist/esm-node/plugins/middlewares.js +0 -19
- package/dist/esm-node/plugins/monitors.js +0 -174
- package/dist/esm-node/plugins/processedBy.js +0 -20
- package/dist/esm-node/plugins/render/csrRscRender.js +0 -54
- package/dist/esm-node/plugins/render/dataHandler.js +0 -25
- package/dist/esm-node/plugins/render/index.js +0 -106
- package/dist/esm-node/plugins/render/inject.js +0 -69
- package/dist/esm-node/plugins/render/render.js +0 -253
- package/dist/esm-node/plugins/render/renderRscHandler.js +0 -52
- package/dist/esm-node/plugins/render/serverActionHandler.js +0 -27
- package/dist/esm-node/plugins/render/ssrCache.js +0 -190
- package/dist/esm-node/plugins/render/ssrRender.js +0 -77
- package/dist/esm-node/plugins/render/utils.js +0 -17
- package/dist/esm-node/plugins/route.js +0 -41
- package/dist/esm-node/serverBase.js +0 -146
- package/dist/esm-node/types/plugins/index.js +0 -2
- package/dist/esm-node/utils/entry.js +0 -10
- package/dist/esm-node/utils/env.js +0 -20
- package/dist/esm-node/utils/error.js +0 -61
- package/dist/esm-node/utils/middlewareCollector.js +0 -29
- package/dist/esm-node/utils/request.js +0 -50
- package/dist/esm-node/utils/serverConfig.js +0 -11
- package/dist/esm-node/utils/storage.js +0 -40
- package/dist/esm-node/utils/transformStream.js +0 -36
- package/dist/esm-node/utils/warmup.js +0 -9
- package/dist/types/plugins/customServer/base.d.ts +0 -7
- package/dist/types/plugins/customServer/context.d.ts +0 -8
- package/dist/types/plugins/customServer/index.d.ts +0 -11
- package/dist/types/plugins/customServer/routerApi.d.ts +0 -9
- package/dist/types/plugins/customServer/template.d.ts +0 -11
- package/dist/types/types/plugins/old.d.ts +0 -56
- /package/dist/{esm-node/adapters/node/plugins/index.js → esm/adapters/node/plugins/index.mjs} +0 -0
- /package/dist/{esm-node/types/server.js → esm/types/config/bff.mjs} +0 -0
- /package/dist/esm/types/config/{bff.js → dev.mjs} +0 -0
- /package/dist/esm/types/config/{dev.js → html.mjs} +0 -0
- /package/dist/{esm-node/types/config/index.js → esm/types/config/index.mjs} +0 -0
- /package/dist/esm/types/config/{html.js → output.mjs} +0 -0
- /package/dist/esm/types/config/{output.js → security.mjs} +0 -0
- /package/dist/esm/types/config/{security.js → server.mjs} +0 -0
- /package/dist/esm/types/config/{server.js → share.mjs} +0 -0
- /package/dist/esm/types/config/{share.js → source.mjs} +0 -0
- /package/dist/esm/types/config/{source.js → tools.mjs} +0 -0
- /package/dist/{esm-node/types/index.js → esm/types/index.mjs} +0 -0
- /package/dist/esm/types/{config/tools.js → plugins/base.mjs} +0 -0
- /package/dist/esm/types/plugins/{base.js → plugin.mjs} +0 -0
- /package/dist/esm/types/{plugins/new.js → render.mjs} +0 -0
- /package/dist/esm/types/{plugins/old.js → requestHandler.mjs} +0 -0
- /package/dist/esm/types/{render.js → server.mjs} +0 -0
- /package/dist/esm-node/types/config/{bff.js → bff.mjs} +0 -0
- /package/dist/esm-node/types/config/{dev.js → dev.mjs} +0 -0
- /package/dist/esm-node/types/config/{html.js → html.mjs} +0 -0
- /package/dist/esm-node/types/config/{output.js → output.mjs} +0 -0
- /package/dist/esm-node/types/config/{security.js → security.mjs} +0 -0
- /package/dist/esm-node/types/config/{server.js → server.mjs} +0 -0
- /package/dist/esm-node/types/config/{share.js → share.mjs} +0 -0
- /package/dist/esm-node/types/config/{source.js → source.mjs} +0 -0
- /package/dist/esm-node/types/config/{tools.js → tools.mjs} +0 -0
- /package/dist/esm-node/types/plugins/{base.js → base.mjs} +0 -0
- /package/dist/esm-node/types/plugins/{new.js → plugin.mjs} +0 -0
- /package/dist/esm-node/types/{plugins/old.js → render.mjs} +0 -0
- /package/dist/esm-node/types/{render.js → requestHandler.mjs} +0 -0
- /package/dist/esm-node/types/{requestHandler.js → server.mjs} +0 -0
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
import { cutNameByHyphen } from "@modern-js/utils/universal";
|
|
2
|
-
import { TrieRouter } from "hono/router/trie-router";
|
|
3
|
-
import { X_MODERNJS_RENDER } from "../../constants";
|
|
4
|
-
import { uniqueKeyByRoute } from "../../utils";
|
|
5
|
-
import { ErrorDigest, createErrorHtml, getPathname, getRuntimeEnv, parseHeaders, parseQuery, sortRoutes } from "../../utils";
|
|
6
|
-
import { csrRscRender } from "./csrRscRender";
|
|
7
|
-
import { dataHandler } from "./dataHandler";
|
|
8
|
-
import { renderRscHandler } from "./renderRscHandler";
|
|
9
|
-
import { serverActionHandler } from "./serverActionHandler";
|
|
10
|
-
import { ssrRender } from "./ssrRender";
|
|
11
|
-
const DYNAMIC_ROUTE_REG = /\/:./;
|
|
12
|
-
function getRouter(routes) {
|
|
13
|
-
const dynamicRoutes = [];
|
|
14
|
-
const normalRoutes = [];
|
|
15
|
-
routes.forEach((route) => {
|
|
16
|
-
if (DYNAMIC_ROUTE_REG.test(route.urlPath)) {
|
|
17
|
-
dynamicRoutes.push(route);
|
|
18
|
-
} else {
|
|
19
|
-
normalRoutes.push(route);
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
const finalRoutes = [
|
|
23
|
-
...normalRoutes.sort(sortRoutes),
|
|
24
|
-
...dynamicRoutes.sort(sortRoutes)
|
|
25
|
-
];
|
|
26
|
-
const router = new TrieRouter();
|
|
27
|
-
for (const route of finalRoutes) {
|
|
28
|
-
const { urlPath: originUrlPath } = route;
|
|
29
|
-
const urlPath = originUrlPath.endsWith("/") ? `${originUrlPath}*` : `${originUrlPath}/*`;
|
|
30
|
-
router.add("*", urlPath, route);
|
|
31
|
-
}
|
|
32
|
-
return router;
|
|
33
|
-
}
|
|
34
|
-
function matchRoute(router, pathname, entryName) {
|
|
35
|
-
const matched = router.match("*", pathname);
|
|
36
|
-
if (entryName && matched[0].length > 1) {
|
|
37
|
-
const matches = matched[0];
|
|
38
|
-
const result = matches.find(([route]) => route.entryName === entryName);
|
|
39
|
-
return result || [];
|
|
40
|
-
} else {
|
|
41
|
-
const result = matched[0][0];
|
|
42
|
-
return result || [];
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
function getHeadersWithoutCookie(headers) {
|
|
46
|
-
const _headers = {
|
|
47
|
-
...headers,
|
|
48
|
-
cookie: void 0
|
|
49
|
-
};
|
|
50
|
-
delete _headers.cookie;
|
|
51
|
-
return _headers;
|
|
52
|
-
}
|
|
53
|
-
async function createRender({ routes, pwd, metaName, staticGenerate, cacheConfig, forceCSR, forceCSRMap, config, onFallback }) {
|
|
54
|
-
const router = getRouter(routes);
|
|
55
|
-
return async (req, { logger, reporter, metrics, monitors, nodeReq, templates, serverManifest, rscClientManifest, rscSSRManifest, rscServerManifest, locals, matchEntryName, matchPathname, loaderContext }) => {
|
|
56
|
-
const forMatchpathname = matchPathname !== null && matchPathname !== void 0 ? matchPathname : getPathname(req);
|
|
57
|
-
const [routeInfo, params] = matchRoute(router, forMatchpathname, matchEntryName);
|
|
58
|
-
const framework = cutNameByHyphen(metaName || "modern-js");
|
|
59
|
-
const fallbackHeader = `x-${framework}-ssr-fallback`;
|
|
60
|
-
let fallbackReason = null;
|
|
61
|
-
const fallbackWrapper = async (reason, error) => {
|
|
62
|
-
fallbackReason = reason;
|
|
63
|
-
return onFallback === null || onFallback === void 0 ? void 0 : onFallback(reason, {
|
|
64
|
-
logger,
|
|
65
|
-
reporter,
|
|
66
|
-
metrics
|
|
67
|
-
}, error);
|
|
68
|
-
};
|
|
69
|
-
if (!routeInfo) {
|
|
70
|
-
return new Response(createErrorHtml(404), {
|
|
71
|
-
status: 404,
|
|
72
|
-
headers: {
|
|
73
|
-
"content-type": "text/html; charset=UTF-8"
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
const html = templates[uniqueKeyByRoute(routeInfo)];
|
|
78
|
-
if (!html) {
|
|
79
|
-
return new Response(createErrorHtml(404), {
|
|
80
|
-
status: 404,
|
|
81
|
-
headers: {
|
|
82
|
-
"content-type": "text/html; charset=UTF-8"
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
var _forceCSRMap_get;
|
|
87
|
-
const finalForceCSR = routeInfo.entryName ? (_forceCSRMap_get = forceCSRMap === null || forceCSRMap === void 0 ? void 0 : forceCSRMap.get(routeInfo.entryName)) !== null && _forceCSRMap_get !== void 0 ? _forceCSRMap_get : forceCSR : forceCSR;
|
|
88
|
-
const renderMode = await getRenderMode(req, fallbackHeader, routeInfo.isSSR, finalForceCSR, nodeReq, fallbackWrapper);
|
|
89
|
-
const headerData = parseHeaders(req);
|
|
90
|
-
const onError = (e, key) => {
|
|
91
|
-
monitors === null || monitors === void 0 ? void 0 : monitors.error(`SSR Error - ${key || (e instanceof Error ? e.name : e)}, error = %s, req.url = %s, req.headers = %o`, e instanceof Error ? e.stack || e.message : e, forMatchpathname, getHeadersWithoutCookie(headerData));
|
|
92
|
-
};
|
|
93
|
-
const onTiming = (name, dur) => {
|
|
94
|
-
monitors === null || monitors === void 0 ? void 0 : monitors.timing(name, dur, "SSR");
|
|
95
|
-
};
|
|
96
|
-
const renderOptions = {
|
|
97
|
-
pwd,
|
|
98
|
-
html,
|
|
99
|
-
routeInfo,
|
|
100
|
-
staticGenerate: staticGenerate || false,
|
|
101
|
-
config,
|
|
102
|
-
nodeReq,
|
|
103
|
-
cacheConfig,
|
|
104
|
-
reporter,
|
|
105
|
-
serverRoutes: routes,
|
|
106
|
-
params,
|
|
107
|
-
logger,
|
|
108
|
-
metrics,
|
|
109
|
-
monitors,
|
|
110
|
-
locals,
|
|
111
|
-
rscClientManifest,
|
|
112
|
-
rscSSRManifest,
|
|
113
|
-
rscServerManifest,
|
|
114
|
-
serverManifest,
|
|
115
|
-
loaderContext: loaderContext || /* @__PURE__ */ new Map(),
|
|
116
|
-
onError,
|
|
117
|
-
onTiming
|
|
118
|
-
};
|
|
119
|
-
if (fallbackReason) {
|
|
120
|
-
renderOptions.html = injectFallbackReasonToHtml({
|
|
121
|
-
html: renderOptions.html,
|
|
122
|
-
reason: fallbackReason,
|
|
123
|
-
framework
|
|
124
|
-
});
|
|
125
|
-
}
|
|
126
|
-
let response;
|
|
127
|
-
switch (renderMode) {
|
|
128
|
-
case "data":
|
|
129
|
-
response = await dataHandler(req, renderOptions) || await renderHandler(req, renderOptions, "ssr", fallbackWrapper, framework);
|
|
130
|
-
break;
|
|
131
|
-
case "rsc-tree":
|
|
132
|
-
response = await renderRscHandler(req, renderOptions);
|
|
133
|
-
break;
|
|
134
|
-
case "rsc-action":
|
|
135
|
-
response = await serverActionHandler(req, renderOptions);
|
|
136
|
-
break;
|
|
137
|
-
case "ssr":
|
|
138
|
-
case "csr":
|
|
139
|
-
response = await renderHandler(req, renderOptions, renderMode, fallbackWrapper, framework);
|
|
140
|
-
break;
|
|
141
|
-
default:
|
|
142
|
-
throw new Error(`Unknown render mode: ${renderMode}`);
|
|
143
|
-
}
|
|
144
|
-
if (fallbackReason) {
|
|
145
|
-
response.headers.set(fallbackHeader, `1;reason=${fallbackReason}`);
|
|
146
|
-
}
|
|
147
|
-
return response;
|
|
148
|
-
};
|
|
149
|
-
}
|
|
150
|
-
async function renderHandler(request, options, mode, fallbackWrapper, framework) {
|
|
151
|
-
var _options_config_server;
|
|
152
|
-
let response = null;
|
|
153
|
-
const { serverManifest } = options;
|
|
154
|
-
const ssrByRouteIds = (_options_config_server = options.config.server) === null || _options_config_server === void 0 ? void 0 : _options_config_server.ssrByRouteIds;
|
|
155
|
-
const runtimeEnv = getRuntimeEnv();
|
|
156
|
-
if (serverManifest.nestedRoutesJson && ssrByRouteIds && (ssrByRouteIds === null || ssrByRouteIds === void 0 ? void 0 : ssrByRouteIds.length) > 0 && runtimeEnv === "node") {
|
|
157
|
-
const { nestedRoutesJson } = serverManifest;
|
|
158
|
-
const routes = nestedRoutesJson === null || nestedRoutesJson === void 0 ? void 0 : nestedRoutesJson[options.routeInfo.entryName];
|
|
159
|
-
if (routes) {
|
|
160
|
-
const urlPath = "node:url";
|
|
161
|
-
const { pathToFileURL } = await import(urlPath);
|
|
162
|
-
const { matchRoutes } = await import(pathToFileURL(require.resolve("@modern-js/runtime-utils/remix-router")).href);
|
|
163
|
-
const url = new URL(request.url);
|
|
164
|
-
const matchedRoutes = matchRoutes(routes, url.pathname, options.routeInfo.urlPath);
|
|
165
|
-
if (!matchedRoutes) {
|
|
166
|
-
response = await csrRender(request, options);
|
|
167
|
-
} else {
|
|
168
|
-
var _lastMatch_route;
|
|
169
|
-
const lastMatch = matchedRoutes[matchedRoutes.length - 1];
|
|
170
|
-
if (!(lastMatch === null || lastMatch === void 0 ? void 0 : (_lastMatch_route = lastMatch.route) === null || _lastMatch_route === void 0 ? void 0 : _lastMatch_route.id) || !ssrByRouteIds.includes(lastMatch.route.id)) {
|
|
171
|
-
response = await csrRender(request, options);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
if (mode === "ssr" && !response) {
|
|
177
|
-
try {
|
|
178
|
-
response = await ssrRender(request, options);
|
|
179
|
-
} catch (e) {
|
|
180
|
-
options.onError(e, ErrorDigest.ERENDER);
|
|
181
|
-
await fallbackWrapper("error", e);
|
|
182
|
-
response = await csrRender(request, {
|
|
183
|
-
...options,
|
|
184
|
-
html: injectFallbackReasonToHtml({
|
|
185
|
-
html: options.html,
|
|
186
|
-
reason: "error",
|
|
187
|
-
framework
|
|
188
|
-
})
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
} else {
|
|
192
|
-
response = await csrRender(request, options);
|
|
193
|
-
}
|
|
194
|
-
const { routeInfo } = options;
|
|
195
|
-
applyExtendHeaders(response, routeInfo);
|
|
196
|
-
return response;
|
|
197
|
-
function applyExtendHeaders(r, route) {
|
|
198
|
-
Object.entries(route.responseHeaders || {}).forEach(([k, v]) => {
|
|
199
|
-
r.headers.set(k, v);
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
async function getRenderMode(req, fallbackHeader, isSSR, forceCSR, nodeReq, onFallback) {
|
|
204
|
-
const query = parseQuery(req);
|
|
205
|
-
if (req.headers.get("x-rsc-action")) {
|
|
206
|
-
return "rsc-action";
|
|
207
|
-
}
|
|
208
|
-
if (req.headers.get("x-rsc-tree")) {
|
|
209
|
-
return "rsc-tree";
|
|
210
|
-
}
|
|
211
|
-
if (isSSR) {
|
|
212
|
-
if (query.__loader) {
|
|
213
|
-
return "data";
|
|
214
|
-
}
|
|
215
|
-
const fallbackHeaderValue = req.headers.get(fallbackHeader) || (nodeReq === null || nodeReq === void 0 ? void 0 : nodeReq.headers[fallbackHeader]);
|
|
216
|
-
if (forceCSR && (query.csr || fallbackHeaderValue)) {
|
|
217
|
-
if (query.csr) {
|
|
218
|
-
await (onFallback === null || onFallback === void 0 ? void 0 : onFallback("query"));
|
|
219
|
-
} else {
|
|
220
|
-
var _fallbackHeaderValue_split_;
|
|
221
|
-
const reason = fallbackHeaderValue === null || fallbackHeaderValue === void 0 ? void 0 : (_fallbackHeaderValue_split_ = fallbackHeaderValue.split(";")[1]) === null || _fallbackHeaderValue_split_ === void 0 ? void 0 : _fallbackHeaderValue_split_.split("=")[1];
|
|
222
|
-
await (onFallback === null || onFallback === void 0 ? void 0 : onFallback(reason ? `header,${reason}` : "header"));
|
|
223
|
-
}
|
|
224
|
-
return "csr";
|
|
225
|
-
}
|
|
226
|
-
return "ssr";
|
|
227
|
-
} else {
|
|
228
|
-
return "csr";
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
function injectFallbackReasonToHtml({ html, reason, framework }) {
|
|
232
|
-
const tag = `<script id="__${framework}_ssr_fallback_reason__" type="application/json">${JSON.stringify({
|
|
233
|
-
reason
|
|
234
|
-
})}</script>`;
|
|
235
|
-
return html.replace(/<\/head>/, `${tag}</head>`);
|
|
236
|
-
}
|
|
237
|
-
async function csrRender(request, options) {
|
|
238
|
-
const { html, rscClientManifest } = options;
|
|
239
|
-
if (!rscClientManifest || process.env.MODERN_DISABLE_INJECT_RSC_DATA) {
|
|
240
|
-
return new Response(html, {
|
|
241
|
-
status: 200,
|
|
242
|
-
headers: new Headers({
|
|
243
|
-
"content-type": "text/html; charset=UTF-8",
|
|
244
|
-
[X_MODERNJS_RENDER]: "client"
|
|
245
|
-
})
|
|
246
|
-
});
|
|
247
|
-
} else {
|
|
248
|
-
return csrRscRender(request, options);
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
export {
|
|
252
|
-
createRender
|
|
253
|
-
};
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
|
|
2
|
-
import { createRequestHandlerConfig } from "./utils";
|
|
3
|
-
const renderRscHandler = async (req, options) => {
|
|
4
|
-
var _serverManifest_renderBundles;
|
|
5
|
-
const { routeInfo, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, monitors, logger, metrics, onError, onTiming, staticGenerate } = options;
|
|
6
|
-
const serverBundle = serverManifest === null || serverManifest === void 0 ? void 0 : (_serverManifest_renderBundles = serverManifest.renderBundles) === null || _serverManifest_renderBundles === void 0 ? void 0 : _serverManifest_renderBundles[routeInfo.entryName || MAIN_ENTRY_NAME];
|
|
7
|
-
const loadableStats = serverManifest.loadableStats || {};
|
|
8
|
-
const routeManifest = serverManifest.routeManifest || {};
|
|
9
|
-
const config = createRequestHandlerConfig(options.config);
|
|
10
|
-
const requestHandlerOptions = {
|
|
11
|
-
resource: {
|
|
12
|
-
route: routeInfo,
|
|
13
|
-
loadableStats,
|
|
14
|
-
routeManifest,
|
|
15
|
-
entryName: routeInfo.entryName || MAIN_ENTRY_NAME
|
|
16
|
-
},
|
|
17
|
-
config,
|
|
18
|
-
params,
|
|
19
|
-
loaderContext,
|
|
20
|
-
rscSSRManifest,
|
|
21
|
-
rscClientManifest,
|
|
22
|
-
rscServerManifest,
|
|
23
|
-
locals,
|
|
24
|
-
reporter,
|
|
25
|
-
staticGenerate,
|
|
26
|
-
logger,
|
|
27
|
-
metrics,
|
|
28
|
-
monitors,
|
|
29
|
-
onError,
|
|
30
|
-
onTiming
|
|
31
|
-
};
|
|
32
|
-
if (!serverBundle) {
|
|
33
|
-
return new Response("Cannot find server bundle for RSC", {
|
|
34
|
-
status: 500
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
const rscPayloadHandler = await serverBundle.rscPayloadHandler;
|
|
38
|
-
if (!rscPayloadHandler) {
|
|
39
|
-
return new Response("Cannot find request handler for RSC", {
|
|
40
|
-
status: 500
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
if (!rscClientManifest) {
|
|
44
|
-
return new Response("Cannot find rsc client manifest", {
|
|
45
|
-
status: 500
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
return rscPayloadHandler(req, requestHandlerOptions);
|
|
49
|
-
};
|
|
50
|
-
export {
|
|
51
|
-
renderRscHandler
|
|
52
|
-
};
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
|
|
2
|
-
const serverActionHandler = async (req, { serverManifest, routeInfo, rscClientManifest }) => {
|
|
3
|
-
var _serverManifest_renderBundles;
|
|
4
|
-
const serverBundle = serverManifest === null || serverManifest === void 0 ? void 0 : (_serverManifest_renderBundles = serverManifest.renderBundles) === null || _serverManifest_renderBundles === void 0 ? void 0 : _serverManifest_renderBundles[routeInfo.entryName || MAIN_ENTRY_NAME];
|
|
5
|
-
if (!serverBundle) {
|
|
6
|
-
return new Response("Cannot find server bundle for server action", {
|
|
7
|
-
status: 500
|
|
8
|
-
});
|
|
9
|
-
}
|
|
10
|
-
const { handleAction } = serverBundle;
|
|
11
|
-
if (!handleAction) {
|
|
12
|
-
return new Response("Cannot find server action handler", {
|
|
13
|
-
status: 500
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
if (!rscClientManifest) {
|
|
17
|
-
return new Response("Cannot find rsc client manifest", {
|
|
18
|
-
status: 500
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
return handleAction(req, {
|
|
22
|
-
clientManifest: rscClientManifest
|
|
23
|
-
});
|
|
24
|
-
};
|
|
25
|
-
export {
|
|
26
|
-
serverActionHandler
|
|
27
|
-
};
|
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
import { createMemoryStorage } from "@modern-js/runtime-utils/storer";
|
|
2
|
-
import { X_RENDER_CACHE } from "../../constants";
|
|
3
|
-
import { createTransformStream, getPathname } from "../../utils";
|
|
4
|
-
const removeTailSlash = (s) => s.replace(/\/+$/, "");
|
|
5
|
-
const ZERO_RENDER_LEVEL = /"renderLevel":0/;
|
|
6
|
-
const NO_SSR_CACHE = /<meta\s+[^>]*name=["']no-ssr-cache["'][^>]*>/i;
|
|
7
|
-
async function processCache({ request, key, requestHandler, requestHandlerOptions, ttl, container, cacheStatus }) {
|
|
8
|
-
const response = await requestHandler(request, requestHandlerOptions);
|
|
9
|
-
const { onError } = requestHandlerOptions;
|
|
10
|
-
const nonCacheableStatusCodes = [
|
|
11
|
-
204,
|
|
12
|
-
305,
|
|
13
|
-
404,
|
|
14
|
-
405,
|
|
15
|
-
500,
|
|
16
|
-
501,
|
|
17
|
-
502,
|
|
18
|
-
503,
|
|
19
|
-
504
|
|
20
|
-
];
|
|
21
|
-
if (nonCacheableStatusCodes.includes(response.status)) {
|
|
22
|
-
return response;
|
|
23
|
-
}
|
|
24
|
-
const decoder = new TextDecoder();
|
|
25
|
-
if (response.body) {
|
|
26
|
-
const stream = createTransformStream();
|
|
27
|
-
const reader = response.body.getReader();
|
|
28
|
-
const writer = stream.writable.getWriter();
|
|
29
|
-
let html = "";
|
|
30
|
-
const push = () => reader.read().then(({ done, value }) => {
|
|
31
|
-
if (done) {
|
|
32
|
-
const match = ZERO_RENDER_LEVEL.test(html) || NO_SSR_CACHE.test(html);
|
|
33
|
-
if (match) {
|
|
34
|
-
writer.close();
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
const current = Date.now();
|
|
38
|
-
const cache = {
|
|
39
|
-
val: html,
|
|
40
|
-
cursor: current
|
|
41
|
-
};
|
|
42
|
-
container.set(key, JSON.stringify(cache), {
|
|
43
|
-
ttl
|
|
44
|
-
}).catch(() => {
|
|
45
|
-
if (onError) {
|
|
46
|
-
onError(`[render-cache] set cache failed, key: ${key}, value: ${JSON.stringify(cache)}`);
|
|
47
|
-
} else {
|
|
48
|
-
console.error(`[render-cache] set cache failed, key: ${key}, value: ${JSON.stringify(cache)}`);
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
writer.close();
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
const content = decoder.decode(value);
|
|
55
|
-
html += content;
|
|
56
|
-
writer.write(value);
|
|
57
|
-
push();
|
|
58
|
-
});
|
|
59
|
-
push();
|
|
60
|
-
cacheStatus && response.headers.set(X_RENDER_CACHE, cacheStatus);
|
|
61
|
-
return new Response(stream.readable, {
|
|
62
|
-
status: response.status,
|
|
63
|
-
headers: response.headers
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
return response;
|
|
67
|
-
}
|
|
68
|
-
const CACHE_NAMESPACE = "__ssr__cache";
|
|
69
|
-
const storage = createMemoryStorage(CACHE_NAMESPACE);
|
|
70
|
-
function computedKey(req, cacheControl) {
|
|
71
|
-
const pathname = getPathname(req);
|
|
72
|
-
const { customKey } = cacheControl;
|
|
73
|
-
const defaultKey = pathname === "/" ? pathname : removeTailSlash(pathname);
|
|
74
|
-
if (customKey) {
|
|
75
|
-
if (typeof customKey === "string") {
|
|
76
|
-
return customKey;
|
|
77
|
-
} else {
|
|
78
|
-
return customKey(defaultKey);
|
|
79
|
-
}
|
|
80
|
-
} else {
|
|
81
|
-
return defaultKey;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
function shouldUseCache(request) {
|
|
85
|
-
const url = new URL(request.url);
|
|
86
|
-
const hasRSCAction = request.headers.has("x-rsc-action");
|
|
87
|
-
const hasRSCTree = request.headers.has("x-rsc-tree");
|
|
88
|
-
const hasLoaderQuery = url.searchParams.has("__loader");
|
|
89
|
-
return !(hasRSCAction || hasRSCTree || hasLoaderQuery);
|
|
90
|
-
}
|
|
91
|
-
function matchCacheControl(cacheOption, req) {
|
|
92
|
-
if (!cacheOption || !req) {
|
|
93
|
-
return void 0;
|
|
94
|
-
} else if (isCacheControl(cacheOption)) {
|
|
95
|
-
return cacheOption;
|
|
96
|
-
} else if (isCacheOptionProvider(cacheOption)) {
|
|
97
|
-
return cacheOption(req);
|
|
98
|
-
} else {
|
|
99
|
-
const url = req.url;
|
|
100
|
-
const options = Object.entries(cacheOption);
|
|
101
|
-
for (const [key, option] of options) {
|
|
102
|
-
if (key === "*" || new RegExp(key).test(url)) {
|
|
103
|
-
if (typeof option === "function") {
|
|
104
|
-
return option(req);
|
|
105
|
-
} else {
|
|
106
|
-
return option;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
return void 0;
|
|
111
|
-
}
|
|
112
|
-
function isCacheOptionProvider(option) {
|
|
113
|
-
return typeof option === "function";
|
|
114
|
-
}
|
|
115
|
-
function isCacheControl(option) {
|
|
116
|
-
return typeof option === "object" && option !== null && "maxAge" in option;
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
async function getCacheResult(request, options) {
|
|
120
|
-
const { cacheControl, container = storage, requestHandler, requestHandlerOptions } = options;
|
|
121
|
-
const { onError } = requestHandlerOptions;
|
|
122
|
-
const key = computedKey(request, cacheControl);
|
|
123
|
-
let value;
|
|
124
|
-
try {
|
|
125
|
-
value = await container.get(key);
|
|
126
|
-
} catch (_) {
|
|
127
|
-
if (onError) {
|
|
128
|
-
onError(`[render-cache] get cache failed, key: ${key}`);
|
|
129
|
-
} else {
|
|
130
|
-
console.error(`[render-cache] get cache failed, key: ${key}`);
|
|
131
|
-
}
|
|
132
|
-
value = void 0;
|
|
133
|
-
}
|
|
134
|
-
const { maxAge, staleWhileRevalidate } = cacheControl;
|
|
135
|
-
const ttl = maxAge + staleWhileRevalidate;
|
|
136
|
-
if (value) {
|
|
137
|
-
const cache = JSON.parse(value);
|
|
138
|
-
const interval = Date.now() - cache.cursor;
|
|
139
|
-
if (interval <= maxAge) {
|
|
140
|
-
const cacheStatus = "hit";
|
|
141
|
-
return new Response(cache.val, {
|
|
142
|
-
headers: {
|
|
143
|
-
[X_RENDER_CACHE]: cacheStatus
|
|
144
|
-
}
|
|
145
|
-
});
|
|
146
|
-
} else if (interval <= staleWhileRevalidate + maxAge) {
|
|
147
|
-
processCache({
|
|
148
|
-
key,
|
|
149
|
-
request,
|
|
150
|
-
requestHandler,
|
|
151
|
-
requestHandlerOptions,
|
|
152
|
-
ttl,
|
|
153
|
-
container
|
|
154
|
-
}).then(async (response) => {
|
|
155
|
-
await response.text();
|
|
156
|
-
});
|
|
157
|
-
const cacheStatus = "stale";
|
|
158
|
-
return new Response(cache.val, {
|
|
159
|
-
headers: {
|
|
160
|
-
[X_RENDER_CACHE]: cacheStatus
|
|
161
|
-
}
|
|
162
|
-
});
|
|
163
|
-
} else {
|
|
164
|
-
return processCache({
|
|
165
|
-
key,
|
|
166
|
-
request,
|
|
167
|
-
requestHandler,
|
|
168
|
-
requestHandlerOptions,
|
|
169
|
-
ttl,
|
|
170
|
-
container,
|
|
171
|
-
cacheStatus: "expired"
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
} else {
|
|
175
|
-
return processCache({
|
|
176
|
-
key,
|
|
177
|
-
request,
|
|
178
|
-
requestHandler,
|
|
179
|
-
requestHandlerOptions,
|
|
180
|
-
ttl,
|
|
181
|
-
container,
|
|
182
|
-
cacheStatus: "miss"
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
export {
|
|
187
|
-
getCacheResult,
|
|
188
|
-
matchCacheControl,
|
|
189
|
-
shouldUseCache
|
|
190
|
-
};
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
|
|
2
|
-
import { X_MODERNJS_RENDER } from "../../constants";
|
|
3
|
-
import { getPathname, parseHeaders } from "../../utils";
|
|
4
|
-
import { getCacheResult, matchCacheControl, shouldUseCache } from "./ssrCache";
|
|
5
|
-
import { createRequestHandlerConfig } from "./utils";
|
|
6
|
-
const SERVER_RUNTIME_ENTRY = "requestHandler";
|
|
7
|
-
async function ssrRender(request, { routeInfo, html, config: userConfig, staticGenerate, nodeReq, serverManifest, rscSSRManifest, rscClientManifest, rscServerManifest, locals, params, loaderContext, reporter, monitors, cacheConfig, logger, metrics, onError, onTiming }) {
|
|
8
|
-
var _serverManifest_renderBundles;
|
|
9
|
-
const { entryName } = routeInfo;
|
|
10
|
-
const loadableStats = serverManifest.loadableStats || {};
|
|
11
|
-
const routeManifest = serverManifest.routeManifest || {};
|
|
12
|
-
const headers = parseHeaders(request);
|
|
13
|
-
if (nodeReq) {
|
|
14
|
-
for (const key in nodeReq.headers) {
|
|
15
|
-
if (!headers[key]) {
|
|
16
|
-
headers[key] = nodeReq.headers[key];
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
const renderBundle = (_serverManifest_renderBundles = serverManifest.renderBundles) === null || _serverManifest_renderBundles === void 0 ? void 0 : _serverManifest_renderBundles[entryName || MAIN_ENTRY_NAME];
|
|
21
|
-
if (!renderBundle) {
|
|
22
|
-
throw new Error(`Can't find renderBundle ${entryName || MAIN_ENTRY_NAME}`);
|
|
23
|
-
}
|
|
24
|
-
const requestHandler = await renderBundle[SERVER_RUNTIME_ENTRY];
|
|
25
|
-
const config = createRequestHandlerConfig(userConfig);
|
|
26
|
-
const requestHandlerOptions = {
|
|
27
|
-
resource: {
|
|
28
|
-
route: routeInfo,
|
|
29
|
-
loadableStats,
|
|
30
|
-
routeManifest,
|
|
31
|
-
htmlTemplate: html,
|
|
32
|
-
entryName: entryName || MAIN_ENTRY_NAME
|
|
33
|
-
},
|
|
34
|
-
params,
|
|
35
|
-
loaderContext,
|
|
36
|
-
config,
|
|
37
|
-
rscSSRManifest,
|
|
38
|
-
rscClientManifest,
|
|
39
|
-
rscServerManifest,
|
|
40
|
-
locals,
|
|
41
|
-
reporter,
|
|
42
|
-
staticGenerate,
|
|
43
|
-
logger,
|
|
44
|
-
metrics,
|
|
45
|
-
monitors,
|
|
46
|
-
onError,
|
|
47
|
-
onTiming
|
|
48
|
-
};
|
|
49
|
-
const cacheControl = await matchCacheControl(cacheConfig === null || cacheConfig === void 0 ? void 0 : cacheConfig.strategy, nodeReq || new IncomingMessgeProxy(request));
|
|
50
|
-
let response;
|
|
51
|
-
if (cacheControl && shouldUseCache(request)) {
|
|
52
|
-
response = await getCacheResult(request, {
|
|
53
|
-
cacheControl,
|
|
54
|
-
container: cacheConfig === null || cacheConfig === void 0 ? void 0 : cacheConfig.container,
|
|
55
|
-
requestHandler,
|
|
56
|
-
requestHandlerOptions
|
|
57
|
-
});
|
|
58
|
-
} else {
|
|
59
|
-
response = await requestHandler(request, requestHandlerOptions);
|
|
60
|
-
}
|
|
61
|
-
response.headers.set(X_MODERNJS_RENDER, "server");
|
|
62
|
-
response.headers.set("content-type", "text/html; charset=UTF-8");
|
|
63
|
-
return response;
|
|
64
|
-
}
|
|
65
|
-
class IncomingMessgeProxy {
|
|
66
|
-
constructor(req) {
|
|
67
|
-
this.headers = {};
|
|
68
|
-
req.headers.forEach((value, key) => {
|
|
69
|
-
this.headers[key] = value;
|
|
70
|
-
});
|
|
71
|
-
this.method = req.method;
|
|
72
|
-
this.url = getPathname(req);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
export {
|
|
76
|
-
ssrRender
|
|
77
|
-
};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
function createRequestHandlerConfig(userConfig) {
|
|
2
|
-
const { output, server, security, html, source } = userConfig;
|
|
3
|
-
return {
|
|
4
|
-
ssr: server === null || server === void 0 ? void 0 : server.ssr,
|
|
5
|
-
ssrByEntries: server === null || server === void 0 ? void 0 : server.ssrByEntries,
|
|
6
|
-
nonce: security === null || security === void 0 ? void 0 : security.nonce,
|
|
7
|
-
enableInlineScripts: output === null || output === void 0 ? void 0 : output.enableInlineScripts,
|
|
8
|
-
enableInlineStyles: output === null || output === void 0 ? void 0 : output.enableInlineStyles,
|
|
9
|
-
crossorigin: html === null || html === void 0 ? void 0 : html.crossorigin,
|
|
10
|
-
scriptLoading: html === null || html === void 0 ? void 0 : html.scriptLoading,
|
|
11
|
-
useJsonScript: server === null || server === void 0 ? void 0 : server.useJsonScript,
|
|
12
|
-
enableAsyncEntry: source === null || source === void 0 ? void 0 : source.enableAsyncEntry
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
export {
|
|
16
|
-
createRequestHandlerConfig
|
|
17
|
-
};
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
|
|
2
|
-
import { sortRoutes } from "../utils";
|
|
3
|
-
function injectRoute(route) {
|
|
4
|
-
return async (c, next) => {
|
|
5
|
-
if (route && !c.get("route")) {
|
|
6
|
-
c.set("route", route);
|
|
7
|
-
}
|
|
8
|
-
await next();
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
function getPageRoutes(routes) {
|
|
12
|
-
return routes.filter((route) => route.entryName).sort(sortRoutes);
|
|
13
|
-
}
|
|
14
|
-
const injectRoutePlugin = () => ({
|
|
15
|
-
name: "@modern-js/plugin-inject-route",
|
|
16
|
-
setup(api) {
|
|
17
|
-
return {
|
|
18
|
-
async prepare() {
|
|
19
|
-
const { middlewares, routes } = api.useAppContext();
|
|
20
|
-
if (!routes) {
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
const pageRoutes = getPageRoutes(routes);
|
|
24
|
-
for (const route of pageRoutes) {
|
|
25
|
-
const { urlPath: originUrlPath, entryName = MAIN_ENTRY_NAME } = route;
|
|
26
|
-
const urlPath = originUrlPath.endsWith("/") ? `${originUrlPath}*` : `${originUrlPath}/*`;
|
|
27
|
-
middlewares.push({
|
|
28
|
-
name: "inject-route-info",
|
|
29
|
-
path: urlPath,
|
|
30
|
-
handler: injectRoute({
|
|
31
|
-
entryName
|
|
32
|
-
})
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
export {
|
|
40
|
-
injectRoutePlugin
|
|
41
|
-
};
|