@modern-js/server-core 2.48.6 → 2.49.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/dist/cjs/base/adapters/node/bff.js +70 -0
  2. package/dist/cjs/base/adapters/node/hono.js +63 -0
  3. package/dist/cjs/base/adapters/node/index.js +56 -0
  4. package/dist/cjs/base/adapters/node/loadServer.js +56 -0
  5. package/dist/cjs/base/adapters/node/middlewares/index.js +28 -0
  6. package/dist/cjs/base/adapters/node/middlewares/mock.js +113 -0
  7. package/dist/cjs/base/adapters/node/middlewares/serverManifest.js +90 -0
  8. package/dist/cjs/base/adapters/node/middlewares/serverPublic.js +67 -0
  9. package/dist/cjs/base/adapters/node/middlewares/serverStatic.js +109 -0
  10. package/dist/cjs/base/adapters/node/middlewares/templates.js +67 -0
  11. package/dist/cjs/base/adapters/node/node.js +127 -0
  12. package/dist/cjs/base/adapters/node/polyfills/index.js +24 -0
  13. package/dist/cjs/base/adapters/node/polyfills/install.js +72 -0
  14. package/dist/cjs/base/adapters/node/polyfills/stream.js +153 -0
  15. package/dist/cjs/base/constants.js +58 -0
  16. package/dist/cjs/base/index.js +49 -0
  17. package/dist/cjs/base/middlewares/customServer/base.js +171 -0
  18. package/dist/cjs/base/middlewares/customServer/context.js +73 -0
  19. package/dist/cjs/base/middlewares/customServer/index.js +136 -0
  20. package/dist/cjs/base/middlewares/customServer/routerApi.js +44 -0
  21. package/dist/cjs/base/middlewares/customServer/template.js +58 -0
  22. package/dist/cjs/base/middlewares/faviconFallback.js +34 -0
  23. package/dist/cjs/base/middlewares/frameworkHeader.js +31 -0
  24. package/dist/cjs/base/middlewares/index.js +30 -0
  25. package/dist/cjs/base/middlewares/logger.js +77 -0
  26. package/dist/cjs/base/middlewares/monitor.js +90 -0
  27. package/dist/cjs/base/middlewares/renderHandler/dataHandler.js +46 -0
  28. package/dist/cjs/base/middlewares/renderHandler/index.js +108 -0
  29. package/dist/cjs/base/middlewares/renderHandler/render.js +132 -0
  30. package/dist/cjs/base/middlewares/renderHandler/serverTiming.js +40 -0
  31. package/dist/cjs/base/middlewares/renderHandler/ssrCache.js +197 -0
  32. package/dist/cjs/base/middlewares/renderHandler/ssrRender.js +212 -0
  33. package/dist/cjs/base/serverBase.js +203 -0
  34. package/dist/cjs/base/utils/debug.js +29 -0
  35. package/dist/cjs/base/utils/entry.js +30 -0
  36. package/dist/cjs/base/utils/env.js +45 -0
  37. package/dist/cjs/base/utils/error.js +65 -0
  38. package/dist/cjs/base/utils/index.js +34 -0
  39. package/dist/cjs/base/utils/middlewareCollector.js +54 -0
  40. package/dist/cjs/base/utils/request.js +65 -0
  41. package/dist/cjs/base/utils/serverConfig.js +70 -0
  42. package/dist/cjs/base/utils/transformStream.js +61 -0
  43. package/dist/cjs/base/utils/warmup.js +43 -0
  44. package/dist/cjs/core/index.js +22 -0
  45. package/dist/cjs/{loadPlugins.js → core/loadPlugins.js} +4 -7
  46. package/dist/cjs/{plugin.js → core/plugin.js} +1 -42
  47. package/dist/cjs/core/render.js +16 -0
  48. package/dist/cjs/core/server.js +16 -0
  49. package/dist/cjs/index.js +6 -4
  50. package/dist/esm/base/adapters/node/bff.js +128 -0
  51. package/dist/esm/base/adapters/node/hono.js +83 -0
  52. package/dist/esm/base/adapters/node/index.js +20 -0
  53. package/dist/esm/base/adapters/node/loadServer.js +73 -0
  54. package/dist/esm/base/adapters/node/middlewares/index.js +4 -0
  55. package/dist/esm/base/adapters/node/middlewares/mock.js +198 -0
  56. package/dist/esm/base/adapters/node/middlewares/serverManifest.js +139 -0
  57. package/dist/esm/base/adapters/node/middlewares/serverPublic.js +85 -0
  58. package/dist/esm/base/adapters/node/middlewares/serverStatic.js +119 -0
  59. package/dist/esm/base/adapters/node/middlewares/templates.js +114 -0
  60. package/dist/esm/base/adapters/node/node.js +197 -0
  61. package/dist/esm/base/adapters/node/polyfills/index.js +2 -0
  62. package/dist/esm/base/adapters/node/polyfills/install.js +48 -0
  63. package/dist/esm/base/adapters/node/polyfills/stream.js +316 -0
  64. package/dist/esm/base/constants.js +31 -0
  65. package/dist/esm/base/index.js +16 -0
  66. package/dist/esm/base/middlewares/customServer/base.js +199 -0
  67. package/dist/esm/base/middlewares/customServer/context.js +68 -0
  68. package/dist/esm/base/middlewares/customServer/index.js +220 -0
  69. package/dist/esm/base/middlewares/customServer/routerApi.js +26 -0
  70. package/dist/esm/base/middlewares/customServer/template.js +47 -0
  71. package/dist/esm/base/middlewares/faviconFallback.js +28 -0
  72. package/dist/esm/base/middlewares/frameworkHeader.js +27 -0
  73. package/dist/esm/base/middlewares/index.js +5 -0
  74. package/dist/esm/base/middlewares/logger.js +75 -0
  75. package/dist/esm/base/middlewares/monitor.js +157 -0
  76. package/dist/esm/base/middlewares/renderHandler/dataHandler.js +45 -0
  77. package/dist/esm/base/middlewares/renderHandler/index.js +167 -0
  78. package/dist/esm/base/middlewares/renderHandler/render.js +225 -0
  79. package/dist/esm/base/middlewares/renderHandler/serverTiming.js +21 -0
  80. package/dist/esm/base/middlewares/renderHandler/ssrCache.js +306 -0
  81. package/dist/esm/base/middlewares/renderHandler/ssrRender.js +269 -0
  82. package/dist/esm/base/serverBase.js +383 -0
  83. package/dist/esm/base/utils/debug.js +5 -0
  84. package/dist/esm/base/utils/entry.js +6 -0
  85. package/dist/esm/base/utils/env.js +20 -0
  86. package/dist/esm/base/utils/error.js +12 -0
  87. package/dist/esm/base/utils/index.js +7 -0
  88. package/dist/esm/base/utils/middlewareCollector.js +31 -0
  89. package/dist/esm/base/utils/request.js +39 -0
  90. package/dist/esm/base/utils/serverConfig.js +58 -0
  91. package/dist/esm/base/utils/transformStream.js +90 -0
  92. package/dist/esm/base/utils/warmup.js +9 -0
  93. package/dist/esm/core/index.js +1 -0
  94. package/dist/esm/core/loadPlugins.js +26 -0
  95. package/dist/esm/core/plugin.js +59 -0
  96. package/dist/esm/core/render.js +0 -0
  97. package/dist/esm/core/server.js +0 -0
  98. package/dist/esm/index.js +3 -2
  99. package/dist/esm-node/base/adapters/node/bff.js +46 -0
  100. package/dist/esm-node/base/adapters/node/hono.js +38 -0
  101. package/dist/esm-node/base/adapters/node/index.js +20 -0
  102. package/dist/esm-node/base/adapters/node/loadServer.js +22 -0
  103. package/dist/esm-node/base/adapters/node/middlewares/index.js +4 -0
  104. package/dist/esm-node/base/adapters/node/middlewares/mock.js +79 -0
  105. package/dist/esm-node/base/adapters/node/middlewares/serverManifest.js +55 -0
  106. package/dist/esm-node/base/adapters/node/middlewares/serverPublic.js +33 -0
  107. package/dist/esm-node/base/adapters/node/middlewares/serverStatic.js +75 -0
  108. package/dist/esm-node/base/adapters/node/middlewares/templates.js +32 -0
  109. package/dist/esm-node/base/adapters/node/node.js +101 -0
  110. package/dist/esm-node/base/adapters/node/polyfills/index.js +2 -0
  111. package/dist/esm-node/base/adapters/node/polyfills/install.js +48 -0
  112. package/dist/esm-node/base/adapters/node/polyfills/stream.js +126 -0
  113. package/dist/esm-node/base/constants.js +31 -0
  114. package/dist/esm-node/base/index.js +16 -0
  115. package/dist/esm-node/base/middlewares/customServer/base.js +147 -0
  116. package/dist/esm-node/base/middlewares/customServer/context.js +46 -0
  117. package/dist/esm-node/base/middlewares/customServer/index.js +112 -0
  118. package/dist/esm-node/base/middlewares/customServer/routerApi.js +20 -0
  119. package/dist/esm-node/base/middlewares/customServer/template.js +34 -0
  120. package/dist/esm-node/base/middlewares/faviconFallback.js +10 -0
  121. package/dist/esm-node/base/middlewares/frameworkHeader.js +7 -0
  122. package/dist/esm-node/base/middlewares/index.js +5 -0
  123. package/dist/esm-node/base/middlewares/logger.js +53 -0
  124. package/dist/esm-node/base/middlewares/monitor.js +63 -0
  125. package/dist/esm-node/base/middlewares/renderHandler/dataHandler.js +22 -0
  126. package/dist/esm-node/base/middlewares/renderHandler/index.js +73 -0
  127. package/dist/esm-node/base/middlewares/renderHandler/render.js +108 -0
  128. package/dist/esm-node/base/middlewares/renderHandler/serverTiming.js +16 -0
  129. package/dist/esm-node/base/middlewares/renderHandler/ssrCache.js +162 -0
  130. package/dist/esm-node/base/middlewares/renderHandler/ssrRender.js +177 -0
  131. package/dist/esm-node/base/serverBase.js +168 -0
  132. package/dist/esm-node/base/utils/debug.js +5 -0
  133. package/dist/esm-node/base/utils/entry.js +6 -0
  134. package/dist/esm-node/base/utils/env.js +20 -0
  135. package/dist/esm-node/base/utils/error.js +41 -0
  136. package/dist/esm-node/base/utils/index.js +7 -0
  137. package/dist/esm-node/base/utils/middlewareCollector.js +29 -0
  138. package/dist/esm-node/base/utils/request.js +38 -0
  139. package/dist/esm-node/base/utils/serverConfig.js +34 -0
  140. package/dist/esm-node/base/utils/transformStream.js +36 -0
  141. package/dist/esm-node/base/utils/warmup.js +9 -0
  142. package/dist/esm-node/core/index.js +1 -0
  143. package/dist/{esm → esm-node/core}/loadPlugins.js +4 -7
  144. package/dist/{esm → esm-node/core}/plugin.js +1 -42
  145. package/dist/esm-node/core/render.js +0 -0
  146. package/dist/esm-node/core/server.js +0 -0
  147. package/dist/esm-node/index.js +5 -0
  148. package/dist/esm-node/types/config/bff.js +0 -0
  149. package/dist/esm-node/types/config/dev.js +0 -0
  150. package/dist/esm-node/types/config/html.js +0 -0
  151. package/dist/esm-node/types/config/index.js +6 -0
  152. package/dist/esm-node/types/config/output.js +0 -0
  153. package/dist/esm-node/types/config/security.js +0 -0
  154. package/dist/esm-node/types/config/server.js +0 -0
  155. package/dist/esm-node/types/config/share.js +0 -0
  156. package/dist/esm-node/types/config/source.js +0 -0
  157. package/dist/esm-node/types/config/tools.js +0 -0
  158. package/dist/types/base/adapters/node/bff.d.ts +3 -0
  159. package/dist/types/base/adapters/node/hono.d.ts +22 -0
  160. package/dist/types/base/adapters/node/index.d.ts +6 -0
  161. package/dist/types/base/adapters/node/loadServer.d.ts +3 -0
  162. package/dist/types/base/adapters/node/middlewares/index.d.ts +4 -0
  163. package/dist/types/base/adapters/node/middlewares/mock.d.ts +5 -0
  164. package/dist/types/base/adapters/node/middlewares/serverManifest.d.ts +4 -0
  165. package/dist/types/base/adapters/node/middlewares/serverPublic.d.ts +7 -0
  166. package/dist/types/base/adapters/node/middlewares/serverStatic.d.ts +11 -0
  167. package/dist/types/base/adapters/node/middlewares/templates.d.ts +4 -0
  168. package/dist/types/base/adapters/node/node.d.ts +13 -0
  169. package/dist/types/base/adapters/node/polyfills/index.d.ts +2 -0
  170. package/dist/types/base/adapters/node/polyfills/install.d.ts +1 -0
  171. package/dist/types/base/adapters/node/polyfills/stream.d.ts +18 -0
  172. package/dist/types/base/constants.d.ts +24 -0
  173. package/dist/types/base/index.d.ts +7 -0
  174. package/dist/types/base/middlewares/customServer/base.d.ts +3 -0
  175. package/dist/types/base/middlewares/customServer/context.d.ts +7 -0
  176. package/dist/types/base/middlewares/customServer/index.d.ts +13 -0
  177. package/dist/types/base/middlewares/customServer/routerApi.d.ts +9 -0
  178. package/dist/types/base/middlewares/customServer/template.d.ts +11 -0
  179. package/dist/types/base/middlewares/faviconFallback.d.ts +2 -0
  180. package/dist/types/base/middlewares/frameworkHeader.d.ts +2 -0
  181. package/dist/types/base/middlewares/index.d.ts +5 -0
  182. package/dist/types/base/middlewares/logger.d.ts +2 -0
  183. package/dist/types/base/middlewares/monitor.d.ts +6 -0
  184. package/dist/types/base/middlewares/renderHandler/dataHandler.d.ts +5 -0
  185. package/dist/types/base/middlewares/renderHandler/index.d.ts +9 -0
  186. package/dist/types/base/middlewares/renderHandler/render.d.ts +12 -0
  187. package/dist/types/base/middlewares/renderHandler/serverTiming.d.ts +7 -0
  188. package/dist/types/base/middlewares/renderHandler/ssrCache.d.ts +28 -0
  189. package/dist/types/base/middlewares/renderHandler/ssrRender.d.ts +21 -0
  190. package/dist/types/base/serverBase.d.ts +70 -0
  191. package/dist/types/base/utils/debug.d.ts +1 -0
  192. package/dist/types/base/utils/entry.d.ts +2 -0
  193. package/dist/types/base/utils/env.d.ts +2 -0
  194. package/dist/types/base/utils/error.d.ts +1 -0
  195. package/dist/types/base/utils/index.d.ts +7 -0
  196. package/dist/types/base/utils/middlewareCollector.d.ts +12 -0
  197. package/dist/types/base/utils/request.d.ts +12 -0
  198. package/dist/types/base/utils/serverConfig.d.ts +14 -0
  199. package/dist/types/base/utils/transformStream.d.ts +5 -0
  200. package/dist/types/base/utils/warmup.d.ts +1 -0
  201. package/dist/types/core/index.d.ts +1 -0
  202. package/dist/types/core/loadPlugins.d.ts +3 -0
  203. package/dist/types/core/plugin.d.ts +202 -0
  204. package/dist/types/core/render.d.ts +17 -0
  205. package/dist/types/core/server.d.ts +44 -0
  206. package/dist/types/index.d.ts +3 -2
  207. package/package.json +44 -6
  208. package/dist/types/loadPlugins.d.ts +0 -5
  209. package/dist/types/plugin.d.ts +0 -493
