@modern-js/server-core 2.47.0 → 2.47.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 (142) hide show
  1. package/dist/cjs/base/adapters/node/bff.js +69 -0
  2. package/dist/cjs/base/adapters/node/hono.js +62 -0
  3. package/dist/cjs/base/adapters/node/index.js +32 -0
  4. package/dist/cjs/base/adapters/node/loadServer.js +56 -0
  5. package/dist/cjs/base/adapters/node/middlewares/index.js +26 -0
  6. package/dist/cjs/base/adapters/node/middlewares/mock.js +113 -0
  7. package/dist/cjs/base/adapters/node/middlewares/serverStatic.js +105 -0
  8. package/dist/cjs/base/adapters/node/middlewares/templates.js +65 -0
  9. package/dist/cjs/base/adapters/node/node.js +121 -0
  10. package/dist/cjs/base/adapters/node/polyfills/index.js +24 -0
  11. package/dist/cjs/base/adapters/node/polyfills/install.js +57 -0
  12. package/dist/cjs/base/adapters/node/polyfills/stream.js +159 -0
  13. package/dist/cjs/base/constants.js +55 -0
  14. package/dist/cjs/base/index.js +73 -0
  15. package/dist/cjs/base/middlewares/customServer/base.js +115 -0
  16. package/dist/cjs/base/middlewares/customServer/context.js +78 -0
  17. package/dist/cjs/base/middlewares/customServer/index.js +138 -0
  18. package/dist/cjs/base/middlewares/customServer/routerApi.js +48 -0
  19. package/dist/cjs/base/middlewares/customServer/template.js +60 -0
  20. package/dist/cjs/base/middlewares/dataHandler.js +69 -0
  21. package/dist/cjs/base/middlewares/faviconFallback.js +34 -0
  22. package/dist/cjs/base/middlewares/index.js +28 -0
  23. package/dist/cjs/base/middlewares/monitor.js +75 -0
  24. package/dist/cjs/base/middlewares/renderHandler/index.js +92 -0
  25. package/dist/cjs/base/middlewares/renderHandler/render.js +90 -0
  26. package/dist/cjs/base/middlewares/renderHandler/serverTiming.js +43 -0
  27. package/dist/cjs/base/middlewares/renderHandler/ssrCache.js +173 -0
  28. package/dist/cjs/base/middlewares/renderHandler/ssrRender.js +183 -0
  29. package/dist/cjs/base/serverBase.js +167 -0
  30. package/dist/cjs/base/utils/debug.js +29 -0
  31. package/dist/cjs/base/utils/entry.js +30 -0
  32. package/dist/cjs/base/utils/env.js +45 -0
  33. package/dist/cjs/base/utils/error.js +65 -0
  34. package/dist/cjs/base/utils/index.js +40 -0
  35. package/dist/cjs/base/utils/middlewareCollector.js +54 -0
  36. package/dist/cjs/base/utils/path.js +46 -0
  37. package/dist/cjs/base/utils/request.js +65 -0
  38. package/dist/cjs/base/utils/serverConfig.js +71 -0
  39. package/dist/cjs/base/utils/transformStream.js +38 -0
  40. package/dist/cjs/base/utils/warmup.js +43 -0
  41. package/dist/cjs/core/hono.js +16 -0
  42. package/dist/cjs/core/index.js +24 -0
  43. package/dist/cjs/{loadPlugins.js → core/loadPlugins.js} +1 -1
  44. package/dist/cjs/{plugin.js → core/plugin.js} +1 -3
  45. package/dist/cjs/core/render.js +16 -0
  46. package/dist/cjs/core/server.js +22 -0
  47. package/dist/cjs/index.js +6 -4
  48. package/dist/esm/base/adapters/node/bff.js +45 -0
  49. package/dist/esm/base/adapters/node/hono.js +37 -0
  50. package/dist/esm/base/adapters/node/index.js +6 -0
  51. package/dist/esm/base/adapters/node/loadServer.js +22 -0
  52. package/dist/esm/base/adapters/node/middlewares/index.js +3 -0
  53. package/dist/esm/base/adapters/node/middlewares/mock.js +79 -0
  54. package/dist/esm/base/adapters/node/middlewares/serverStatic.js +71 -0
  55. package/dist/esm/base/adapters/node/middlewares/templates.js +31 -0
  56. package/dist/esm/base/adapters/node/node.js +95 -0
  57. package/dist/esm/base/adapters/node/polyfills/index.js +2 -0
  58. package/dist/esm/base/adapters/node/polyfills/install.js +33 -0
  59. package/dist/esm/base/adapters/node/polyfills/stream.js +132 -0
  60. package/dist/esm/base/constants.js +29 -0
  61. package/dist/esm/base/index.js +32 -0
  62. package/dist/esm/base/middlewares/customServer/base.js +91 -0
  63. package/dist/esm/base/middlewares/customServer/context.js +51 -0
  64. package/dist/esm/base/middlewares/customServer/index.js +114 -0
  65. package/dist/esm/base/middlewares/customServer/routerApi.js +24 -0
  66. package/dist/esm/base/middlewares/customServer/template.js +36 -0
  67. package/dist/esm/base/middlewares/dataHandler.js +35 -0
  68. package/dist/esm/base/middlewares/faviconFallback.js +10 -0
  69. package/dist/esm/base/middlewares/index.js +4 -0
  70. package/dist/esm/base/middlewares/monitor.js +49 -0
  71. package/dist/esm/base/middlewares/renderHandler/index.js +67 -0
  72. package/dist/esm/base/middlewares/renderHandler/render.js +66 -0
  73. package/dist/esm/base/middlewares/renderHandler/serverTiming.js +19 -0
  74. package/dist/esm/base/middlewares/renderHandler/ssrCache.js +149 -0
  75. package/dist/esm/base/middlewares/renderHandler/ssrRender.js +149 -0
  76. package/dist/esm/base/serverBase.js +143 -0
  77. package/dist/esm/base/utils/debug.js +5 -0
  78. package/dist/esm/base/utils/entry.js +6 -0
  79. package/dist/esm/base/utils/env.js +20 -0
  80. package/dist/esm/base/utils/error.js +41 -0
  81. package/dist/esm/base/utils/index.js +10 -0
  82. package/dist/esm/base/utils/middlewareCollector.js +29 -0
  83. package/dist/esm/base/utils/path.js +12 -0
  84. package/dist/esm/base/utils/request.js +38 -0
  85. package/dist/esm/base/utils/serverConfig.js +35 -0
  86. package/dist/esm/base/utils/transformStream.js +14 -0
  87. package/dist/esm/base/utils/warmup.js +9 -0
  88. package/dist/esm/core/hono.js +0 -0
  89. package/dist/esm/core/index.js +2 -0
  90. package/dist/esm/{loadPlugins.js → core/loadPlugins.js} +1 -1
  91. package/dist/esm/{plugin.js → core/plugin.js} +1 -3
  92. package/dist/esm/core/render.js +0 -0
  93. package/dist/esm/core/server.js +1 -0
  94. package/dist/esm/index.js +3 -2
  95. package/dist/types/base/adapters/node/bff.d.ts +4 -0
  96. package/dist/types/base/adapters/node/hono.d.ts +30 -0
  97. package/dist/types/base/adapters/node/index.d.ts +6 -0
  98. package/dist/types/base/adapters/node/loadServer.d.ts +3 -0
  99. package/dist/types/base/adapters/node/middlewares/index.d.ts +3 -0
  100. package/dist/types/base/adapters/node/middlewares/mock.d.ts +5 -0
  101. package/dist/types/base/adapters/node/middlewares/serverStatic.d.ts +9 -0
  102. package/dist/types/base/adapters/node/middlewares/templates.d.ts +3 -0
  103. package/dist/types/base/adapters/node/node.d.ts +12 -0
  104. package/dist/types/base/adapters/node/polyfills/index.d.ts +2 -0
  105. package/dist/types/base/adapters/node/polyfills/install.d.ts +1 -0
  106. package/dist/types/base/adapters/node/polyfills/stream.d.ts +18 -0
  107. package/dist/types/base/constants.d.ts +23 -0
  108. package/dist/types/base/index.d.ts +9 -0
  109. package/dist/types/base/middlewares/customServer/base.d.ts +3 -0
  110. package/dist/types/base/middlewares/customServer/context.d.ts +7 -0
  111. package/dist/types/base/middlewares/customServer/index.d.ts +13 -0
  112. package/dist/types/base/middlewares/customServer/routerApi.d.ts +9 -0
  113. package/dist/types/base/middlewares/customServer/template.d.ts +11 -0
  114. package/dist/types/base/middlewares/dataHandler.d.ts +3 -0
  115. package/dist/types/base/middlewares/faviconFallback.d.ts +2 -0
  116. package/dist/types/base/middlewares/index.d.ts +4 -0
  117. package/dist/types/base/middlewares/monitor.d.ts +7 -0
  118. package/dist/types/base/middlewares/renderHandler/index.d.ts +9 -0
  119. package/dist/types/base/middlewares/renderHandler/render.d.ts +12 -0
  120. package/dist/types/base/middlewares/renderHandler/serverTiming.d.ts +7 -0
  121. package/dist/types/base/middlewares/renderHandler/ssrCache.d.ts +17 -0
  122. package/dist/types/base/middlewares/renderHandler/ssrRender.d.ts +18 -0
  123. package/dist/types/base/serverBase.d.ts +49 -0
  124. package/dist/types/base/utils/debug.d.ts +1 -0
  125. package/dist/types/base/utils/entry.d.ts +2 -0
  126. package/dist/types/base/utils/env.d.ts +2 -0
  127. package/dist/types/base/utils/error.d.ts +1 -0
  128. package/dist/types/base/utils/index.d.ts +10 -0
  129. package/dist/types/base/utils/middlewareCollector.d.ts +12 -0
  130. package/dist/types/base/utils/path.d.ts +3 -0
  131. package/dist/types/base/utils/request.d.ts +12 -0
  132. package/dist/types/base/utils/serverConfig.d.ts +14 -0
  133. package/dist/types/base/utils/transformStream.d.ts +2 -0
  134. package/dist/types/base/utils/warmup.d.ts +1 -0
  135. package/dist/types/core/hono.d.ts +1 -0
  136. package/dist/types/core/index.d.ts +2 -0
  137. package/dist/types/{loadPlugins.d.ts → core/loadPlugins.d.ts} +1 -1
  138. package/dist/types/{plugin.d.ts → core/plugin.d.ts} +32 -35
  139. package/dist/types/core/render.d.ts +11 -0
  140. package/dist/types/core/server.d.ts +71 -0
  141. package/dist/types/index.d.ts +3 -2
  142. package/package.json +25 -2
