@modern-js/server-core 2.48.3-alpha.0 → 2.48.3

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 (204) 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} +3 -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 +3 -1
  7. package/dist/types/index.d.ts +2 -3
  8. package/dist/types/loadPlugins.d.ts +5 -0
  9. package/dist/types/{core/plugin.d.ts → plugin.d.ts} +35 -32
  10. package/package.json +6 -41
  11. package/dist/cjs/base/adapters/node/bff.js +0 -69
  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 -126
  22. package/dist/cjs/base/adapters/node/polyfills/index.js +0 -24
  23. package/dist/cjs/base/adapters/node/polyfills/install.js +0 -70
  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 -45
  27. package/dist/cjs/base/middlewares/customServer/base.js +0 -111
  28. package/dist/cjs/base/middlewares/customServer/context.js +0 -78
  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/index.js +0 -26
  34. package/dist/cjs/base/middlewares/monitor.js +0 -90
  35. package/dist/cjs/base/middlewares/renderHandler/dataHandler.js +0 -46
  36. package/dist/cjs/base/middlewares/renderHandler/index.js +0 -104
  37. package/dist/cjs/base/middlewares/renderHandler/render.js +0 -123
  38. package/dist/cjs/base/middlewares/renderHandler/serverTiming.js +0 -40
  39. package/dist/cjs/base/middlewares/renderHandler/ssrCache.js +0 -197
  40. package/dist/cjs/base/middlewares/renderHandler/ssrRender.js +0 -168
  41. package/dist/cjs/base/serverBase.js +0 -203
  42. package/dist/cjs/base/utils/debug.js +0 -29
  43. package/dist/cjs/base/utils/entry.js +0 -30
  44. package/dist/cjs/base/utils/env.js +0 -45
  45. package/dist/cjs/base/utils/error.js +0 -65
  46. package/dist/cjs/base/utils/index.js +0 -45
  47. package/dist/cjs/base/utils/middlewareCollector.js +0 -54
  48. package/dist/cjs/base/utils/request.js +0 -65
  49. package/dist/cjs/base/utils/serverConfig.js +0 -70
  50. package/dist/cjs/base/utils/transformStream.js +0 -61
  51. package/dist/cjs/base/utils/warmup.js +0 -43
  52. package/dist/cjs/core/hono.js +0 -16
  53. package/dist/cjs/core/index.js +0 -22
  54. package/dist/cjs/core/render.js +0 -16
  55. package/dist/cjs/core/server.js +0 -16
  56. package/dist/esm/base/adapters/node/bff.js +0 -128
  57. package/dist/esm/base/adapters/node/hono.js +0 -83
  58. package/dist/esm/base/adapters/node/index.js +0 -19
  59. package/dist/esm/base/adapters/node/loadServer.js +0 -73
  60. package/dist/esm/base/adapters/node/middlewares/index.js +0 -4
  61. package/dist/esm/base/adapters/node/middlewares/mock.js +0 -198
  62. package/dist/esm/base/adapters/node/middlewares/serverManifest.js +0 -132
  63. package/dist/esm/base/adapters/node/middlewares/serverPublic.js +0 -85
  64. package/dist/esm/base/adapters/node/middlewares/serverStatic.js +0 -109
  65. package/dist/esm/base/adapters/node/middlewares/templates.js +0 -114
  66. package/dist/esm/base/adapters/node/node.js +0 -194
  67. package/dist/esm/base/adapters/node/polyfills/index.js +0 -2
  68. package/dist/esm/base/adapters/node/polyfills/install.js +0 -46
  69. package/dist/esm/base/adapters/node/polyfills/stream.js +0 -316
  70. package/dist/esm/base/constants.js +0 -31
  71. package/dist/esm/base/index.js +0 -14
  72. package/dist/esm/base/middlewares/customServer/base.js +0 -126
  73. package/dist/esm/base/middlewares/customServer/context.js +0 -70
  74. package/dist/esm/base/middlewares/customServer/index.js +0 -208
  75. package/dist/esm/base/middlewares/customServer/routerApi.js +0 -26
  76. package/dist/esm/base/middlewares/customServer/template.js +0 -47
  77. package/dist/esm/base/middlewares/faviconFallback.js +0 -28
  78. package/dist/esm/base/middlewares/index.js +0 -3
  79. package/dist/esm/base/middlewares/monitor.js +0 -157
  80. package/dist/esm/base/middlewares/renderHandler/dataHandler.js +0 -45
  81. package/dist/esm/base/middlewares/renderHandler/index.js +0 -163
  82. package/dist/esm/base/middlewares/renderHandler/render.js +0 -213
  83. package/dist/esm/base/middlewares/renderHandler/serverTiming.js +0 -21
  84. package/dist/esm/base/middlewares/renderHandler/ssrCache.js +0 -306
  85. package/dist/esm/base/middlewares/renderHandler/ssrRender.js +0 -226
  86. package/dist/esm/base/serverBase.js +0 -383
  87. package/dist/esm/base/utils/debug.js +0 -5
  88. package/dist/esm/base/utils/entry.js +0 -6
  89. package/dist/esm/base/utils/env.js +0 -20
  90. package/dist/esm/base/utils/error.js +0 -12
  91. package/dist/esm/base/utils/index.js +0 -13
  92. package/dist/esm/base/utils/middlewareCollector.js +0 -31
  93. package/dist/esm/base/utils/request.js +0 -39
  94. package/dist/esm/base/utils/serverConfig.js +0 -58
  95. package/dist/esm/base/utils/transformStream.js +0 -90
  96. package/dist/esm/base/utils/warmup.js +0 -9
  97. package/dist/esm/core/hono.js +0 -0
  98. package/dist/esm/core/index.js +0 -1
  99. package/dist/esm/core/loadPlugins.js +0 -26
  100. package/dist/esm/core/plugin.js +0 -98
  101. package/dist/esm/core/render.js +0 -0
  102. package/dist/esm/core/server.js +0 -0
  103. package/dist/esm-node/base/adapters/node/bff.js +0 -45
  104. package/dist/esm-node/base/adapters/node/hono.js +0 -38
  105. package/dist/esm-node/base/adapters/node/index.js +0 -19
  106. package/dist/esm-node/base/adapters/node/loadServer.js +0 -22
  107. package/dist/esm-node/base/adapters/node/middlewares/index.js +0 -4
  108. package/dist/esm-node/base/adapters/node/middlewares/mock.js +0 -79
  109. package/dist/esm-node/base/adapters/node/middlewares/serverManifest.js +0 -48
  110. package/dist/esm-node/base/adapters/node/middlewares/serverPublic.js +0 -33
  111. package/dist/esm-node/base/adapters/node/middlewares/serverStatic.js +0 -75
  112. package/dist/esm-node/base/adapters/node/middlewares/templates.js +0 -32
  113. package/dist/esm-node/base/adapters/node/node.js +0 -100
  114. package/dist/esm-node/base/adapters/node/polyfills/index.js +0 -2
  115. package/dist/esm-node/base/adapters/node/polyfills/install.js +0 -46
  116. package/dist/esm-node/base/adapters/node/polyfills/stream.js +0 -126
  117. package/dist/esm-node/base/constants.js +0 -31
  118. package/dist/esm-node/base/index.js +0 -14
  119. package/dist/esm-node/base/middlewares/customServer/base.js +0 -87
  120. package/dist/esm-node/base/middlewares/customServer/context.js +0 -51
  121. package/dist/esm-node/base/middlewares/customServer/index.js +0 -106
  122. package/dist/esm-node/base/middlewares/customServer/routerApi.js +0 -20
  123. package/dist/esm-node/base/middlewares/customServer/template.js +0 -34
  124. package/dist/esm-node/base/middlewares/faviconFallback.js +0 -10
  125. package/dist/esm-node/base/middlewares/index.js +0 -3
  126. package/dist/esm-node/base/middlewares/monitor.js +0 -63
  127. package/dist/esm-node/base/middlewares/renderHandler/dataHandler.js +0 -22
  128. package/dist/esm-node/base/middlewares/renderHandler/index.js +0 -69
  129. package/dist/esm-node/base/middlewares/renderHandler/render.js +0 -99
  130. package/dist/esm-node/base/middlewares/renderHandler/serverTiming.js +0 -16
  131. package/dist/esm-node/base/middlewares/renderHandler/ssrCache.js +0 -162
  132. package/dist/esm-node/base/middlewares/renderHandler/ssrRender.js +0 -134
  133. package/dist/esm-node/base/serverBase.js +0 -168
  134. package/dist/esm-node/base/utils/debug.js +0 -5
  135. package/dist/esm-node/base/utils/entry.js +0 -6
  136. package/dist/esm-node/base/utils/env.js +0 -20
  137. package/dist/esm-node/base/utils/error.js +0 -41
  138. package/dist/esm-node/base/utils/index.js +0 -13
  139. package/dist/esm-node/base/utils/middlewareCollector.js +0 -29
  140. package/dist/esm-node/base/utils/request.js +0 -38
  141. package/dist/esm-node/base/utils/serverConfig.js +0 -34
  142. package/dist/esm-node/base/utils/transformStream.js +0 -36
  143. package/dist/esm-node/base/utils/warmup.js +0 -9
  144. package/dist/esm-node/core/hono.js +0 -0
  145. package/dist/esm-node/core/index.js +0 -1
  146. package/dist/esm-node/core/render.js +0 -0
  147. package/dist/esm-node/core/server.js +0 -0
  148. package/dist/esm-node/index.js +0 -5
  149. package/dist/esm-node/types/config/bff.js +0 -0
  150. package/dist/esm-node/types/config/dev.js +0 -0
  151. package/dist/esm-node/types/config/html.js +0 -0
  152. package/dist/esm-node/types/config/index.js +0 -6
  153. package/dist/esm-node/types/config/output.js +0 -0
  154. package/dist/esm-node/types/config/security.js +0 -0
  155. package/dist/esm-node/types/config/server.js +0 -0
  156. package/dist/esm-node/types/config/share.js +0 -0
  157. package/dist/esm-node/types/config/source.js +0 -0
  158. package/dist/esm-node/types/config/tools.js +0 -0
  159. package/dist/types/base/adapters/node/bff.d.ts +0 -4
  160. package/dist/types/base/adapters/node/hono.d.ts +0 -22
  161. package/dist/types/base/adapters/node/index.d.ts +0 -6
  162. package/dist/types/base/adapters/node/loadServer.d.ts +0 -3
  163. package/dist/types/base/adapters/node/middlewares/index.d.ts +0 -4
  164. package/dist/types/base/adapters/node/middlewares/mock.d.ts +0 -5
  165. package/dist/types/base/adapters/node/middlewares/serverManifest.d.ts +0 -3
  166. package/dist/types/base/adapters/node/middlewares/serverPublic.d.ts +0 -7
  167. package/dist/types/base/adapters/node/middlewares/serverStatic.d.ts +0 -11
  168. package/dist/types/base/adapters/node/middlewares/templates.d.ts +0 -4
  169. package/dist/types/base/adapters/node/node.d.ts +0 -12
  170. package/dist/types/base/adapters/node/polyfills/index.d.ts +0 -2
  171. package/dist/types/base/adapters/node/polyfills/install.d.ts +0 -1
  172. package/dist/types/base/adapters/node/polyfills/stream.d.ts +0 -18
  173. package/dist/types/base/constants.d.ts +0 -24
  174. package/dist/types/base/index.d.ts +0 -7
  175. package/dist/types/base/middlewares/customServer/base.d.ts +0 -3
  176. package/dist/types/base/middlewares/customServer/context.d.ts +0 -7
  177. package/dist/types/base/middlewares/customServer/index.d.ts +0 -13
  178. package/dist/types/base/middlewares/customServer/routerApi.d.ts +0 -9
  179. package/dist/types/base/middlewares/customServer/template.d.ts +0 -11
  180. package/dist/types/base/middlewares/faviconFallback.d.ts +0 -2
  181. package/dist/types/base/middlewares/index.d.ts +0 -3
  182. package/dist/types/base/middlewares/monitor.d.ts +0 -6
  183. package/dist/types/base/middlewares/renderHandler/dataHandler.d.ts +0 -5
  184. package/dist/types/base/middlewares/renderHandler/index.d.ts +0 -9
  185. package/dist/types/base/middlewares/renderHandler/render.d.ts +0 -12
  186. package/dist/types/base/middlewares/renderHandler/serverTiming.d.ts +0 -7
  187. package/dist/types/base/middlewares/renderHandler/ssrCache.d.ts +0 -29
  188. package/dist/types/base/middlewares/renderHandler/ssrRender.d.ts +0 -18
  189. package/dist/types/base/serverBase.d.ts +0 -52
  190. package/dist/types/base/utils/debug.d.ts +0 -1
  191. package/dist/types/base/utils/entry.d.ts +0 -2
  192. package/dist/types/base/utils/env.d.ts +0 -2
  193. package/dist/types/base/utils/error.d.ts +0 -1
  194. package/dist/types/base/utils/index.d.ts +0 -8
  195. package/dist/types/base/utils/middlewareCollector.d.ts +0 -12
  196. package/dist/types/base/utils/request.d.ts +0 -12
  197. package/dist/types/base/utils/serverConfig.d.ts +0 -14
  198. package/dist/types/base/utils/transformStream.d.ts +0 -5
  199. package/dist/types/base/utils/warmup.d.ts +0 -1
  200. package/dist/types/core/hono.d.ts +0 -1
  201. package/dist/types/core/index.d.ts +0 -1
  202. package/dist/types/core/loadPlugins.d.ts +0 -3
  203. package/dist/types/core/render.d.ts +0 -13
  204. package/dist/types/core/server.d.ts +0 -99
