@modern-js/server-core 2.48.5-alpha.1 → 2.48.5

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.
Files changed (213) hide show
  1. package/dist/cjs/index.js +4 -6
  2. package/dist/cjs/{core/loadPlugins.js → loadPlugins.js} +7 -4
  3. package/dist/cjs/{core/plugin.js → plugin.js} +42 -1
  4. package/dist/esm/index.js +2 -3
  5. package/dist/{esm-node/core → esm}/loadPlugins.js +7 -4
  6. package/dist/{esm-node/core → esm}/plugin.js +42 -1
  7. package/dist/types/index.d.ts +2 -3
  8. package/dist/types/loadPlugins.d.ts +5 -0
  9. package/dist/types/plugin.d.ts +493 -0
  10. package/package.json +6 -44
  11. package/dist/cjs/base/adapters/node/bff.js +0 -70
  12. package/dist/cjs/base/adapters/node/hono.js +0 -63
  13. package/dist/cjs/base/adapters/node/index.js +0 -54
  14. package/dist/cjs/base/adapters/node/loadServer.js +0 -56
  15. package/dist/cjs/base/adapters/node/middlewares/index.js +0 -28
  16. package/dist/cjs/base/adapters/node/middlewares/mock.js +0 -113
  17. package/dist/cjs/base/adapters/node/middlewares/serverManifest.js +0 -82
  18. package/dist/cjs/base/adapters/node/middlewares/serverPublic.js +0 -67
  19. package/dist/cjs/base/adapters/node/middlewares/serverStatic.js +0 -109
  20. package/dist/cjs/base/adapters/node/middlewares/templates.js +0 -67
  21. package/dist/cjs/base/adapters/node/node.js +0 -127
  22. package/dist/cjs/base/adapters/node/polyfills/index.js +0 -24
  23. package/dist/cjs/base/adapters/node/polyfills/install.js +0 -72
  24. package/dist/cjs/base/adapters/node/polyfills/stream.js +0 -153
  25. package/dist/cjs/base/constants.js +0 -58
  26. package/dist/cjs/base/index.js +0 -49
  27. package/dist/cjs/base/middlewares/customServer/base.js +0 -154
  28. package/dist/cjs/base/middlewares/customServer/context.js +0 -73
  29. package/dist/cjs/base/middlewares/customServer/index.js +0 -130
  30. package/dist/cjs/base/middlewares/customServer/routerApi.js +0 -44
  31. package/dist/cjs/base/middlewares/customServer/template.js +0 -58
  32. package/dist/cjs/base/middlewares/faviconFallback.js +0 -34
  33. package/dist/cjs/base/middlewares/frameworkHeader.js +0 -31
  34. package/dist/cjs/base/middlewares/index.js +0 -30
  35. package/dist/cjs/base/middlewares/logger.js +0 -77
  36. package/dist/cjs/base/middlewares/monitor.js +0 -90
  37. package/dist/cjs/base/middlewares/renderHandler/dataHandler.js +0 -46
  38. package/dist/cjs/base/middlewares/renderHandler/index.js +0 -106
  39. package/dist/cjs/base/middlewares/renderHandler/render.js +0 -126
  40. package/dist/cjs/base/middlewares/renderHandler/serverTiming.js +0 -40
  41. package/dist/cjs/base/middlewares/renderHandler/ssrCache.js +0 -197
  42. package/dist/cjs/base/middlewares/renderHandler/ssrRender.js +0 -208
  43. package/dist/cjs/base/serverBase.js +0 -203
  44. package/dist/cjs/base/utils/debug.js +0 -29
  45. package/dist/cjs/base/utils/entry.js +0 -30
  46. package/dist/cjs/base/utils/env.js +0 -45
  47. package/dist/cjs/base/utils/error.js +0 -65
  48. package/dist/cjs/base/utils/index.js +0 -34
  49. package/dist/cjs/base/utils/middlewareCollector.js +0 -54
  50. package/dist/cjs/base/utils/request.js +0 -65
  51. package/dist/cjs/base/utils/serverConfig.js +0 -70
  52. package/dist/cjs/base/utils/transformStream.js +0 -61
  53. package/dist/cjs/base/utils/warmup.js +0 -43
  54. package/dist/cjs/core/hono.js +0 -16
  55. package/dist/cjs/core/index.js +0 -22
  56. package/dist/cjs/core/render.js +0 -16
  57. package/dist/cjs/core/server.js +0 -16
  58. package/dist/esm/base/adapters/node/bff.js +0 -128
  59. package/dist/esm/base/adapters/node/hono.js +0 -83
  60. package/dist/esm/base/adapters/node/index.js +0 -19
  61. package/dist/esm/base/adapters/node/loadServer.js +0 -73
  62. package/dist/esm/base/adapters/node/middlewares/index.js +0 -4
  63. package/dist/esm/base/adapters/node/middlewares/mock.js +0 -198
  64. package/dist/esm/base/adapters/node/middlewares/serverManifest.js +0 -132
  65. package/dist/esm/base/adapters/node/middlewares/serverPublic.js +0 -85
  66. package/dist/esm/base/adapters/node/middlewares/serverStatic.js +0 -119
  67. package/dist/esm/base/adapters/node/middlewares/templates.js +0 -114
  68. package/dist/esm/base/adapters/node/node.js +0 -197
  69. package/dist/esm/base/adapters/node/polyfills/index.js +0 -2
  70. package/dist/esm/base/adapters/node/polyfills/install.js +0 -48
  71. package/dist/esm/base/adapters/node/polyfills/stream.js +0 -316
  72. package/dist/esm/base/constants.js +0 -31
  73. package/dist/esm/base/index.js +0 -16
  74. package/dist/esm/base/middlewares/customServer/base.js +0 -182
  75. package/dist/esm/base/middlewares/customServer/context.js +0 -68
  76. package/dist/esm/base/middlewares/customServer/index.js +0 -214
  77. package/dist/esm/base/middlewares/customServer/routerApi.js +0 -26
  78. package/dist/esm/base/middlewares/customServer/template.js +0 -47
  79. package/dist/esm/base/middlewares/faviconFallback.js +0 -28
  80. package/dist/esm/base/middlewares/frameworkHeader.js +0 -27
  81. package/dist/esm/base/middlewares/index.js +0 -5
  82. package/dist/esm/base/middlewares/logger.js +0 -75
  83. package/dist/esm/base/middlewares/monitor.js +0 -157
  84. package/dist/esm/base/middlewares/renderHandler/dataHandler.js +0 -45
  85. package/dist/esm/base/middlewares/renderHandler/index.js +0 -165
  86. package/dist/esm/base/middlewares/renderHandler/render.js +0 -216
  87. package/dist/esm/base/middlewares/renderHandler/serverTiming.js +0 -21
  88. package/dist/esm/base/middlewares/renderHandler/ssrCache.js +0 -306
  89. package/dist/esm/base/middlewares/renderHandler/ssrRender.js +0 -265
  90. package/dist/esm/base/serverBase.js +0 -383
  91. package/dist/esm/base/utils/debug.js +0 -5
  92. package/dist/esm/base/utils/entry.js +0 -6
  93. package/dist/esm/base/utils/env.js +0 -20
  94. package/dist/esm/base/utils/error.js +0 -12
  95. package/dist/esm/base/utils/index.js +0 -7
  96. package/dist/esm/base/utils/middlewareCollector.js +0 -31
  97. package/dist/esm/base/utils/request.js +0 -39
  98. package/dist/esm/base/utils/serverConfig.js +0 -58
  99. package/dist/esm/base/utils/transformStream.js +0 -90
  100. package/dist/esm/base/utils/warmup.js +0 -9
  101. package/dist/esm/core/hono.js +0 -0
  102. package/dist/esm/core/index.js +0 -1
  103. package/dist/esm/core/loadPlugins.js +0 -26
  104. package/dist/esm/core/plugin.js +0 -59
  105. package/dist/esm/core/render.js +0 -0
  106. package/dist/esm/core/server.js +0 -0
  107. package/dist/esm-node/base/adapters/node/bff.js +0 -46
  108. package/dist/esm-node/base/adapters/node/hono.js +0 -38
  109. package/dist/esm-node/base/adapters/node/index.js +0 -19
  110. package/dist/esm-node/base/adapters/node/loadServer.js +0 -22
  111. package/dist/esm-node/base/adapters/node/middlewares/index.js +0 -4
  112. package/dist/esm-node/base/adapters/node/middlewares/mock.js +0 -79
  113. package/dist/esm-node/base/adapters/node/middlewares/serverManifest.js +0 -48
  114. package/dist/esm-node/base/adapters/node/middlewares/serverPublic.js +0 -33
  115. package/dist/esm-node/base/adapters/node/middlewares/serverStatic.js +0 -75
  116. package/dist/esm-node/base/adapters/node/middlewares/templates.js +0 -32
  117. package/dist/esm-node/base/adapters/node/node.js +0 -101
  118. package/dist/esm-node/base/adapters/node/polyfills/index.js +0 -2
  119. package/dist/esm-node/base/adapters/node/polyfills/install.js +0 -48
  120. package/dist/esm-node/base/adapters/node/polyfills/stream.js +0 -126
  121. package/dist/esm-node/base/constants.js +0 -31
  122. package/dist/esm-node/base/index.js +0 -16
  123. package/dist/esm-node/base/middlewares/customServer/base.js +0 -130
  124. package/dist/esm-node/base/middlewares/customServer/context.js +0 -46
  125. package/dist/esm-node/base/middlewares/customServer/index.js +0 -106
  126. package/dist/esm-node/base/middlewares/customServer/routerApi.js +0 -20
  127. package/dist/esm-node/base/middlewares/customServer/template.js +0 -34
  128. package/dist/esm-node/base/middlewares/faviconFallback.js +0 -10
  129. package/dist/esm-node/base/middlewares/frameworkHeader.js +0 -7
  130. package/dist/esm-node/base/middlewares/index.js +0 -5
  131. package/dist/esm-node/base/middlewares/logger.js +0 -53
  132. package/dist/esm-node/base/middlewares/monitor.js +0 -63
  133. package/dist/esm-node/base/middlewares/renderHandler/dataHandler.js +0 -22
  134. package/dist/esm-node/base/middlewares/renderHandler/index.js +0 -71
  135. package/dist/esm-node/base/middlewares/renderHandler/render.js +0 -102
  136. package/dist/esm-node/base/middlewares/renderHandler/serverTiming.js +0 -16
  137. package/dist/esm-node/base/middlewares/renderHandler/ssrCache.js +0 -162
  138. package/dist/esm-node/base/middlewares/renderHandler/ssrRender.js +0 -173
  139. package/dist/esm-node/base/serverBase.js +0 -168
  140. package/dist/esm-node/base/utils/debug.js +0 -5
  141. package/dist/esm-node/base/utils/entry.js +0 -6
  142. package/dist/esm-node/base/utils/env.js +0 -20
  143. package/dist/esm-node/base/utils/error.js +0 -41
  144. package/dist/esm-node/base/utils/index.js +0 -7
  145. package/dist/esm-node/base/utils/middlewareCollector.js +0 -29
  146. package/dist/esm-node/base/utils/request.js +0 -38
  147. package/dist/esm-node/base/utils/serverConfig.js +0 -34
  148. package/dist/esm-node/base/utils/transformStream.js +0 -36
  149. package/dist/esm-node/base/utils/warmup.js +0 -9
  150. package/dist/esm-node/core/hono.js +0 -0
  151. package/dist/esm-node/core/index.js +0 -1
  152. package/dist/esm-node/core/render.js +0 -0
  153. package/dist/esm-node/core/server.js +0 -0
  154. package/dist/esm-node/index.js +0 -5
  155. package/dist/esm-node/types/config/bff.js +0 -0
  156. package/dist/esm-node/types/config/dev.js +0 -0
  157. package/dist/esm-node/types/config/html.js +0 -0
  158. package/dist/esm-node/types/config/index.js +0 -6
  159. package/dist/esm-node/types/config/output.js +0 -0
  160. package/dist/esm-node/types/config/security.js +0 -0
  161. package/dist/esm-node/types/config/server.js +0 -0
  162. package/dist/esm-node/types/config/share.js +0 -0
  163. package/dist/esm-node/types/config/source.js +0 -0
  164. package/dist/esm-node/types/config/tools.js +0 -0
  165. package/dist/types/base/adapters/node/bff.d.ts +0 -4
  166. package/dist/types/base/adapters/node/hono.d.ts +0 -22
  167. package/dist/types/base/adapters/node/index.d.ts +0 -6
  168. package/dist/types/base/adapters/node/loadServer.d.ts +0 -3
  169. package/dist/types/base/adapters/node/middlewares/index.d.ts +0 -4
  170. package/dist/types/base/adapters/node/middlewares/mock.d.ts +0 -5
  171. package/dist/types/base/adapters/node/middlewares/serverManifest.d.ts +0 -3
  172. package/dist/types/base/adapters/node/middlewares/serverPublic.d.ts +0 -7
  173. package/dist/types/base/adapters/node/middlewares/serverStatic.d.ts +0 -11
  174. package/dist/types/base/adapters/node/middlewares/templates.d.ts +0 -4
  175. package/dist/types/base/adapters/node/node.d.ts +0 -13
  176. package/dist/types/base/adapters/node/polyfills/index.d.ts +0 -2
  177. package/dist/types/base/adapters/node/polyfills/install.d.ts +0 -1
  178. package/dist/types/base/adapters/node/polyfills/stream.d.ts +0 -18
  179. package/dist/types/base/constants.d.ts +0 -24
  180. package/dist/types/base/index.d.ts +0 -7
  181. package/dist/types/base/middlewares/customServer/base.d.ts +0 -3
  182. package/dist/types/base/middlewares/customServer/context.d.ts +0 -7
  183. package/dist/types/base/middlewares/customServer/index.d.ts +0 -13
  184. package/dist/types/base/middlewares/customServer/routerApi.d.ts +0 -9
  185. package/dist/types/base/middlewares/customServer/template.d.ts +0 -11
  186. package/dist/types/base/middlewares/faviconFallback.d.ts +0 -2
  187. package/dist/types/base/middlewares/frameworkHeader.d.ts +0 -2
  188. package/dist/types/base/middlewares/index.d.ts +0 -5
  189. package/dist/types/base/middlewares/logger.d.ts +0 -2
  190. package/dist/types/base/middlewares/monitor.d.ts +0 -6
  191. package/dist/types/base/middlewares/renderHandler/dataHandler.d.ts +0 -5
  192. package/dist/types/base/middlewares/renderHandler/index.d.ts +0 -10
  193. package/dist/types/base/middlewares/renderHandler/render.d.ts +0 -12
  194. package/dist/types/base/middlewares/renderHandler/serverTiming.d.ts +0 -7
  195. package/dist/types/base/middlewares/renderHandler/ssrCache.d.ts +0 -29
  196. package/dist/types/base/middlewares/renderHandler/ssrRender.d.ts +0 -21
  197. package/dist/types/base/serverBase.d.ts +0 -52
  198. package/dist/types/base/utils/debug.d.ts +0 -1
  199. package/dist/types/base/utils/entry.d.ts +0 -2
  200. package/dist/types/base/utils/env.d.ts +0 -2
  201. package/dist/types/base/utils/error.d.ts +0 -1
  202. package/dist/types/base/utils/index.d.ts +0 -7
  203. package/dist/types/base/utils/middlewareCollector.d.ts +0 -12
  204. package/dist/types/base/utils/request.d.ts +0 -12
  205. package/dist/types/base/utils/serverConfig.d.ts +0 -14
  206. package/dist/types/base/utils/transformStream.d.ts +0 -5
  207. package/dist/types/base/utils/warmup.d.ts +0 -1
  208. package/dist/types/core/hono.d.ts +0 -1
  209. package/dist/types/core/index.d.ts +0 -1
  210. package/dist/types/core/loadPlugins.d.ts +0 -3
  211. package/dist/types/core/plugin.d.ts +0 -202
  212. package/dist/types/core/render.d.ts +0 -15
  213. package/dist/types/core/server.d.ts +0 -94