@@ -0,0 +1,306 @@
1
+ import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
+ import { _ as _class_call_check } from "@swc/helpers/_/_class_call_check";
3
+ import { _ as _instanceof } from "@swc/helpers/_/_instanceof";
4
+ import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
5
+ import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
6
+ import { Readable } from "stream";
7
+ import { SERVER_DIR, requireExistModule } from "@modern-js/utils";
8
+ import { createMemoryStorage } from "@modern-js/runtime-utils/storer";
9
+ import { createReadableStreamFromReadable } from "../../adapters/node/polyfills/stream";
10
+ import { createTransformStream, getPathname } from "../../utils";
11
+ var CacheManager = /* @__PURE__ */ function() {
12
+ "use strict";
13
+ function CacheManager2(container) {
14
+ _class_call_check(this, CacheManager2);
15
+ this.container = container;
16
+ }
17
+ var _proto = CacheManager2.prototype;
18
+ _proto.getCacheResult = function getCacheResult(req, cacheControl, render, ssrContext) {
19
+ var _this = this;
20
+ return _async_to_generator(function() {
21
+ var key, value, maxAge, staleWhileRevalidate, ttl, cache, interval;
22
+ return _ts_generator(this, function(_state) {
23
+ switch (_state.label) {
24
+ case 0:
25
+ key = _this.computedKey(req, cacheControl);
26
+ return [
27
+ 4,
28
+ _this.container.get(key)
29
+ ];
30
+ case 1:
31
+ value = _state.sent();
32
+ maxAge = cacheControl.maxAge, staleWhileRevalidate = cacheControl.staleWhileRevalidate;
33
+ ttl = maxAge + staleWhileRevalidate;
34
+ if (value) {
35
+ cache = JSON.parse(value);
36
+ interval = Date.now() - cache.cursor;
37
+ if (interval <= maxAge) {
38
+ return [
39
+ 2,
40
+ {
41
+ data: cache.val,
42
+ status: "hit"
43
+ }
44
+ ];
45
+ } else if (interval <= staleWhileRevalidate + maxAge) {
46
+ _this.processCache(key, render, ssrContext, ttl);
47
+ return [
48
+ 2,
49
+ {
50
+ data: cache.val,
51
+ status: "stale"
52
+ }
53
+ ];
54
+ } else {
55
+ return [
56
+ 2,
57
+ _this.processCache(key, render, ssrContext, ttl, "expired")
58
+ ];
59
+ }
60
+ } else {
61
+ return [
62
+ 2,
63
+ _this.processCache(key, render, ssrContext, ttl, "miss")
64
+ ];
65
+ }
66
+ return [
67
+ 2
68
+ ];
69
+ }
70
+ });
71
+ })();
72
+ };
73
+ _proto.processCache = function processCache(key, render, ssrContext, ttl, status) {
74
+ var _this = this;
75
+ return _async_to_generator(function() {
76
+ var renderResult, current, cache, body, html, stream;
77
+ return _ts_generator(this, function(_state) {
78
+ switch (_state.label) {
79
+ case 0:
80
+ return [
81
+ 4,
82
+ render(ssrContext)
83
+ ];
84
+ case 1:
85
+ renderResult = _state.sent();
86
+ if (!!renderResult)
87
+ return [
88
+ 3,
89
+ 2
90
+ ];
91
+ return [
92
+ 2,
93
+ {
94
+ data: ""
95
+ }
96
+ ];
97
+ case 2:
98
+ if (!(typeof renderResult === "string"))
99
+ return [
100
+ 3,
101
+ 4
102
+ ];
103
+ current = Date.now();
104
+ cache = {
105
+ val: renderResult,
106
+ cursor: current
107
+ };
108
+ return [
109
+ 4,
110
+ _this.container.set(key, JSON.stringify(cache), {
111
+ ttl
112
+ })
113
+ ];
114
+ case 3:
115
+ _state.sent();
116
+ return [
117
+ 2,
118
+ {
119
+ data: renderResult,
120
+ status
121
+ }
122
+ ];
123
+ case 4:
124
+ body = // TODO: remove node:stream, move it to ssr entry.
125
+ _instanceof(renderResult, Readable) ? createReadableStreamFromReadable(renderResult) : renderResult;
126
+ html = "";
127
+ stream = createTransformStream(function(chunk) {
128
+ html += chunk;
129
+ return chunk;
130
+ });
131
+ stream.readable.getReader().closed.then(function() {
132
+ var current2 = Date.now();
133
+ var cache2 = {
134
+ val: html,
135
+ cursor: current2
136
+ };
137
+ _this.container.set(key, JSON.stringify(cache2), {
138
+ ttl
139
+ });
140
+ });
141
+ body.pipeThrough(stream);
142
+ return [
143
+ 2,
144
+ {
145
+ data: stream.readable,
146
+ status
147
+ }
148
+ ];
149
+ case 5:
150
+ return [
151
+ 2
152
+ ];
153
+ }
154
+ });
155
+ })();
156
+ };
157
+ _proto.computedKey = function computedKey(req, cacheControl) {
158
+ var pathname = getPathname(req);
159
+ var customKey = cacheControl.customKey;
160
+ var defaultKey = pathname.replace(/.+\/+$/, "");
161
+ if (customKey) {
162
+ if (typeof customKey === "string") {
163
+ return customKey;
164
+ } else {
165
+ return customKey(defaultKey);
166
+ }
167
+ } else {
168
+ return defaultKey;
169
+ }
170
+ };
171
+ return CacheManager2;
172
+ }();
173
+ var CACHE_FILENAME = "cache";
174
+ var ServerCache = /* @__PURE__ */ function() {
175
+ "use strict";
176
+ function ServerCache2() {
177
+ _class_call_check(this, ServerCache2);
178
+ }
179
+ var _proto = ServerCache2.prototype;
180
+ _proto.loadCacheMod = function loadCacheMod() {
181
+ var pwd = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : process.cwd();
182
+ var _this = this;
183
+ return _async_to_generator(function() {
184
+ var path, serverCacheFilepath, mod, cacheStorage;
185
+ return _ts_generator(this, function(_state) {
186
+ switch (_state.label) {
187
+ case 0:
188
+ return [
189
+ 4,
190
+ import("path").catch(function() {
191
+ return {};
192
+ })
193
+ ];
194
+ case 1:
195
+ path = _state.sent();
196
+ serverCacheFilepath = path.resolve(pwd, SERVER_DIR, CACHE_FILENAME);
197
+ mod = requireExistModule(serverCacheFilepath, {
198
+ interop: false
199
+ });
200
+ _this.cacheOption = mod === null || mod === void 0 ? void 0 : mod.cacheOption;
201
+ if (_this.cacheOption && !(mod === null || mod === void 0 ? void 0 : mod.customContainer)) {
202
+ cacheStorage = createMemoryStorage("__ssr__cache");
203
+ _this.customContainer = cacheStorage;
204
+ } else {
205
+ _this.customContainer = mod === null || mod === void 0 ? void 0 : mod.customContainer;
206
+ }
207
+ if (_this.customContainer) {
208
+ _this.cacheManger = new CacheManager(_this.customContainer);
209
+ }
210
+ return [
211
+ 2
212
+ ];
213
+ }
214
+ });
215
+ })();
216
+ };
217
+ _proto.matchCacheControl = function matchCacheControl(req) {
218
+ var cacheOption = this.cacheOption;
219
+ if (!cacheOption || !req) {
220
+ return void 0;
221
+ } else if (isCacheControl(cacheOption)) {
222
+ return cacheOption;
223
+ } else if (isCacheOptionProvider(cacheOption)) {
224
+ return cacheOption(req);
225
+ } else {
226
+ var url = req.url;
227
+ var options = Object.entries(cacheOption);
228
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
229
+ try {
230
+ for (var _iterator = options[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
231
+ var _step_value = _sliced_to_array(_step.value, 2), key = _step_value[0], option = _step_value[1];
232
+ if (key === "*" || new RegExp(key).test(url)) {
233
+ if (typeof option === "function") {
234
+ return option(req);
235
+ } else {
236
+ return option;
237
+ }
238
+ }
239
+ }
240
+ } catch (err) {
241
+ _didIteratorError = true;
242
+ _iteratorError = err;
243
+ } finally {
244
+ try {
245
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
246
+ _iterator.return();
247
+ }
248
+ } finally {
249
+ if (_didIteratorError) {
250
+ throw _iteratorError;
251
+ }
252
+ }
253
+ }
254
+ return void 0;
255
+ }
256
+ function isCacheOptionProvider(option2) {
257
+ return typeof option2 === "function";
258
+ }
259
+ function isCacheControl(option2) {
260
+ return typeof option2 === "object" && option2 !== null && "maxAge" in option2;
261
+ }
262
+ };
263
+ _proto.getCache = function getCache(req, cacheControl, render, ssrContext) {
264
+ var _this = this;
265
+ return _async_to_generator(function() {
266
+ var renderResult;
267
+ return _ts_generator(this, function(_state) {
268
+ switch (_state.label) {
269
+ case 0:
270
+ if (!_this.cacheManger)
271
+ return [
272
+ 3,
273
+ 1
274
+ ];
275
+ return [
276
+ 2,
277
+ _this.cacheManger.getCacheResult(req, cacheControl, render, ssrContext)
278
+ ];
279
+ case 1:
280
+ return [
281
+ 4,
282
+ render(ssrContext)
283
+ ];
284
+ case 2:
285
+ renderResult = _state.sent();
286
+ return [
287
+ 2,
288
+ {
289
+ data: renderResult
290
+ }
291
+ ];
292
+ case 3:
293
+ return [
294
+ 2
295
+ ];
296
+ }
297
+ });
298
+ })();
299
+ };
300
+ return ServerCache2;
301
+ }();
302
+ var ssrCache = new ServerCache();
303
+ export {
304
+ CacheManager,
305
+ ssrCache
306
+ };
@@ -0,0 +1,269 @@
1
+ import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
+ import { _ as _class_call_check } from "@swc/helpers/_/_class_call_check";
3
+ import { _ as _instanceof } from "@swc/helpers/_/_instanceof";
4
+ import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
5
+ import { SERVER_RENDER_FUNCTION_NAME, MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
6
+ import * as isbot from "isbot";
7
+ import { getRuntimeEnv, parseHeaders, parseQuery, getHost, getPathname } from "../../utils";
8
+ import { X_RENDER_CACHE } from "../../constants";
9
+ import { ServerTiming } from "./serverTiming";
10
+ var defaultReporter = {
11
+ init: function init() {
12
+ },
13
+ reportError: function reportError() {
14
+ },
15
+ reportTiming: function reportTiming() {
16
+ },
17
+ reportInfo: function reportInfo() {
18
+ },
19
+ reportWarn: function reportWarn() {
20
+ }
21
+ };
22
+ function ssrRender(request, _) {
23
+ return _ssrRender.apply(this, arguments);
24
+ }
25
+ function _ssrRender() {
26
+ _ssrRender = _async_to_generator(function(request, param) {
27
+ var routeInfo, html, staticGenerate, nonce, metaName, reporter, logger, nodeReq, serverManifest, locals, metrics, _serverManifest_renderBundles, entryName, loadableStats, routeManifest, host, isSpider, responseProxy, query, headers, key, ssrContext, renderBundle, runtimeEnv, ssrResult, cacheStatus, render, cacheModuleName, ssrCache, incomingMessage, cacheControl, _ref, data, status, redirection, headers1, Readable, streamModule, createReadableStreamFromReadable, _tmp, data1;
28
+ return _ts_generator(this, function(_state) {
29
+ switch (_state.label) {
30
+ case 0:
31
+ routeInfo = param.routeInfo, html = param.html, staticGenerate = param.staticGenerate, nonce = param.nonce, metaName = param.metaName, reporter = param.reporter, logger = param.logger, nodeReq = param.nodeReq, serverManifest = param.serverManifest, locals = param.locals, metrics = param.metrics;
32
+ entryName = routeInfo.entryName;
33
+ loadableStats = serverManifest.loadableStats || {};
34
+ routeManifest = serverManifest.routeManifest || {};
35
+ host = getHost(request);
36
+ isSpider = isbot.default(request.headers.get("user-agent"));
37
+ responseProxy = new ResponseProxy();
38
+ query = parseQuery(request);
39
+ headers = parseHeaders(request);
40
+ if (nodeReq) {
41
+ for (var key2 in nodeReq.headers) {
42
+ if (!headers[key2]) {
43
+ headers[key2] = nodeReq.headers[key2];
44
+ }
45
+ }
46
+ }
47
+ ssrContext = {
48
+ request: {
49
+ baseUrl: routeInfo.urlPath,
50
+ params: {},
51
+ pathname: nodeReq ? getPathnameFromNodeReq(nodeReq) : getPathname(request),
52
+ host,
53
+ query,
54
+ url: nodeReq ? getHrefFromNodeReq(nodeReq) : request.url,
55
+ headers
56
+ },
57
+ response: {
58
+ setHeader: function setHeader(key3, value) {
59
+ responseProxy.headers.set(key3, value);
60
+ },
61
+ status: function status2(code) {
62
+ responseProxy.status = code;
63
+ },
64
+ locals: locals || {}
65
+ },
66
+ redirection: {},
67
+ template: html,
68
+ loadableStats,
69
+ routeManifest,
70
+ entryName,
71
+ staticGenerate,
72
+ logger,
73
+ metrics,
74
+ serverTiming: new ServerTiming(responseProxy.headers, metaName),
75
+ reporter: reporter || defaultReporter,
76
+ /** @deprecated node req */
77
+ req: nodeReq || request,
78
+ /** @deprecated node res */
79
+ res: void 0,
80
+ isSpider,
81
+ nonce
82
+ };
83
+ renderBundle = (_serverManifest_renderBundles = serverManifest.renderBundles) === null || _serverManifest_renderBundles === void 0 ? void 0 : _serverManifest_renderBundles[entryName || MAIN_ENTRY_NAME];
84
+ if (!renderBundle) {
85
+ throw new Error("Can't found renderBundle ".concat(entryName || MAIN_ENTRY_NAME));
86
+ }
87
+ runtimeEnv = getRuntimeEnv();
88
+ render = renderBundle[SERVER_RENDER_FUNCTION_NAME];
89
+ if (!(runtimeEnv === "node"))
90
+ return [
91
+ 3,
92
+ 7
93
+ ];
94
+ cacheModuleName = "./ssrCache";
95
+ return [
96
+ 4,
97
+ import(cacheModuleName)
98
+ ];
99
+ case 1:
100
+ ssrCache = _state.sent().ssrCache;
101
+ incomingMessage = nodeReq ? nodeReq : new IncomingMessgeProxy(request);
102
+ return [
103
+ 4,
104
+ ssrCache.matchCacheControl(incomingMessage)
105
+ ];
106
+ case 2:
107
+ cacheControl = _state.sent();
108
+ if (!cacheControl)
109
+ return [
110
+ 3,
111
+ 4
112
+ ];
113
+ return [
114
+ 4,
115
+ ssrCache.getCache(request, cacheControl, render, ssrContext)
116
+ ];
117
+ case 3:
118
+ _ref = _state.sent(), data = _ref.data, status = _ref.status;
119
+ ssrResult = data;
120
+ cacheStatus = status;
121
+ return [
122
+ 3,
123
+ 6
124
+ ];
125
+ case 4:
126
+ return [
127
+ 4,
128
+ render(ssrContext)
129
+ ];
130
+ case 5:
131
+ ssrResult = _state.sent();
132
+ _state.label = 6;
133
+ case 6:
134
+ return [
135
+ 3,
136
+ 9
137
+ ];
138
+ case 7:
139
+ return [
140
+ 4,
141
+ render(ssrContext)
142
+ ];
143
+ case 8:
144
+ ssrResult = _state.sent();
145
+ _state.label = 9;
146
+ case 9:
147
+ redirection = ssrContext.redirection;
148
+ if (cacheStatus) {
149
+ responseProxy.headers.set(X_RENDER_CACHE, cacheStatus);
150
+ }
151
+ if (redirection.url) {
152
+ headers1 = responseProxy.headers;
153
+ headers1.set("Location", redirection.url);
154
+ return [
155
+ 2,
156
+ new Response(null, {
157
+ status: redirection.status || 302,
158
+ headers: {
159
+ Location: redirection.url
160
+ }
161
+ })
162
+ ];
163
+ }
164
+ return [
165
+ 4,
166
+ import("stream").catch(function(_) {
167
+ return {
168
+ Readable: void 0
169
+ };
170
+ })
171
+ ];
172
+ case 10:
173
+ Readable = _state.sent().Readable;
174
+ streamModule = "../../adapters/node/polyfills/stream";
175
+ if (!(runtimeEnv === "node"))
176
+ return [
177
+ 3,
178
+ 12
179
+ ];
180
+ return [
181
+ 4,
182
+ import(streamModule).catch(function(_) {
183
+ return {
184
+ createReadableStreamFromReadable: void 0
185
+ };
186
+ })
187
+ ];
188
+ case 11:
189
+ _tmp = _state.sent();
190
+ return [
191
+ 3,
192
+ 13
193
+ ];
194
+ case 12:
195
+ _tmp = {
196
+ createReadableStreamFromReadable: void 0
197
+ };
198
+ _state.label = 13;
199
+ case 13:
200
+ createReadableStreamFromReadable = _tmp.createReadableStreamFromReadable;
201
+ data1 = Readable && _instanceof(ssrResult, Readable) ? (createReadableStreamFromReadable === null || createReadableStreamFromReadable === void 0 ? void 0 : createReadableStreamFromReadable(ssrResult)) || "" : ssrResult;
202
+ if (typeof data1 !== "string") {
203
+ responseProxy.headers.set("transfer-encoding", "chunked");
204
+ }
205
+ return [
206
+ 2,
207
+ new Response(data1, {
208
+ status: responseProxy.status,
209
+ headers: responseProxy.headers
210
+ })
211
+ ];
212
+ }
213
+ });
214
+ });
215
+ return _ssrRender.apply(this, arguments);
216
+ }
217
+ var ResponseProxy = function ResponseProxy2() {
218
+ "use strict";
219
+ _class_call_check(this, ResponseProxy2);
220
+ this.headers = new Headers();
221
+ this.status = 200;
222
+ this.headers.set("content-type", "text/html; charset=UTF-8");
223
+ };
224
+ var IncomingMessgeProxy = function IncomingMessgeProxy2(req) {
225
+ "use strict";
226
+ var _this = this;
227
+ _class_call_check(this, IncomingMessgeProxy2);
228
+ this.headers = {};
229
+ req.headers.forEach(function(value, key) {
230
+ _this.headers[key] = value;
231
+ });
232
+ this.method = req.method;
233
+ this.url = getPathname(req);
234
+ };
235
+ function getHrefFromNodeReq(nodeReq) {
236
+ function getProtocal() {
237
+ if (nodeReq.socket.encrypted) {
238
+ return "https";
239
+ }
240
+ var proto = nodeReq.headers["x-forwarded-proto"];
241
+ return proto ? proto.split(/\s*,\s*/, 1)[0] : "http";
242
+ }
243
+ function getHost2() {
244
+ var host = nodeReq.headers["x-forwarded-host"];
245
+ if (!host) {
246
+ host = nodeReq.headers.host;
247
+ }
248
+ host = host.split(/\s*,\s*/, 1)[0] || "undefined";
249
+ return host;
250
+ }
251
+ var href = "".concat(getProtocal(), "://").concat(getHost2()).concat(nodeReq.url || "");
252
+ return href;
253
+ }
254
+ function getPathnameFromNodeReq(nodeReq) {
255
+ var url = nodeReq.url;
256
+ if (!url) {
257
+ return "/";
258
+ }
259
+ var match = url.match(/\/[^?]*/);
260
+ var pathname = match ? match[0] : "/";
261
+ if (pathname !== "/" && pathname.endsWith("/")) {
262
+ pathname = pathname.slice(0, -1);
263
+ }
264
+ return pathname;
265
+ }
266
+ export {
267
+ getPathnameFromNodeReq,
268
+ ssrRender
269
+ };