@@ -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,23 @@
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
+ }
@@ -0,0 +1,9 @@
1
+ import type { ServerBaseOptions, Next, Middleware, HonoEnv } from '../core/server';
2
+ import { ServerBase } from './serverBase';
3
+ export { createErrorHtml } from './utils';
4
+ export { AGGRED_DIR } from './constants';
5
+ export { httpCallBack2HonoMid, createNodeServer, loadServerEnv, connectMid2HonoMid, sendResponse, createStaticMiddleware, bindBFFHandler, registerMockHandlers, createInjectHtml, } from './adapters/node';
6
+ export { favionFallbackMiddleware, bindDataHandlers, injectReporter, getRenderHandler, injectLogger, bindRenderHandler, } from './middlewares';
7
+ export type { BindRenderHandleOptions } from './middlewares';
8
+ export declare function createServerBase<E extends HonoEnv>(options: ServerBaseOptions): ServerBase<E>;
9
+ export type { ServerBaseOptions, Next, Middleware, ServerBase };
@@ -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 } from '../../../core/server';
3
+ import type { HonoNodeEnv } from '../../adapters/node';
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<HonoNodeEnv>, 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 } from '../../../core/server';
5
+ import { HonoNodeEnv } from '../../adapters/node';
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<HonoNodeEnv>;
12
+ getServerMiddleware(): Middleware<HonoNodeEnv>;
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,3 @@
1
+ import type { ServerRoute } from '@modern-js/types';
2
+ import type { ServerBase } from '../serverBase';
3
+ export declare const bindDataHandlers: (server: ServerBase, routes: ServerRoute[], distDir: string) => Promise<void>;
@@ -0,0 +1,2 @@
1
+ import { Middleware } from '../../core/server';
2
+ export declare const favionFallbackMiddleware: Middleware;
@@ -0,0 +1,4 @@
1
+ export * from './faviconFallback';
2
+ export * from './dataHandler';
3
+ export * from './monitor';
4
+ export * from './renderHandler';
@@ -0,0 +1,7 @@
1
+ import type { Next } from 'hono';
2
+ import { Logger } from '@modern-js/types';
3
+ import { HonoContext } from '../../core/server';
4
+ import { HonoNodeEnv } from '../adapters/node';
5
+ export declare function injectReporter(): (c: HonoContext<HonoNodeEnv>, next: Next) => Promise<void>;
6
+ export declare function initReporter(entryName: string): (c: HonoContext<HonoNodeEnv>, next: Next) => Promise<void>;
7
+ export declare function injectLogger(inputLogger: Logger): (c: HonoContext<HonoNodeEnv>, next: Next) => Promise<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): 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): 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,17 @@
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
+ declare class ServerCache {
9
+ customContainer?: Container;
10
+ cacheOption?: CacheOption;
11
+ private cacheManger?;
12
+ loadCacheMod(pwd?: string): Promise<void>;
13
+ matchCacheControl(req?: IncomingMessage): CacheControl | Promise<CacheControl> | undefined;
14
+ getCache(req: Request, cacheControl: CacheControl, render: ServerRender, ssrContext: SSRServerContext): Promise<string | Readable | ReadableStream<any>>;
15
+ }
16
+ export declare const ssrCache: ServerCache;
17
+ 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
+ interface SSRRenderOptions {
6
+ pwd: string;
7
+ mode: 'string' | 'stream';
8
+ html: string;
9
+ routeInfo: ServerRoute;
10
+ staticGenerate: boolean;
11
+ metaName: string;
12
+ logger: Logger;
13
+ reporter?: Reporter;
14
+ nodeReq?: IncomingMessage;
15
+ nonce?: string;
16
+ }
17
+ export declare function ssrRender(request: Request, { routeInfo, pwd, html, staticGenerate, nonce, metaName, reporter, logger, nodeReq, }: SSRRenderOptions): Promise<Response>;
18
+ export {};
@@ -0,0 +1,49 @@
1
+ import { Hono } from 'hono';
2
+ import { ServerHookRunner } from '../core';
3
+ import { 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 initServerConfig;
29
+ private injectContext;
30
+ private initAppContext;
31
+ /**
32
+ * Execute config hooks
33
+ * @param runner
34
+ * @param options
35
+ */
36
+ private runConfigHook;
37
+ private initConfig;
38
+ get all(): import("hono/types").HandlerInterface<E, "all", {}, "/">;
39
+ get use(): import("hono/types").MiddlewareHandlerInterface<E, {}, "/">;
40
+ get get(): import("hono/types").HandlerInterface<E, "get", {}, "/">;
41
+ get post(): import("hono/types").HandlerInterface<E, "post", {}, "/">;
42
+ get put(): import("hono/types").HandlerInterface<E, "put", {}, "/">;
43
+ get delete(): import("hono/types").HandlerInterface<E, "delete", {}, "/">;
44
+ get patch(): import("hono/types").HandlerInterface<E, "patch", {}, "/">;
45
+ get handle(): (request: Request, Env?: {} | E["Bindings"] | undefined, executionCtx?: import("hono/dist/types/context").ExecutionContext | undefined) => Response | Promise<Response>;
46
+ get request(): (input: RequestInfo | URL, requestInit?: RequestInit | undefined, Env?: {} | E["Bindings"] | undefined, executionCtx?: import("hono/dist/types/context").ExecutionContext | undefined) => Response | Promise<Response>;
47
+ get notFound(): (handler: import("hono").NotFoundHandler<E>) => Hono<E, {}, "/">;
48
+ get onError(): (handler: import("hono").ErrorHandler<E>) => Hono<E, {}, "/">;
49
+ }
@@ -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,10 @@
1
+ export * from './env';
2
+ export * from './request';
3
+ export * from './serverConfig';
4
+ export * from './debug';
5
+ export * from './transformStream';
6
+ export * from './middlewareCollector';
7
+ export * from './error';
8
+ export * from './warmup';
9
+ export * from './entry';
10
+ export * from './path';
@@ -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
+ };
@@ -0,0 +1,3 @@
1
+ /// <reference types="node" />
2
+ import type Path from 'path';
3
+ export declare function getPathModule(): Promise<Path.PlatformPath>;
@@ -0,0 +1,12 @@
1
+ export declare function parseQuery(request: Request): Record<string, string>;
2
+ export declare function parseHeaders(request: Request): Record<string, string | undefined>;
3
+ /**
4
+ * The function is modified based on
5
+ * https://github.com/honojs/hono/blob/main/src/utils/url.ts
6
+ *
7
+ * MIT Licensed
8
+ * https://github.com/honojs/hono/blob/main/LICENSE
9
+ *
10
+ */
11
+ export declare function getPathname(request: Request): string;
12
+ export declare function getHost(request: Request): string;
@@ -0,0 +1,14 @@
1
+ import { ServerConfig } from '../../core/plugin';
2
+ import { ServerOptions } from '../../types/config';
3
+ export declare const getServerConfigPath: (distDirectory: string, serverConfigFile?: string) => Promise<string>;
4
+ export declare const requireConfig: (serverConfigPath: string) => any;
5
+ /**
6
+ * 对配置进行合并,开发环境下,cliConfig 与 serverConfig 进行深合并
7
+ * 生产环境下,resolvedConfig 与 serverConfig 进行深合并
8
+ * resolvedConfigPath: 构建序列化后的 modern.config.js 文件路径
9
+ */
10
+ export declare const loadConfig: ({ cliConfig, serverConfig, resolvedConfigPath, }: {
11
+ cliConfig: ServerOptions;
12
+ serverConfig: ServerConfig;
13
+ resolvedConfigPath: string;
14
+ }) => any;
@@ -0,0 +1,2 @@
1
+ import { MaybeAsync } from '@modern-js/plugin';
2
+ export declare function createTransformStream(fn: (content: string) => MaybeAsync<string>): TransformStream<any, any>;
@@ -0,0 +1 @@
1
+ export declare function warmup(bundles: Array<string | undefined>): void;
@@ -0,0 +1 @@
1
+ export type { NotFoundHandler, Context as HonoContext, Env as HonoEnv, HonoRequest, Next, MiddlewareHandler as HonoMiddleware, } from 'hono';
@@ -0,0 +1,2 @@
1
+ export * from './plugin';
2
+ export * from './loadPlugins';
@@ -1,5 +1,5 @@
1
1
  import { InternalPlugins } from '@modern-js/types';
