@modern-js/server-core 2.48.1 → 2.48.3-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 (204) hide show
  1. package/dist/cjs/base/adapters/node/bff.js +69 -0
  2. package/dist/cjs/base/adapters/node/hono.js +63 -0
  3. package/dist/cjs/base/adapters/node/index.js +54 -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 +82 -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 +126 -0
  12. package/dist/cjs/base/adapters/node/polyfills/index.js +24 -0
  13. package/dist/cjs/base/adapters/node/polyfills/install.js +70 -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 +45 -0
  17. package/dist/cjs/base/middlewares/customServer/base.js +111 -0
  18. package/dist/cjs/base/middlewares/customServer/context.js +78 -0
  19. package/dist/cjs/base/middlewares/customServer/index.js +130 -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/index.js +26 -0
  24. package/dist/cjs/base/middlewares/monitor.js +90 -0
  25. package/dist/cjs/base/middlewares/renderHandler/dataHandler.js +46 -0
  26. package/dist/cjs/base/middlewares/renderHandler/index.js +104 -0
  27. package/dist/cjs/base/middlewares/renderHandler/render.js +123 -0
  28. package/dist/cjs/base/middlewares/renderHandler/serverTiming.js +40 -0
  29. package/dist/cjs/base/middlewares/renderHandler/ssrCache.js +197 -0
  30. package/dist/cjs/base/middlewares/renderHandler/ssrRender.js +168 -0
  31. package/dist/cjs/base/serverBase.js +203 -0
  32. package/dist/cjs/base/utils/debug.js +29 -0
  33. package/dist/cjs/base/utils/entry.js +30 -0
  34. package/dist/cjs/base/utils/env.js +45 -0
  35. package/dist/cjs/base/utils/error.js +65 -0
  36. package/dist/cjs/base/utils/index.js +45 -0
  37. package/dist/cjs/base/utils/middlewareCollector.js +54 -0
  38. package/dist/cjs/base/utils/request.js +65 -0
  39. package/dist/cjs/base/utils/serverConfig.js +70 -0
  40. package/dist/cjs/base/utils/transformStream.js +61 -0
  41. package/dist/cjs/base/utils/warmup.js +43 -0
  42. package/dist/cjs/core/hono.js +16 -0
  43. package/dist/cjs/core/index.js +22 -0
  44. package/dist/cjs/{loadPlugins.js → core/loadPlugins.js} +4 -7
  45. package/dist/cjs/{plugin.js → core/plugin.js} +1 -3
  46. package/dist/cjs/core/render.js +16 -0
  47. package/dist/cjs/core/server.js +16 -0
  48. package/dist/cjs/index.js +6 -4
  49. package/dist/esm/base/adapters/node/bff.js +128 -0
  50. package/dist/esm/base/adapters/node/hono.js +83 -0
  51. package/dist/esm/base/adapters/node/index.js +19 -0
  52. package/dist/esm/base/adapters/node/loadServer.js +73 -0
  53. package/dist/esm/base/adapters/node/middlewares/index.js +4 -0
  54. package/dist/esm/base/adapters/node/middlewares/mock.js +198 -0
  55. package/dist/esm/base/adapters/node/middlewares/serverManifest.js +132 -0
  56. package/dist/esm/base/adapters/node/middlewares/serverPublic.js +85 -0
  57. package/dist/esm/base/adapters/node/middlewares/serverStatic.js +109 -0
  58. package/dist/esm/base/adapters/node/middlewares/templates.js +114 -0
  59. package/dist/esm/base/adapters/node/node.js +194 -0
  60. package/dist/esm/base/adapters/node/polyfills/index.js +2 -0
  61. package/dist/esm/base/adapters/node/polyfills/install.js +46 -0
  62. package/dist/esm/base/adapters/node/polyfills/stream.js +316 -0
  63. package/dist/esm/base/constants.js +31 -0
  64. package/dist/esm/base/index.js +14 -0
  65. package/dist/esm/base/middlewares/customServer/base.js +126 -0
  66. package/dist/esm/base/middlewares/customServer/context.js +70 -0
  67. package/dist/esm/base/middlewares/customServer/index.js +208 -0
  68. package/dist/esm/base/middlewares/customServer/routerApi.js +26 -0
  69. package/dist/esm/base/middlewares/customServer/template.js +47 -0
  70. package/dist/esm/base/middlewares/faviconFallback.js +28 -0
  71. package/dist/esm/base/middlewares/index.js +3 -0
  72. package/dist/esm/base/middlewares/monitor.js +157 -0
  73. package/dist/esm/base/middlewares/renderHandler/dataHandler.js +45 -0
  74. package/dist/esm/base/middlewares/renderHandler/index.js +163 -0
  75. package/dist/esm/base/middlewares/renderHandler/render.js +213 -0
  76. package/dist/esm/base/middlewares/renderHandler/serverTiming.js +21 -0
  77. package/dist/esm/base/middlewares/renderHandler/ssrCache.js +306 -0
  78. package/dist/esm/base/middlewares/renderHandler/ssrRender.js +226 -0
  79. package/dist/esm/base/serverBase.js +383 -0
  80. package/dist/esm/base/utils/debug.js +5 -0
  81. package/dist/esm/base/utils/entry.js +6 -0
  82. package/dist/esm/base/utils/env.js +20 -0
  83. package/dist/esm/base/utils/error.js +12 -0
  84. package/dist/esm/base/utils/index.js +13 -0
  85. package/dist/esm/base/utils/middlewareCollector.js +31 -0
  86. package/dist/esm/base/utils/request.js +39 -0
  87. package/dist/esm/base/utils/serverConfig.js +58 -0
  88. package/dist/esm/base/utils/transformStream.js +90 -0
  89. package/dist/esm/base/utils/warmup.js +9 -0
  90. package/dist/esm/core/hono.js +0 -0
  91. package/dist/esm/core/index.js +1 -0
  92. package/dist/esm/core/loadPlugins.js +26 -0
  93. package/dist/esm/core/plugin.js +98 -0
  94. package/dist/esm/core/render.js +0 -0
  95. package/dist/esm/core/server.js +0 -0
  96. package/dist/esm/index.js +3 -2
  97. package/dist/esm-node/base/adapters/node/bff.js +45 -0
  98. package/dist/esm-node/base/adapters/node/hono.js +38 -0
  99. package/dist/esm-node/base/adapters/node/index.js +19 -0
  100. package/dist/esm-node/base/adapters/node/loadServer.js +22 -0
  101. package/dist/esm-node/base/adapters/node/middlewares/index.js +4 -0
  102. package/dist/esm-node/base/adapters/node/middlewares/mock.js +79 -0
  103. package/dist/esm-node/base/adapters/node/middlewares/serverManifest.js +48 -0
  104. package/dist/esm-node/base/adapters/node/middlewares/serverPublic.js +33 -0
  105. package/dist/esm-node/base/adapters/node/middlewares/serverStatic.js +75 -0
  106. package/dist/esm-node/base/adapters/node/middlewares/templates.js +32 -0
  107. package/dist/esm-node/base/adapters/node/node.js +100 -0
  108. package/dist/esm-node/base/adapters/node/polyfills/index.js +2 -0
  109. package/dist/esm-node/base/adapters/node/polyfills/install.js +46 -0
  110. package/dist/esm-node/base/adapters/node/polyfills/stream.js +126 -0
  111. package/dist/esm-node/base/constants.js +31 -0
  112. package/dist/esm-node/base/index.js +14 -0
  113. package/dist/esm-node/base/middlewares/customServer/base.js +87 -0
  114. package/dist/esm-node/base/middlewares/customServer/context.js +51 -0
  115. package/dist/esm-node/base/middlewares/customServer/index.js +106 -0
  116. package/dist/esm-node/base/middlewares/customServer/routerApi.js +20 -0
  117. package/dist/esm-node/base/middlewares/customServer/template.js +34 -0
  118. package/dist/esm-node/base/middlewares/faviconFallback.js +10 -0
  119. package/dist/esm-node/base/middlewares/index.js +3 -0
  120. package/dist/esm-node/base/middlewares/monitor.js +63 -0
  121. package/dist/esm-node/base/middlewares/renderHandler/dataHandler.js +22 -0
  122. package/dist/esm-node/base/middlewares/renderHandler/index.js +69 -0
  123. package/dist/esm-node/base/middlewares/renderHandler/render.js +99 -0
  124. package/dist/esm-node/base/middlewares/renderHandler/serverTiming.js +16 -0
  125. package/dist/esm-node/base/middlewares/renderHandler/ssrCache.js +162 -0
  126. package/dist/esm-node/base/middlewares/renderHandler/ssrRender.js +134 -0
  127. package/dist/esm-node/base/serverBase.js +168 -0
  128. package/dist/esm-node/base/utils/debug.js +5 -0
  129. package/dist/esm-node/base/utils/entry.js +6 -0
  130. package/dist/esm-node/base/utils/env.js +20 -0
  131. package/dist/esm-node/base/utils/error.js +41 -0
  132. package/dist/esm-node/base/utils/index.js +13 -0
  133. package/dist/esm-node/base/utils/middlewareCollector.js +29 -0
  134. package/dist/esm-node/base/utils/request.js +38 -0
  135. package/dist/esm-node/base/utils/serverConfig.js +34 -0
  136. package/dist/esm-node/base/utils/transformStream.js +36 -0
  137. package/dist/esm-node/base/utils/warmup.js +9 -0
  138. package/dist/esm-node/core/hono.js +0 -0
  139. package/dist/esm-node/core/index.js +1 -0
  140. package/dist/{esm → esm-node/core}/loadPlugins.js +4 -7
  141. package/dist/{esm → esm-node/core}/plugin.js +1 -3
  142. package/dist/esm-node/core/render.js +0 -0
  143. package/dist/esm-node/core/server.js +0 -0
  144. package/dist/esm-node/index.js +5 -0
  145. package/dist/esm-node/types/config/bff.js +0 -0
  146. package/dist/esm-node/types/config/dev.js +0 -0
  147. package/dist/esm-node/types/config/html.js +0 -0
  148. package/dist/esm-node/types/config/index.js +6 -0
  149. package/dist/esm-node/types/config/output.js +0 -0
  150. package/dist/esm-node/types/config/security.js +0 -0
  151. package/dist/esm-node/types/config/server.js +0 -0
  152. package/dist/esm-node/types/config/share.js +0 -0
  153. package/dist/esm-node/types/config/source.js +0 -0
  154. package/dist/esm-node/types/config/tools.js +0 -0
  155. package/dist/types/base/adapters/node/bff.d.ts +4 -0
  156. package/dist/types/base/adapters/node/hono.d.ts +22 -0
  157. package/dist/types/base/adapters/node/index.d.ts +6 -0
  158. package/dist/types/base/adapters/node/loadServer.d.ts +3 -0
  159. package/dist/types/base/adapters/node/middlewares/index.d.ts +4 -0
  160. package/dist/types/base/adapters/node/middlewares/mock.d.ts +5 -0
  161. package/dist/types/base/adapters/node/middlewares/serverManifest.d.ts +3 -0
  162. package/dist/types/base/adapters/node/middlewares/serverPublic.d.ts +7 -0
  163. package/dist/types/base/adapters/node/middlewares/serverStatic.d.ts +11 -0
  164. package/dist/types/base/adapters/node/middlewares/templates.d.ts +4 -0
  165. package/dist/types/base/adapters/node/node.d.ts +12 -0
  166. package/dist/types/base/adapters/node/polyfills/index.d.ts +2 -0
  167. package/dist/types/base/adapters/node/polyfills/install.d.ts +1 -0
  168. package/dist/types/base/adapters/node/polyfills/stream.d.ts +18 -0
  169. package/dist/types/base/constants.d.ts +24 -0
  170. package/dist/types/base/index.d.ts +7 -0
  171. package/dist/types/base/middlewares/customServer/base.d.ts +3 -0
  172. package/dist/types/base/middlewares/customServer/context.d.ts +7 -0
  173. package/dist/types/base/middlewares/customServer/index.d.ts +13 -0
  174. package/dist/types/base/middlewares/customServer/routerApi.d.ts +9 -0
  175. package/dist/types/base/middlewares/customServer/template.d.ts +11 -0
  176. package/dist/types/base/middlewares/faviconFallback.d.ts +2 -0
  177. package/dist/types/base/middlewares/index.d.ts +3 -0
  178. package/dist/types/base/middlewares/monitor.d.ts +6 -0
  179. package/dist/types/base/middlewares/renderHandler/dataHandler.d.ts +5 -0
  180. package/dist/types/base/middlewares/renderHandler/index.d.ts +9 -0
  181. package/dist/types/base/middlewares/renderHandler/render.d.ts +12 -0
  182. package/dist/types/base/middlewares/renderHandler/serverTiming.d.ts +7 -0
  183. package/dist/types/base/middlewares/renderHandler/ssrCache.d.ts +29 -0
  184. package/dist/types/base/middlewares/renderHandler/ssrRender.d.ts +18 -0
  185. package/dist/types/base/serverBase.d.ts +52 -0
  186. package/dist/types/base/utils/debug.d.ts +1 -0
  187. package/dist/types/base/utils/entry.d.ts +2 -0
  188. package/dist/types/base/utils/env.d.ts +2 -0
  189. package/dist/types/base/utils/error.d.ts +1 -0
  190. package/dist/types/base/utils/index.d.ts +8 -0
  191. package/dist/types/base/utils/middlewareCollector.d.ts +12 -0
  192. package/dist/types/base/utils/request.d.ts +12 -0
  193. package/dist/types/base/utils/serverConfig.d.ts +14 -0
  194. package/dist/types/base/utils/transformStream.d.ts +5 -0
  195. package/dist/types/base/utils/warmup.d.ts +1 -0
  196. package/dist/types/core/hono.d.ts +1 -0
  197. package/dist/types/core/index.d.ts +1 -0
  198. package/dist/types/core/loadPlugins.d.ts +3 -0
  199. package/dist/types/{plugin.d.ts → core/plugin.d.ts} +32 -35
  200. package/dist/types/core/render.d.ts +13 -0
  201. package/dist/types/core/server.d.ts +99 -0
  202. package/dist/types/index.d.ts +3 -2
  203. package/package.json +41 -6
  204. package/dist/types/loadPlugins.d.ts +0 -5