@@ -1,99 +0,0 @@
1
- import { REPLACE_REG } from "../../../base/constants";
2
- import { createErrorHtml, sortRoutes, cutNameByHyphen, parseQuery, transformResponse, getPathname } from "../../utils";
3
- import { dataHandler } from "./dataHandler";
4
- import { ssrRender } from "./ssrRender";
5
- async function createRender({ routes, pwd, metaName, staticGenerate, forceCSR, nonce }) {
6
- return async (req, { logger, nodeReq, reporter, templates, serverManifest }) => {
7
- const routeInfo = matchRoute(req, routes);
8
- if (!routeInfo) {
9
- return new Response(createErrorHtml(404), {
10
- status: 404,
11
- headers: {
12
- "content-type": "text/html; charset=UTF-8"
13
- }
14
- });
15
- }
16
- const html = templates[routeInfo.entryName];
17
- if (!html) {
18
- throw new Error(`Can't found entry ${routeInfo.entryName} html `);
19
- }
20
- const renderMode = getRenderMode(req, metaName || "modern-js", routeInfo.isSSR, forceCSR);
21
- const renderOptions = {
22
- pwd,
23
- html,
24
- routeInfo,
25
- staticGenerate: staticGenerate || false,
26
- metaName: metaName || "modern-js",
27
- nonce,
28
- logger,
29
- nodeReq,
30
- reporter,
31
- serverRoutes: routes,
32
- serverManifest
33
- };
34
- switch (renderMode) {
35
- case "data":
36
- let response = await dataHandler(req, renderOptions);
37
- if (!response) {
38
- response = await renderHandler(req, renderOptions, "ssr");
39
- }
40
- return response;
41
- case "ssr":
42
- case "csr":
43
- return renderHandler(req, renderOptions, renderMode);
44
- default:
45
- throw new Error(`Unknown render mode: ${renderMode}`);
46
- }
47
- };
48
- }
49
- async function renderHandler(request, options, mode) {
50
- const serverData = {
51
- router: {
52
- baseUrl: options.routeInfo.urlPath,
53
- params: {}
54
- }
55
- };
56
- const response = await (mode === "ssr" ? ssrRender(request, options) : csrRender(options.html));
57
- return transformResponse(response, injectServerData(serverData));
58
- }
59
- function matchRoute(req, routes) {
60
- const sorted = routes.sort(sortRoutes);
61
- for (const route of sorted) {
62
- const pathname = getPathname(req);
63
- if (pathname.startsWith(route.urlPath)) {
64
- return route;
65
- }
66
- }
67
- return void 0;
68
- }
69
- function getRenderMode(req, framework, isSSR, forceCSR) {
70
- const query = parseQuery(req);
71
- if (isSSR) {
72
- if (query.__loader) {
73
- return "data";
74
- }
75
- if (forceCSR && (query.csr || req.headers.get(`x-${cutNameByHyphen(framework)}-ssr-fallback`))) {
76
- return "csr";
77
- }
78
- return "ssr";
79
- } else {
80
- return "csr";
81
- }
82
- }
83
- function csrRender(html) {
84
- return new Response(html, {
85
- status: 200,
86
- headers: new Headers({
87
- "content-type": "text/html; charset=UTF-8"
88
- })
89
- });
90
- }
91
- function injectServerData(serverData) {
92
- const { head } = REPLACE_REG.before;
93
- const searchValue = new RegExp(head);
94
- const replcaeCb = (beforeHead) => `${beforeHead}<script type="application/json" id="__MODERN_SERVER_DATA__">${JSON.stringify(serverData)}</script>`;
95
- return (template) => template.replace(searchValue, replcaeCb);
96
- }
97
- export {
98
- createRender
99
- };
@@ -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
- };
@@ -1,134 +0,0 @@
1
- import { SERVER_RENDER_FUNCTION_NAME, MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
2
- import * as isbot from "isbot";
3
- import { getRuntimeEnv, parseHeaders, parseQuery, getHost } from "../../utils";
4
- import { X_RENDER_CACHE } from "../../constants";
5
- import { ServerTiming } from "./serverTiming";
6
- const defaultReporter = {
7
- init() {
8
- },
9
- reportError() {
10
- },
11
- reportTiming() {
12
- },
13
- reportInfo() {
14
- },
15
- reportWarn() {
16
- }
17
- };
18
- async function ssrRender(request, { routeInfo, html, staticGenerate, nonce, metaName, reporter, logger, nodeReq, serverManifest }) {
19
- var _serverManifest_renderBundles;
20
- const { entryName } = routeInfo;
21
- const loadableStats = serverManifest.loadableStats || {};
22
- const routeManifest = serverManifest.routeManifest || {};
23
- const host = getHost(request);
24
- const isSpider = isbot.default(request.headers.get("user-agent"));
25
- const responseProxy = new ResponseProxy();
26
- const query = parseQuery(request);
27
- const headers = parseHeaders(request);
28
- const ssrContext = {
29
- request: {
30
- baseUrl: routeInfo.urlPath,
31
- params: {},
32
- // eslint-disable-next-line node/no-unsupported-features/node-builtins, node/prefer-global/url
33
- pathname: new URL(request.url).pathname,
34
- host,
35
- query,
36
- url: request.url,
37
- headers
38
- },
39
- response: {
40
- setHeader(key, value) {
41
- responseProxy.headers.set(key, value);
42
- },
43
- status(code) {
44
- responseProxy.status = code;
45
- }
46
- },
47
- redirection: {},
48
- template: html,
49
- loadableStats,
50
- routeManifest,
51
- entryName,
52
- staticGenerate,
53
- logger,
54
- serverTiming: new ServerTiming(responseProxy.headers, metaName),
55
- reporter: reporter || defaultReporter,
56
- /** @deprecated node req */
57
- req: nodeReq,
58
- /** @deprecated node res */
59
- res: void 0,
60
- isSpider,
61
- nonce
62
- };
63
- const renderBundle = (_serverManifest_renderBundles = serverManifest.renderBundles) === null || _serverManifest_renderBundles === void 0 ? void 0 : _serverManifest_renderBundles[entryName || MAIN_ENTRY_NAME];
64
- if (!renderBundle) {
65
- throw new Error(`Can't found renderBundle ${entryName || MAIN_ENTRY_NAME}`);
66
- }
67
- const runtimeEnv = getRuntimeEnv();
68
- let ssrResult;
69
- let cacheStatus;
70
- const render = renderBundle[SERVER_RENDER_FUNCTION_NAME];
71
- if (runtimeEnv === "node") {
72
- const cacheModuleName = "./ssrCache";
73
- const { ssrCache } = await import(cacheModuleName);
74
- const incomingMessage = nodeReq ? nodeReq : new IncomingMessgeProxy(request);
75
- const cacheControl = await ssrCache.matchCacheControl(incomingMessage);
76
- if (cacheControl) {
77
- const { data: data2, status } = await ssrCache.getCache(request, cacheControl, render, ssrContext);
78
- ssrResult = data2;
79
- cacheStatus = status;
80
- } else {
81
- ssrResult = await render(ssrContext);
82
- }
83
- } else {
84
- ssrResult = await render(ssrContext);
85
- }
86
- const { redirection } = ssrContext;
87
- if (cacheStatus) {
88
- responseProxy.headers.set(X_RENDER_CACHE, cacheStatus);
89
- }
90
- if (redirection.url) {
91
- const { headers: headers2 } = responseProxy;
92
- headers2.set("Location", redirection.url);
93
- return new Response(null, {
94
- status: redirection.status || 302,
95
- headers: {
96
- Location: redirection.url
97
- }
98
- });
99
- }
100
- const { Readable } = await import("stream").catch((_) => ({
101
- Readable: void 0
102
- }));
103
- const streamModule = "../../adapters/node/polyfills/stream";
104
- const { createReadableStreamFromReadable } = runtimeEnv === "node" ? await import(streamModule).catch((_) => ({
105
- createReadableStreamFromReadable: void 0
106
- })) : {
107
- createReadableStreamFromReadable: void 0
108
- };
109
- const data = Readable && ssrResult instanceof Readable ? (createReadableStreamFromReadable === null || createReadableStreamFromReadable === void 0 ? void 0 : createReadableStreamFromReadable(ssrResult)) || "" : ssrResult;
110
- return new Response(data, {
111
- status: responseProxy.status,
112
- headers: responseProxy.headers
113
- });
114
- }
115
- class ResponseProxy {
116
- constructor() {
117
- this.headers = new Headers();
118
- this.status = 200;
119
- this.headers.set("content-type", "text/html; charset=UTF-8");
120
- }
121
- }
122
- class IncomingMessgeProxy {
123
- constructor(req) {
124
- this.headers = {};
125
- req.headers.forEach((value, key) => {
126
- this.headers[key] = value;
127
- });
128
- this.method = req.method;
129
- this.url = new URL(req.url).pathname;
130
- }
131
- }
132
- export {
133
- ssrRender
134
- };
@@ -1,168 +0,0 @@
1
- import { INTERNAL_SERVER_PLUGINS } from "@modern-js/utils/universal/constants";
2
- import { Hono } from "hono";
3
- import { AppContext, ConfigContext, serverManager, createPlugin } from "../core";
4
- import { getRuntimeEnv } from "./utils";
5
- class ServerBase {
6
- /**
7
- * 初始化顺序
8
- * - 获取 server runtime config
9
- * - 设置 context
10
- * - 创建 hooksRunner
11
- * - 合并插件,内置插件和 serverConfig 中配置的插件
12
- * - 执行 config hook
13
- * - 获取最终的配置
14
- * - 设置配置到 context
15
- * - 执行 prepare hook
16
- */
17
- async init() {
18
- const { options } = this;
19
- const runtimeEnv = getRuntimeEnv();
20
- runtimeEnv === "node" && await this.initServerConfig(options);
21
- await this.injectContext(options);
22
- this.runner = await this.createHookRunner();
23
- runtimeEnv === "node" && await this.initConfig(this.runner, options);
24
- await this.injectContext(options);
25
- await this.runner.prepare();
26
- return this;
27
- }
28
- async createHookRunner() {
29
- serverManager.clear();
30
- const runtimeEnv = getRuntimeEnv();
31
- const internalPlugins = runtimeEnv === "node" ? await this.loadInternalPlugins() : [];
32
- const externalPlugins = this.loadExternalPlugins();
33
- const loadedPlugins = [
34
- ...internalPlugins,
35
- ...externalPlugins
36
- ];
37
- loadedPlugins.forEach((p) => {
38
- serverManager.usePlugin(p);
39
- });
40
- const hooksRunner = await serverManager.init();
41
- return hooksRunner;
42
- }
43
- async loadInternalPlugins() {
44
- const { internalPlugins: plugins = INTERNAL_SERVER_PLUGINS, appContext, pwd } = this.options;
45
- const loadPluginsModule = "../core/loadPlugins";
46
- const { loadPlugins } = await import(loadPluginsModule);
47
- const internalPlugins = loadPlugins(appContext.appDirectory || pwd, plugins);
48
- return internalPlugins;
49
- }
50
- loadExternalPlugins() {
51
- const { plugins = [] } = this.options;
52
- const configPlugins = this.serverConfig.plugins || [];
53
- const externalPlugins = [
54
- ...plugins,
55
- ...configPlugins
56
- ];
57
- return externalPlugins.map((plugin) => createPlugin(plugin.setup, plugin));
58
- }
59
- async initServerConfig(options) {
60
- const { pwd, serverConfigFile } = options;
61
- const utilsModuleName = "./utils/serverConfig";
62
- const { getServerConfigPath, requireConfig } = await import(utilsModuleName);
63
- const serverConfigPath = await getServerConfigPath(pwd, serverConfigFile);
64
- const serverConfig = requireConfig(serverConfigPath);
65
- this.serverConfig = serverConfig;
66
- }
67
- async injectContext(options) {
68
- const appContext = await this.initAppContext();
69
- const { config, pwd } = options;
70
- ConfigContext.set(config);
71
- AppContext.set({
72
- ...appContext,
73
- serverBase: this,
74
- distDirectory: pwd
75
- });
76
- }
77
- async initAppContext() {
78
- const { options } = this;
79
- const { pwd, plugins = [], appContext } = options;
80
- const serverPlugins = plugins.map((p) => ({
81
- server: p
82
- }));
83
- return {
84
- appDirectory: (appContext === null || appContext === void 0 ? void 0 : appContext.appDirectory) || "",
85
- apiDirectory: appContext === null || appContext === void 0 ? void 0 : appContext.apiDirectory,
86
- lambdaDirectory: appContext === null || appContext === void 0 ? void 0 : appContext.lambdaDirectory,
87
- sharedDirectory: appContext.sharedDirectory || "",
88
- distDirectory: pwd,
89
- plugins: serverPlugins
90
- };
91
- }
92
- /**
93
- * Execute config hooks
94
- * @param runner
95
- * @param options
96
- */
97
- runConfigHook(runner, serverConfig) {
98
- const newServerConfig = runner.config(serverConfig || {});
99
- return newServerConfig;
100
- }
101
- async initConfig(runner, options) {
102
- const path = await import("path").catch((_) => {
103
- return {};
104
- });
105
- const utilsModuleName = "@modern-js/utils";
106
- const { ensureAbsolutePath, OUTPUT_CONFIG_FILE } = await import(utilsModuleName);
107
- const configModuleName = "./utils/serverConfig";
108
- const { loadConfig } = await import(configModuleName);
109
- const { pwd, config } = options;
110
- const { serverConfig } = this;
111
- const finalServerConfig = this.runConfigHook(runner, serverConfig);
112
- const resolvedConfigPath = ensureAbsolutePath(pwd, path.join(config.output.path || "dist", OUTPUT_CONFIG_FILE));
113
- options.config = loadConfig({
114
- cliConfig: config,
115
- serverConfig: finalServerConfig,
116
- resolvedConfigPath
117
- });
118
- }
119
- get all() {
120
- return this.app.all;
121
- }
122
- get use() {
123
- return this.app.use;
124
- }
125
- get get() {
126
- return this.app.get;
127
- }
128
- get post() {
129
- return this.app.post;
130
- }
131
- get put() {
132
- return this.app.put;
133
- }
134
- get delete() {
135
- return this.app.delete;
136
- }
137
- get patch() {
138
- return this.app.patch;
139
- }
140
- get handle() {
141
- return this.app.fetch;
142
- }
143
- get request() {
144
- return this.app.request;
145
- }
146
- get notFound() {
147
- return this.app.notFound;
148
- }
149
- get onError() {
150
- return this.app.onError;
151
- }
152
- constructor(options) {
153
- this.serverConfig = {};
154
- this.options = options;
155
- this.app = new Hono();
156
- }
157
- }
158
- function createServerBase(options) {
159
- if (options == null) {
160
- throw new Error("can not start server without options");
161
- }
162
- const server = new ServerBase(options);
163
- return server;
164
- }
165
- export {
166
- ServerBase,
167
- createServerBase
168
- };
@@ -1,5 +0,0 @@
1
- import { createDebugger } from "@modern-js/utils";
2
- const debug = createDebugger("prod-server");
3
- export {
4
- debug
5
- };
@@ -1,6 +0,0 @@
1
- const sortRoutes = (route1, route2) => {
2
- return route2.urlPath.length - route1.urlPath.length;
3
- };
4
- export {
5
- sortRoutes
6
- };
@@ -1,20 +0,0 @@
1
- const getRuntimeEnv = () => {
2
- var _globalThis_process_release, _globalThis_process, _globalThis;
3
- if (((_globalThis = globalThis) === null || _globalThis === void 0 ? void 0 : (_globalThis_process = _globalThis.process) === null || _globalThis_process === void 0 ? void 0 : (_globalThis_process_release = _globalThis_process.release) === null || _globalThis_process_release === void 0 ? void 0 : _globalThis_process_release.name) === "node") {
4
- return "node";
5
- }
6
- return "other";
7
- };
8
- const checkIsProd = () => {
9
- const env = getRuntimeEnv();
10
- switch (env) {
11
- case "node":
12
- return process.env.NODE_ENV === "production";
13
- default:
14
- return false;
15
- }
16
- };
17
- export {
18
- checkIsProd,
19
- getRuntimeEnv
20
- };
@@ -1,41 +0,0 @@
1
- const ERROR_PAGE_TEXT = {
2
- 404: "This page could not be found.",
3
- 500: "Internal Server Error."
4
- };
5
- const createErrorHtml = (status) => {
6
- const text = ERROR_PAGE_TEXT[status] || "";
7
- const title = `${status}: ${text}`;
8
- return `<!DOCTYPE html>
9
- <html lang="en">
10
- <head>
11
- <meta charset="utf-8">
12
- <meta name="viewport" content="width=device-width">
13
- <title>${title}</title>
14
- <style>
15
- html,body {
16
- margin: 0;
17
- }
18
-
19
- .page-container {
20
- color: #000;
21
- background: #fff;
22
- height: 100vh;
23
- text-align: center;
24
- display: flex;
25
- flex-direction: column;
26
- align-items: center;
27
- justify-content: center;
28
- }
29
- </style>
30
- </head>
31
- <body>
32
- <div class="page-container">
33
- <h1>${status}</h1>
34
- <div>${text}</div>
35
- </body>
36
- </html>
37
- `;
38
- };
39
- export {
40
- createErrorHtml
41
- };
@@ -1,13 +0,0 @@
1
- export * from "./env";
2
- export * from "./request";
3
- export * from "./transformStream";
4
- export * from "./middlewareCollector";
5
- export * from "./error";
6
- export * from "./warmup";
7
- export * from "./entry";
8
- const cutNameByHyphen = (s) => {
9
- return s.split(/[-_]/)[0];
10
- };
11
- export {
12
- cutNameByHyphen
13
- };
@@ -1,29 +0,0 @@
1
- const mergeExtension = (users) => {
2
- const output = [];
3
- return {
4
- middleware: output.concat(users)
5
- };
6
- };
7
- const createMiddlewareCollecter = () => {
8
- const webMiddlewares = [];
9
- const apiMiddlewares = [];
10
- const addWebMiddleware = (input) => {
11
- webMiddlewares.push(input);
12
- };
13
- const addAPIMiddleware = (input) => {
14
- apiMiddlewares.push(input);
15
- };
16
- const getMiddlewares = () => ({
17
- web: webMiddlewares,
18
- api: apiMiddlewares
19
- });
20
- return {
21
- getMiddlewares,
22
- addWebMiddleware,
23
- addAPIMiddleware
24
- };
25
- };
26
- export {
27
- createMiddlewareCollecter,
28
- mergeExtension
29
- };