2
- import { createPlugin, ServerPlugin } from './plugin';
2
+ import { createPlugin, ServerPlugin } from '../core/plugin';
3
3
  export declare const loadPlugins: (appDirectory: string, configPlugins: ServerPlugin[], options: {
4
4
  internalPlugins?: InternalPlugins;
5
5
  }) => ReturnType<typeof createPlugin>[];
@@ -1,13 +1,15 @@
1
1
  /// <reference types="node" />
2
- /// <reference types="node" />
3
- import { IncomingMessage, ServerResponse } from 'http';
4
- import { Readable } from 'stream';
2
+ import type { IncomingMessage, ServerResponse } from 'node:http';
5
3
  import type { Component } from 'react';
6
- import { CommonAPI, ToThreads, AsyncSetup, PluginOptions } from '@modern-js/plugin';
4
+ import { CommonAPI, ToThreads, AsyncSetup, PluginOptions, ToRunners } from '@modern-js/plugin';
7
5
  import type { ModernServerContext, BaseSSRServerContext, AfterMatchContext, AfterRenderContext, MiddlewareContext, ISAppContext, ServerRoute, HttpMethodDecider, ServerInitHookContext, AfterStreamingRenderContext } from '@modern-js/types';
8
- import type { BffUserConfig, ServerOptions, UserConfig } from './types/config';
6
+ import type { BffUserConfig, ServerOptions, UserConfig } from '../types/config';
7
+ import { HonoMiddleware } from './hono';
8
+ import { Render } from './render';
9
9
  export type WebAdapter = (ctx: MiddlewareContext) => void | Promise<void>;
