@modern-js/server-core 2.52.1-alpha.0 → 2.54.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.
Files changed (264) hide show
  1. package/dist/cjs/adapters/node/helper/index.js +37 -0
  2. package/dist/cjs/{base/adapters/node/middlewares/templates.js → adapters/node/helper/loadCache.js} +19 -33
  3. package/dist/cjs/{base/utils/serverConfig.js → adapters/node/helper/loadConfig.js} +26 -31
  4. package/dist/cjs/{base/adapters/node/loadServer.js → adapters/node/helper/loadEnv.js} +3 -3
  5. package/dist/cjs/{base/utils/debug.js → adapters/node/helper/loadPlugin.js} +16 -6
  6. package/dist/cjs/{base/adapters → adapters}/node/index.js +17 -16
  7. package/dist/cjs/{core → adapters/node/plugins}/index.js +8 -4
  8. package/dist/cjs/{base/middlewares/frameworkHeader.js → adapters/node/plugins/nodeServer.js} +16 -9
  9. package/dist/cjs/{base/adapters/node/middlewares/serverManifest.js → adapters/node/plugins/resource.js} +56 -5
  10. package/dist/cjs/{base/adapters/node/middlewares/serverStatic.js → adapters/node/plugins/static.js} +61 -7
  11. package/dist/cjs/{base/constants.js → constants.js} +3 -0
  12. package/dist/cjs/index.js +28 -6
  13. package/dist/cjs/pluginManager.js +106 -0
  14. package/dist/cjs/{base/middlewares → plugins}/customServer/index.js +13 -11
  15. package/dist/cjs/plugins/favicon.js +44 -0
  16. package/dist/cjs/{base/middlewares → plugins}/index.js +21 -15
  17. package/dist/cjs/{base/middlewares/logger.js → plugins/log.js} +23 -5
  18. package/dist/cjs/{base/middlewares → plugins}/monitor.js +30 -33
  19. package/dist/cjs/plugins/processedBy.js +44 -0
  20. package/dist/cjs/plugins/render/index.js +136 -0
  21. package/dist/cjs/{base/middlewares/renderHandler → plugins/render}/render.js +20 -5
  22. package/dist/cjs/plugins/render/ssrCache.js +178 -0
  23. package/dist/cjs/{base/middlewares/renderHandler → plugins/render}/ssrRender.js +13 -13
  24. package/dist/cjs/serverBase.js +178 -0
  25. package/dist/cjs/{base/adapters/node/middlewares → types}/index.js +10 -10
  26. package/dist/cjs/types/plugin.js +16 -0
  27. package/dist/cjs/{base/utils → utils}/index.js +3 -1
  28. package/dist/cjs/{base/middlewares/faviconFallback.js → utils/serverConfig.js} +12 -11
  29. package/dist/esm/adapters/node/helper/index.js +10 -0
  30. package/dist/esm/adapters/node/helper/loadCache.js +19 -0
  31. package/dist/esm/adapters/node/helper/loadConfig.js +32 -0
  32. package/dist/esm/adapters/node/helper/loadPlugin.js +17 -0
  33. package/dist/{esm-node/base → esm}/adapters/node/index.js +8 -8
  34. package/dist/esm/adapters/node/plugins/index.js +3 -0
  35. package/dist/esm/adapters/node/plugins/nodeServer.js +18 -0
  36. package/dist/esm/{base/adapters/node/middlewares/serverManifest.js → adapters/node/plugins/resource.js} +139 -1
  37. package/dist/esm/{base/adapters/node/middlewares/serverStatic.js → adapters/node/plugins/static.js} +108 -2
  38. package/dist/esm/{base/constants.js → constants.js} +2 -0
  39. package/dist/esm/index.js +15 -3
  40. package/dist/esm/pluginManager.js +140 -0
  41. package/dist/esm/{base/middlewares → plugins}/customServer/index.js +12 -11
  42. package/dist/esm/plugins/favicon.js +34 -0
  43. package/dist/esm/plugins/index.js +15 -0
  44. package/dist/esm/{base/middlewares/logger.js → plugins/log.js} +33 -2
  45. package/dist/esm/plugins/monitor.js +120 -0
  46. package/dist/esm/plugins/processedBy.js +42 -0
  47. package/dist/esm/plugins/render/index.js +229 -0
  48. package/dist/esm/{base/middlewares/renderHandler → plugins/render}/render.js +20 -7
  49. package/dist/esm/plugins/render/ssrCache.js +266 -0
  50. package/dist/esm/{base/middlewares/renderHandler → plugins/render}/ssrRender.js +26 -45
  51. package/dist/esm/serverBase.js +250 -0
  52. package/dist/esm/types/index.js +4 -0
  53. package/dist/esm/types/render.js +0 -0
  54. package/dist/esm/types/server.js +0 -0
  55. package/dist/esm/{base/utils → utils}/index.js +1 -0
  56. package/dist/esm/utils/serverConfig.js +13 -0
  57. package/dist/esm-node/adapters/node/helper/index.js +10 -0
  58. package/dist/esm-node/adapters/node/helper/loadCache.js +19 -0
  59. package/dist/esm-node/adapters/node/helper/loadConfig.js +31 -0
  60. package/dist/esm-node/adapters/node/helper/loadPlugin.js +15 -0
  61. package/dist/{esm/base → esm-node}/adapters/node/index.js +8 -8
  62. package/dist/esm-node/adapters/node/plugins/index.js +3 -0
  63. package/dist/esm-node/adapters/node/plugins/nodeServer.js +14 -0
  64. package/dist/esm-node/{base/adapters/node/middlewares/serverManifest.js → adapters/node/plugins/resource.js} +49 -1
  65. package/dist/esm-node/{base/adapters/node/middlewares/serverStatic.js → adapters/node/plugins/static.js} +54 -2
  66. package/dist/esm-node/{base/constants.js → constants.js} +2 -0
  67. package/dist/esm-node/index.js +15 -3
  68. package/dist/esm-node/pluginManager.js +82 -0
  69. package/dist/esm-node/{base/middlewares → plugins}/customServer/index.js +11 -10
  70. package/dist/esm-node/plugins/favicon.js +20 -0
  71. package/dist/esm-node/plugins/index.js +15 -0
  72. package/dist/esm-node/{base/middlewares/logger.js → plugins/log.js} +19 -1
  73. package/dist/esm-node/plugins/monitor.js +62 -0
  74. package/dist/esm-node/plugins/processedBy.js +20 -0
  75. package/dist/esm-node/plugins/render/index.js +111 -0
  76. package/dist/esm-node/{base/middlewares/renderHandler → plugins/render}/render.js +20 -5
  77. package/dist/esm-node/plugins/render/ssrCache.js +143 -0
  78. package/dist/esm-node/{base/middlewares/renderHandler → plugins/render}/ssrRender.js +14 -14
  79. package/dist/esm-node/serverBase.js +153 -0
  80. package/dist/esm-node/types/index.js +4 -0
  81. package/dist/esm-node/{base/utils → utils}/index.js +1 -0
  82. package/dist/esm-node/utils/serverConfig.js +11 -0
  83. package/dist/types/adapters/node/helper/index.d.ts +4 -0
  84. package/dist/types/adapters/node/helper/loadCache.d.ts +2 -0
  85. package/dist/types/adapters/node/helper/loadConfig.d.ts +2 -0
  86. package/dist/types/{base/adapters/node/loadServer.d.ts → adapters/node/helper/loadEnv.d.ts} +1 -1
  87. package/dist/types/adapters/node/helper/loadPlugin.d.ts +3 -0
  88. package/dist/types/{base/adapters → adapters}/node/hono.d.ts +1 -2
  89. package/dist/types/{base/adapters → adapters}/node/index.d.ts +2 -3
  90. package/dist/types/{base/adapters → adapters}/node/node.d.ts +1 -2
  91. package/dist/types/adapters/node/plugins/index.d.ts +3 -0
  92. package/dist/types/adapters/node/plugins/nodeServer.d.ts +4 -0
  93. package/dist/types/adapters/node/plugins/resource.d.ts +7 -0
  94. package/dist/types/adapters/node/plugins/static.d.ts +15 -0
  95. package/dist/types/{base/constants.d.ts → constants.d.ts} +1 -0
  96. package/dist/types/index.d.ts +9 -3
  97. package/dist/types/pluginManager.d.ts +31 -0
  98. package/dist/types/{base/middlewares → plugins}/customServer/base.d.ts +1 -1
  99. package/dist/types/{base/middlewares → plugins}/customServer/context.d.ts +1 -1
  100. package/dist/types/{base/middlewares → plugins}/customServer/index.d.ts +3 -3
  101. package/dist/types/{base/middlewares → plugins}/customServer/loader.d.ts +1 -1
  102. package/dist/types/plugins/favicon.d.ts +2 -0
  103. package/dist/types/plugins/index.d.ts +6 -0
  104. package/dist/types/plugins/log.d.ts +2 -0
  105. package/dist/types/plugins/monitor.d.ts +9 -0
  106. package/dist/types/plugins/processedBy.d.ts +2 -0
  107. package/dist/types/plugins/render/index.d.ts +16 -0
  108. package/dist/types/{base/middlewares/renderHandler → plugins/render}/render.d.ts +5 -4
  109. package/dist/types/plugins/render/ssrCache.d.ts +19 -0
  110. package/dist/types/{base/middlewares/renderHandler → plugins/render}/ssrRender.d.ts +3 -2
  111. package/dist/types/{base/serverBase.d.ts → serverBase.d.ts} +13 -30
  112. package/dist/types/types/config/index.d.ts +1 -0
  113. package/dist/types/types/config/server.d.ts +1 -0
  114. package/dist/types/types/index.d.ts +4 -0
  115. package/dist/types/types/plugin.d.ts +134 -0
  116. package/dist/types/{base/utils → utils}/index.d.ts +1 -0
  117. package/dist/types/utils/serverConfig.d.ts +8 -0
  118. package/package.json +15 -31
  119. package/dist/cjs/base/adapters/node/bff.js +0 -70
  120. package/dist/cjs/base/adapters/node/middlewares/mock.js +0 -113
  121. package/dist/cjs/base/adapters/node/middlewares/serverPublic.js +0 -70
  122. package/dist/cjs/base/index.js +0 -55
  123. package/dist/cjs/base/middlewares/renderHandler/index.js +0 -129
  124. package/dist/cjs/base/middlewares/renderHandler/ssrCache.js +0 -207
  125. package/dist/cjs/base/serverBase.js +0 -203
  126. package/dist/cjs/core/loadPlugins.js +0 -50
  127. package/dist/cjs/core/plugin.js +0 -84
  128. package/dist/esm/base/adapters/node/bff.js +0 -128
  129. package/dist/esm/base/adapters/node/middlewares/index.js +0 -4
  130. package/dist/esm/base/adapters/node/middlewares/mock.js +0 -198
  131. package/dist/esm/base/adapters/node/middlewares/serverPublic.js +0 -90
  132. package/dist/esm/base/adapters/node/middlewares/templates.js +0 -114
  133. package/dist/esm/base/index.js +0 -19
  134. package/dist/esm/base/middlewares/faviconFallback.js +0 -28
  135. package/dist/esm/base/middlewares/frameworkHeader.js +0 -27
  136. package/dist/esm/base/middlewares/index.js +0 -9
  137. package/dist/esm/base/middlewares/monitor.js +0 -157
  138. package/dist/esm/base/middlewares/renderHandler/index.js +0 -246
  139. package/dist/esm/base/middlewares/renderHandler/ssrCache.js +0 -317
  140. package/dist/esm/base/serverBase.js +0 -383
  141. package/dist/esm/base/utils/debug.js +0 -5
  142. package/dist/esm/base/utils/serverConfig.js +0 -58
  143. package/dist/esm/core/index.js +0 -1
  144. package/dist/esm/core/loadPlugins.js +0 -26
  145. package/dist/esm/core/plugin.js +0 -61
  146. package/dist/esm-node/base/adapters/node/bff.js +0 -46
  147. package/dist/esm-node/base/adapters/node/middlewares/index.js +0 -4
  148. package/dist/esm-node/base/adapters/node/middlewares/mock.js +0 -79
  149. package/dist/esm-node/base/adapters/node/middlewares/serverPublic.js +0 -36
  150. package/dist/esm-node/base/adapters/node/middlewares/templates.js +0 -32
  151. package/dist/esm-node/base/index.js +0 -19
  152. package/dist/esm-node/base/middlewares/faviconFallback.js +0 -10
  153. package/dist/esm-node/base/middlewares/frameworkHeader.js +0 -7
  154. package/dist/esm-node/base/middlewares/index.js +0 -9
  155. package/dist/esm-node/base/middlewares/monitor.js +0 -63
  156. package/dist/esm-node/base/middlewares/renderHandler/index.js +0 -94
  157. package/dist/esm-node/base/middlewares/renderHandler/ssrCache.js +0 -172
  158. package/dist/esm-node/base/serverBase.js +0 -168
  159. package/dist/esm-node/base/utils/debug.js +0 -5
  160. package/dist/esm-node/base/utils/serverConfig.js +0 -34
  161. package/dist/esm-node/core/index.js +0 -1
  162. package/dist/esm-node/core/loadPlugins.js +0 -26
  163. package/dist/esm-node/core/plugin.js +0 -53
  164. package/dist/types/base/adapters/node/bff.d.ts +0 -3
  165. package/dist/types/base/adapters/node/middlewares/index.d.ts +0 -4
  166. package/dist/types/base/adapters/node/middlewares/mock.d.ts +0 -5
  167. package/dist/types/base/adapters/node/middlewares/serverManifest.d.ts +0 -4
  168. package/dist/types/base/adapters/node/middlewares/serverPublic.d.ts +0 -7
  169. package/dist/types/base/adapters/node/middlewares/serverStatic.d.ts +0 -11
  170. package/dist/types/base/adapters/node/middlewares/templates.d.ts +0 -4
  171. package/dist/types/base/index.d.ts +0 -7
  172. package/dist/types/base/middlewares/faviconFallback.d.ts +0 -2
  173. package/dist/types/base/middlewares/frameworkHeader.d.ts +0 -2
  174. package/dist/types/base/middlewares/index.d.ts +0 -6
  175. package/dist/types/base/middlewares/logger.d.ts +0 -2
  176. package/dist/types/base/middlewares/monitor.d.ts +0 -6
  177. package/dist/types/base/middlewares/renderHandler/index.d.ts +0 -9
  178. package/dist/types/base/middlewares/renderHandler/ssrCache.d.ts +0 -28
  179. package/dist/types/base/utils/debug.d.ts +0 -1
  180. package/dist/types/base/utils/serverConfig.d.ts +0 -14
  181. package/dist/types/core/index.d.ts +0 -1
  182. package/dist/types/core/loadPlugins.d.ts +0 -3
  183. package/dist/types/core/plugin.d.ts +0 -251
  184. package/dist/cjs/{base/adapters → adapters}/node/hono.js +0 -0
  185. package/dist/cjs/{base/adapters → adapters}/node/node.js +0 -0
  186. package/dist/cjs/{base/adapters → adapters}/node/polyfills/index.js +0 -0
  187. package/dist/cjs/{base/adapters → adapters}/node/polyfills/install.js +0 -0
  188. package/dist/cjs/{base/adapters → adapters}/node/polyfills/stream.js +0 -0
  189. package/dist/cjs/{base/middlewares → plugins}/customServer/base.js +0 -0
  190. package/dist/cjs/{base/middlewares → plugins}/customServer/context.js +0 -0
  191. package/dist/cjs/{base/middlewares → plugins}/customServer/loader.js +0 -0
  192. package/dist/cjs/{base/middlewares → plugins}/customServer/routerApi.js +0 -0
  193. package/dist/cjs/{base/middlewares → plugins}/customServer/template.js +0 -0
  194. package/dist/cjs/{base/middlewares/renderHandler → plugins/render}/dataHandler.js +0 -0
  195. package/dist/cjs/{base/middlewares/renderHandler → plugins/render}/serverTiming.js +0 -0
  196. package/dist/cjs/{core → types}/render.js +0 -0
  197. package/dist/cjs/{core → types}/server.js +0 -0
  198. package/dist/cjs/{base/utils → utils}/entry.js +0 -0
  199. package/dist/cjs/{base/utils → utils}/env.js +0 -0
  200. package/dist/cjs/{base/utils → utils}/error.js +0 -0
  201. package/dist/cjs/{base/utils → utils}/middlewareCollector.js +0 -0
  202. package/dist/cjs/{base/utils → utils}/request.js +0 -0
  203. package/dist/cjs/{base/utils → utils}/transformStream.js +0 -0
  204. package/dist/cjs/{base/utils → utils}/warmup.js +0 -0
  205. package/dist/esm/{base/adapters/node/loadServer.js → adapters/node/helper/loadEnv.js} +0 -0
  206. package/dist/esm/{base/adapters → adapters}/node/hono.js +0 -0
  207. package/dist/esm/{base/adapters → adapters}/node/node.js +0 -0
  208. package/dist/esm/{base/adapters → adapters}/node/polyfills/index.js +0 -0
  209. package/dist/esm/{base/adapters → adapters}/node/polyfills/install.js +0 -0
  210. package/dist/esm/{base/adapters → adapters}/node/polyfills/stream.js +0 -0
  211. package/dist/esm/{base/middlewares → plugins}/customServer/base.js +0 -0
  212. package/dist/esm/{base/middlewares → plugins}/customServer/context.js +0 -0
  213. package/dist/esm/{base/middlewares → plugins}/customServer/loader.js +0 -0
  214. package/dist/esm/{base/middlewares → plugins}/customServer/routerApi.js +0 -0
  215. package/dist/esm/{base/middlewares → plugins}/customServer/template.js +0 -0
  216. package/dist/esm/{base/middlewares/renderHandler → plugins/render}/dataHandler.js +0 -0
  217. package/dist/esm/{base/middlewares/renderHandler → plugins/render}/serverTiming.js +0 -0
  218. package/dist/esm/{core/server.js → types/plugin.js} +0 -0
  219. package/dist/esm/{base/utils → utils}/entry.js +0 -0
  220. package/dist/esm/{base/utils → utils}/env.js +0 -0
  221. package/dist/esm/{base/utils → utils}/error.js +0 -0
  222. package/dist/esm/{base/utils → utils}/middlewareCollector.js +0 -0
  223. package/dist/esm/{base/utils → utils}/request.js +0 -0
  224. package/dist/esm/{base/utils → utils}/transformStream.js +0 -0
  225. package/dist/esm/{base/utils → utils}/warmup.js +0 -0
  226. package/dist/esm-node/{base/adapters/node/loadServer.js → adapters/node/helper/loadEnv.js} +0 -0
  227. package/dist/esm-node/{base/adapters → adapters}/node/hono.js +0 -0
  228. package/dist/esm-node/{base/adapters → adapters}/node/node.js +0 -0
  229. package/dist/esm-node/{base/adapters → adapters}/node/polyfills/index.js +0 -0
  230. package/dist/esm-node/{base/adapters → adapters}/node/polyfills/install.js +0 -0
  231. package/dist/esm-node/{base/adapters → adapters}/node/polyfills/stream.js +0 -0
  232. package/dist/esm-node/{base/middlewares → plugins}/customServer/base.js +0 -0
  233. package/dist/esm-node/{base/middlewares → plugins}/customServer/context.js +0 -0
  234. package/dist/esm-node/{base/middlewares → plugins}/customServer/loader.js +0 -0
  235. package/dist/esm-node/{base/middlewares → plugins}/customServer/routerApi.js +0 -0
  236. package/dist/esm-node/{base/middlewares → plugins}/customServer/template.js +0 -0
  237. package/dist/esm-node/{base/middlewares/renderHandler → plugins/render}/dataHandler.js +0 -0
  238. package/dist/esm-node/{base/middlewares/renderHandler → plugins/render}/serverTiming.js +0 -0
  239. package/dist/esm-node/{core/render.js → types/plugin.js} +0 -0
  240. package/dist/{esm/core → esm-node/types}/render.js +0 -0
  241. package/dist/esm-node/{core → types}/server.js +0 -0
  242. package/dist/esm-node/{base/utils → utils}/entry.js +0 -0
  243. package/dist/esm-node/{base/utils → utils}/env.js +0 -0
  244. package/dist/esm-node/{base/utils → utils}/error.js +0 -0
  245. package/dist/esm-node/{base/utils → utils}/middlewareCollector.js +0 -0
  246. package/dist/esm-node/{base/utils → utils}/request.js +0 -0
  247. package/dist/esm-node/{base/utils → utils}/transformStream.js +0 -0
  248. package/dist/esm-node/{base/utils → utils}/warmup.js +0 -0
  249. package/dist/types/{base/adapters → adapters}/node/polyfills/index.d.ts +0 -0
  250. package/dist/types/{base/adapters → adapters}/node/polyfills/install.d.ts +0 -0
  251. package/dist/types/{base/adapters → adapters}/node/polyfills/stream.d.ts +0 -0
  252. package/dist/types/{base/middlewares → plugins}/customServer/routerApi.d.ts +0 -0
  253. package/dist/types/{base/middlewares → plugins}/customServer/template.d.ts +0 -0
  254. package/dist/types/{base/middlewares/renderHandler → plugins/render}/dataHandler.d.ts +0 -0
  255. package/dist/types/{base/middlewares/renderHandler → plugins/render}/serverTiming.d.ts +0 -0
  256. package/dist/types/{core → types}/render.d.ts +0 -0
  257. package/dist/types/{core → types}/server.d.ts +1 -1
  258. /package/dist/types/{base/utils → utils}/entry.d.ts +0 -0
  259. /package/dist/types/{base/utils → utils}/env.d.ts +0 -0
  260. /package/dist/types/{base/utils → utils}/error.d.ts +0 -0
  261. /package/dist/types/{base/utils → utils}/middlewareCollector.d.ts +0 -0
  262. /package/dist/types/{base/utils → utils}/request.d.ts +0 -0
  263. /package/dist/types/{base/utils → utils}/transformStream.d.ts +0 -0
  264. /package/dist/types/{base/utils → utils}/warmup.d.ts +0 -0