@@ -1,106 +0,0 @@
1
- import { time } from "@modern-js/runtime-utils/time";
2
- import { transformResponse } from "../../utils";
3
- import { ServerReportTimings } from "../../constants";
4
- import { getAfterMatchCtx, getAfterRenderCtx, createCustomMiddlewaresCtx, createAfterStreamingRenderContext } from "./context";
5
- import { createBaseHookContext } from "./base";
6
- const noop = () => {
7
- };
8
- const isHtmlResponse = (response) => {
9
- const contentType = response.headers.get("content-type");
10
- return contentType === null || contentType === void 0 ? void 0 : contentType.includes("text/html");
11
- };
12
- class CustomServer {
13
- getHookMiddleware(entryName, routes) {
14
- return async (c, next) => {
15
- const routeInfo = routes.find((route) => route.entryName === entryName);
16
- const reporter = c.get("reporter");
17
- const baseHookCtx = createBaseHookContext(c);
18
- const afterMatchCtx = getAfterMatchCtx(entryName, baseHookCtx);
19
- const getCost = time();
20
- await this.runner.afterMatch(afterMatchCtx, {
21
- onLast: noop
22
- });
23
- const cost = getCost();
24
- cost && (reporter === null || reporter === void 0 ? void 0 : reporter.reportTiming(ServerReportTimings.SERVER_HOOK_AFTER_MATCH, cost));
25
- const { url, status } = afterMatchCtx.router;
26
- if (url) {
27
- return c.redirect(url, status);
28
- }
29
- const { current } = afterMatchCtx.router;
30
- if (current !== entryName) {
31
- const rewriteRoute = routes.find((route) => route.entryName === current);
32
- if (rewriteRoute) {
33
- return this.serverBase.request(rewriteRoute.urlPath);
34
- }
35
- }
36
- if (c.finalized) {
37
- return void 0;
38
- }
39
- await next();
40
- if (c.finalized && (!c.res.body || !isHtmlResponse(c.res))) {
41
- return void 0;
42
- }
43
- if (routeInfo.isStream) {
44
- const afterStreamingRenderContext = createAfterStreamingRenderContext(baseHookCtx, routeInfo);
45
- c.res = transformResponse(c.res, (chunk) => {
46
- const context = afterStreamingRenderContext(chunk);
47
- return this.runner.afterStreamingRender(context, {
48
- onLast: ({ chunk: chunk2 }) => chunk2
49
- });
50
- });
51
- } else {
52
- const afterRenderCtx = await getAfterRenderCtx(c, baseHookCtx, routeInfo);
53
- const getCost2 = time();
54
- await this.runner.afterRender(afterRenderCtx, {
55
- onLast: noop
56
- });
57
- const cost2 = getCost2();
58
- cost2 && (reporter === null || reporter === void 0 ? void 0 : reporter.reportTiming(ServerReportTimings.SERVER_HOOK_AFTER_RENDER, cost2));
59
- if (afterRenderCtx.response.private_overrided) {
60
- return void 0;
61
- }
62
- const newBody = afterRenderCtx.template.get();
63
- c.res = c.body(newBody);
64
- }
65
- };
66
- }
67
- getServerMiddleware() {
68
- return async (c, next) => {
69
- var _c_env;
70
- const serverMiddleware = await this.serverMiddlewarePromise;
71
- if (!serverMiddleware) {
72
- return next();
73
- }
74
- const reporter = c.get("reporter");
75
- const locals = {};
76
- const customMiddlewareCtx = createCustomMiddlewaresCtx(c, locals);
77
- const getCost = time();
78
- await serverMiddleware(customMiddlewareCtx);
79
- const cost = getCost();
80
- cost && (reporter === null || reporter === void 0 ? void 0 : reporter.reportTiming(ServerReportTimings.SERVER_MIDDLEWARE, cost));
81
- c.set("locals", locals);
82
- if ((_c_env = c.env) === null || _c_env === void 0 ? void 0 : _c_env.node.res.headersSent) {
83
- return void 0;
84
- }
85
- if (!c.finalized) {
86
- return next();
87
- }
88
- };
89
- }
90
- constructor(runner, serverBase, pwd) {
91
- this.runner = runner;
92
- this.serverBase = serverBase;
93
- const webExtension = [];
94
- this.serverMiddlewarePromise = runner.prepareWebServer({
95
- pwd,
96
- config: {
97
- middleware: webExtension
98
- }
99
- }, {
100
- onLast: () => null
101
- });
102
- }
103
- }
104
- export {
105
- CustomServer
106
- };
@@ -1,20 +0,0 @@
1
- class RouterAPI {
2
- redirect(url, status = 302) {
3
- this.url = url;
4
- this.status = status;
5
- }
6
- rewrite(entryName) {
7
- this.current = entryName;
8
- }
9
- use(entryName) {
10
- this.rewrite(entryName);
11
- }
12
- constructor(entryName) {
13
- this.current = entryName;
14
- this.status = 200;
15
- this.url = "";
16
- }
17
- }
18
- export {
19
- RouterAPI
20
- };
@@ -1,34 +0,0 @@
1
- import { REPLACE_REG } from "../../constants";
2
- class TemplateApi {
3
- set(content) {
4
- this.body = content;
5
- }
6
- get() {
7
- return this.body;
8
- }
9
- prependHead(fragment) {
10
- const { head } = REPLACE_REG.before;
11
- this.replaceBody(new RegExp(head), (beforeHead) => `${beforeHead}${fragment}`);
12
- }
13
- appendHead(fragment) {
14
- const { head } = REPLACE_REG.after;
15
- this.replaceBody(head, () => `${fragment}${head}`);
16
- }
17
- prependBody(fragment) {
18
- const { body } = REPLACE_REG.before;
19
- this.replaceBody(new RegExp(body), (beforeBody) => `${beforeBody}${fragment}`);
20
- }
21
- appendBody(fragment) {
22
- const { body } = REPLACE_REG.after;
23
- this.replaceBody(body, () => `${fragment}${body}`);
24
- }
25
- replaceBody(searchValue, replaceCb) {
26
- this.body = this.body.replace(searchValue, replaceCb);
27
- }
28
- constructor(body) {
29
- this.body = body;
30
- }
31
- }
32
- export {
33
- TemplateApi
34
- };
@@ -1,10 +0,0 @@
1
- const favionFallbackMiddleware = async (c, next) => {
2
- if (c.req.path === "/favicon.ico") {
3
- return c.body(null, 204);
4
- } else {
5
- return next();
6
- }
7
- };
8
- export {
9
- favionFallbackMiddleware
10
- };
@@ -1,7 +0,0 @@
1
- const processedBy = async (ctx, next) => {
2
- await next();
3
- ctx.header("X-Processed-By", "Modern.js");
4
- };
5
- export {
6
- processedBy
7
- };
@@ -1,5 +0,0 @@
1
- export * from "./faviconFallback";
2
- export * from "./monitor";
3
- export * from "./renderHandler";
4
- export * from "./logger";
5
- export * from "./frameworkHeader";
@@ -1,53 +0,0 @@
1
- import { getPathname } from "../utils";
2
- var LogPrefix;
3
- (function(LogPrefix2) {
4
- LogPrefix2["Outgoing"] = "-->";
5
- LogPrefix2["Incoming"] = "<--";
6
- LogPrefix2["Error"] = "xxx";
7
- })(LogPrefix || (LogPrefix = {}));
8
- const humanize = (times) => {
9
- const [delimiter, separator] = [
10
- ",",
11
- "."
12
- ];
13
- const orderTimes = times.map((v) => v.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, `$1${delimiter}`));
14
- return orderTimes.join(separator);
15
- };
16
- const time = (start) => {
17
- const delta = Date.now() - start;
18
- return humanize([
19
- delta < 1e3 ? `${delta}ms` : `${Math.round(delta / 1e3)}s`
20
- ]);
21
- };
22
- const colorStatus = (status) => {
23
- const out = {
24
- 7: `\x1B[35m${status}\x1B[0m`,
25
- 5: `\x1B[31m${status}\x1B[0m`,
26
- 4: `\x1B[33m${status}\x1B[0m`,
27
- 3: `\x1B[36m${status}\x1B[0m`,
28
- 2: `\x1B[32m${status}\x1B[0m`,
29
- 1: `\x1B[32m${status}\x1B[0m`,
30
- 0: `\x1B[33m${status}\x1B[0m`
31
- };
32
- const calculateStatus = Math.floor(status / 100);
33
- return out[calculateStatus];
34
- };
35
- function log(fn, prefix, method, path, status = 0, elapsed) {
36
- const out = prefix === "<--" ? ` ${prefix} ${method} ${path}` : ` ${prefix} ${method} ${path} ${colorStatus(status)} ${elapsed}`;
37
- fn(out);
38
- }
39
- function logHandler() {
40
- return async function logger(c, next) {
41
- const { method } = c.req;
42
- const logger2 = c.get("logger");
43
- const path = getPathname(c.req.raw);
44
- const logFn = logger2.info;
45
- log(logFn, "<--", method, path);
46
- const start = Date.now();
47
- await next();
48
- log(logFn, "-->", method, path, c.res.status, time(start));
49
- };
50
- }
51
- export {
52
- logHandler
53
- };
@@ -1,63 +0,0 @@
1
- import { time } from "@modern-js/runtime-utils/time";
2
- import { ServerReportTimings } from "../constants";
3
- const defaultReporter = {
4
- init() {
5
- },
6
- reportError() {
7
- },
8
- reportTiming() {
9
- },
10
- reportInfo() {
11
- },
12
- reportWarn() {
13
- }
14
- };
15
- function injectReporter() {
16
- return async (c, next) => {
17
- const reporter = c.get("reporter");
18
- if (!reporter) {
19
- c.set("reporter", defaultReporter);
20
- }
21
- await next();
22
- };
23
- }
24
- function initReporter(entryName) {
25
- return async (c, next) => {
26
- const reporter = c.get("reporter");
27
- if (!reporter) {
28
- await next();
29
- return;
30
- }
31
- await reporter.init({
32
- entryName
33
- });
34
- const getCost = time();
35
- await next();
36
- const cost = getCost();
37
- reporter.reportTiming(ServerReportTimings.SERVER_HANDLE_REQUEST, cost);
38
- };
39
- }
40
- function injectLogger(inputLogger) {
41
- return async (c, next) => {
42
- const logger = c.get("logger");
43
- if (!logger && inputLogger) {
44
- c.set("logger", inputLogger);
45
- }
46
- await next();
47
- };
48
- }
49
- function injectMetrics(inputMetrics) {
50
- return async (c, next) => {
51
- const metrics = c.get("metrics");
52
- if (!metrics) {
53
- c.set("metrics", inputMetrics);
54
- }
55
- await next();
56
- };
57
- }
58
- export {
59
- initReporter,
60
- injectLogger,
61
- injectMetrics,
62
- injectReporter
63
- };
@@ -1,22 +0,0 @@
1
- import { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
2
- const dataHandler = async (request, { routeInfo, serverRoutes, reporter, logger, serverManifest }) => {
3
- var _serverManifest_loaderBundles;
4
- const serverLoaderModule = serverManifest === null || serverManifest === void 0 ? void 0 : (_serverManifest_loaderBundles = serverManifest.loaderBundles) === null || _serverManifest_loaderBundles === void 0 ? void 0 : _serverManifest_loaderBundles[routeInfo.entryName || MAIN_ENTRY_NAME];
5
- if (!serverLoaderModule) {
6
- return;
7
- }
8
- const { routes, handleRequest } = serverLoaderModule;
9
- const response = await handleRequest({
10
- request,
11
- serverRoutes,
12
- context: {
13
- logger,
14
- reporter
15
- },
16
- routes
17
- });
18
- return response;
19
- };
20
- export {
21
- dataHandler
22
- };
@@ -1,71 +0,0 @@
1
- import { checkIsProd, sortRoutes, getRuntimeEnv } from "../../utils";
2
- import { initReporter } from "../monitor";
3
- import { CustomServer } from "../customServer";
4
- import { createRender } from "./render";
5
- function createRenderHandler(render) {
6
- return async (c, _) => {
7
- var _c_env_node;
8
- const logger = c.get("logger");
9
- const reporter = c.get("reporter");
10
- const templates = c.get("templates") || {};
11
- const serverManifest = c.get("serverManifest") || {};
12
- const locals = c.get("locals");
13
- const request = c.req.raw;
14
- const nodeReq = (_c_env_node = c.env.node) === null || _c_env_node === void 0 ? void 0 : _c_env_node.req;
15
- const res = await render(request, {
16
- logger,
17
- nodeReq,
18
- reporter,
19
- templates,
20
- serverManifest,
21
- locals
22
- });
23
- return res;
24
- };
25
- }
26
- async function getRenderHandler(options) {
27
- const { routes, pwd, config } = options;
28
- if (routes && routes.length > 0) {
29
- var _config_server, _options_config_security;
30
- const ssrConfig = (_config_server = config.server) === null || _config_server === void 0 ? void 0 : _config_server.ssr;
31
- const forceCSR = typeof ssrConfig === "object" ? ssrConfig.forceCSR : false;
32
- const render = createRender({
33
- routes,
34
- pwd,
35
- staticGenerate: options.staticGenerate,
36
- metaName: options.metaName || "modern-js",
37
- forceCSR,
38
- nonce: (_options_config_security = options.config.security) === null || _options_config_security === void 0 ? void 0 : _options_config_security.nonce
39
- });
40
- return render;
41
- }
42
- return null;
43
- }
44
- async function bindRenderHandler(server, options) {
45
- const { routes, pwd, disableCustomHook } = options;
46
- const { runner } = server;
47
- if (routes && routes.length > 0) {
48
- const customServer = new CustomServer(runner, server, pwd);
49
- if (getRuntimeEnv() === "node") {
50
- const cacheModuleName = "./ssrCache";
51
- const { ssrCache } = await import(cacheModuleName);
52
- await ssrCache.loadCacheMod(checkIsProd() ? pwd : void 0);
53
- }
54
- const pageRoutes = routes.filter((route) => !route.isApi).sort(sortRoutes);
55
- const render = await getRenderHandler(options);
56
- for (const route of pageRoutes) {
57
- const { urlPath: originUrlPath, entryName } = route;
58
- const urlPath = originUrlPath.endsWith("/") ? `${originUrlPath}*` : `${originUrlPath}/*`;
59
- const customServerHookMiddleware = customServer.getHookMiddleware(entryName || "main", routes);
60
- server.use(urlPath, initReporter(entryName));
61
- !disableCustomHook && server.use(urlPath, customServerHookMiddleware);
62
- const customServerMiddleware = customServer.getServerMiddleware();
63
- server.use(urlPath, customServerMiddleware);
64
- render && server.all(urlPath, createRenderHandler(render));
65
- }
66
- }
67
- }
68
- export {
69
- bindRenderHandler,
70
- getRenderHandler
71
- };
@@ -1,102 +0,0 @@
1
- import { cutNameByHyphen } from "@modern-js/utils/universal";
2
- import { REPLACE_REG } from "../../../base/constants";
3
- import { createErrorHtml, sortRoutes, parseQuery, transformResponse, getPathname } from "../../utils";
4
- import { dataHandler } from "./dataHandler";
5
- import { ssrRender } from "./ssrRender";
6
- async function createRender({ routes, pwd, metaName, staticGenerate, forceCSR, nonce }) {
7
- return async (req, { logger, nodeReq, reporter, templates, serverManifest, locals }) => {
8
- const routeInfo = matchRoute(req, routes);
9
- if (!routeInfo) {
10
- return new Response(createErrorHtml(404), {
11
- status: 404,
12
- headers: {
13
- "content-type": "text/html; charset=UTF-8"
14
- }
15
- });
16
- }
17
- const html = templates[routeInfo.entryName];
18
- if (!html) {
19
- throw new Error(`Can't found entry ${routeInfo.entryName} html `);
20
- }
21
- const renderMode = getRenderMode(req, metaName || "modern-js", routeInfo.isSSR, forceCSR, nodeReq);
22
- const renderOptions = {
23
- pwd,
24
- html,
25
- routeInfo,
26
- staticGenerate: staticGenerate || false,
27
- metaName: metaName || "modern-js",
28
- nonce,
29
- logger,
30
- nodeReq,
31
- reporter,
32
- serverRoutes: routes,
33
- locals,
34
- serverManifest
35
- };
36
- switch (renderMode) {
37
- case "data":
38
- let response = await dataHandler(req, renderOptions);
39
- if (!response) {
40
- response = await renderHandler(req, renderOptions, "ssr");
41
- }
42
- return response;
43
- case "ssr":
44
- case "csr":
45
- return renderHandler(req, renderOptions, renderMode);
46
- default:
47
- throw new Error(`Unknown render mode: ${renderMode}`);
48
- }
49
- };
50
- }
51
- async function renderHandler(request, options, mode) {
52
- const serverData = {
53
- router: {
54
- baseUrl: options.routeInfo.urlPath,
55
- params: {}
56
- }
57
- };
58
- const response = await (mode === "ssr" ? ssrRender(request, options) : csrRender(options.html));
59
- return transformResponse(response, injectServerData(serverData));
60
- }
61
- function matchRoute(req, routes) {
62
- const sorted = routes.sort(sortRoutes);
63
- for (const route of sorted) {
64
- const pathname = getPathname(req);
65
- if (pathname.startsWith(route.urlPath)) {
66
- return route;
67
- }
68
- }
69
- return void 0;
70
- }
71
- function getRenderMode(req, framework, isSSR, forceCSR, nodeReq) {
72
- const query = parseQuery(req);
73
- const fallbackHeader = `x-${cutNameByHyphen(framework)}-ssr-fallback`;
74
- if (isSSR) {
75
- if (query.__loader) {
76
- return "data";
77
- }
78
- if (forceCSR && (query.csr || req.headers.get(fallbackHeader) || (nodeReq === null || nodeReq === void 0 ? void 0 : nodeReq.headers[fallbackHeader]))) {
79
- return "csr";
80
- }
81
- return "ssr";
82
- } else {
83
- return "csr";
84
- }
85
- }
86
- function csrRender(html) {
87
- return new Response(html, {
88
- status: 200,
89
- headers: new Headers({
90
- "content-type": "text/html; charset=UTF-8"
91
- })
92
- });
93
- }
94
- function injectServerData(serverData) {
95
- const { head } = REPLACE_REG.before;
96
- const searchValue = new RegExp(head);
97
- const replcaeCb = (beforeHead) => `${beforeHead}<script type="application/json" id="__MODERN_SERVER_DATA__">${JSON.stringify(serverData)}</script>`;
98
- return (template) => template.replace(searchValue, replcaeCb);
99
- }
100
- export {
101
- createRender
102
- };
@@ -1,16 +0,0 @@
1
- const SERVER_TIMING = "Server-Timing";
2
- class ServerTiming {
3
- addServeTiming(name, dur, desc) {
4
- const _name = `bd-${this.meta}-${name}`;
5
- const value = `${_name};${desc ? `decs="${desc}";` : ""} dur=${dur}`;
6
- this.headers.append(SERVER_TIMING, value);
7
- return this;
8
- }
9
- constructor(headers, meta) {
10
- this.meta = meta;
11
- this.headers = headers;
12
- }
13
- }
14
- export {
15
- ServerTiming
16
- };
@@ -1,162 +0,0 @@
1
- import { Readable } from "stream";
2
- import { SERVER_DIR, requireExistModule } from "@modern-js/utils";
3
- import { createMemoryStorage } from "@modern-js/runtime-utils/storer";
4
- import { createReadableStreamFromReadable } from "../../adapters/node/polyfills/stream";
5
- import { createTransformStream, getPathname } from "../../utils";
6
- class CacheManager {
7
- async getCacheResult(req, cacheControl, render, ssrContext) {
8
- const key = this.computedKey(req, cacheControl);
9
- const value = await this.container.get(key);
10
- const { maxAge, staleWhileRevalidate } = cacheControl;
11
- const ttl = maxAge + staleWhileRevalidate;
12
- if (value) {
13
- const cache = JSON.parse(value);
14
- const interval = Date.now() - cache.cursor;
15
- if (interval <= maxAge) {
16
- return {
17
- data: cache.val,
18
- status: "hit"
19
- };
20
- } else if (interval <= staleWhileRevalidate + maxAge) {
21
- this.processCache(key, render, ssrContext, ttl);
22
- return {
23
- data: cache.val,
24
- status: "stale"
25
- };
26
- } else {
27
- return this.processCache(key, render, ssrContext, ttl, "expired");
28
- }
29
- } else {
30
- return this.processCache(key, render, ssrContext, ttl, "miss");
31
- }
32
- }
33
- async processCache(key, render, ssrContext, ttl, status) {
34
- const renderResult = await render(ssrContext);
35
- if (!renderResult) {
36
- return {
37
- data: ""
38
- };
39
- } else if (typeof renderResult === "string") {
40
- const current = Date.now();
41
- const cache = {
42
- val: renderResult,
43
- cursor: current
44
- };
45
- await this.container.set(key, JSON.stringify(cache), {
46
- ttl
47
- });
48
- return {
49
- data: renderResult,
50
- status
51
- };
52
- } else {
53
- const body = (
54
- // TODO: remove node:stream, move it to ssr entry.
55
- renderResult instanceof Readable ? createReadableStreamFromReadable(renderResult) : renderResult
56
- );
57
- let html = "";
58
- const stream = createTransformStream((chunk) => {
59
- html += chunk;
60
- return chunk;
61
- });
62
- stream.readable.getReader().closed.then(() => {
63
- const current = Date.now();
64
- const cache = {
65
- val: html,
66
- cursor: current
67
- };
68
- this.container.set(key, JSON.stringify(cache), {
69
- ttl
70
- });
71
- });
72
- body.pipeThrough(stream);
73
- return {
74
- data: stream.readable,
75
- status
76
- };
77
- }
78
- }
79
- computedKey(req, cacheControl) {
80
- const pathname = getPathname(req);
81
- const { customKey } = cacheControl;
82
- const defaultKey = pathname.replace(/.+\/+$/, "");
83
- if (customKey) {
84
- if (typeof customKey === "string") {
85
- return customKey;
86
- } else {
87
- return customKey(defaultKey);
88
- }
89
- } else {
90
- return defaultKey;
91
- }
92
- }
93
- constructor(container) {
94
- this.container = container;
95
- }
96
- }
97
- const CACHE_FILENAME = "cache";
98
- class ServerCache {
99
- async loadCacheMod(pwd = process.cwd()) {
100
- const path = await import("path").catch(() => {
101
- return {};
102
- });
103
- const serverCacheFilepath = path.resolve(pwd, SERVER_DIR, CACHE_FILENAME);
104
- const mod = requireExistModule(serverCacheFilepath, {
105
- interop: false
106
- });
107
- this.cacheOption = mod === null || mod === void 0 ? void 0 : mod.cacheOption;
108
- if (this.cacheOption && !(mod === null || mod === void 0 ? void 0 : mod.customContainer)) {
109
- const cacheStorage = createMemoryStorage("__ssr__cache");
110
- this.customContainer = cacheStorage;
111
- } else {
112
- this.customContainer = mod === null || mod === void 0 ? void 0 : mod.customContainer;
113
- }
114
- if (this.customContainer) {
115
- this.cacheManger = new CacheManager(this.customContainer);
116
- }
117
- }
118
- matchCacheControl(req) {
119
- const { cacheOption } = this;
120
- if (!cacheOption || !req) {
121
- return void 0;
122
- } else if (isCacheControl(cacheOption)) {
123
- return cacheOption;
124
- } else if (isCacheOptionProvider(cacheOption)) {
125
- return cacheOption(req);
126
- } else {
127
- const url = req.url;
128
- const options = Object.entries(cacheOption);
129
- for (const [key, option] of options) {
130
- if (key === "*" || new RegExp(key).test(url)) {
131
- if (typeof option === "function") {
132
- return option(req);
133
- } else {
134
- return option;
135
- }
136
- }
137
- }
138
- return void 0;
139
- }
140
- function isCacheOptionProvider(option) {
141
- return typeof option === "function";
142
- }
143
- function isCacheControl(option) {
144
- return typeof option === "object" && option !== null && "maxAge" in option;
145
- }
146
- }
147
- async getCache(req, cacheControl, render, ssrContext) {
148
- if (this.cacheManger) {
149
- return this.cacheManger.getCacheResult(req, cacheControl, render, ssrContext);
150
- } else {
151
- const renderResult = await render(ssrContext);
152
- return {
153
- data: renderResult
154
- };
155
- }
156
- }
157
- }
158
- const ssrCache = new ServerCache();
159
- export {
160
- CacheManager,
161
- ssrCache
162
- };