10
- export type Adapter = (req: IncomingMessage, res: ServerResponse) => void | Promise<void>;
10
+ export type NodeRequest = IncomingMessage;
11
+ export type NodeResponse = ServerResponse;
12
+ export type Adapter = (req: NodeRequest, res: NodeResponse) => void | Promise<void>;
11
13
  export type WebServerStartInput = {
12
14
  pwd: string;
13
15
  config: Record<string, any>;
@@ -20,7 +22,7 @@ export type APIServerStartInput = {
20
22
  config?: {
21
23
  middleware?: Array<any>;
22
24
  };
23
- render?: (req: IncomingMessage, res: ServerResponse, url?: string) => Promise<string | Readable | null>;
25
+ render?: Render | null;
24
26
  };
25
27
  type Change = {
26
28
  filename: string;
@@ -59,12 +61,11 @@ declare const serverHooks: {
59
61
  serverRoutes: ServerRoute[];
60
62
  distDir: string;
61
63
  }, LoaderHandler>;
62
- prepareWebServer: import("@modern-js/plugin").AsyncPipeline<WebServerStartInput, WebAdapter>;
63
- prepareApiServer: import("@modern-js/plugin").AsyncPipeline<APIServerStartInput, Adapter>;
64
+ prepareWebServer: import("@modern-js/plugin").AsyncPipeline<WebServerStartInput, WebAdapter | null>;
65
+ prepareApiServer: import("@modern-js/plugin").AsyncPipeline<APIServerStartInput, HonoMiddleware>;
64
66
  repack: import("@modern-js/plugin").Waterfall<void>;
65
- onApiChange: import("@modern-js/plugin").Waterfall<Change[]>;
67
+ onApiChange: import("@modern-js/plugin").AsyncWaterfall<Change[]>;
66
68
  beforeServerInit: import("@modern-js/plugin").AsyncWaterfall<ServerInitHookContext>;
67
- afterServerInit: import("@modern-js/plugin").AsyncWaterfall<ServerInitHookContext>;
68
69
  setupCompiler: import("@modern-js/plugin").ParallelWorkflow<Record<string, unknown>, any[]>;
69
70
  beforeRouteSet: import("@modern-js/plugin").AsyncPipeline<Route[], Route[]>;
70
71
  afterRouteSet: import("@modern-js/plugin").AsyncPipeline<unknown, unknown>;
@@ -111,6 +112,8 @@ declare const serverHooks: {
111
112
  export type ServerHooks = typeof serverHooks;
112
113
  /** All hook callbacks of server plugin. */
113
114
  export type ServerHookCallbacks = ToThreads<ServerHooks>;
115
+ /** The ServerHook Runner type */
116
+ export type ServerHookRunner = ToRunners<ServerHooks>;
114
117
  /** All apis for server plugin. */
115
118
  export type PluginAPI = typeof pluginAPI & CommonAPI<ServerHooks>;
116
119
  export declare const createServerManager: () => import("@modern-js/plugin").AsyncManager<{
@@ -124,12 +127,11 @@ export declare const createServerManager: () => import("@modern-js/plugin").Asyn
124
127
  serverRoutes: ServerRoute[];
125
128
  distDir: string;
126
129
  }, LoaderHandler>;
127
- prepareWebServer: import("@modern-js/plugin").AsyncPipeline<WebServerStartInput, WebAdapter>;
128
- prepareApiServer: import("@modern-js/plugin").AsyncPipeline<APIServerStartInput, Adapter>;
130
+ prepareWebServer: import("@modern-js/plugin").AsyncPipeline<WebServerStartInput, WebAdapter | null>;
131
+ prepareApiServer: import("@modern-js/plugin").AsyncPipeline<APIServerStartInput, HonoMiddleware>;
129
132
  repack: import("@modern-js/plugin").Waterfall<void>;
130
- onApiChange: import("@modern-js/plugin").Waterfall<Change[]>;
133
+ onApiChange: import("@modern-js/plugin").AsyncWaterfall<Change[]>;
131
134
  beforeServerInit: import("@modern-js/plugin").AsyncWaterfall<ServerInitHookContext>;
132
- afterServerInit: import("@modern-js/plugin").AsyncWaterfall<ServerInitHookContext>;
133
135
  setupCompiler: import("@modern-js/plugin").ParallelWorkflow<Record<string, unknown>, any[]>;
134
136
  beforeRouteSet: import("@modern-js/plugin").AsyncPipeline<Route[], Route[]>;
135
137
  afterRouteSet: import("@modern-js/plugin").AsyncPipeline<unknown, unknown>;
@@ -187,12 +189,11 @@ export declare const serverManager: import("@modern-js/plugin").AsyncManager<{
187
189
  serverRoutes: ServerRoute[];
188
190
  distDir: string;
189
191
  }, LoaderHandler>;
190
- prepareWebServer: import("@modern-js/plugin").AsyncPipeline<WebServerStartInput, WebAdapter>;
191
- prepareApiServer: import("@modern-js/plugin").AsyncPipeline<APIServerStartInput, Adapter>;
192
+ prepareWebServer: import("@modern-js/plugin").AsyncPipeline<WebServerStartInput, WebAdapter | null>;
193
+ prepareApiServer: import("@modern-js/plugin").AsyncPipeline<APIServerStartInput, HonoMiddleware>;
192
194
  repack: import("@modern-js/plugin").Waterfall<void>;
193
- onApiChange: import("@modern-js/plugin").Waterfall<Change[]>;
195
+ onApiChange: import("@modern-js/plugin").AsyncWaterfall<Change[]>;
194
196
  beforeServerInit: import("@modern-js/plugin").AsyncWaterfall<ServerInitHookContext>;
195
- afterServerInit: import("@modern-js/plugin").AsyncWaterfall<ServerInitHookContext>;
196
197
  setupCompiler: import("@modern-js/plugin").ParallelWorkflow<Record<string, unknown>, any[]>;
197
198
  beforeRouteSet: import("@modern-js/plugin").AsyncPipeline<Route[], Route[]>;
198
199
  afterRouteSet: import("@modern-js/plugin").AsyncPipeline<unknown, unknown>;
@@ -256,12 +257,11 @@ export declare const createPlugin: (setup?: AsyncSetup<{
256
257
  serverRoutes: ServerRoute[];
257
258
  distDir: string;
258
259
  }, LoaderHandler>;
259
- prepareWebServer: import("@modern-js/plugin").AsyncPipeline<WebServerStartInput, WebAdapter>;
260
- prepareApiServer: import("@modern-js/plugin").AsyncPipeline<APIServerStartInput, Adapter>;
260
+ prepareWebServer: import("@modern-js/plugin").AsyncPipeline<WebServerStartInput, WebAdapter | null>;
261
+ prepareApiServer: import("@modern-js/plugin").AsyncPipeline<APIServerStartInput, HonoMiddleware>;
261
262
  repack: import("@modern-js/plugin").Waterfall<void>;
262
- onApiChange: import("@modern-js/plugin").Waterfall<Change[]>;
263
+ onApiChange: import("@modern-js/plugin").AsyncWaterfall<Change[]>;
263
264
  beforeServerInit: import("@modern-js/plugin").AsyncWaterfall<ServerInitHookContext>;
264
- afterServerInit: import("@modern-js/plugin").AsyncWaterfall<ServerInitHookContext>;
265
265
  setupCompiler: import("@modern-js/plugin").ParallelWorkflow<Record<string, unknown>, any[]>;
266
266
  beforeRouteSet: import("@modern-js/plugin").AsyncPipeline<Route[], Route[]>;
267
267
  afterRouteSet: import("@modern-js/plugin").AsyncPipeline<unknown, unknown>;
@@ -318,12 +318,11 @@ export declare const createPlugin: (setup?: AsyncSetup<{
318
318
  serverRoutes: ServerRoute[];
319
319
  distDir: string;
320
320
  }, LoaderHandler>;
321
- prepareWebServer: import("@modern-js/plugin").AsyncPipeline<WebServerStartInput, WebAdapter>;
322
- prepareApiServer: import("@modern-js/plugin").AsyncPipeline<APIServerStartInput, Adapter>;
321
+ prepareWebServer: import("@modern-js/plugin").AsyncPipeline<WebServerStartInput, WebAdapter | null>;
322
+ prepareApiServer: import("@modern-js/plugin").AsyncPipeline<APIServerStartInput, HonoMiddleware>;
323
323
  repack: import("@modern-js/plugin").Waterfall<void>;
324
- onApiChange: import("@modern-js/plugin").Waterfall<Change[]>;
324
+ onApiChange: import("@modern-js/plugin").AsyncWaterfall<Change[]>;
325
325
  beforeServerInit: import("@modern-js/plugin").AsyncWaterfall<ServerInitHookContext>;
326
- afterServerInit: import("@modern-js/plugin").AsyncWaterfall<ServerInitHookContext>;
327
326
  setupCompiler: import("@modern-js/plugin").ParallelWorkflow<Record<string, unknown>, any[]>;
328
327
  beforeRouteSet: import("@modern-js/plugin").AsyncPipeline<Route[], Route[]>;
329
328
  afterRouteSet: import("@modern-js/plugin").AsyncPipeline<unknown, unknown>;
@@ -376,12 +375,11 @@ export declare const createPlugin: (setup?: AsyncSetup<{
376
375
  serverRoutes: ServerRoute[];
377
376
  distDir: string;
378
377
  }, LoaderHandler>;
379
- prepareWebServer: import("@modern-js/plugin").AsyncPipeline<WebServerStartInput, WebAdapter>;
380
- prepareApiServer: import("@modern-js/plugin").AsyncPipeline<APIServerStartInput, Adapter>;
378
+ prepareWebServer: import("@modern-js/plugin").AsyncPipeline<WebServerStartInput, WebAdapter | null>;
379
+ prepareApiServer: import("@modern-js/plugin").AsyncPipeline<APIServerStartInput, HonoMiddleware>;
381
380
  repack: import("@modern-js/plugin").Waterfall<void>;
382
- onApiChange: import("@modern-js/plugin").Waterfall<Change[]>;
381
+ onApiChange: import("@modern-js/plugin").AsyncWaterfall<Change[]>;
383
382
  beforeServerInit: import("@modern-js/plugin").AsyncWaterfall<ServerInitHookContext>;
384
- afterServerInit: import("@modern-js/plugin").AsyncWaterfall<ServerInitHookContext>;
385
383
  setupCompiler: import("@modern-js/plugin").ParallelWorkflow<Record<string, unknown>, any[]>;
386
384
  beforeRouteSet: import("@modern-js/plugin").AsyncPipeline<Route[], Route[]>;
387
385
  afterRouteSet: import("@modern-js/plugin").AsyncPipeline<unknown, unknown>;
@@ -438,12 +436,11 @@ export declare const createPlugin: (setup?: AsyncSetup<{
438
436
  serverRoutes: ServerRoute[];
439
437
  distDir: string;
440
438
  }, LoaderHandler>;
441
- prepareWebServer: import("@modern-js/plugin").AsyncPipeline<WebServerStartInput, WebAdapter>;
442
- prepareApiServer: import("@modern-js/plugin").AsyncPipeline<APIServerStartInput, Adapter>;
439
+ prepareWebServer: import("@modern-js/plugin").AsyncPipeline<WebServerStartInput, WebAdapter | null>;
440
+ prepareApiServer: import("@modern-js/plugin").AsyncPipeline<APIServerStartInput, HonoMiddleware>;
443
441
  repack: import("@modern-js/plugin").Waterfall<void>;
444
- onApiChange: import("@modern-js/plugin").Waterfall<Change[]>;
442
+ onApiChange: import("@modern-js/plugin").AsyncWaterfall<Change[]>;
445
443
  beforeServerInit: import("@modern-js/plugin").AsyncWaterfall<ServerInitHookContext>;
446
- afterServerInit: import("@modern-js/plugin").AsyncWaterfall<ServerInitHookContext>;
447
444
  setupCompiler: import("@modern-js/plugin").ParallelWorkflow<Record<string, unknown>, any[]>;
448
445
  beforeRouteSet: import("@modern-js/plugin").AsyncPipeline<Route[], Route[]>;
449
446
  afterRouteSet: import("@modern-js/plugin").AsyncPipeline<unknown, unknown>;
@@ -0,0 +1,11 @@
1
+ /// <reference types="node" />
2
+ import { IncomingMessage } from 'node:http';
3
+ import { Logger, Reporter } from '@modern-js/types';
4
+ export interface RenderOptions {
5
+ logger: Logger;
6
+ /** ssr render html templates */
7
+ tpls: Record<string, string>;
8
+ reporter?: Reporter;
9
+ nodeReq?: IncomingMessage;
10
+ }
11
+ export type Render = (request: Request, options: RenderOptions) => Promise<Response>;
@@ -0,0 +1,71 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ /// <reference types="node" />
4
+ import type { IncomingMessage, Server, ServerResponse } from 'node:http';
5
+ import { Readable } from 'node:stream';
6
+ import type { Metrics, Logger, NextFunction, ModernServerContext, InternalPlugins, Reporter, BaseSSRServerContext, ServerRoute } from '@modern-js/types';
7
+ import { MiddlewareHandler } from 'hono';
8
+ import { ServerOptions } from '../types/config/index';
9
+ import { ServerHookRunner, ServerPlugin } from './plugin';
10
+ import { HonoEnv } from './hono';
11
+ declare module 'http' {
12
+ interface IncomingMessage {
13
+ logger: Logger;
14
+ metrics: Metrics;
15
+ reporter?: Reporter;
16
+ body?: any;
17
+ }
18
+ interface OutgoingMessage {
19
+ set: (key: string, value: any) => this;
20
+ modernFlushedHeaders?: boolean;
21
+ }
22
+ }
23
+ export type ServerBaseOptions = {
24
+ /** server working directory, and then also dist directory */
25
+ pwd: string;
26
+ config: ServerOptions;
27
+ serverConfigFile?: string;
28
+ routes?: ServerRoute[];
29
+ plugins?: ServerPlugin[];
30
+ internalPlugins?: InternalPlugins;
31
+ appContext: {
32
+ appDirectory?: string;
33
+ sharedDirectory?: string;
34
+ apiDirectory?: string;
35
+ lambdaDirectory?: string;
36
+ };
37
+ runMode?: 'apiOnly' | 'ssrOnly' | 'webOnly';
38
+ };
39
+ export type SSRServerContext = BaseSSRServerContext & {
40
+ staticGenerate?: boolean;
41
+ };
42
+ export type ServerRender = (ssrContext: SSRServerContext) => Promise<string | Readable | ReadableStream>;
43
+ export type RenderResult = {
44
+ content: string | Buffer;
45
+ contentType: string;
46
+ contentStream?: Readable;
47
+ statusCode?: number;
48
+ redirect?: boolean;
49
+ };
50
+ export type ConfWithBFF = {
51
+ bff?: {
52
+ prefix: string;
53
+ } & ServerOptions['bff'];
54
+ };
55
+ export type Then<T> = T extends PromiseLike<infer U> ? U : T;
56
+ export type { Metrics, Logger, NextFunction };
57
+ export type HookNames = 'afterMatch' | 'afterRender';
58
+ export interface ModernServerInterface {
59
+ pwd: string;
60
+ distDir: string;
61
+ onInit: (runner: ServerHookRunner, app: Server) => Promise<void>;
62
+ getRequestHandler: () => (req: IncomingMessage, res: ServerResponse, next?: () => void) => void;
63
+ createHTTPServer: (handler: (req: IncomingMessage, res: ServerResponse, next?: () => void) => void) => Promise<Server>;
64
+ render: (req: IncomingMessage, res: ServerResponse, url?: string) => Promise<string | Readable | null>;
65
+ close?: () => Promise<void>;
66
+ }
67
+ export type ServerConstructor = (options: ServerBaseOptions) => ModernServerInterface;
68
+ export type ModernServerHandler = (context: ModernServerContext, next: NextFunction) => Promise<void> | void;
69
+ export type Middleware<Env extends HonoEnv = any> = MiddlewareHandler<Env>;
70
+ export type RequestHandler = (request: Request, ...args: any[]) => Response | Promise<Response>;
71
+ export * from './hono';
@@ -1,4 +1,5 @@
1
- export * from './plugin';
1
+ export * from './core/plugin';
2
+ export * from './core/render';
2
3
  export * from '@modern-js/plugin';
3
- export * from './loadPlugins';
4
+ export * from './core/loadPlugins';
4
5
  export * from './types/config';