@@ -1,172 +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 { createTransformStream, getPathname } from "../../utils";
5
- import { createReadableStreamFromReadable } from "../../adapters/node/polyfills/stream";
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
- const reader = body.getReader();
63
- const writer = stream.writable.getWriter();
64
- const push = () => {
65
- reader.read().then(({ done, value }) => {
66
- if (done) {
67
- const current = Date.now();
68
- const cache = {
69
- val: html,
70
- cursor: current
71
- };
72
- this.container.set(key, JSON.stringify(cache), {
73
- ttl
74
- });
75
- writer.close();
76
- return;
77
- }
78
- writer.write(value);
79
- push();
80
- });
81
- };
82
- push();
83
- return {
84
- data: stream.readable,
85
- status
86
- };
87
- }
88
- }
89
- computedKey(req, cacheControl) {
90
- const pathname = getPathname(req);
91
- const { customKey } = cacheControl;
92
- const defaultKey = pathname.replace(/.+\/+$/, "");
93
- if (customKey) {
94
- if (typeof customKey === "string") {
95
- return customKey;
96
- } else {
97
- return customKey(defaultKey);
98
- }
99
- } else {
100
- return defaultKey;
101
- }
102
- }
103
- constructor(container) {
104
- this.container = container;
105
- }
106
- }
107
- const CACHE_FILENAME = "cache";
108
- class ServerCache {
109
- async loadCacheMod(pwd = process.cwd()) {
110
- const path = await import("path").catch(() => {
111
- return {};
112
- });
113
- const serverCacheFilepath = path.resolve(pwd, SERVER_DIR, CACHE_FILENAME);
114
- const mod = requireExistModule(serverCacheFilepath, {
115
- interop: false
116
- });
117
- this.cacheOption = mod === null || mod === void 0 ? void 0 : mod.cacheOption;
118
- if (this.cacheOption && !(mod === null || mod === void 0 ? void 0 : mod.customContainer)) {
119
- const cacheStorage = createMemoryStorage("__ssr__cache");
120
- this.customContainer = cacheStorage;
121
- } else {
122
- this.customContainer = mod === null || mod === void 0 ? void 0 : mod.customContainer;
123
- }
124
- if (this.customContainer) {
125
- this.cacheManger = new CacheManager(this.customContainer);
126
- }
127
- }
128
- matchCacheControl(req) {
129
- const { cacheOption } = this;
130
- if (!cacheOption || !req) {
131
- return void 0;
132
- } else if (isCacheControl(cacheOption)) {
133
- return cacheOption;
134
- } else if (isCacheOptionProvider(cacheOption)) {
135
- return cacheOption(req);
136
- } else {
137
- const url = req.url;
138
- const options = Object.entries(cacheOption);
139
- for (const [key, option] of options) {
140
- if (key === "*" || new RegExp(key).test(url)) {
141
- if (typeof option === "function") {
142
- return option(req);
143
- } else {
144
- return option;
145
- }
146
- }
147
- }
148
- return void 0;
149
- }
150
- function isCacheOptionProvider(option) {
151
- return typeof option === "function";
152
- }
153
- function isCacheControl(option) {
154
- return typeof option === "object" && option !== null && "maxAge" in option;
155
- }
156
- }
157
- async getCache(req, cacheControl, render, ssrContext) {
158
- if (this.cacheManger) {
159
- return this.cacheManger.getCacheResult(req, cacheControl, render, ssrContext);
160
- } else {
161
- const renderResult = await render(ssrContext);
162
- return {
163
- data: renderResult
164
- };
165
- }
166
- }
167
- }
168
- const ssrCache = new ServerCache();
169
- export {
170
- CacheManager,
171
- ssrCache
172
- };
@@ -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.bind(this.app);
121
- }
122
- get use() {
123
- return this.app.use.bind(this.app);
124
- }
125
- get get() {
126
- return this.app.get.bind(this.app);
127
- }
128
- get post() {
129
- return this.app.post.bind(this.app);
130
- }
131
- get put() {
132
- return this.app.put.bind(this.app);
133
- }
134
- get delete() {
135
- return this.app.delete.bind(this.app);
136
- }
137
- get patch() {
138
- return this.app.patch.bind(this.app);
139
- }
140
- get handle() {
141
- return this.app.fetch.bind(this.app);
142
- }
143
- get request() {
144
- return this.app.request.bind(this.app);
145
- }
146
- get notFound() {
147
- return this.app.notFound.bind(this.app);
148
- }
149
- get onError() {
150
- return this.app.onError.bind(this.app);
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,34 +0,0 @@
1
- import { compatRequire, fs, DEFAULT_SERVER_CONFIG } from "@modern-js/utils";
2
- import mergeDeep from "merge-deep";
3
- const getServerConfigPath = async (distDirectory, serverConfigFile = DEFAULT_SERVER_CONFIG) => {
4
- const path = await import("path");
5
- const serverConfigPath = path.join(distDirectory, serverConfigFile);
6
- return `${serverConfigPath}.js`;
7
- };
8
- const requireConfig = (serverConfigPath) => {
9
- if (fs.pathExistsSync(serverConfigPath)) {
10
- return compatRequire(serverConfigPath);
11
- }
12
- return {};
13
- };
14
- const loadConfig = ({ cliConfig, serverConfig, resolvedConfigPath }) => {
15
- let config = null;
16
- if (process.env.NODE_ENV === "production") {
17
- const resolvedConfig = requireConfig(resolvedConfigPath);
18
- config = mergeDeep({
19
- ...resolvedConfig,
20
- plugins: []
21
- }, serverConfig, cliConfig);
22
- } else {
23
- config = mergeDeep({
24
- ...cliConfig,
25
- plugins: []
26
- }, serverConfig);
27
- }
28
- return config;
29
- };
30
- export {
31
- getServerConfigPath,
32
- loadConfig,
33
- requireConfig
34
- };
@@ -1 +0,0 @@
1
- export * from "./plugin";
@@ -1,26 +0,0 @@
1
- import { compatRequire, getInternalPlugins, tryResolve } from "@modern-js/utils";
2
- import { createPlugin } from "../core/plugin";
3
- const resolvePlugin = (p, appDirectory) => {
4
- const isPluginInstance = typeof p !== "string";
5
- if (isPluginInstance) {
6
- return {
7
- module: createPlugin(p.setup, p)
8
- };
9
- }
10
- const pluginPath = tryResolve(p, appDirectory);
11
- const module = compatRequire(pluginPath);
12
- const pluginInstance = module();
13
- return {
14
- module: createPlugin(pluginInstance.setup, pluginInstance)
15
- };
16
- };
17
- const loadPlugins = (appDirectory, internalPlugins) => {
18
- const loadedPlugins = getInternalPlugins(appDirectory, internalPlugins);
19
- return loadedPlugins.map((plugin) => {
20
- const { module } = resolvePlugin(plugin, appDirectory);
21
- return module;
22
- });
23
- };
24
- export {
25
- loadPlugins
26
- };
@@ -1,53 +0,0 @@
1
- import { createContext, createAsyncManager, createAsyncPipeline, createAsyncWaterfall, createParallelWorkflow, createWaterfall } from "@modern-js/plugin";
2
- const gather = createParallelWorkflow();
3
- const config = createWaterfall();
4
- const prepare = createWaterfall();
5
- const prepareWebServer = createAsyncPipeline();
6
- const fallback = createParallelWorkflow();
7
- const prepareApiServer = createAsyncPipeline();
8
- const onApiChange = createAsyncWaterfall();
9
- const repack = createWaterfall();
10
- const beforeServerInit = createAsyncWaterfall();
11
- const afterMatch = createAsyncPipeline();
12
- const afterRender = createAsyncPipeline();
13
- const afterStreamingRender = createAsyncPipeline();
14
- const reset = createParallelWorkflow();
15
- const AppContext = createContext({});
16
- const setAppContext = (value) => AppContext.set(value);
17
- const ConfigContext = createContext({});
18
- const useConfigContext = () => ConfigContext.use().value;
19
- const useAppContext = () => AppContext.use().value;
20
- const pluginAPI = {
21
- useAppContext,
22
- useConfigContext,
23
- setAppContext
24
- };
25
- const serverHooks = {
26
- // server hook
27
- gather,
28
- config,
29
- prepare,
30
- fallback,
31
- prepareWebServer,
32
- prepareApiServer,
33
- repack,
34
- onApiChange,
35
- beforeServerInit,
36
- afterMatch,
37
- afterRender,
38
- afterStreamingRender,
39
- reset
40
- };
41
- const createServerManager = () => createAsyncManager(serverHooks, pluginAPI);
42
- const serverManager = createServerManager();
43
- const { createPlugin } = serverManager;
44
- export {
45
- AppContext,
46
- ConfigContext,
47
- createPlugin,
48
- createServerManager,
49
- serverManager,
50
- setAppContext,
51
- useAppContext,
52
- useConfigContext
53
- };
@@ -1,3 +0,0 @@
1
- import { BindRenderHandleOptions } from '../../../base/middlewares';
2
- import { ServerBase, type ServerBaseOptions } from '../../serverBase';
3
- export declare const bindBFFHandler: (server: ServerBase, options: ServerBaseOptions & BindRenderHandleOptions) => Promise<void>;
@@ -1,4 +0,0 @@
1
- export * from './mock';
2
- export * from './serverStatic';
3
- export * from './templates';
4
- export * from './serverManifest';
@@ -1,5 +0,0 @@
1
- import type { ServerBase } from '../../../serverBase';
2
- export declare const registerMockHandlers: ({ pwd, server, }: {
3
- pwd: string;
4
- server: ServerBase;
5
- }) => Promise<null | undefined>;
@@ -1,4 +0,0 @@
1
- import type { ServerRoute, Logger } from '@modern-js/types';
2
- import { Middleware, ServerEnv, ServerManifest } from '../../../../core/server';
3
- export declare function getServerManifest(pwd: string, routes: ServerRoute[], logger: Logger): Promise<ServerManifest>;
4
- export declare function injectServerManifest(pwd: string, routes?: ServerRoute[]): Middleware<ServerEnv>;
@@ -1,7 +0,0 @@
1
- import { ServerRoute } from '@modern-js/types';
2
- import { Middleware } from '../../../../core/server';
3
- export type PublicMiddlwareOptions = {
4
- pwd: string;
5
- routes: ServerRoute[];
6
- };
7
- export declare function createPublicMiddleware({ pwd, routes, }: PublicMiddlwareOptions): Middleware;
@@ -1,11 +0,0 @@
1
- import { ServerRoute } from '@modern-js/types';
2
- import type { OutputNormalizedConfig, HtmlNormalizedConfig } from '../../../../types/config';
3
- import { Middleware } from '../../../../core/server';
4
- interface ServerStaticOptions {
5
- pwd: string;
6
- output: OutputNormalizedConfig;
7
- html: HtmlNormalizedConfig;
8
- routes?: ServerRoute[];
9
- }
10
- export declare function createStaticMiddleware(options: ServerStaticOptions): Middleware;
11
- export {};
@@ -1,4 +0,0 @@
1
- import { ServerRoute } from '@modern-js/types';
2
- import { Middleware, ServerEnv } from '../../../../core/server';
3
- export declare function getHtmlTemplates(pwd: string, routes: ServerRoute[]): Promise<Record<string, string>>;
4
- export declare function injectTemplates(pwd: string, routes?: ServerRoute[]): Middleware<ServerEnv>;
@@ -1,7 +0,0 @@
1
- export { createErrorHtml, onError, ErrorDigest } from './utils';
2
- export { AGGRED_DIR } from './constants';
3
- export { favionFallbackMiddleware, injectReporter, injectLogger, getRenderHandler, bindRenderHandler, logHandler, processedBy, getLoaderCtx, } from './middlewares';
4
- export type { BindRenderHandleOptions } from './middlewares';
5
- export type { ServerBase, ServerBaseOptions } from './serverBase';
6
- export { createServerBase } from './serverBase';
7
- export type { Middleware, Context, Next, HonoRequest, ServerEnv, ServerManifest, } from '../core/server';
@@ -1,2 +0,0 @@
1
- import { Middleware } from '../../core/server';
2
- export declare const favionFallbackMiddleware: Middleware;
@@ -1,2 +0,0 @@
1
- import { Middleware } from '../../core/server';
2
- export declare const processedBy: Middleware;
@@ -1,6 +0,0 @@
1
- export * from './faviconFallback';
2
- export * from './monitor';
3
- export * from './renderHandler';
4
- export * from './logger';
5
- export * from './frameworkHeader';
6
- export { getLoaderCtx } from './customServer';
@@ -1,2 +0,0 @@
1
- import type { Middleware, ServerEnv } from '../../core/server';
2
- export declare function logHandler(): Middleware<ServerEnv>;
@@ -1,6 +0,0 @@
1
- import type { Logger, Metrics } from '@modern-js/types';
2
- import type { Context, Next, ServerEnv } from '../../core/server';
3
- export declare function injectReporter(): (c: Context<ServerEnv>, next: Next) => Promise<void>;
4
- export declare function initReporter(entryName: string): (c: Context<ServerEnv>, next: Next) => Promise<void>;
5
- export declare function injectLogger(inputLogger: Logger): (c: Context<ServerEnv>, next: Next) => Promise<void>;
6
- export declare function injectMetrics(inputMetrics: Metrics): (c: Context<ServerEnv>, next: Next) => Promise<void>;
@@ -1,9 +0,0 @@
1
- import { Render } from '../../../core/render';
2
- import { ServerBase, type ServerBaseOptions } from '../../serverBase';
3
- export type BindRenderHandleOptions = {
4
- metaName?: string;
5
- staticGenerate?: boolean;
6
- disableCustomHook?: boolean;
7
- };
8
- export declare function getRenderHandler(options: ServerBaseOptions & BindRenderHandleOptions, serverBase?: ServerBase): Promise<Render | null>;
9
- export declare function bindRenderHandler(server: ServerBase, options: ServerBaseOptions & BindRenderHandleOptions): Promise<void>;
@@ -1,28 +0,0 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- import type { IncomingMessage } from 'http';
4
- import { Readable } from 'stream';
5
- import type { CacheControl, CacheOption, Container } from '@modern-js/types';
6
- import type { SSRServerContext, ServerRender } from '../../../core/server';
7
- export type CacheStatus = 'hit' | 'stale' | 'expired' | 'miss';
8
- export type CacheResult = {
9
- data: string | Readable | ReadableStream;
10
- status?: CacheStatus;
11
- };
12
- export declare class CacheManager {
13
- private container;
14
- constructor(container: Container<string, string>);
15
- getCacheResult(req: Request, cacheControl: CacheControl, render: ServerRender, ssrContext: SSRServerContext): Promise<CacheResult>;
16
- private processCache;
17
- private computedKey;
18
- }
19
- declare class ServerCache {
20
- customContainer?: Container;
21
- cacheOption?: CacheOption;
22
- private cacheManger?;
23
- loadCacheMod(pwd?: string): Promise<void>;
24
- matchCacheControl(req?: IncomingMessage): CacheControl | Promise<CacheControl> | undefined;
25
- getCache(req: Request, cacheControl: CacheControl, render: ServerRender, ssrContext: SSRServerContext): Promise<CacheResult>;
26
- }
27
- export declare const ssrCache: ServerCache;
28
- export {};
@@ -1 +0,0 @@
1
- export declare const debug: import("@modern-js/utils/compiled/debug").Debugger;
@@ -1,14 +0,0 @@
1
- import { ServerConfig } from '../../core/plugin';
2
- import { ServerOptions } from '../../types/config';
3
- export declare const getServerConfigPath: (distDirectory: string, serverConfigFile?: string) => Promise<string>;
4
- export declare const requireConfig: (serverConfigPath: string) => any;
5
- /**
6
- * 对配置进行合并,开发环境下,cliConfig 与 serverConfig 进行深合并
7
- * 生产环境下,resolvedConfig 与 serverConfig 进行深合并
8
- * resolvedConfigPath: 构建序列化后的 modern.config.js 文件路径
9
- */
10
- export declare const loadConfig: ({ cliConfig, serverConfig, resolvedConfigPath, }: {
11
- cliConfig: ServerOptions;
12
- serverConfig: ServerConfig;
13
- resolvedConfigPath: string;
14
- }) => any;
@@ -1 +0,0 @@
1
- export * from './plugin';
@@ -1,3 +0,0 @@
1
- import { InternalPlugins } from '@modern-js/types';
2
- import { createPlugin } from '../core/plugin';
3
- export declare const loadPlugins: (appDirectory: string, internalPlugins: InternalPlugins) => ReturnType<typeof createPlugin>[];