@modern-js/server-core 2.67.3 → 2.67.4

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 (34) hide show
  1. package/dist/cjs/adapters/node/helper/loadConfig.js +5 -1
  2. package/dist/cjs/adapters/node/node.js +20 -8
  3. package/dist/cjs/plugins/customServer/index.js +4 -10
  4. package/dist/cjs/plugins/index.js +3 -0
  5. package/dist/cjs/plugins/middlewares.js +43 -0
  6. package/dist/cjs/plugins/render/index.js +10 -5
  7. package/dist/cjs/plugins/render/inject.js +2 -2
  8. package/dist/cjs/serverBase.js +0 -1
  9. package/dist/esm/adapters/node/helper/loadConfig.js +7 -3
  10. package/dist/esm/adapters/node/node.js +54 -8
  11. package/dist/esm/plugins/customServer/index.js +4 -12
  12. package/dist/esm/plugins/index.js +2 -0
  13. package/dist/esm/plugins/middlewares.js +22 -0
  14. package/dist/esm/plugins/render/index.js +53 -29
  15. package/dist/esm/plugins/render/inject.js +3 -2
  16. package/dist/esm/serverBase.js +0 -1
  17. package/dist/esm-node/adapters/node/helper/loadConfig.js +6 -2
  18. package/dist/esm-node/adapters/node/node.js +20 -8
  19. package/dist/esm-node/plugins/customServer/index.js +4 -10
  20. package/dist/esm-node/plugins/index.js +2 -0
  21. package/dist/esm-node/plugins/middlewares.js +19 -0
  22. package/dist/esm-node/plugins/render/index.js +11 -6
  23. package/dist/esm-node/plugins/render/inject.js +2 -2
  24. package/dist/esm-node/serverBase.js +0 -1
  25. package/dist/types/adapters/node/helper/loadConfig.d.ts +1 -1
  26. package/dist/types/index.d.ts +2 -2
  27. package/dist/types/plugins/customServer/index.d.ts +2 -4
  28. package/dist/types/plugins/index.d.ts +1 -0
  29. package/dist/types/plugins/middlewares.d.ts +2 -0
  30. package/dist/types/types/plugins/base.d.ts +8 -11
  31. package/dist/types/types/plugins/index.d.ts +1 -1
  32. package/dist/types/types/plugins/new.d.ts +2 -2
  33. package/dist/types/types/server.d.ts +1 -1
  34. package/package.json +8 -8
@@ -53,12 +53,16 @@ async function loadServerConfigOld(pwd, configFile) {
53
53
  const serverConfig = await requireConfig(serverConfigPath);
54
54
  return serverConfig;
55
55
  }