@@ -0,0 +1,38 @@
1
+ function parseQuery(request) {
2
+ const { url } = request;
3
+ const q = url.split("?")[1];
4
+ const query = {};
5
+ if (q) {
6
+ q.split("&").forEach((item) => {
7
+ const [key, value] = item.split("=");
8
+ query[key] = value;
9
+ });
10
+ }
11
+ return query;
12
+ }
13
+ function parseHeaders(request) {
14
+ const headersData = {};
15
+ request.headers.forEach((value, key) => {
16
+ headersData[key] = value;
17
+ });
18
+ return headersData;
19
+ }
20
+ function getPathname(request) {
21
+ const match = request.url.match(/^https?:\/\/[^/]+(\/[^?]*)/);
22
+ return match ? match[1] : "/";
23
+ }
24
+ function getHost(request) {
25
+ const { headers } = request;
26
+ let host = headers.get("X-Forwarded-Host");
27
+ if (!host) {
28
+ host = headers.get("Host");
29
+ }
30
+ host = (host === null || host === void 0 ? void 0 : host.split(/\s*,\s*/, 1)[0]) || "undefined";
31
+ return host;
32
+ }
33
+ export {
34
+ getHost,
35
+ getPathname,
36
+ parseHeaders,
37
+ parseQuery
38
+ };
@@ -0,0 +1,34 @@
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
+ };
@@ -0,0 +1,36 @@
1
+ function createTransformStream(fn) {
2
+ const decoder = new TextDecoder();
3
+ const encoder = new TextEncoder();
4
+ return new TransformStream({
5
+ async transform(chunk, controller) {
6
+ const content = decoder.decode(chunk);
7
+ const newContent = await fn(content);
8
+ controller.enqueue(encoder.encode(newContent));
9
+ }
10
+ });
11
+ }
12
+ function transformResponse(response, transformCb) {
13
+ let readable = null;
14
+ if (response.body) {
15
+ const stream = createTransformStream(async (before) => {
16
+ if (Array.isArray(transformCb)) {
17
+ return transformCb.reduce(async (before2, cb) => {
18
+ return cb(await before2);
19
+ }, Promise.resolve(before));
20
+ } else {
21
+ return transformCb(before);
22
+ }
23
+ });
24
+ response.body.pipeThrough(stream);
25
+ readable = stream.readable;
26
+ }
27
+ return new Response(readable, {
28
+ status: response.status,
29
+ headers: response.headers,
30
+ statusText: response.statusText
31
+ });
32
+ }
33
+ export {
34
+ createTransformStream,
35
+ transformResponse
36
+ };
@@ -0,0 +1,9 @@
1
+ function warmup(bundles) {
2
+ bundles.forEach((bundle) => {
3
+ bundle && import(bundle).catch((_) => {
4
+ });
5
+ });
6
+ }
7
+ export {
8
+ warmup
9
+ };
File without changes
@@ -0,0 +1 @@
1
+ export * from "./plugin";
@@ -1,5 +1,5 @@
1
1
  import { compatRequire, getInternalPlugins, tryResolve } from "@modern-js/utils";
