@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,126 @@
1
+ import { Stream } from "node:stream";
2
+ async function writeReadableStreamToWritable(stream, writable) {
3
+ const reader = stream.getReader();
4
+ const flushable = writable;
5
+ try {
6
+ while (true) {
7
+ const { done, value } = await reader.read();
8
+ if (done) {
9
+ writable.end();
10
+ break;
11
+ }
12
+ writable.write(value);
13
+ if (typeof flushable.flush === "function") {
14
+ flushable.flush();
15
+ }
16
+ }
17
+ } catch (error) {
18
+ writable.destroy(error);
19
+ throw error;
20
+ }
21
+ }
22
+ async function writeAsyncIterableToWritable(iterable, writable) {
23
+ try {
24
+ for await (const chunk of iterable) {
25
+ writable.write(chunk);
26
+ }
27
+ writable.end();
28
+ } catch (error) {
29
+ writable.destroy(error);
30
+ throw error;
31
+ }
32
+ }
33
+ async function readableStreamToString(stream, encoding) {
34
+ const reader = stream.getReader();
35
+ const chunks = [];
36
+ while (true) {
37
+ const { done, value } = await reader.read();
38
+ if (done) {
39
+ break;
40
+ }
41
+ if (value) {
42
+ chunks.push(value);
43
+ }
44
+ }
45
+ return Buffer.concat(chunks).toString(encoding);
46
+ }
47
+ const createReadableStreamFromReadable = (source) => {
48
+ const pump = new StreamPump(source);
49
+ const stream = new ReadableStream(pump, pump);
50
+ return stream;
51
+ };
52
+ class StreamPump {
53
+ size(chunk) {
54
+ return (chunk === null || chunk === void 0 ? void 0 : chunk.byteLength) || 0;
55
+ }
56
+ start(controller) {
57
+ this.controller = controller;
58
+ this.stream.on("data", this.enqueue);
59
+ this.stream.once("error", this.error);
60
+ this.stream.once("end", this.close);
61
+ this.stream.once("close", this.close);
62
+ }
63
+ pull() {
64
+ this.resume();
65
+ }
66
+ cancel(reason) {
67
+ if (this.stream.destroy) {
68
+ this.stream.destroy(reason);
69
+ }
70
+ this.stream.off("data", this.enqueue);
71
+ this.stream.off("error", this.error);
72
+ this.stream.off("end", this.close);
73
+ this.stream.off("close", this.close);
74
+ }
75
+ enqueue(chunk) {
76
+ if (this.controller) {
77
+ try {
78
+ const bytes = chunk instanceof Uint8Array ? chunk : Buffer.from(chunk);
79
+ const available = (this.controller.desiredSize || 0) - bytes.byteLength;
80
+ this.controller.enqueue(bytes);
81
+ if (available <= 0) {
82
+ this.pause();
83
+ }
84
+ } catch (error) {
85
+ this.controller.error(new Error("Could not create Buffer, chunk must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object"));
86
+ this.cancel();
87
+ }
88
+ }
89
+ }
90
+ pause() {
91
+ if (this.stream.pause) {
92
+ this.stream.pause();
93
+ }
94
+ }
95
+ resume() {
96
+ if (this.stream.readable && this.stream.resume) {
97
+ this.stream.resume();
98
+ }
99
+ }
100
+ close() {
101
+ if (this.controller) {
102
+ this.controller.close();
103
+ delete this.controller;
104
+ }
105
+ }
106
+ error(error) {
107
+ if (this.controller) {
108
+ this.controller.error(error);
109
+ delete this.controller;
110
+ }
111
+ }
112
+ constructor(stream) {
113
+ this.highWaterMark = stream.readableHighWaterMark || new Stream.Readable().readableHighWaterMark;
114
+ this.accumalatedSize = 0;
115
+ this.stream = stream;
116
+ this.enqueue = this.enqueue.bind(this);
117
+ this.error = this.error.bind(this);
118
+ this.close = this.close.bind(this);
119
+ }
120
+ }
121
+ export {
122
+ createReadableStreamFromReadable,
123
+ readableStreamToString,
124
+ writeAsyncIterableToWritable,
125
+ writeReadableStreamToWritable
126
+ };
@@ -0,0 +1,31 @@
1
+ const AGGRED_DIR = {
2
+ mock: "config/mock",
3
+ server: "server",
4
+ api: "api",
5
+ shared: "shared",
6
+ lambda: "lambda"
7
+ };
8
+ const REPLACE_REG = {
9
+ before: {
10
+ head: "<head[^>]*>",
11
+ body: "<body[^>]*>"
12
+ },
13
+ after: {
14
+ head: "</head>",
15
+ body: "</body>"
16
+ }
17
+ };
18
+ var ServerReportTimings;
19
+ (function(ServerReportTimings2) {
20
+ ServerReportTimings2["SERVER_HANDLE_REQUEST"] = "server-handle-request";
21
+ ServerReportTimings2["SERVER_MIDDLEWARE"] = "server-middleware";
22
+ ServerReportTimings2["SERVER_HOOK_AFTER_RENDER"] = "server-hook-after-render";
23
+ ServerReportTimings2["SERVER_HOOK_AFTER_MATCH"] = "server-hook-after-match";
24
+ })(ServerReportTimings || (ServerReportTimings = {}));
25
+ const X_RENDER_CACHE = "x-render-cache";
26
+ export {
27
+ AGGRED_DIR,
28
+ REPLACE_REG,
29
+ ServerReportTimings,
30
+ X_RENDER_CACHE
31
+ };
@@ -0,0 +1,16 @@
1
+ import { createErrorHtml } from "./utils";
2
+ import { AGGRED_DIR } from "./constants";
3
+ import { favionFallbackMiddleware, injectReporter, injectLogger, getRenderHandler, bindRenderHandler, logHandler, processedBy } from "./middlewares";
4
+ import { createServerBase } from "./serverBase";
5
+ export {
6
+ AGGRED_DIR,
7
+ bindRenderHandler,
8
+ createErrorHtml,
9
+ createServerBase,
10
+ favionFallbackMiddleware,
11
+ getRenderHandler,
12
+ injectLogger,
13
+ injectReporter,
14
+ logHandler,
15
+ processedBy
16
+ };
@@ -0,0 +1,147 @@
1
+ import { _ as _class_private_field_get } from "@swc/helpers/_/_class_private_field_get";
2
+ import { _ as _class_private_field_init } from "@swc/helpers/_/_class_private_field_init";
3
+ import { _ as _class_private_field_set } from "@swc/helpers/_/_class_private_field_set";
4
+ import { getCookie } from "hono/cookie";
5
+ import { getHost } from "../../utils";
6
+ function createBaseHookContext(c) {
7
+ const logger = c.get("logger");
8
+ const metrics = c.get("metrics");
9
+ return {
10
+ request: new BaseHookRequest(c),
11
+ response: new BaseHookResponse(c),
12
+ logger,
13
+ metrics
14
+ };
15
+ }
16
+ var _req = /* @__PURE__ */ new WeakMap(), _c = /* @__PURE__ */ new WeakMap(), _headersData = /* @__PURE__ */ new WeakMap(), _headers = /* @__PURE__ */ new WeakMap();
17
+ class BaseHookRequest {
18
+ get url() {
19
+ return _class_private_field_get(this, _req).path;
20
+ }
21
+ // TODO: remove next major version
22
+ set url(_u) {
23
+ }
24
+ get host() {
25
+ return getHost(_class_private_field_get(this, _req).raw);
26
+ }
27
+ // TODO: remove next major version
28
+ set host(_h) {
29
+ }
30
+ get pathname() {
31
+ return _class_private_field_get(this, _req).path;
32
+ }
33
+ // TODO: remove next major version
34
+ set pathname(_p) {
35
+ }
36
+ get query() {
37
+ return _class_private_field_get(this, _req).query();
38
+ }
39
+ // TODO: remove next major version
40
+ set query(_q) {
41
+ }
42
+ get headers() {
43
+ return _class_private_field_get(this, _headers);
44
+ }
45
+ // TODO: remove next major version
46
+ set headers(_h) {
47
+ }
48
+ get cookies() {
49
+ return {
50
+ // FIXME: ModernRequest Type Error
51
+ get: (key) => {
52
+ return getCookie(_class_private_field_get(this, _c), key);
53
+ }
54
+ };
55
+ }
56
+ get cookie() {
57
+ return _class_private_field_get(this, _req).header("cookie");
58
+ }
59
+ // TODO: remove next major version
60
+ set cookie(_c2) {
61
+ }
62
+ constructor(c) {
63
+ _class_private_field_init(this, _req, {
64
+ writable: true,
65
+ value: void 0
66
+ });
67
+ _class_private_field_init(this, _c, {
68
+ writable: true,
69
+ value: void 0
70
+ });
71
+ _class_private_field_init(this, _headersData, {
72
+ writable: true,
73
+ value: void 0
74
+ });
75
+ _class_private_field_init(this, _headers, {
76
+ writable: true,
77
+ value: void 0
78
+ });
79
+ _class_private_field_set(this, _headersData, {});
80
+ _class_private_field_set(this, _c, c);
81
+ _class_private_field_set(this, _req, c.req);
82
+ const rawHeaders = _class_private_field_get(this, _req).raw.headers;
83
+ rawHeaders.forEach((value, key) => {
84
+ _class_private_field_get(this, _headersData)[key] = value;
85
+ });
86
+ _class_private_field_set(this, _headers, new Proxy(_class_private_field_get(this, _headersData), {
87
+ get(target, p) {
88
+ return target[p];
89
+ },
90
+ set(target, p, newValue) {
91
+ target[p] = newValue;
92
+ rawHeaders.set(p, newValue);
93
+ return true;
94
+ }
95
+ }));
96
+ }
97
+ }
98
+ var _c1 = /* @__PURE__ */ new WeakMap();
99
+ class BaseHookResponse {
100
+ get(key) {
101
+ return _class_private_field_get(this, _c1).res.headers.get(key);
102
+ }
103
+ set(key, value) {
104
+ if ([
105
+ "set-cookie",
106
+ "Set-Cookie"
107
+ ].includes(key)) {
108
+ _class_private_field_get(this, _c1).header(key, value.toString(), {
109
+ append: true
110
+ });
111
+ } else {
112
+ _class_private_field_get(this, _c1).header(key, value.toString());
113
+ }
114
+ }
115
+ status(code) {
116
+ _class_private_field_get(this, _c1).status(code);
117
+ }
118
+ get cookies() {
119
+ const setCookie = (key, value) => {
120
+ _class_private_field_get(this, _c1).header("set-cookie", `${key}=${value}`, {
121
+ append: true
122
+ });
123
+ };
124
+ const clearCookie = () => {
125
+ _class_private_field_get(this, _c1).header("set-cookie", void 0);
126
+ };
127
+ return {
128
+ set: setCookie,
129
+ clear: clearCookie
130
+ };
131
+ }
132
+ raw(body, options) {
133
+ _class_private_field_get(this, _c1).res = _class_private_field_get(this, _c1).newResponse(body, options);
134
+ this.private_overrided = true;
135
+ }
136
+ constructor(c) {
137
+ _class_private_field_init(this, _c1, {
138
+ writable: true,
139
+ value: void 0
140
+ });
141
+ this.private_overrided = false;
142
+ _class_private_field_set(this, _c1, c);
143
+ }
144
+ }
145
+ export {
146
+ createBaseHookContext
147
+ };
@@ -0,0 +1,46 @@
1
+ import { RouterAPI } from "./routerApi";
2
+ import { TemplateApi } from "./template";
3
+ import { createBaseHookContext } from "./base";
4
+ function getAfterMatchCtx(entryName, baseHookCtx) {
5
+ const afterMatchCtx = baseHookCtx;
6
+ afterMatchCtx.router = new RouterAPI(entryName);
7
+ return afterMatchCtx;
8
+ }
9
+ async function getAfterRenderCtx(c, baseHookCtx, route) {
10
+ const afterRenderCtx = baseHookCtx;
11
+ const resBody = await c.res.text();
12
+ afterRenderCtx.template = new TemplateApi(resBody);
13
+ afterRenderCtx.route = route;
14
+ return afterRenderCtx;
15
+ }
16
+ function createCustomMiddlewaresCtx(c, locals) {
17
+ var _c_env_node, _c_env_node1;
18
+ const baseContext = createBaseHookContext(c);
19
+ const reporter = c.get("reporter");
20
+ return {
21
+ ...baseContext,
22
+ reporter,
23
+ response: {
24
+ ...baseContext.response,
25
+ locals
26
+ },
27
+ source: {
28
+ req: (_c_env_node = c.env.node) === null || _c_env_node === void 0 ? void 0 : _c_env_node.req,
29
+ res: (_c_env_node1 = c.env.node) === null || _c_env_node1 === void 0 ? void 0 : _c_env_node1.res
30
+ }
31
+ };
32
+ }
33
+ function createAfterStreamingRenderContext(baseHookCtx, route) {
34
+ const streamingRenderCtx = baseHookCtx;
35
+ streamingRenderCtx.route = route;
36
+ return (chunk) => {
37
+ streamingRenderCtx.chunk = chunk;
38
+ return streamingRenderCtx;
39
+ };
40
+ }
41
+ export {
42
+ createAfterStreamingRenderContext,
43
+ createCustomMiddlewaresCtx,
44
+ getAfterMatchCtx,
45
+ getAfterRenderCtx
46
+ };
@@ -0,0 +1,112 @@
1
+ import { time } from "@modern-js/runtime-utils/time";
2
+ import { transformResponse } from "../../utils";
3
+ import { ServerReportTimings } from "../../constants";
4
+ import { getAfterMatchCtx, getAfterRenderCtx, createCustomMiddlewaresCtx, createAfterStreamingRenderContext } from "./context";
5
+ import { createBaseHookContext } from "./base";
6
+ const noop = () => {
7
+ };
8
+ const isHtmlResponse = (response) => {
9
+ const contentType = response.headers.get("content-type");
10
+ return contentType === null || contentType === void 0 ? void 0 : contentType.includes("text/html");
11
+ };
12
+ class CustomServer {
13
+ getHookMiddleware(entryName, routes) {
14
+ return async (c, next) => {
15
+ const routeInfo = routes.find((route) => route.entryName === entryName);
16
+ const reporter = c.get("reporter");
17
+ const baseHookCtx = createBaseHookContext(c);
18
+ const afterMatchCtx = getAfterMatchCtx(entryName, baseHookCtx);
19
+ const getCost = time();
20
+ await this.runner.afterMatch(afterMatchCtx, {
21
+ onLast: noop
22
+ });
23
+ const cost = getCost();
24
+ cost && (reporter === null || reporter === void 0 ? void 0 : reporter.reportTiming(ServerReportTimings.SERVER_HOOK_AFTER_MATCH, cost));
25
+ const { url, status } = afterMatchCtx.router;
26
+ if (url) {
27
+ return c.redirect(url, status);
28
+ }
29
+ const { current } = afterMatchCtx.router;
30
+ if (current !== entryName) {
31
+ const rewriteRoute = routes.find((route) => route.entryName === current);
32
+ if (rewriteRoute) {
33
+ return this.serverBase.request(rewriteRoute.urlPath);
34
+ }
35
+ }
36
+ if (c.finalized) {
37
+ return void 0;
38
+ }
39
+ await next();
40
+ if (c.finalized && (!c.res.body || !isHtmlResponse(c.res) || [
41
+ 404,
42
+ 500
43
+ ].includes(c.res.status))) {
44
+ return void 0;
45
+ }
46
+ if (c.res) {
47
+ c.status(c.res.status);
48
+ }
49
+ if (routeInfo.isStream) {
50
+ const afterStreamingRenderContext = createAfterStreamingRenderContext(baseHookCtx, routeInfo);
51
+ c.res = transformResponse(c.res, (chunk) => {
52
+ const context = afterStreamingRenderContext(chunk);
53
+ return this.runner.afterStreamingRender(context, {
54
+ onLast: ({ chunk: chunk2 }) => chunk2
55
+ });
56
+ });
57
+ } else {
58
+ const afterRenderCtx = await getAfterRenderCtx(c, baseHookCtx, routeInfo);
59
+ const getCost2 = time();
60
+ await this.runner.afterRender(afterRenderCtx, {
61
+ onLast: noop
62
+ });
63
+ const cost2 = getCost2();
64
+ cost2 && (reporter === null || reporter === void 0 ? void 0 : reporter.reportTiming(ServerReportTimings.SERVER_HOOK_AFTER_RENDER, cost2));
65
+ if (afterRenderCtx.response.private_overrided) {
66
+ return void 0;
67
+ }
68
+ const newBody = afterRenderCtx.template.get();
69
+ c.res = c.body(newBody);
70
+ }
71
+ };
72
+ }
73
+ getServerMiddleware() {
74
+ return async (c, next) => {
75
+ var _c_env;
76
+ const serverMiddleware = await this.serverMiddlewarePromise;
77
+ if (!serverMiddleware) {
78
+ return next();
79
+ }
80
+ const reporter = c.get("reporter");
81
+ const locals = {};
82
+ const customMiddlewareCtx = createCustomMiddlewaresCtx(c, locals);
83
+ const getCost = time();
84
+ await serverMiddleware(customMiddlewareCtx);
85
+ const cost = getCost();
86
+ cost && (reporter === null || reporter === void 0 ? void 0 : reporter.reportTiming(ServerReportTimings.SERVER_MIDDLEWARE, cost));
87
+ c.set("locals", locals);
88
+ if ((_c_env = c.env) === null || _c_env === void 0 ? void 0 : _c_env.node.res.headersSent) {
89
+ return void 0;
90
+ }
91
+ if (!c.finalized) {
92
+ return next();
93
+ }
94
+ };
95
+ }
96
+ constructor(runner, serverBase, pwd) {
97
+ this.runner = runner;
98
+ this.serverBase = serverBase;
99
+ const webExtension = [];
100
+ this.serverMiddlewarePromise = runner.prepareWebServer({
101
+ pwd,
102
+ config: {
103
+ middleware: webExtension
104
+ }
105
+ }, {
106
+ onLast: () => null
107
+ });
108
+ }
109
+ }
110
+ export {
111
+ CustomServer
112
+ };
@@ -0,0 +1,20 @@
1
+ class RouterAPI {
2
+ redirect(url, status = 302) {
3
+ this.url = url;
4
+ this.status = status;
5
+ }
6
+ rewrite(entryName) {
7
+ this.current = entryName;
8
+ }
9
+ use(entryName) {
10
+ this.rewrite(entryName);
11
+ }
12
+ constructor(entryName) {
13
+ this.current = entryName;
14
+ this.status = 200;
15
+ this.url = "";
16
+ }
17
+ }
18
+ export {
19
+ RouterAPI
20
+ };
@@ -0,0 +1,34 @@
1
+ import { REPLACE_REG } from "../../constants";
2
+ class TemplateApi {
3
+ set(content) {
4
+ this.body = content;
5
+ }
6
+ get() {
7
+ return this.body;
8
+ }
9
+ prependHead(fragment) {
10
+ const { head } = REPLACE_REG.before;
11
+ this.replaceBody(new RegExp(head), (beforeHead) => `${beforeHead}${fragment}`);
12
+ }
13
+ appendHead(fragment) {
14
+ const { head } = REPLACE_REG.after;
15
+ this.replaceBody(head, () => `${fragment}${head}`);
16
+ }
17
+ prependBody(fragment) {
18
+ const { body } = REPLACE_REG.before;
19
+ this.replaceBody(new RegExp(body), (beforeBody) => `${beforeBody}${fragment}`);
20
+ }
21
+ appendBody(fragment) {
22
+ const { body } = REPLACE_REG.after;
23
+ this.replaceBody(body, () => `${fragment}${body}`);
24
+ }
25
+ replaceBody(searchValue, replaceCb) {
26
+ this.body = this.body.replace(searchValue, replaceCb);
27
+ }
28
+ constructor(body) {
29
+ this.body = body;
30
+ }
31
+ }
32
+ export {
33
+ TemplateApi
34
+ };
@@ -0,0 +1,10 @@
1
+ const favionFallbackMiddleware = async (c, next) => {
2
+ if (c.req.path === "/favicon.ico") {
3
+ return c.body(null, 204);
4
+ } else {
5
+ return next();
6
+ }
7
+ };
8
+ export {
9
+ favionFallbackMiddleware
10
+ };
@@ -0,0 +1,7 @@
1
+ const processedBy = async (ctx, next) => {
2
+ await next();
3
+ ctx.header("X-Processed-By", "Modern.js");
4
+ };
5
+ export {
6
+ processedBy
7
+ };
@@ -0,0 +1,5 @@
1
+ export * from "./faviconFallback";
2
+ export * from "./monitor";
3
+ export * from "./renderHandler";
4
+ export * from "./logger";
5
+ export * from "./frameworkHeader";
@@ -0,0 +1,53 @@
1
+ import { getPathname } from "../utils";
2
+ var LogPrefix;
3
+ (function(LogPrefix2) {
4
+ LogPrefix2["Outgoing"] = "-->";
5
+ LogPrefix2["Incoming"] = "<--";
6
+ LogPrefix2["Error"] = "xxx";
7
+ })(LogPrefix || (LogPrefix = {}));
8
+ const humanize = (times) => {
9
+ const [delimiter, separator] = [
10
+ ",",
11
+ "."
12
+ ];
13
+ const orderTimes = times.map((v) => v.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, `$1${delimiter}`));
14
+ return orderTimes.join(separator);
15
+ };
16
+ const time = (start) => {
17
+ const delta = Date.now() - start;
18
+ return humanize([
19
+ delta < 1e3 ? `${delta}ms` : `${Math.round(delta / 1e3)}s`
20
+ ]);
21
+ };
22
+ const colorStatus = (status) => {
23
+ const out = {
24
+ 7: `\x1B[35m${status}\x1B[0m`,
25
+ 5: `\x1B[31m${status}\x1B[0m`,
26
+ 4: `\x1B[33m${status}\x1B[0m`,
27
+ 3: `\x1B[36m${status}\x1B[0m`,
28
+ 2: `\x1B[32m${status}\x1B[0m`,
29
+ 1: `\x1B[32m${status}\x1B[0m`,
30
+ 0: `\x1B[33m${status}\x1B[0m`
31
+ };
32
+ const calculateStatus = Math.floor(status / 100);
33
+ return out[calculateStatus];
34
+ };
35
+ function log(fn, prefix, method, path, status = 0, elapsed) {
36
+ const out = prefix === "<--" ? ` ${prefix} ${method} ${path}` : ` ${prefix} ${method} ${path} ${colorStatus(status)} ${elapsed}`;
37
+ fn(out);
38
+ }
39
+ function logHandler() {
40
+ return async function logger(c, next) {
41
+ const { method } = c.req;
42
+ const logger2 = c.get("logger");
43
+ const path = getPathname(c.req.raw);
44
+ const logFn = logger2.debug;
45
+ log(logFn, "<--", method, path);
46
+ const start = Date.now();
47
+ await next();
48
+ log(logFn, "-->", method, path, c.res.status, time(start));
49
+ };
50
+ }
51
+ export {
52
+ logHandler
53
+ };
@@ -0,0 +1,63 @@
1
+ import { time } from "@modern-js/runtime-utils/time";
2
+ import { ServerReportTimings } from "../constants";
3
+ const defaultReporter = {
4
+ init() {
5
+ },
6
+ reportError() {
7
+ },
8
+ reportTiming() {
9
+ },
10
+ reportInfo() {
11
+ },
12
+ reportWarn() {
13
+ }
14
+ };
15
+ function injectReporter() {
16
+ return async (c, next) => {
17
+ const reporter = c.get("reporter");
18
+ if (!reporter) {
19
+ c.set("reporter", defaultReporter);
20
+ }
21
+ await next();
22
+ };
23
+ }
24
+ function initReporter(entryName) {
25
+ return async (c, next) => {
26
+ const reporter = c.get("reporter");
27
+ if (!reporter) {
28
+ await next();
29
+ return;
30
+ }
31
+ await reporter.init({
32
+ entryName
33
+ });
34
+ const getCost = time();
35
+ await next();
36
+ const cost = getCost();
37
+ reporter.reportTiming(ServerReportTimings.SERVER_HANDLE_REQUEST, cost);
38
+ };
39
+ }
40
+ function injectLogger(inputLogger) {
41
+ return async (c, next) => {
42
+ const logger = c.get("logger");
43
+ if (!logger && inputLogger) {
44
+ c.set("logger", inputLogger);
45
+ }
46
+ await next();
47
+ };
48
+ }
49
+ function injectMetrics(inputMetrics) {
50
+ return async (c, next) => {
51
+ const metrics = c.get("metrics");
52
+ if (!metrics) {
53
+ c.set("metrics", inputMetrics);
54
+ }
55
+ await next();
56
+ };
57
+ }
58
+ export {
59
+ initReporter,
60
+ injectLogger,
61
+ injectMetrics,
62
+ injectReporter
63
+ };