@modern-js/server-core 2.66.0 → 2.67.1

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.
@@ -44,10 +44,13 @@ const createWebRequest = (req, res, body) => {
44
44
  const headerRecord = [];
45
45
  const len = req.rawHeaders.length;
46
46
  for (let i = 0; i < len; i += 2) {
47
- headerRecord.push([
48
- req.rawHeaders[i],
49
- req.rawHeaders[i + 1]
50
- ]);
47
+ const key = req.rawHeaders[i];
48
+ if (!key.startsWith(":")) {
49
+ headerRecord.push([
50
+ key,
51
+ req.rawHeaders[i + 1]
52
+ ]);
53
+ }
51
54
  }
52
55
  const { method } = req;
53
56
  const controller = new AbortController();
@@ -125,12 +128,23 @@ const getRequestListener = (handler) => {
125
128
  }
126
129
  };
127
130
  };
128
- const createNodeServer = async (requestHandler, httpsOptions) => {
131
+ const createNodeServer = async (requestHandler, httpsOptions, http2) => {
129
132
  const requestListener = getRequestListener(requestHandler);
130
133
  let nodeServer;
131
134
  if (httpsOptions) {
132
- const { createServer } = await import("node:https");
133
- nodeServer = createServer(httpsOptions, requestListener);
135
+ if (http2) {
136
+ const { createSecureServer } = await import("node:http2");
137
+ nodeServer = createSecureServer({
138
+ allowHTTP1: true,
139
+ maxSessionMemory: 1024,
140
+ ...httpsOptions
141
+ }, (req, res) => {
142
+ return requestListener(req, res);
143
+ });
144
+ } else {
145
+ const { createServer } = await import("node:https");
146
+ nodeServer = createServer(httpsOptions, requestListener);
147
+ }
134
148
  } else {
135
149
  const { createServer } = await import("node:http");
136
150
  nodeServer = createServer(requestListener);
@@ -32,7 +32,7 @@ function injectRoute(route) {
32
32
  };
33
33
  }
34
34
  function getPageRoutes(routes) {
35
- return routes.filter((route) => !route.isApi).sort(import_utils.sortRoutes);
35
+ return routes.filter((route) => route.entryName).sort(import_utils.sortRoutes);
36
36
  }
37
37
  const injectRoutePlugin = () => ({
38
38
  name: "@modern-js/plugin-inject-route",
@@ -1,5 +1,6 @@
1
1
  import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
2
  import { _ as _instanceof } from "@swc/helpers/_/_instanceof";
3
+ import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
3
4
  import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
4
5
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
5
6
  import { ServerResponse } from "node:http";
@@ -12,10 +13,13 @@ var createWebRequest = function(req, res, body) {
12
13
  var headerRecord = [];
13
14
  var len = req.rawHeaders.length;
14
15
  for (var i = 0; i < len; i += 2) {
15
- headerRecord.push([
16
- req.rawHeaders[i],
17
- req.rawHeaders[i + 1]
18
- ]);
16
+ var key = req.rawHeaders[i];
17
+ if (!key.startsWith(":")) {
18
+ headerRecord.push([
19
+ key,
20
+ req.rawHeaders[i + 1]
21
+ ]);
22
+ }
19
23
  }
20
24
  var method = req.method;
21
25
  var controller = new AbortController();
@@ -182,24 +186,34 @@ var getRequestListener = function(handler) {
182
186
  }();
183
187
  };
184
188
  var createNodeServer = function() {
185
- var _ref = _async_to_generator(function(requestHandler, httpsOptions) {
186
- var requestListener, nodeServer, createServer, createServer1;
189
+ var _ref = _async_to_generator(function(requestHandler, httpsOptions, http2) {
190
+ var requestListener, nodeServer, createSecureServer, createServer, createServer1;
187
191
  return _ts_generator(this, function(_state) {
188
192
  switch (_state.label) {
189
193
  case 0:
190
194
  requestListener = getRequestListener(requestHandler);
191
195
  if (!httpsOptions)
196
+ return [
197
+ 3,
198
+ 5
199
+ ];
200
+ if (!http2)
192
201
  return [
193
202
  3,
194
203
  2
195
204
  ];
196
205
  return [
197
206
  4,
198
- import("node:https")
207
+ import("node:http2")
199
208
  ];
200
209
  case 1:
201
- createServer = _state.sent().createServer;
202
- nodeServer = createServer(httpsOptions, requestListener);
210
+ createSecureServer = _state.sent().createSecureServer;
211
+ nodeServer = createSecureServer(_object_spread({
212
+ allowHTTP1: true,
213
+ maxSessionMemory: 1024
214
+ }, httpsOptions), function(req, res) {
215
+ return requestListener(req, res);
216
+ });
203
217
  return [
204
218
  3,
205
219
  4
@@ -207,13 +221,27 @@ var createNodeServer = function() {
207
221
  case 2:
208
222
  return [
209
223
  4,
210
- import("node:http")
224
+ import("node:https")
211
225
  ];
212
226
  case 3:
213
- createServer1 = _state.sent().createServer;
214
- nodeServer = createServer1(requestListener);
227
+ createServer = _state.sent().createServer;
228
+ nodeServer = createServer(httpsOptions, requestListener);
215
229
  _state.label = 4;
216
230
  case 4:
231
+ return [
232
+ 3,
233
+ 7
234
+ ];
235
+ case 5:
236
+ return [
237
+ 4,
238
+ import("node:http")
239
+ ];
240
+ case 6:
241
+ createServer1 = _state.sent().createServer;
242
+ nodeServer = createServer1(requestListener);
243
+ _state.label = 7;
244
+ case 7:
217
245
  nodeServer.getRequestListener = function() {
218
246
  return requestListener;
219
247
  };
@@ -227,7 +255,7 @@ var createNodeServer = function() {
227
255
  }
228
256
  });
229
257
  });
230
- return function createNodeServer2(requestHandler, httpsOptions) {
258
+ return function createNodeServer2(requestHandler, httpsOptions, http2) {
231
259
  return _ref.apply(this, arguments);
232
260
  };
233
261
  }();
@@ -30,7 +30,7 @@ function injectRoute(route) {
30
30
  }
31
31
  function getPageRoutes(routes) {
32
32
  return routes.filter(function(route) {
33
- return !route.isApi;
33
+ return route.entryName;
34
34
  }).sort(sortRoutes);
35
35
  }
36
36
  var injectRoutePlugin = function() {
@@ -8,10 +8,13 @@ const createWebRequest = (req, res, body) => {
8
8
  const headerRecord = [];
9
9
  const len = req.rawHeaders.length;
10
10
  for (let i = 0; i < len; i += 2) {
11
- headerRecord.push([
12
- req.rawHeaders[i],
13
- req.rawHeaders[i + 1]
14
- ]);
11
+ const key = req.rawHeaders[i];
12
+ if (!key.startsWith(":")) {
13
+ headerRecord.push([
14
+ key,
15
+ req.rawHeaders[i + 1]
16
+ ]);
17
+ }
15
18
  }
16
19
  const { method } = req;
17
20
  const controller = new AbortController();
@@ -89,12 +92,23 @@ const getRequestListener = (handler) => {
89
92
  }
90
93
  };
91
94
  };
92
- const createNodeServer = async (requestHandler, httpsOptions) => {
95
+ const createNodeServer = async (requestHandler, httpsOptions, http2) => {
93
96
  const requestListener = getRequestListener(requestHandler);
94
97
  let nodeServer;
95
98
  if (httpsOptions) {
96
- const { createServer } = await import("node:https");
97
- nodeServer = createServer(httpsOptions, requestListener);
99
+ if (http2) {
100
+ const { createSecureServer } = await import("node:http2");
101
+ nodeServer = createSecureServer({
102
+ allowHTTP1: true,
103
+ maxSessionMemory: 1024,
104
+ ...httpsOptions
105
+ }, (req, res) => {
106
+ return requestListener(req, res);
107
+ });
108
+ } else {
109
+ const { createServer } = await import("node:https");
110
+ nodeServer = createServer(httpsOptions, requestListener);
111
+ }
98
112
  } else {
99
113
  const { createServer } = await import("node:http");
100
114
  nodeServer = createServer(requestListener);
@@ -9,7 +9,7 @@ function injectRoute(route) {
9
9
  };
10
10
  }
11
11
  function getPageRoutes(routes) {
12
- return routes.filter((route) => !route.isApi).sort(sortRoutes);
12
+ return routes.filter((route) => route.entryName).sort(sortRoutes);
13
13
  }
14
14
  const injectRoutePlugin = () => ({
15
15
  name: "@modern-js/plugin-inject-route",
@@ -1,4 +1,5 @@
1
- import type { HonoRequest, NodeRequest, NodeResponse, ServerManifest } from '../../../types';
1
+ import type { NodeRequest, NodeResponse } from '@modern-js/types/server';
2
+ import type { HonoRequest, ServerManifest } from '../../../types';
2
3
  type ExtendedNodeRequest = NodeRequest & {
3
4
  __honoRequest?: HonoRequest;
4
5
  __templates?: Record<string, string>;
@@ -1,4 +1,5 @@
1
- import type { Context, Middleware, Next, NodeRequest, NodeResponse, ServerEnv } from '../../types';
1
+ import type { NodeRequest, NodeResponse } from '@modern-js/types/server';
2
+ import type { Context, Middleware, Next, ServerEnv } from '../../types';
2
3
  import { type NodeBindings } from './helper';
3
4
  export type ServerNodeEnv = {
4
5
  Bindings: NodeBindings;
@@ -1,12 +1,17 @@
1
1
  import { type Server as NodeServer } from 'node:http';
2
+ import type { Http2SecureServer } from 'node:http2';
2
3
  import type { Server as NodeHttpsServer } from 'node:https';
3
- import type { NodeRequest, NodeResponse, RequestHandler } from '../../types';
4
+ import type { NodeRequest, NodeResponse } from '@modern-js/types/server';
5
+ import type { RequestHandler } from '../../types';
4
6
  export { writeReadableStreamToWritable } from './polyfills';
5
7
  export declare const createWebRequest: (req: NodeRequest, res: NodeResponse, body?: BodyInit) => Request;
6
8
  export declare const sendResponse: (response: Response, res: NodeResponse) => Promise<void>;
7
9
  declare const getRequestListener: (handler: RequestHandler) => (req: NodeRequest, res: NodeResponse) => Promise<void>;
8
- type NodeServerWrapper = (NodeServer | NodeHttpsServer) & {
10
+ type NodeServerWrapper = (NodeServer | NodeHttpsServer | Http2SecureServer) & {
9
11
  getRequestListener: () => ReturnType<typeof getRequestListener>;
10
12
  getRequestHandler: () => RequestHandler;
11
13
  };
12
- export declare const createNodeServer: (requestHandler: RequestHandler, httpsOptions?: Record<string, unknown>) => Promise<NodeServerWrapper>;
14
+ export declare const createNodeServer: (requestHandler: RequestHandler, httpsOptions?: {
15
+ key?: string | Buffer;
16
+ cert?: string | Buffer;
17
+ }, http2?: boolean) => Promise<NodeServerWrapper>;
@@ -1,5 +1,6 @@
1
1
  import type { Server as NodeServer } from 'node:http';
2
+ import type { Http2SecureServer } from 'node:http2';
2
3
  import type { ServerPluginLegacy } from '../../../types';
3
4
  export declare const injectNodeSeverPlugin: ({ nodeServer, }: {
4
- nodeServer: NodeServer;
5
+ nodeServer: NodeServer | Http2SecureServer;
5
6
  }) => ServerPluginLegacy;
@@ -1,9 +1,9 @@
1
- import type { IncomingMessage } from 'http';
2
1
  import type { CacheControl, CacheOption, Container } from '@modern-js/types';
2
+ import type { NodeRequest } from '@modern-js/types/server';
3
3
  import type { RequestHandler, RequestHandlerOptions } from '../../types/requestHandler';
4
4
  export type CacheStatus = 'hit' | 'stale' | 'expired' | 'miss';
5
5
  type MaybeAsync<T> = Promise<T> | T;
6
- export declare function matchCacheControl(cacheOption?: CacheOption, req?: IncomingMessage): MaybeAsync<CacheControl | undefined | false>;
6
+ export declare function matchCacheControl(cacheOption?: CacheOption, req?: NodeRequest): MaybeAsync<CacheControl | undefined | false>;
7
7
  export interface GetCacheResultOptions {
8
8
  cacheControl: CacheControl;
9
9
  requestHandler: RequestHandler;
@@ -1,6 +1,6 @@
1
- import type { IncomingMessage } from 'http';
2
1
  import type { Logger, Metrics, Reporter, ServerRoute } from '@modern-js/types';
3
2
  import type { Monitors, ClientManifest as RscClientManifest, SSRManifest as RscSSRManifest, ServerManifest as RscServerManifest } from '@modern-js/types/server';
3
+ import type { NodeRequest } from '@modern-js/types/server';
4
4
  import type { CacheConfig, ServerManifest, UserConfig } from '../../types';
5
5
  import type { OnError, OnTiming, Params } from '../../types/requestHandler';
6
6
  export interface SSRRenderOptions {
@@ -21,7 +21,7 @@ export interface SSRRenderOptions {
21
21
  /** Produce by custom server hook */
22
22
  locals?: Record<string, any>;
23
23
  cacheConfig?: CacheConfig;
24
- nodeReq?: IncomingMessage;
24
+ nodeReq?: NodeRequest;
25
25
  monitors: Monitors;
26
26
  onError: OnError;
27
27
  onTiming: OnTiming;
@@ -1,4 +1,5 @@
1
- import type { IncomingMessage, Server as NodeServer, ServerResponse } from 'http';
1
+ import type { Server as NodeServer } from 'http';
2
+ import type { Http2SecureServer } from 'node:http2';
2
3
  import type { CacheOption, Container, HttpMethodDecider, Logger, Metrics, MiddlewareContext, Reporter, ServerRoute, UnstableMiddleware } from '@modern-js/types';
3
4
  import type { MiddlewareHandler } from 'hono';
4
5
  import type { UserConfig } from '../config';
@@ -59,11 +60,9 @@ declare module '@modern-js/types' {
59
60
  getRenderOptions?: GetRenderHandlerOptions;
60
61
  render?: Render;
61
62
  routes?: ServerRoute[];
62
- nodeServer?: NodeServer;
63
+ nodeServer?: NodeServer | Http2SecureServer;
63
64
  }
64
65
  }
65
- export type NodeRequest = IncomingMessage;
66
- export type NodeResponse = ServerResponse;
67
66
  export type CacheConfig = {
68
67
  strategy: CacheOption;
69
68
  container?: Container;
@@ -1,3 +1,3 @@
1
1
  export * from './new';
2
2
  export * from './old';
3
- export type { ServerConfig, CacheConfig, OnFallback, FallbackReason, GetRenderHandlerOptions, NodeRequest, NodeResponse, FileChangeEvent, FallbackInput, WebServerStartInput, APIServerStartInput, } from './base';
3
+ export type { ServerConfig, CacheConfig, OnFallback, FallbackReason, GetRenderHandlerOptions, FileChangeEvent, FallbackInput, WebServerStartInput, APIServerStartInput, } from './base';
@@ -1,5 +1,5 @@
1
- import type { IncomingMessage } from 'node:http';
2
1
  import type { Logger, Metrics, Monitors, Reporter, ClientManifest as RscClientManifest, SSRManifest as RscSSRManifest, ServerManifest as RscServerManifest } from '@modern-js/types';
2
+ import type { NodeRequest } from '@modern-js/types/server';
3
3
  import type { ServerManifest } from './server';
4
4
  export interface RenderOptions {
5
5
  monitors: Monitors;
@@ -22,6 +22,6 @@ export interface RenderOptions {
22
22
  rscServerManifest?: RscServerManifest;
23
23
  rscClientManifest?: RscClientManifest;
24
24
  rscSSRManifest?: RscSSRManifest;
25
- nodeReq?: IncomingMessage;
25
+ nodeReq?: NodeRequest;
26
26
  }
27
27
  export type Render = (request: Request, options: RenderOptions) => Promise<Response>;
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "modern",
16
16
  "modern.js"
17
17
  ],
18
- "version": "2.66.0",
18
+ "version": "2.67.1",
19
19
  "jsnext:source": "./src/index.ts",
20
20
  "types": "./dist/types/index.d.ts",
21
21
  "main": "./dist/cjs/index.js",
@@ -53,10 +53,10 @@
53
53
  "flatted": "^3.2.9",
54
54
  "hono": "^3.12.2",
55
55
  "ts-deepmerge": "7.0.2",
56
- "@modern-js/plugin": "2.66.0",
57
- "@modern-js/runtime-utils": "2.66.0",
58
- "@modern-js/plugin-v2": "2.66.0",
59
- "@modern-js/utils": "2.66.0"
56
+ "@modern-js/plugin": "2.67.1",
57
+ "@modern-js/runtime-utils": "2.67.1",
58
+ "@modern-js/utils": "2.67.1",
59
+ "@modern-js/plugin-v2": "2.67.1"
60
60
  },
61
61
  "devDependencies": {
62
62
  "@types/jest": "^29",
@@ -66,9 +66,9 @@
66
66
  "jest": "^29",
67
67
  "ts-jest": "^29.1.0",
68
68
  "typescript": "^5",
69
- "@modern-js/types": "2.66.0",
70
69
  "@scripts/build": "2.66.0",
71
- "@scripts/jest-config": "2.66.0"
70
+ "@scripts/jest-config": "2.66.0",
71
+ "@modern-js/types": "2.67.1"
72
72
  },
73
73
  "sideEffects": false,
74
74
  "publishConfig": {