2
- import { createPlugin } from "./plugin";
2
+ import { createPlugin } from "../core/plugin";
3
3
  const resolvePlugin = (p, appDirectory) => {
4
4
  const isPluginInstance = typeof p !== "string";
5
5
  if (isPluginInstance) {
@@ -14,12 +14,9 @@ const resolvePlugin = (p, appDirectory) => {
14
14
  module: createPlugin(pluginInstance.setup, pluginInstance)
15
15
  };
16
16
  };
17
- const loadPlugins = (appDirectory, configPlugins, options) => {
18
- const loadedPlugins = getInternalPlugins(appDirectory, options.internalPlugins);
19
- return [
20
- ...loadedPlugins,
21
- ...configPlugins
22
- ].map((plugin) => {
17
+ const loadPlugins = (appDirectory, internalPlugins) => {
18
+ const loadedPlugins = getInternalPlugins(appDirectory, internalPlugins);
19
+ return loadedPlugins.map((plugin) => {
23
20
  const { module } = resolvePlugin(plugin, appDirectory);
24
21
  return module;
25
22
  });
@@ -5,10 +5,9 @@ const prepare = createWaterfall();
5
5
  const prepareLoaderHandler = createAsyncPipeline();
6
6
  const prepareWebServer = createAsyncPipeline();
7
7
  const prepareApiServer = createAsyncPipeline();
8
- const onApiChange = createWaterfall();
8
+ const onApiChange = createAsyncWaterfall();
9
9
  const repack = createWaterfall();
10
10
  const beforeServerInit = createAsyncWaterfall();
11
- const afterServerInit = createAsyncWaterfall();
12
11
  const setupCompiler = createParallelWorkflow();
13
12
  const beforeRouteSet = createAsyncPipeline();
14
13
  const afterRouteSet = createAsyncPipeline();
@@ -52,7 +51,6 @@ const serverHooks = {
52
51
  repack,
53
52
  onApiChange,
54
53
  beforeServerInit,
55
- afterServerInit,
56
54
  setupCompiler,
57
55
  beforeRouteSet,
58
56
  afterRouteSet,
File without changes
File without changes
@@ -0,0 +1,5 @@
1
+ export * from "./core/plugin";
2
+ export * from "./core/render";
3
+ export * from "@modern-js/plugin";
4
+ export * from "./core/loadPlugins";
5
+ export * from "./types/config";
File without changes
File without changes
File without changes
@@ -0,0 +1,6 @@
1
+ export * from "./bff";
2
+ export * from "./html";
3
+ export * from "./output";
4
+ export * from "./server";
5
+ export * from "./source";
6
+ export * from "./tools";
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,4 @@
1
+ import type { ServerBaseOptions } from '../../../core/server';
2
+ import { BindRenderHandleOptions } from '../../../base/middlewares';
3
+ import { ServerBase } from '../../serverBase';
4
+ export declare const bindBFFHandler: (server: ServerBase, options: ServerBaseOptions & BindRenderHandleOptions) => Promise<void>;
@@ -0,0 +1,22 @@
1
+ import { NodeRequest, NodeResponse } from '../../../core/plugin';
2
+ import { HonoContext, HonoRequest, ServerEnv, Middleware, Next, ServerManifest } from '../../../core/server';
3
+ type NodeBindings = {
4
+ node: {
5
+ req: NodeRequest & {
6
+ __honoRequest: HonoRequest;
7
+ __templates: Record<string, string>;
8
+ __serverManifest: ServerManifest;
9
+ };
10
+ res: NodeResponse;
11
+ };
12
+ };
13
+ export type ServerNodeEnv = {
14
+ Bindings: NodeBindings;
15
+ };
16
+ export type ServerNodeMiddleware = Middleware<ServerNodeEnv>;
17
+ export type ServerNodeContext = HonoContext<ServerNodeEnv>;
18
+ type Handler = (req: NodeRequest, res: NodeResponse) => void | Promise<void>;
19
+ export declare const httpCallBack2HonoMid: (handler: Handler) => (context: HonoContext<ServerNodeEnv & ServerEnv>, next: Next) => Promise<void>;
20
+ type ConnectMiddleware = ((req: NodeRequest, res: NodeResponse, callback: (...args: unknown[]) => void) => void) | ((req: NodeRequest, res: NodeResponse) => void);
21
+ export declare const connectMid2HonoMid: (handler: ConnectMiddleware) => Middleware;
22
+ export {};
@@ -0,0 +1,6 @@
1
+ export { loadServerEnv } from './loadServer';
2
+ export { httpCallBack2HonoMid, connectMid2HonoMid } from './hono';
3
+ export type { ServerNodeContext, ServerNodeMiddleware } from './hono';
4
+ export { createNodeServer, sendResponse, createWebRequest } from './node';
5
+ export { bindBFFHandler } from './bff';
6
+ export { createStaticMiddleware, registerMockHandlers, injectServerManifest, injectTemplates, getHtmlTemplates, } from './middlewares';
@@ -0,0 +1,3 @@
1
+ import { ServerBaseOptions } from '../../../core/server';
2
+ /** 读取 .env.{process.env.MODERN_ENV} 文件,加载环境变量 */
3
+ export declare function loadServerEnv(options: ServerBaseOptions): Promise<void>;
@@ -0,0 +1,4 @@
1
+ export * from './mock';
2
+ export * from './serverStatic';
3
+ export * from './templates';
4
+ export * from './serverManifest';
@@ -0,0 +1,5 @@
1
+ import type { ServerBase } from '../../../serverBase';
2
+ export declare const registerMockHandlers: ({ pwd, server, }: {
3
+ pwd: string;
4
+ server: ServerBase;
5
+ }) => Promise<null | undefined>;
@@ -0,0 +1,3 @@
1
+ import type { ServerRoute } from '@modern-js/types';
2
+ import { HonoMiddleware, ServerEnv } from '../../../../core/server';
3
+ export declare function injectServerManifest(pwd: string, routes?: ServerRoute[]): HonoMiddleware<ServerEnv>;
@@ -0,0 +1,7 @@
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;
@@ -0,0 +1,11 @@
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 {};
@@ -0,0 +1,4 @@
1
+ import { ServerRoute } from '@modern-js/types';
2
+ import { HonoMiddleware, 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[]): HonoMiddleware<ServerEnv>;
@@ -0,0 +1,12 @@
1
+ /// <reference types="node" />
2
+ import { Server as NodeServer } from 'node:http';
3
+ import { NodeRequest, NodeResponse } from '../../../core/plugin';
4
+ import { RequestHandler } from '../../../core/server';
5
+ export declare const createWebRequest: (req: NodeRequest, res: NodeResponse) => Request;
6
+ export declare const sendResponse: (response: Response, res: NodeResponse) => Promise<void>;
7
+ declare const getRequestListener: (handler: RequestHandler) => (req: NodeRequest, res: NodeResponse) => Promise<void>;
8
+ type NodeServerWrapper = NodeServer & {
9
+ getRequestHandler: () => ReturnType<typeof getRequestListener>;
10
+ };
11
+ export declare const createNodeServer: (handleRequest: RequestHandler) => NodeServerWrapper;
12
+ export {};
@@ -0,0 +1,2 @@
1
+ export * from './install';
2
+ export * from './stream';
@@ -0,0 +1 @@
1
+ export declare const installGlobals: () => void;
@@ -0,0 +1,18 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ /**
4
+ * The following code is modified based on
5
+ * https://github.com/remix-run/remix/blob/f7defe0b46c50947f6269d5ab5b6e3fe59339054/packages/remix-node/stream.ts#L3
6
+ *
7
+ * MIT Licensed
8
+ * Author Michael Jackson
9
+ * Copyright 2021 Remix Software Inc.
10
+ * https://github.com/remix-run/remix/blob/f7defe0b46c50947f6269d5ab5b6e3fe59339054/LICENSE.md
11
+ */
12
+ import type { Readable, Writable } from 'node:stream';
13
+ export declare function writeReadableStreamToWritable(stream: ReadableStream, writable: Writable): Promise<void>;
14
+ export declare function writeAsyncIterableToWritable(iterable: AsyncIterable<Uint8Array>, writable: Writable): Promise<void>;
15
+ export declare function readableStreamToString(stream: ReadableStream<Uint8Array>, encoding?: BufferEncoding): Promise<string>;
16
+ export declare const createReadableStreamFromReadable: (source: Readable & {
17
+ readableHighWaterMark?: number;
18
+ }) => ReadableStream<Uint8Array>;
@@ -0,0 +1,24 @@
1
+ export declare const AGGRED_DIR: {
2
+ mock: string;
3
+ server: string;
4
+ api: string;
5
+ shared: string;
6
+ lambda: string;
7
+ };
8
+ export declare const REPLACE_REG: {
9
+ before: {
10
+ head: string;
11
+ body: string;
12
+ };
13
+ after: {
14
+ head: string;
15
+ body: string;
16
+ };
17
+ };
18
+ export declare enum ServerReportTimings {
19
+ SERVER_HANDLE_REQUEST = "server-handle-request",
20
+ SERVER_MIDDLEWARE = "server-middleware",
21
+ SERVER_HOOK_AFTER_RENDER = "server-hook-after-render",
22
+ SERVER_HOOK_AFTER_MATCH = "server-hook-after-match"
23
+ }
24
+ export declare const X_RENDER_CACHE = "x-render-cache";
@@ -0,0 +1,7 @@
1
+ export { createErrorHtml } from './utils';
2
+ export { AGGRED_DIR } from './constants';
3
+ export { favionFallbackMiddleware, injectReporter, injectLogger, getRenderHandler, bindRenderHandler, } from './middlewares';
4
+ export type { BindRenderHandleOptions } from './middlewares';
5
+ export type { ServerBase } from './serverBase';
6
+ export { createServerBase } from './serverBase';
7
+ export type { ServerBaseOptions, Next, Middleware, ServerEnv, ServerManifest, HonoContext, HonoEnv, HonoMiddleware, HonoRequest, } from '../core/server';
@@ -0,0 +1,3 @@
1
+ import { HookContext, Metrics } from '@modern-js/types';
2
+ import { HonoContext, Logger } from '../../../core/server';
3
+ export declare function createBaseHookContext(c: HonoContext, logger: Logger, metrics?: Metrics): HookContext;
@@ -0,0 +1,7 @@
1
+ import { AfterMatchContext, AfterRenderContext, Metrics, MiddlewareContext, Logger, AfterStreamingRenderContext, ServerRoute } from '@modern-js/types';
2
+ import { HonoContext, ServerEnv } from '../../../core/server';
3
+ import type { ServerNodeEnv } from '../../adapters/node/hono';
4
+ export declare function createAfterMatchCtx(c: HonoContext, entryName: string, logger: Logger, metrics?: Metrics): AfterMatchContext;
5
+ export declare function createAfterRenderCtx(c: HonoContext, logger: Logger, metrics?: Metrics): Promise<AfterRenderContext>;
6
+ export declare function createCustomMiddlewaresCtx(c: HonoContext<ServerNodeEnv & ServerEnv>, logger: Logger, metrics?: Metrics): MiddlewareContext;
7
+ export declare function createAfterStreamingRenderContext(c: HonoContext, logger: Logger, route: Partial<ServerRoute>, metrics?: Metrics): (chunk: string) => AfterStreamingRenderContext;
@@ -0,0 +1,13 @@
1
+ import { ServerRoute } from '@modern-js/types';
2
+ import { ServerBase } from '../../serverBase';
3
+ import { ServerHookRunner } from '../../../core/plugin';
4
+ import { Middleware, ServerEnv } from '../../../core/server';
5
+ import type { ServerNodeEnv } from '../../adapters/node/hono';
6
+ export declare class CustomServer {
7
+ private runner;
8
+ private serverMiddlewarePromise;
9
+ private serverBase;
10
+ constructor(runner: ServerHookRunner, serverBase: ServerBase, pwd: string);
11
+ getHookMiddleware(entryName: string, routes: ServerRoute[]): Middleware<ServerEnv>;
12
+ getServerMiddleware(): Middleware<ServerNodeEnv & ServerEnv>;
13
+ }
@@ -0,0 +1,9 @@
1
+ export declare class RouterAPI {
2
+ current: string;
3
+ status: number;
4
+ url: string;
5
+ constructor(entryName: string);
6
+ redirect(url: string, status?: number): void;
7
+ rewrite(entryName: string): void;
8
+ use(entryName: string): void;
9
+ }
@@ -0,0 +1,11 @@
1
+ export declare class TemplateApi {
2
+ private body;
3
+ constructor(body: string);
4
+ set(content: string): void;
5
+ get(): string;
6
+ prependHead(fragment: string): void;
7
+ appendHead(fragment: string): void;
8
+ prependBody(fragment: string): void;
9
+ appendBody(fragment: string): void;
10
+ private replaceBody;
11
+ }
@@ -0,0 +1,2 @@
1
+ import { Middleware } from '../../core/server';
2
+ export declare const favionFallbackMiddleware: Middleware;
@@ -0,0 +1,3 @@
1
+ export * from './faviconFallback';
2
+ export * from './monitor';
3
+ export * from './renderHandler';
@@ -0,0 +1,6 @@
1
+ import type { Logger, Metrics } from '@modern-js/types';
2
+ import type { HonoContext, Next, ServerEnv } from '../../core/server';
3
+ export declare function injectReporter(): (c: HonoContext<ServerEnv>, next: Next) => Promise<void>;
4
+ export declare function initReporter(entryName: string): (c: HonoContext<ServerEnv>, next: Next) => Promise<void>;
5
+ export declare function injectLogger(inputLogger: Logger): (c: HonoContext<ServerEnv>, next: Next) => Promise<void>;
6
+ export declare function injectMetrics(inputMetrics: Metrics): (c: HonoContext<ServerEnv>, next: Next) => Promise<void>;
@@ -0,0 +1,5 @@
1
+ import type { ServerRoute } from '@modern-js/types';
2
+ import { SSRRenderOptions } from './ssrRender';
3
+ export declare const dataHandler: (request: Request, { routeInfo, serverRoutes, reporter, logger, serverManifest, }: SSRRenderOptions & {
4
+ serverRoutes: ServerRoute[];
5
+ }) => Promise<Response | void>;
@@ -0,0 +1,9 @@
1
+ import { Render } from '../../../core/render';
2
+ import { ServerBaseOptions } from '../../../core/server';
3
+ import { ServerBase } from '../../serverBase';
4
+ export type BindRenderHandleOptions = {
5
+ metaName?: string;
6
+ staticGenerate?: boolean;
7
+ };
8
+ export declare function getRenderHandler(options: ServerBaseOptions & BindRenderHandleOptions): Promise<Render | null>;
9
+ export declare function bindRenderHandler(server: ServerBase, options: ServerBaseOptions & BindRenderHandleOptions): Promise<void>;
@@ -0,0 +1,12 @@
1
+ import { ServerRoute } from '@modern-js/types';
2
+ import { Render } from '../../../core/render';
3
+ interface CreateRenderOptions {
4
+ routes: ServerRoute[];
5
+ pwd: string;
6
+ staticGenerate?: boolean;
7
+ metaName?: string;
8
+ forceCSR?: boolean;
9
+ nonce?: string;
10
+ }
11
+ export declare function createRender({ routes, pwd, metaName, staticGenerate, forceCSR, nonce, }: CreateRenderOptions): Promise<Render>;
12
+ export {};
@@ -0,0 +1,7 @@
1
+ import { ServerTiming as ServerTimingInterafce } from '@modern-js/types';
2
+ export declare class ServerTiming implements ServerTimingInterafce {
3
+ private headers;
4
+ private meta;
5
+ constructor(headers: Headers, meta: string);
6
+ addServeTiming(name: string, dur: number, desc?: string): this;
7
+ }
@@ -0,0 +1,29 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node/http" />
3
+ /// <reference types="dist/types/core/server" />
4
+ import type { IncomingMessage } from 'http';
5
+ import { Readable } from 'stream';
6
+ import type { CacheControl, CacheOption, Container } from '@modern-js/types';
7
+ import type { SSRServerContext, ServerRender } from '../../../core/server';
8
+ export type CacheStatus = 'hit' | 'stale' | 'expired' | 'miss';
9
+ export type CacheResult = {
10
+ data: string | Readable | ReadableStream;
11
+ status?: CacheStatus;
12
+ };
13
+ export declare class CacheManager {
14
+ private container;
15
+ constructor(container: Container<string, string>);
16
+ getCacheResult(req: Request, cacheControl: CacheControl, render: ServerRender, ssrContext: SSRServerContext): Promise<CacheResult>;
17
+ private processCache;
18
+ private computedKey;
19
+ }
20
+ declare class ServerCache {
21
+ customContainer?: Container;
22
+ cacheOption?: CacheOption;
23
+ private cacheManger?;
24
+ loadCacheMod(pwd?: string): Promise<void>;
25
+ matchCacheControl(req?: IncomingMessage): CacheControl | Promise<CacheControl> | undefined;
26
+ getCache(req: Request, cacheControl: CacheControl, render: ServerRender, ssrContext: SSRServerContext): Promise<CacheResult>;
27
+ }
28
+ export declare const ssrCache: ServerCache;
29
+ export {};
@@ -0,0 +1,18 @@
1
+ /// <reference types="node/http" />
2
+ /// <reference types="dist/types/core/server" />
3
+ import type { IncomingMessage } from 'http';
4
+ import type { Logger, Reporter, ServerRoute } from '@modern-js/types';
5
+ import { ServerManifest } from '../../../core/server';
6
+ export interface SSRRenderOptions {
7
+ pwd: string;
8
+ html: string;
9
+ routeInfo: ServerRoute;
10
+ staticGenerate: boolean;
11
+ metaName: string;
12
+ logger: Logger;
13
+ serverManifest: ServerManifest;
14
+ reporter?: Reporter;
15
+ nodeReq?: IncomingMessage;
16
+ nonce?: string;
17
+ }
18
+ export declare function ssrRender(request: Request, { routeInfo, html, staticGenerate, nonce, metaName, reporter, logger, nodeReq, serverManifest, }: SSRRenderOptions): Promise<Response>;
@@ -0,0 +1,52 @@
1
+ import { Hono } from 'hono';
2
+ import { ServerHookRunner } from '../core';
3
+ import type { HonoEnv, ServerBaseOptions } from '../core/server';
4
+ declare module '@modern-js/types' {
5
+ interface ISAppContext {
6
+ serverBase?: ServerBase;
7
+ }
8
+ }
9
+ export declare class ServerBase<E extends HonoEnv = any> {
10
+ options: ServerBaseOptions;
11
+ runner: ServerHookRunner;
12
+ private app;
13
+ private serverConfig;
14
+ constructor(options: ServerBaseOptions);
15
+ /**
16
+ * 初始化顺序
17
+ * - 获取 server runtime config
18
+ * - 设置 context
19
+ * - 创建 hooksRunner
20
+ * - 合并插件,内置插件和 serverConfig 中配置的插件
21
+ * - 执行 config hook
22
+ * - 获取最终的配置
23
+ * - 设置配置到 context
24
+ * - 执行 prepare hook
25
+ */
26
+ init(): Promise<this>;
27
+ private createHookRunner;
28
+ private loadInternalPlugins;
29
+ private loadExternalPlugins;
30
+ private initServerConfig;
31
+ private injectContext;
32
+ private initAppContext;
33
+ /**
34
+ * Execute config hooks
35
+ * @param runner
36
+ * @param options
37
+ */
38
+ private runConfigHook;
39
+ private initConfig;
40
+ get all(): import("hono/types").HandlerInterface<E, "all", {}, "/">;
41
+ get use(): import("hono/types").MiddlewareHandlerInterface<E, {}, "/">;
42
+ get get(): import("hono/types").HandlerInterface<E, "get", {}, "/">;
43
+ get post(): import("hono/types").HandlerInterface<E, "post", {}, "/">;
44
+ get put(): import("hono/types").HandlerInterface<E, "put", {}, "/">;
45
+ get delete(): import("hono/types").HandlerInterface<E, "delete", {}, "/">;
46
+ get patch(): import("hono/types").HandlerInterface<E, "patch", {}, "/">;
47
+ get handle(): (request: Request, Env?: {} | E["Bindings"] | undefined, executionCtx?: import("hono/dist/types/context").ExecutionContext | undefined) => Response | Promise<Response>;
48
+ get request(): (input: RequestInfo | URL, requestInit?: RequestInit | undefined, Env?: {} | E["Bindings"] | undefined, executionCtx?: import("hono/dist/types/context").ExecutionContext | undefined) => Response | Promise<Response>;
49
+ get notFound(): (handler: import("hono").NotFoundHandler<E>) => Hono<E, {}, "/">;
50
+ get onError(): (handler: import("hono").ErrorHandler<E>) => Hono<E, {}, "/">;
51
+ }
52
+ export declare function createServerBase<E extends HonoEnv>(options: ServerBaseOptions): ServerBase<E>;
@@ -0,0 +1 @@
1
+ export declare const debug: import("@modern-js/utils/compiled/debug").Debugger;
@@ -0,0 +1,2 @@
1
+ import { ServerRoute } from '@modern-js/types';
2
+ export declare const sortRoutes: (route1: ServerRoute, route2: ServerRoute) => number;
@@ -0,0 +1,2 @@
1
+ export declare const getRuntimeEnv: () => "node" | "other";
2
+ export declare const checkIsProd: () => boolean;
@@ -0,0 +1 @@
1
+ export declare const createErrorHtml: (status: number) => string;
@@ -0,0 +1,8 @@
1
+ export * from './env';
2
+ export * from './request';
3
+ export * from './transformStream';
4
+ export * from './middlewareCollector';
5
+ export * from './error';
6
+ export * from './warmup';
7
+ export * from './entry';
8
+ export declare const cutNameByHyphen: (s: string) => string;
@@ -0,0 +1,12 @@
1
+ export type CollectMiddlewaresResult = {
2
+ web: any[];
3
+ api: any[];
4
+ };
5
+ export declare const mergeExtension: (users: any[]) => {
6
+ middleware: any[];
7
+ };
8
+ export declare const createMiddlewareCollecter: () => {
9
+ getMiddlewares: () => CollectMiddlewaresResult;
10
+ addWebMiddleware: (input: any) => void;
11
+ addAPIMiddleware: (input: any) => void;
12
+ };