56
- async function loadServerRuntimeConfig(pwd, oldServerFile = import_utils.DEFAULT_SERVER_CONFIG, newServerConfigPath) {
56
+ async function loadServerRuntimeConfig(pwd, oldServerFile = import_utils.DEFAULT_SERVER_CONFIG, newServerConfigPath, metaName) {
57
57
  const newServerConfig = newServerConfigPath && await loadServerConfigNew(newServerConfigPath);
58
58
  if (newServerConfig) {
59
59
  return newServerConfig;
60
60
  }
61
61
  const oldServerConfig = await loadServerConfigOld(pwd, oldServerFile);
62
+ if (oldServerConfig) {
63
+ const meta = (0, import_utils.getMeta)(metaName);
64
+ console.warn(`${import_utils.chalk.red("\n[Warning]")} ${import_utils.chalk.yellow.bold(`\`${oldServerFile}\``)} is no longer maintained. To extend the server, please migrate to ${import_utils.chalk.yellow.bold(`\`server/${meta}.server.ts\``)};`);
65
+ }
62
66
  return oldServerConfig;
63
67
  }
64
68
  function loadServerCliConfig(pwd, defaultConfig = {}) {
@@ -43,14 +43,26 @@ var import_polyfills = require("./polyfills");
43
43
  (0, import_install.installGlobals)();
44
44
  const createWebRequest = (req, res, body) => {
45
45
  const headerRecord = [];
46
- const len = req.rawHeaders.length;
47
- for (let i = 0; i < len; i += 2) {
48
- const key = req.rawHeaders[i];
49
- if (!key.startsWith(":")) {
50
- headerRecord.push([
51
- key,
52
- req.rawHeaders[i + 1]
53
- ]);
46
+ for (const [key, value] of Object.entries(req.headers)) {
47
+ if (key.startsWith(":")) {
48
+ continue;
49
+ }
50
+ if (Array.isArray(value)) {
51
+ for (const item of value) {
52
+ if (item !== void 0) {
53
+ headerRecord.push([
54
+ key,
55
+ item
56
+ ]);
57
+ }
58
+ }
59
+ } else if (value !== void 0) {
60
+ if (typeof value === "string") {
61
+ headerRecord.push([
62
+ key,
63
+ value
64
+ ]);
65
+ }
54
66
  }
55
67
  }
56
68
  const { method } = req;
@@ -92,19 +92,14 @@ class CustomServer {
92
92
  }
93
93
  };
94
94
  }
95
- async getServerMiddleware(renderMiddlewares) {
95
+ async getServerMiddleware() {
96
96
  const serverMiddleware = await this.serverMiddlewarePromise;
97
97
  if (!serverMiddleware || !(0, import_utils.isFunction)(serverMiddleware) && !(0, import_utils.isArray)(serverMiddleware)) {
98
- return renderMiddlewares;
98
+ return;
99
99
  }
100
100
  if (Array.isArray(serverMiddleware)) {
101
101
  const unstableMiddlewares = getServerMidFromUnstableMid(serverMiddleware);
102
- return [
103
- ...renderMiddlewares || [],
104
- ...unstableMiddlewares
105
- ];
106
- } else if (renderMiddlewares) {
107
- return renderMiddlewares;
102
+ return unstableMiddlewares;
108
103
  }
109
104
  return async (c, next) => {
110
105
  var _c_env_node_res, _c_env_node, _c_env;
@@ -130,9 +125,8 @@ class CustomServer {
130
125
  }
131
126
  };
132
127
  }
133
- constructor(hooks, serverBase, pwd) {
128
+ constructor(hooks, pwd) {
134
129
  this.hooks = hooks;
135
- this.serverBase = serverBase;
136
130
  const webExtension = [];
137
131
  this.serverMiddlewarePromise = hooks.prepareWebServer.call({
138
132
  pwd,
@@ -23,6 +23,7 @@ __export(plugins_exports, {
23
23
  faviconPlugin: () => import_favicon.faviconPlugin,
24
24
  getRenderHandler: () => import_render.getRenderHandler,
25
25
  handleSetupResult: () => import_compat.handleSetupResult,
26
+ injectConfigMiddlewarePlugin: () => import_middlewares.injectConfigMiddlewarePlugin,
26
27
  injectRenderHandlerPlugin: () => import_render.injectRenderHandlerPlugin,
27
28
  injectServerTiming: () => import_monitors.injectServerTiming,
28
29
  injectloggerPlugin: () => import_monitors.injectloggerPlugin,
@@ -38,6 +39,7 @@ var import_processedBy = require("./processedBy");
38
39
  var import_log = require("./log");
39
40
  var import_default = require("./default");
40
41
  var import_compat = require("./compat");
42
+ var import_middlewares = require("./middlewares");
41
43
  // Annotate the CommonJS export names for ESM import in node:
42
44
  0 && (module.exports = {
43
45
  compatPlugin,
@@ -45,6 +47,7 @@ var import_compat = require("./compat");
45
47
  faviconPlugin,
46
48
  getRenderHandler,
47
49
  handleSetupResult,
50
+ injectConfigMiddlewarePlugin,
48
51
  injectRenderHandlerPlugin,
49
52
  injectServerTiming,
50
53
  injectloggerPlugin,
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var middlewares_exports = {};
20
+ __export(middlewares_exports, {
21
+ injectConfigMiddlewarePlugin: () => injectConfigMiddlewarePlugin
22
+ });
23
+ module.exports = __toCommonJS(middlewares_exports);
24
+ const injectConfigMiddlewarePlugin = (configMiddlewares = [], configRenderMiddlewares = []) => ({
25
+ name: "@modern-js/plugin-inject-config-middleware",
26
+ setup(api) {
27
+ return {
28
+ prepare() {
29
+ const { middlewares, renderMiddlewares } = api.useAppContext();
30
+ configMiddlewares.forEach((m) => {
31
+ middlewares.push(m);
32
+ });
33
+ configRenderMiddlewares.forEach((m) => {
34
+ renderMiddlewares.push(m);
35
+ });
36
+ }
37
+ };
38
+ }
39
+ });
40
+ // Annotate the CommonJS export names for ESM import in node:
41
+ 0 && (module.exports = {
42
+ injectConfigMiddlewarePlugin
43
+ });
@@ -33,15 +33,13 @@ const renderPlugin = () => ({
33
33
  setup(api) {
34
34
  return {
35
35
  async prepare() {
36
- var _config_render;
37
- const { middlewares, routes, render, distDirectory: pwd, serverBase } = api.useAppContext();
36
+ const { middlewares, routes, render, distDirectory: pwd, renderMiddlewares } = api.useAppContext();
38
37
  const hooks = api.getHooks();
39
38
  const config = api.useConfigContext();
40
39
  if (!routes) {
41
40
  return;
42
41
  }
43
- const customServer = new import_customServer.CustomServer(hooks, serverBase, pwd);
44
- const serverMiddleware = ((_config_render = config.render) === null || _config_render === void 0 ? void 0 : _config_render.middleware) && (0, import_customServer.getServerMidFromUnstableMid)(config.render.middleware);
42
+ const customServer = new import_customServer.CustomServer(hooks, pwd);
45
43
  const pageRoutes = getPageRoutes(routes);
46
44
  middlewares.push({
47
45
  name: "page-latency",
@@ -59,7 +57,14 @@ const renderPlugin = () => ({
59
57
  handler: customServerHookMiddleware
60
58
  });
61
59
  }
62
- const customServerMiddleware = await customServer.getServerMiddleware(serverMiddleware);
60
+ renderMiddlewares === null || renderMiddlewares === void 0 ? void 0 : renderMiddlewares.forEach((m) => {
61
+ middlewares.push({
62
+ name: m.name,
63
+ path: urlPath,
64
+ handler: m.handler
65
+ });
66
+ });
67
+ const customServerMiddleware = await customServer.getServerMiddleware();
63
68
  customServerMiddleware && middlewares.push({
64
69
  name: "custom-server-middleware",
65
70
  path: urlPath,
@@ -28,7 +28,6 @@ const injectRenderHandlerPlugin = ({ staticGenerate, cacheConfig }) => ({
28
28
  setup(api) {
29
29
  return {
30
30
  async prepare() {
31
- var _config_render;
32
31
  const { distDirectory: pwd, routes, metaName } = api.useAppContext();
33
32
  const config = api.useConfigContext();
34
33
  const hookRunner = api.useHookRunners();
@@ -47,7 +46,8 @@ const injectRenderHandlerPlugin = ({ staticGenerate, cacheConfig }) => ({
47
46
  routes,
48
47
  config,
49
48
  metaName,
50
- cacheConfig: ((_config_render = config.render) === null || _config_render === void 0 ? void 0 : _config_render.cache) || cacheConfig,
49
+ // TODO: support modern.server.ts cache config
50
+ cacheConfig,
51
51
  staticGenerate,
52
52
  onFallback
53
53
  };
@@ -42,7 +42,6 @@ class ServerBase {
42
42
  cliConfig,
43
43
  serverConfig: serverConfig || {}
44
44
  });
45
- this.addPlugins(mergedConfig.plugins || []);
46
45
  const { serverContext } = await import_server.server.run({
47
46
  plugins: this.plugins,
48
47
  options: this.options,
@@ -1,7 +1,7 @@
1
1
  import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
2
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
3
3
  import path from "path";
4
- import { fs, DEFAULT_SERVER_CONFIG, OUTPUT_CONFIG_FILE, lodash as _, compatibleRequire, ensureAbsolutePath, requireExistModule } from "@modern-js/utils";
4
+ import { fs, DEFAULT_SERVER_CONFIG, OUTPUT_CONFIG_FILE, lodash as _, chalk, compatibleRequire, ensureAbsolutePath, getMeta, requireExistModule } from "@modern-js/utils";
5
5
  import { parse } from "flatted";
6
6
  var requireConfig = function() {
7
7
  var _ref = _async_to_generator(function(serverConfigPath) {
@@ -82,12 +82,12 @@ function loadServerRuntimeConfig(pwd) {
82
82
  }
83
83
  function _loadServerRuntimeConfig() {
84
84
  _loadServerRuntimeConfig = _async_to_generator(function(pwd) {
85
- var oldServerFile, newServerConfigPath, newServerConfig, _tmp, oldServerConfig;
85
+ var oldServerFile, newServerConfigPath, metaName, newServerConfig, _tmp, oldServerConfig, meta;
86
86
  var _arguments = arguments;
87
87
  return _ts_generator(this, function(_state) {
88
88
  switch (_state.label) {
89
89
  case 0:
90
- oldServerFile = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : DEFAULT_SERVER_CONFIG, newServerConfigPath = _arguments.length > 2 ? _arguments[2] : void 0;
90
+ oldServerFile = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : DEFAULT_SERVER_CONFIG, newServerConfigPath = _arguments.length > 2 ? _arguments[2] : void 0, metaName = _arguments.length > 3 ? _arguments[3] : void 0;
91
91
  _tmp = newServerConfigPath;
92
92
  if (!_tmp)
93
93
  return [
@@ -115,6 +115,10 @@ function _loadServerRuntimeConfig() {
115
115
  ];
116
116
  case 3:
117
117
  oldServerConfig = _state.sent();
118
+ if (oldServerConfig) {
119
+ meta = getMeta(metaName);
120
+ console.warn("".concat(chalk.red("\n[Warning]"), " ").concat(chalk.yellow.bold("`".concat(oldServerFile, "`")), " is no longer maintained. To extend the server, please migrate to ").concat(chalk.yellow.bold("`server/".concat(meta, ".server.ts`")), ";"));
121
+ }
118
122
  return [
119
123
  2,
120
124
  oldServerConfig
@@ -12,14 +12,60 @@ import { writeReadableStreamToWritable as writeReadableStreamToWritable2 } from
12
12
  installGlobals();
13
13
  var createWebRequest = function(req, res, body) {
14
14
  var headerRecord = [];
15
- var len = req.rawHeaders.length;
16
- for (var i = 0; i < len; i += 2) {
17
- var key = req.rawHeaders[i];
18
- if (!key.startsWith(":")) {
19
- headerRecord.push([
20
- key,
21
- req.rawHeaders[i + 1]
22
- ]);
15
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
16
+ try {
17
+ for (var _iterator = Object.entries(req.headers)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
18
+ var _step_value = _sliced_to_array(_step.value, 2), key = _step_value[0], value = _step_value[1];
19
+ if (key.startsWith(":")) {
20
+ continue;
21
+ }
22
+ if (Array.isArray(value)) {
23
+ var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;
24
+ try {
25
+ for (var _iterator1 = value[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
26
+ var item = _step1.value;
27
+ if (item !== void 0) {
28
+ headerRecord.push([
29
+ key,
30
+ item
31
+ ]);
32
+ }
33
+ }
34
+ } catch (err) {
35
+ _didIteratorError1 = true;
36
+ _iteratorError1 = err;
37
+ } finally {
38
+ try {
39
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
40
+ _iterator1.return();
41
+ }
42
+ } finally {
43
+ if (_didIteratorError1) {
44
+ throw _iteratorError1;
45
+ }
46
+ }
47
+ }
48
+ } else if (value !== void 0) {
49
+ if (typeof value === "string") {
50
+ headerRecord.push([
51
+ key,
52
+ value
53
+ ]);
54
+ }
55
+ }
56
+ }
57
+ } catch (err) {
58
+ _didIteratorError = true;
59
+ _iteratorError = err;
60
+ } finally {
61
+ try {
62
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
63
+ _iterator.return();
64
+ }
65
+ } finally {
66
+ if (_didIteratorError) {
67
+ throw _iteratorError;
68
+ }
23
69
  }
24
70
  }
25
71
  var method = req.method;
@@ -1,6 +1,5 @@
1
1
  import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
2
  import { _ as _class_call_check } from "@swc/helpers/_/_class_call_check";
3
- import { _ as _to_consumable_array } from "@swc/helpers/_/_to_consumable_array";
4
3
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
5
4
  import { time } from "@modern-js/runtime-utils/time";
6
5
  import { isArray, isFunction } from "@modern-js/utils";
@@ -17,10 +16,9 @@ var isHtmlResponse = function(response) {
17
16
  };
18
17
  var CustomServer = /* @__PURE__ */ function() {
19
18
  "use strict";
20
- function CustomServer2(hooks, serverBase, pwd) {
19
+ function CustomServer2(hooks, pwd) {
21
20
  _class_call_check(this, CustomServer2);
22
21
  this.hooks = hooks;
23
- this.serverBase = serverBase;
24
22
  var webExtension = [];
25
23
  this.serverMiddlewarePromise = hooks.prepareWebServer.call({
26
24
  pwd,
@@ -165,7 +163,7 @@ var CustomServer = /* @__PURE__ */ function() {
165
163
  };
166
164
  }();
167
165
  };
168
- _proto.getServerMiddleware = function getServerMiddleware(renderMiddlewares) {
166
+ _proto.getServerMiddleware = function getServerMiddleware() {
169
167
  var _this = this;
170
168
  return _async_to_generator(function() {
171
169
  var serverMiddleware, unstableMiddlewares;
@@ -180,20 +178,14 @@ var CustomServer = /* @__PURE__ */ function() {
180
178
  serverMiddleware = _state.sent();
181
179
  if (!serverMiddleware || !isFunction(serverMiddleware) && !isArray(serverMiddleware)) {
182
180
  return [
183
- 2,
184
- renderMiddlewares
181
+ 2
185
182
  ];
186
183
  }
187
184
  if (Array.isArray(serverMiddleware)) {
188
185
  unstableMiddlewares = getServerMidFromUnstableMid(serverMiddleware);
189
186
  return [
190
187
  2,
191
- _to_consumable_array(renderMiddlewares || []).concat(_to_consumable_array(unstableMiddlewares))
192
- ];
193
- } else if (renderMiddlewares) {
194
- return [
195
- 2,
196
- renderMiddlewares
188
+ unstableMiddlewares
197
189
  ];
198
190
  }
199
191
  return [
@@ -5,12 +5,14 @@ import { processedByPlugin } from "./processedBy";
5
5
  import { logPlugin } from "./log";
6
6
  import { createDefaultPlugins } from "./default";
7
7
  import { compatPlugin, handleSetupResult } from "./compat";
8
+ import { injectConfigMiddlewarePlugin } from "./middlewares";
8
9
  export {
9
10
  compatPlugin,
10
11
  createDefaultPlugins,
11
12
  faviconPlugin,
12
13
  getRenderHandler,
13
14
  handleSetupResult,
15
+ injectConfigMiddlewarePlugin,
14
16
  injectRenderHandlerPlugin,
15
17
  injectServerTiming,
16
18
  injectloggerPlugin,
@@ -0,0 +1,22 @@
1
+ var injectConfigMiddlewarePlugin = function() {
2
+ var configMiddlewares = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : [], configRenderMiddlewares = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : [];
3
+ return {
4
+ name: "@modern-js/plugin-inject-config-middleware",
5
+ setup: function setup(api) {
6
+ return {
7
+ prepare: function prepare() {
8
+ var _api_useAppContext = api.useAppContext(), middlewares = _api_useAppContext.middlewares, renderMiddlewares = _api_useAppContext.renderMiddlewares;
9
+ configMiddlewares.forEach(function(m) {
10
+ middlewares.push(m);
11
+ });
12
+ configRenderMiddlewares.forEach(function(m) {
13
+ renderMiddlewares.push(m);
14
+ });
15
+ }
16
+ };
17
+ }
18
+ };
19
+ };
20
+ export {
21
+ injectConfigMiddlewarePlugin
22
+ };
@@ -1,9 +1,10 @@
1
1
  import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
2
  import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
3
+ import { _ as _ts_values } from "@swc/helpers/_/_ts_values";
3
4
  import { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
4
5
  import { getLoaderCtx } from "../../helper";
5
6
  import { sortRoutes } from "../../utils";
6
- import { CustomServer, getServerMidFromUnstableMid } from "../customServer";
7
+ import { CustomServer } from "../customServer";
7
8
  import { requestLatencyMiddleware } from "../monitors";
8
9
  export * from "./inject";
9
10
  var renderPlugin = function() {
@@ -13,11 +14,11 @@ var renderPlugin = function() {
13
14
  return {
14
15
  prepare: function prepare() {
15
16
  return _async_to_generator(function() {
16
- var _config_render, _api_useAppContext, middlewares, routes, render, pwd, serverBase, hooks, config, customServer, serverMiddleware, pageRoutes, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, route, _config_server, originUrlPath, _route_entryName, entryName, urlPath, customServerHookMiddleware, customServerMiddleware, err;
17
+ var _api_useAppContext, middlewares, routes, render, pwd, renderMiddlewares, hooks, config, customServer, pageRoutes, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _loop, _iterator, _step, err;
17
18
  return _ts_generator(this, function(_state) {
18
19
  switch (_state.label) {
19
20
  case 0:
20
- _api_useAppContext = api.useAppContext(), middlewares = _api_useAppContext.middlewares, routes = _api_useAppContext.routes, render = _api_useAppContext.render, pwd = _api_useAppContext.distDirectory, serverBase = _api_useAppContext.serverBase;
21
+ _api_useAppContext = api.useAppContext(), middlewares = _api_useAppContext.middlewares, routes = _api_useAppContext.routes, render = _api_useAppContext.render, pwd = _api_useAppContext.distDirectory, renderMiddlewares = _api_useAppContext.renderMiddlewares;
21
22
  hooks = api.getHooks();
22
23
  config = api.useConfigContext();
23
24
  if (!routes) {
@@ -25,8 +26,7 @@ var renderPlugin = function() {
25
26
  2
26
27
  ];
27
28
  }
28
- customServer = new CustomServer(hooks, serverBase, pwd);
29
- serverMiddleware = ((_config_render = config.render) === null || _config_render === void 0 ? void 0 : _config_render.middleware) && getServerMidFromUnstableMid(config.render.middleware);
29
+ customServer = new CustomServer(hooks, pwd);
30
30
  pageRoutes = getPageRoutes(routes);
31
31
  middlewares.push({
32
32
  name: "page-latency",
@@ -41,6 +41,51 @@ var renderPlugin = function() {
41
41
  7,
42
42
  8
43
43
  ]);
44
+ _loop = function() {
45
+ var route, _config_server, originUrlPath, _route_entryName, entryName, urlPath, customServerHookMiddleware, customServerMiddleware;
46
+ return _ts_generator(this, function(_state2) {
47
+ switch (_state2.label) {
48
+ case 0:
49
+ route = _step.value;
50
+ originUrlPath = route.urlPath, _route_entryName = route.entryName, entryName = _route_entryName === void 0 ? MAIN_ENTRY_NAME : _route_entryName;
51
+ urlPath = originUrlPath.endsWith("/") ? "".concat(originUrlPath, "*") : "".concat(originUrlPath, "/*");
52
+ if (((_config_server = config.server) === null || _config_server === void 0 ? void 0 : _config_server.disableHook) !== true) {
53
+ customServerHookMiddleware = customServer.getHookMiddleware(entryName, routes);
54
+ middlewares.push({
55
+ name: "custom-server-hook",
56
+ path: urlPath,
57
+ handler: customServerHookMiddleware
58
+ });
59
+ }
60
+ renderMiddlewares === null || renderMiddlewares === void 0 ? void 0 : renderMiddlewares.forEach(function(m) {
61
+ middlewares.push({
62
+ name: m.name,
63
+ path: urlPath,
64
+ handler: m.handler
65
+ });
66
+ });
67
+ return [
68
+ 4,
69
+ customServer.getServerMiddleware()
70
+ ];
71
+ case 1:
72
+ customServerMiddleware = _state2.sent();
73
+ customServerMiddleware && middlewares.push({
74
+ name: "custom-server-middleware",
75
+ path: urlPath,
76
+ handler: customServerMiddleware
77
+ });
78
+ render && middlewares.push({
79
+ name: "render",
80
+ path: urlPath,
81
+ handler: createRenderHandler(render)
82
+ });
83
+ return [
84
+ 2
85
+ ];
86
+ }
87
+ });
88
+ };
44
89
  _iterator = pageRoutes[Symbol.iterator]();
45
90
  _state.label = 2;
46
91
  case 2:
@@ -49,33 +94,12 @@ var renderPlugin = function() {
49
94
  3,
50
95
  5
51
96
  ];
52
- route = _step.value;
53
- originUrlPath = route.urlPath, _route_entryName = route.entryName, entryName = _route_entryName === void 0 ? MAIN_ENTRY_NAME : _route_entryName;
54
- urlPath = originUrlPath.endsWith("/") ? "".concat(originUrlPath, "*") : "".concat(originUrlPath, "/*");
55
- if (((_config_server = config.server) === null || _config_server === void 0 ? void 0 : _config_server.disableHook) !== true) {
56
- customServerHookMiddleware = customServer.getHookMiddleware(entryName, routes);
57
- middlewares.push({
58
- name: "custom-server-hook",
59
- path: urlPath,
60
- handler: customServerHookMiddleware
61
- });
62
- }
63
97
  return [
64
- 4,
65
- customServer.getServerMiddleware(serverMiddleware)
98
+ 5,
99
+ _ts_values(_loop())
66
100
  ];
67
101
  case 3:
68
- customServerMiddleware = _state.sent();
69
- customServerMiddleware && middlewares.push({
70
- name: "custom-server-middleware",
71
- path: urlPath,
72
- handler: customServerMiddleware
73
- });
74
- render && middlewares.push({
75
- name: "render",
76
- path: urlPath,
77
- handler: createRenderHandler(render)
78
- });
102
+ _state.sent();
79
103
  _state.label = 4;
80
104
  case 4:
81
105
  _iteratorNormalCompletion = true;
@@ -12,7 +12,7 @@ var injectRenderHandlerPlugin = function(param) {
12
12
  return {
13
13
  prepare: function prepare() {
14
14
  return _async_to_generator(function() {
15
- var _config_render, _api_useAppContext, pwd, routes, metaName, config, hookRunner, onFallback, getRenderHandlerOptions, render;
15
+ var _api_useAppContext, pwd, routes, metaName, config, hookRunner, onFallback, getRenderHandlerOptions, render;
16
16
  return _ts_generator(this, function(_state) {
17
17
  switch (_state.label) {
18
18
  case 0:
@@ -54,7 +54,8 @@ var injectRenderHandlerPlugin = function(param) {
54
54
  routes,
55
55
  config,
56
56
  metaName,
57
- cacheConfig: ((_config_render = config.render) === null || _config_render === void 0 ? void 0 : _config_render.cache) || cacheConfig,
57
+ // TODO: support modern.server.ts cache config
58
+ cacheConfig,
58
59
  staticGenerate,
59
60
  onFallback
60
61
  };
@@ -35,7 +35,6 @@ var ServerBase = /* @__PURE__ */ function() {
35
35
  cliConfig,
36
36
  serverConfig: serverConfig || {}
37
37
  });
38
- _this.addPlugins(mergedConfig.plugins || []);
39
38
  return [
40
39
  4,
41
40
  server.run({
@@ -1,5 +1,5 @@
1
1
  import path from "path";
2
- import { fs, DEFAULT_SERVER_CONFIG, OUTPUT_CONFIG_FILE, lodash as _, compatibleRequire, ensureAbsolutePath, requireExistModule } from "@modern-js/utils";
2
+ import { fs, DEFAULT_SERVER_CONFIG, OUTPUT_CONFIG_FILE, lodash as _, chalk, compatibleRequire, ensureAbsolutePath, getMeta, requireExistModule } from "@modern-js/utils";
3
3
  import { parse } from "flatted";
4
4
  const requireConfig = async (serverConfigPath) => {
5
5
  if (fs.pathExistsSync(serverConfigPath)) {
@@ -19,12 +19,16 @@ async function loadServerConfigOld(pwd, configFile) {
19
19
  const serverConfig = await requireConfig(serverConfigPath);
20
20
  return serverConfig;
21
21
  }
22
- async function loadServerRuntimeConfig(pwd, oldServerFile = DEFAULT_SERVER_CONFIG, newServerConfigPath) {
22
+ async function loadServerRuntimeConfig(pwd, oldServerFile = DEFAULT_SERVER_CONFIG, newServerConfigPath, metaName) {
23
23
  const newServerConfig = newServerConfigPath && await loadServerConfigNew(newServerConfigPath);
24
24
  if (newServerConfig) {
25
25
  return newServerConfig;
26
26
  }
27
27
  const oldServerConfig = await loadServerConfigOld(pwd, oldServerFile);
28
+ if (oldServerConfig) {
29
+ const meta = getMeta(metaName);
30
+ console.warn(`${chalk.red("\n[Warning]")} ${chalk.yellow.bold(`\`${oldServerFile}\``)} is no longer maintained. To extend the server, please migrate to ${chalk.yellow.bold(`\`server/${meta}.server.ts\``)};`);
31
+ }
28
32
  return oldServerConfig;
29
33
  }
30
34
  function loadServerCliConfig(pwd, defaultConfig = {}) {
@@ -7,14 +7,26 @@ import { writeReadableStreamToWritable as writeReadableStreamToWritable2 } from
7
7
  installGlobals();
8
8
  const createWebRequest = (req, res, body) => {
9
9
  const headerRecord = [];
10
- const len = req.rawHeaders.length;
11
- for (let i = 0; i < len; i += 2) {
12
- const key = req.rawHeaders[i];
13
- if (!key.startsWith(":")) {
14
- headerRecord.push([
15
- key,
16
- req.rawHeaders[i + 1]
17
- ]);
10
+ for (const [key, value] of Object.entries(req.headers)) {
11
+ if (key.startsWith(":")) {
12
+ continue;
13
+ }
14
+ if (Array.isArray(value)) {
15
+ for (const item of value) {
16
+ if (item !== void 0) {
17
+ headerRecord.push([
18
+ key,
19
+ item
20
+ ]);
21
+ }
22
+ }
23
+ } else if (value !== void 0) {
24
+ if (typeof value === "string") {
25
+ headerRecord.push([
26
+ key,
27
+ value
28
+ ]);
29
+ }
18
30
  }
19
31
  }
20
32
  const { method } = req;
@@ -68,19 +68,14 @@ class CustomServer {
68
68
  }
69
69
  };
70
70
  }
71
- async getServerMiddleware(renderMiddlewares) {
71
+ async getServerMiddleware() {
72
72
  const serverMiddleware = await this.serverMiddlewarePromise;
73
73
  if (!serverMiddleware || !isFunction(serverMiddleware) && !isArray(serverMiddleware)) {
74
- return renderMiddlewares;
74
+ return;
75
75
  }
76
76
  if (Array.isArray(serverMiddleware)) {
77
77
  const unstableMiddlewares = getServerMidFromUnstableMid(serverMiddleware);
78
- return [
79
- ...renderMiddlewares || [],
80
- ...unstableMiddlewares
81
- ];
82
- } else if (renderMiddlewares) {
83
- return renderMiddlewares;
78
+ return unstableMiddlewares;
84
79
  }
85
80
  return async (c, next) => {
86
81
  var _c_env_node_res, _c_env_node, _c_env;
@@ -106,9 +101,8 @@ class CustomServer {
106
101
  }
107
102
  };
108
103
  }
109
- constructor(hooks, serverBase, pwd) {
104
+ constructor(hooks, pwd) {
110
105
  this.hooks = hooks;
111
- this.serverBase = serverBase;
112
106
  const webExtension = [];
113
107
  this.serverMiddlewarePromise = hooks.prepareWebServer.call({
114
108
  pwd,
@@ -5,12 +5,14 @@ import { processedByPlugin } from "./processedBy";
5
5
  import { logPlugin } from "./log";
6
6
  import { createDefaultPlugins } from "./default";
7
7
  import { compatPlugin, handleSetupResult } from "./compat";
8
+ import { injectConfigMiddlewarePlugin } from "./middlewares";
8
9
  export {
9
10
  compatPlugin,
10
11
  createDefaultPlugins,
11
12
  faviconPlugin,
12
13
  getRenderHandler,
13
14
  handleSetupResult,
15
+ injectConfigMiddlewarePlugin,
14
16
  injectRenderHandlerPlugin,
15
17
  injectServerTiming,
16
18
  injectloggerPlugin,
@@ -0,0 +1,19 @@
1
+ const injectConfigMiddlewarePlugin = (configMiddlewares = [], configRenderMiddlewares = []) => ({
2
+ name: "@modern-js/plugin-inject-config-middleware",
3
+ setup(api) {
4
+ return {
5
+ prepare() {
6
+ const { middlewares, renderMiddlewares } = api.useAppContext();
7
+ configMiddlewares.forEach((m) => {
8
+ middlewares.push(m);
9
+ });
10
+ configRenderMiddlewares.forEach((m) => {
11
+ renderMiddlewares.push(m);
12
+ });
13
+ }
14
+ };
15
+ }
16
+ });
17
+ export {
18
+ injectConfigMiddlewarePlugin
19
+ };
@@ -1,7 +1,7 @@
1
1
  import { MAIN_ENTRY_NAME } from "@modern-js/utils/universal/constants";
2
2
  import { getLoaderCtx } from "../../helper";
3
3
  import { sortRoutes } from "../../utils";
4
- import { CustomServer, getServerMidFromUnstableMid } from "../customServer";
4
+ import { CustomServer } from "../customServer";
5
5
  import { requestLatencyMiddleware } from "../monitors";
6
6
  export * from "./inject";
7
7
  const renderPlugin = () => ({
@@ -9,15 +9,13 @@ const renderPlugin = () => ({
9
9
  setup(api) {
10
10
  return {
11
11
  async prepare() {
12
- var _config_render;
13
- const { middlewares, routes, render, distDirectory: pwd, serverBase } = api.useAppContext();
12
+ const { middlewares, routes, render, distDirectory: pwd, renderMiddlewares } = api.useAppContext();
14
13
  const hooks = api.getHooks();
15
14
  const config = api.useConfigContext();
16
15
  if (!routes) {
17
16
  return;
18
17
  }
19
- const customServer = new CustomServer(hooks, serverBase, pwd);
20
- const serverMiddleware = ((_config_render = config.render) === null || _config_render === void 0 ? void 0 : _config_render.middleware) && getServerMidFromUnstableMid(config.render.middleware);
18
+ const customServer = new CustomServer(hooks, pwd);
21
19
  const pageRoutes = getPageRoutes(routes);
22
20
  middlewares.push({
23
21
  name: "page-latency",
@@ -35,7 +33,14 @@ const renderPlugin = () => ({
35
33
  handler: customServerHookMiddleware
36
34
  });
37
35
  }
38
- const customServerMiddleware = await customServer.getServerMiddleware(serverMiddleware);
36
+ renderMiddlewares === null || renderMiddlewares === void 0 ? void 0 : renderMiddlewares.forEach((m) => {
37
+ middlewares.push({
38
+ name: m.name,
39
+ path: urlPath,
40
+ handler: m.handler
41
+ });
42
+ });
43
+ const customServerMiddleware = await customServer.getServerMiddleware();
39
44
  customServerMiddleware && middlewares.push({
40
45
  name: "custom-server-middleware",
41
46
  path: urlPath,
@@ -4,7 +4,6 @@ const injectRenderHandlerPlugin = ({ staticGenerate, cacheConfig }) => ({
4
4
  setup(api) {
5
5
  return {
6
6
  async prepare() {
7
- var _config_render;
8
7
  const { distDirectory: pwd, routes, metaName } = api.useAppContext();
9
8
  const config = api.useConfigContext();
10
9
  const hookRunner = api.useHookRunners();
@@ -23,7 +22,8 @@ const injectRenderHandlerPlugin = ({ staticGenerate, cacheConfig }) => ({
23
22
  routes,
24
23
  config,
25
24
  metaName,
26
- cacheConfig: ((_config_render = config.render) === null || _config_render === void 0 ? void 0 : _config_render.cache) || cacheConfig,
25
+ // TODO: support modern.server.ts cache config
26
+ cacheConfig,
27
27
  staticGenerate,
28
28
  onFallback
29
29
  };
@@ -18,7 +18,6 @@ class ServerBase {
18
18
  cliConfig,
19
19
  serverConfig: serverConfig || {}
20
20
  });
21
- this.addPlugins(mergedConfig.plugins || []);
22
21
  const { serverContext } = await server.run({
23
22
  plugins: this.plugins,
24
23
  options: this.options,
@@ -1,3 +1,3 @@
1
1
  import type { CliConfig, ServerConfig, UserConfig } from '../../../types';
2
- export declare function loadServerRuntimeConfig(pwd: string, oldServerFile?: string, newServerConfigPath?: string): Promise<ServerConfig | undefined>;
2
+ export declare function loadServerRuntimeConfig(pwd: string, oldServerFile?: string, newServerConfigPath?: string, metaName?: string): Promise<ServerConfig | undefined>;
3
3
  export declare function loadServerCliConfig(pwd: string, defaultConfig?: UserConfig): CliConfig;
@@ -3,8 +3,8 @@ export { AGGRED_DIR } from './constants';
3
3
  export type { ServerBase, ServerBaseOptions } from './serverBase';
4
4
  export { createServerBase } from './serverBase';
5
5
  export { useHonoContext } from './context';
6
- export { Hono, type MiddlewareHandler } from 'hono';
7
- export type { Middleware, Context, Next, HonoRequest as InternalRequest, ServerEnv, ServerManifest, ServerLoaderBundle, } from './types';
6
+ export { Hono } from 'hono';
7
+ export type { Middleware, MiddlewareHandler, Context, Next, HonoRequest as InternalRequest, ServerEnv, ServerManifest, ServerLoaderBundle, } from './types';
8
8
  export { getLoaderCtx } from './helper';
9
9
  export * from './plugins';
10
10
  export * from './types/plugins';
@@ -1,13 +1,11 @@
1
1
  import type { ServerRoute, UnstableMiddleware } from '@modern-js/types';
2
2
  import type { ServerNodeEnv } from '../../adapters/node/hono';
3
- import type { ServerBase } from '../../serverBase';
4
3
  import type { Middleware, ServerEnv, ServerPluginHooks } from '../../types';
5
4
  export declare class CustomServer {
6
5
  private hooks;
7
6
  private serverMiddlewarePromise;
8
- private serverBase;
9
- constructor(hooks: ServerPluginHooks, serverBase: ServerBase, pwd: string);
7
+ constructor(hooks: ServerPluginHooks, pwd: string);
10
8
  getHookMiddleware(entryName: string, routes: ServerRoute[]): Middleware<ServerEnv>;
11
- getServerMiddleware(renderMiddlewares?: Middleware<ServerNodeEnv & ServerEnv>[]): Promise<Middleware<ServerNodeEnv & ServerEnv> | Array<Middleware<ServerNodeEnv & ServerEnv>> | undefined>;
9
+ getServerMiddleware(): Promise<Middleware<ServerNodeEnv & ServerEnv> | Array<Middleware<ServerNodeEnv & ServerEnv>> | undefined>;
12
10
  }
13
11
  export declare function getServerMidFromUnstableMid(serverMiddleware: UnstableMiddleware[]): Array<Middleware<ServerNodeEnv & ServerEnv>>;
@@ -5,3 +5,4 @@ export { processedByPlugin } from './processedBy';
5
5
  export { logPlugin } from './log';
6
6
  export { createDefaultPlugins, type CreateDefaultPluginsOptions, } from './default';
7
7
  export { compatPlugin, handleSetupResult } from './compat';
8
+ export { injectConfigMiddlewarePlugin } from './middlewares';
@@ -0,0 +1,2 @@
1
+ import type { MiddlewareObj, ServerPluginLegacy } from '../types';
2
+ export declare const injectConfigMiddlewarePlugin: (configMiddlewares?: MiddlewareObj[], configRenderMiddlewares?: MiddlewareObj[]) => ServerPluginLegacy;
@@ -1,6 +1,6 @@
1
1
  import type { Server as NodeServer } from 'http';
2
2
  import type { Http2SecureServer } from 'node:http2';
3
- import type { CacheOption, Container, HttpMethodDecider, Logger, Metrics, MiddlewareContext, Reporter, ServerRoute, UnstableMiddleware } from '@modern-js/types';
3
+ import type { CacheOption, Container, HttpMethodDecider, Logger, Metrics, MiddlewareContext, Reporter, ServerRoute } from '@modern-js/types';
4
4
  import type { MiddlewareHandler } from 'hono';
5
5
  import type { UserConfig } from '../config';
6
6
  import type { Render } from '../render';
@@ -36,15 +36,15 @@ export type WebServerStartInput = {
36
36
  export type WebAdapter = (ctx: MiddlewareContext) => void | Promise<void>;
37
37
  /** Plugin Api */
38
38
  type MiddlewareOrder = 'pre' | 'post' | 'default';
39
- export type Middleware = {
39
+ export type MiddlewareObj = {
40
40
  name: string;
41
41
  path?: string;
42
42
  method?: 'options' | 'get' | 'post' | 'put' | 'delete' | 'patch' | 'all';
43
43
  handler: MiddlewareHandler | MiddlewareHandler[];
44
- before?: Array<Middleware['name']>;
44
+ before?: Array<MiddlewareObj['name']>;
45
45
  order?: MiddlewareOrder;
46
46
  };
47
- export type ServerMiddleware = Middleware;
47
+ export type ServerMiddleware = MiddlewareObj;
48
48
  export interface GetRenderHandlerOptions {
49
49
  pwd: string;
50
50
  routes: ServerRoute[];
@@ -56,7 +56,8 @@ export interface GetRenderHandlerOptions {
56
56
  }
57
57
  declare module '@modern-js/types' {
58
58
  interface ISAppContext {
59
- middlewares: Middleware[];
59
+ renderMiddlewares: MiddlewareObj[];
60
+ middlewares: MiddlewareObj[];
60
61
  metaName: string;
61
62
  getRenderOptions?: GetRenderHandlerOptions;
62
63
  render?: Render;
@@ -68,12 +69,8 @@ export type CacheConfig = {
68
69
  strategy: CacheOption;
69
70
  container?: Container;
70
71
  };
71
- type RenderMiddleware = UnstableMiddleware;
72
- export interface RenderConfig {
73
- cache?: CacheConfig;
74
- middleware?: RenderMiddleware[];
75
- }
76
72
  export type ServerConfig = {
77
- render?: RenderConfig;
73
+ renderMiddlewares?: MiddlewareObj[];
74
+ middlewares?: MiddlewareObj[];
78
75
  plugins?: (ServerPlugin | ServerPluginLegacy)[];
79
76
  } & UserConfig;
@@ -1,3 +1,3 @@
1
1
  export * from './new';
2
2
  export * from './old';
3
- export type { ServerConfig, CacheConfig, OnFallback, FallbackReason, GetRenderHandlerOptions, FileChangeEvent, FallbackInput, WebServerStartInput, APIServerStartInput, ServerMiddleware, } from './base';
3
+ export type { ServerConfig, CacheConfig, OnFallback, FallbackReason, GetRenderHandlerOptions, FileChangeEvent, FallbackInput, WebServerStartInput, APIServerStartInput, ServerMiddleware, MiddlewareObj, } from './base';
@@ -2,7 +2,7 @@ import type { AsyncHook, AsyncPipelineHook, ServerContext as BaseServerContext,
2
2
  import type { Hooks } from '@modern-js/plugin-v2/server';
3
3
  import type { AfterMatchContext, AfterRenderContext, AfterStreamingRenderContext, ISAppContext, UnstableMiddleware } from '@modern-js/types';
4
4
  import type { MiddlewareHandler } from 'hono';
5
- import type { Middleware } from './base';
5
+ import type { MiddlewareObj } from './base';
6
6
  import type { APIServerStartInput, FallbackInput, ServerConfig, WebAdapter, WebServerStartInput } from './base';
7
7
  export type FallbackFn = (input: FallbackInput) => Promise<FallbackInput>;
8
8
  export type PrepareWebServerFn = (input: WebServerStartInput) => Promise<WebAdapter | Array<UnstableMiddleware> | null>;
@@ -13,7 +13,7 @@ export type AfterStreamingRenderContextFn = (ctx: AfterStreamingRenderContext) =
13
13
  export interface ServerPluginExtends extends BaseServerPluginExtends {
14
14
  config: ServerConfig;
15
15
  extendContext: {
16
- middlewares: Middleware[];
16
+ middlewares: MiddlewareObj[];
17
17
  };
18
18
  extendApi: {
19
19
  setAppContext: (c: ISAppContext) => void;
@@ -63,4 +63,4 @@ type ServerVariables = {
63
63
  export type ServerEnv = {
64
64
  Variables: ServerVariables;
65
65
  };
66
- export type { Context, Env, HonoRequest, Next, MiddlewareHandler as Middleware, } from 'hono';
66
+ export type { Context, Env, HonoRequest, Next, MiddlewareHandler, MiddlewareHandler as Middleware, } from 'hono';
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "modern",
16
16
  "modern.js"
17
17
  ],
18
- "version": "2.67.3",
18
+ "version": "2.67.4",
19
19
  "jsnext:source": "./src/index.ts",
20
20
  "types": "./dist/types/index.d.ts",
21
21
  "main": "./dist/cjs/index.js",
@@ -54,10 +54,10 @@
54
54
  "flatted": "^3.2.9",
55
55
  "hono": "^3.12.2",
56
56
  "ts-deepmerge": "7.0.2",
57
- "@modern-js/plugin": "2.67.3",
58
- "@modern-js/plugin-v2": "2.67.3",
59
- "@modern-js/runtime-utils": "2.67.3",
60
- "@modern-js/utils": "2.67.3"
57
+ "@modern-js/plugin": "2.67.4",
58
+ "@modern-js/plugin-v2": "2.67.4",
59
+ "@modern-js/runtime-utils": "2.67.4",
60
+ "@modern-js/utils": "2.67.4"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@types/cloneable-readable": "^2.0.3",
@@ -68,9 +68,9 @@
68
68
  "jest": "^29",
69
69
  "ts-jest": "^29.1.0",
70
70
  "typescript": "^5",
71
- "@modern-js/types": "2.67.3",
72
- "@scripts/jest-config": "2.66.0",
73
- "@scripts/build": "2.66.0"
71
+ "@modern-js/types": "2.67.4",
72
+ "@scripts/build": "2.66.0",
73
+ "@scripts/jest-config": "2.66.0"
74
74
  },
75
75
  "sideEffects": false,
76
76
  "publishConfig": {