@modern-js/prod-server 2.6.0 → 2.7.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 (31) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/dist/cjs/index.js +2 -2
  3. package/dist/cjs/libs/{serve-file.js → serveFile.js} +6 -7
  4. package/dist/cjs/server/index.js +6 -4
  5. package/dist/cjs/server/{modern-server.js → modernServer.js} +25 -23
  6. package/dist/cjs/server/{modern-server-split.js → modernServerSplit.js} +8 -8
  7. package/dist/cjs/utils.js +4 -13
  8. package/dist/cjs/{worker-server.js → workerServer.js} +3 -3
  9. package/dist/esm/index.js +1 -1
  10. package/dist/esm/libs/{serve-file.js → serveFile.js} +4 -5
  11. package/dist/esm/server/index.js +5 -3
  12. package/dist/esm/server/{modern-server.js → modernServer.js} +18 -15
  13. package/dist/esm/server/{modern-server-split.js → modernServerSplit.js} +1 -1
  14. package/dist/esm/utils.js +4 -8
  15. package/dist/esm-node/index.js +1 -1
  16. package/dist/esm-node/libs/{serve-file.js → serveFile.js} +3 -4
  17. package/dist/esm-node/server/index.js +5 -3
  18. package/dist/esm-node/server/{modern-server.js → modernServer.js} +21 -19
  19. package/dist/esm-node/server/{modern-server-split.js → modernServerSplit.js} +1 -1
  20. package/dist/esm-node/utils.js +4 -12
  21. package/dist/types/index.d.ts +1 -1
  22. package/dist/types/libs/context/context.d.ts +1 -1
  23. package/dist/types/libs/{serve-file.d.ts → serveFile.d.ts} +1 -2
  24. package/dist/types/server/{modern-server.d.ts → modernServer.d.ts} +1 -1
  25. package/dist/types/type.d.ts +8 -1
  26. package/dist/types/utils.d.ts +2 -3
  27. package/package.json +12 -12
  28. /package/dist/esm/{worker-server.js → workerServer.js} +0 -0
  29. /package/dist/esm-node/{worker-server.js → workerServer.js} +0 -0
  30. /package/dist/types/server/{modern-server-split.d.ts → modernServerSplit.d.ts} +0 -0
  31. /package/dist/types/{worker-server.d.ts → workerServer.d.ts} +0 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,31 @@
1
1
  # @modern-js/prod-server
2
2
 
3
+ ## 2.7.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 84bfb439b8: feat: support custom apiDir, lambdaDir and style of writing for bff
8
+ feat: 支持定制 api 目录,lambda 目录,bff 的写法
9
+
10
+ ### Patch Changes
11
+
12
+ - 7fff9020e1: chore: make file naming consistent
13
+
14
+ chore: 统一文件命名为小驼峰格式
15
+
16
+ - 1eea234fdd: chore: make test files naming consistent
17
+
18
+ chore: 统一测试文件命名为小驼峰格式
19
+
20
+ - Updated dependencies [0f15fc597c]
21
+ - Updated dependencies [dcad887024]
22
+ - Updated dependencies [a4672f7c16]
23
+ - Updated dependencies [7fff9020e1]
24
+ - Updated dependencies [1eea234fdd]
25
+ - Updated dependencies [84bfb439b8]
26
+ - @modern-js/utils@2.7.0
27
+ - @modern-js/server-core@2.7.0
28
+
3
29
  ## 2.6.0
4
30
 
5
31
  ### Patch Changes
package/dist/cjs/index.js CHANGED
@@ -18,14 +18,14 @@ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "defau
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var src_exports = {};
20
20
  __export(src_exports, {
21
- ModernServer: () => import_modern_server.ModernServer,
21
+ ModernServer: () => import_modernServer.ModernServer,
22
22
  Server: () => import_server.Server,
23
23
  createProxyHandler: () => import_proxy.createProxyHandler,
24
24
  default: () => src_default
25
25
  });
26
26
  module.exports = __toCommonJS(src_exports);
27
27
  var import_server = require("./server");
28
- var import_modern_server = require("./server/modern-server");
28
+ var import_modernServer = require("./server/modernServer");
29
29
  var import_proxy = require("./libs/proxy");
30
30
  __reExport(src_exports, require("./type"), module.exports);
31
31
  __reExport(src_exports, require("./constants"), module.exports);
@@ -25,17 +25,17 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
25
25
  mod
26
26
  ));
27
27
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
- var serve_file_exports = {};
29
- __export(serve_file_exports, {
28
+ var serveFile_exports = {};
29
+ __export(serveFile_exports, {
30
30
  createStaticFileHandler: () => createStaticFileHandler,
31
31
  faviconFallbackHandler: () => faviconFallbackHandler
32
32
  });
33
- module.exports = __toCommonJS(serve_file_exports);
33
+ module.exports = __toCommonJS(serveFile_exports);
34
34
  var import_serve_static = __toESM(require("serve-static"));
35
35
  var import_utils = require("@modern-js/utils");
36
- var import_utils2 = require("../utils");
37
36
  const removedPrefix = (req, prefix) => {
38
- if ((0, import_utils2.useLocalPrefix)(prefix)) {
37
+ const useLocalPrefix = !prefix.includes(".");
38
+ if (useLocalPrefix) {
39
39
  req.url = req.url.slice(prefix.length);
40
40
  return () => {
41
41
  req.url = prefix + req.url;
@@ -53,11 +53,10 @@ const faviconFallbackHandler = (context, next) => {
53
53
  next();
54
54
  }
55
55
  };
56
- const createStaticFileHandler = (rules, output = {}) => (
56
+ const createStaticFileHandler = (rules, assetPrefix = "/") => (
57
57
  // eslint-disable-next-line consistent-return
58
58
  async (context, next) => {
59
59
  const { url: requestUrl, req, res } = context;
60
- const { assetPrefix = "/" } = output;
61
60
  const hitRule = rules.find((item) => {
62
61
  if ((0, import_utils.isString)(item.path) && requestUrl.startsWith(item.path)) {
63
62
  return true;
@@ -37,10 +37,10 @@ var import_server_core = require("@modern-js/server-core");
37
37
  var import_metrics = require("../libs/metrics");
38
38
  var import_loadConfig = require("../libs/loadConfig");
39
39
  var import_utils2 = require("../utils");
40
- var import_modern_server_split = require("./modern-server-split");
40
+ var import_modernServerSplit = require("./modernServerSplit");
41
41
  class Server {
42
42
  constructor(options) {
43
- this.serverImpl = import_modern_server_split.createProdServer;
43
+ this.serverImpl = import_modernServerSplit.createProdServer;
44
44
  options.logger = options.logger || new import_utils.Logger({
45
45
  level: "warn"
46
46
  });
@@ -172,14 +172,16 @@ class Server {
172
172
  }
173
173
  initAppContext() {
174
174
  const { options } = this;
175
- const { pwd: appDirectory, plugins = [], config } = options;
175
+ const { pwd: appDirectory, plugins = [], config, appContext } = options;
176
176
  const serverPlugins = plugins.map((p) => ({
177
177
  server: p
178
178
  }));
179
179
  return {
180
180
  appDirectory,
181
+ apiDirectory: appContext == null ? void 0 : appContext.apiDirectory,
182
+ lambdaDirectory: appContext == null ? void 0 : appContext.lambdaDirectory,
183
+ sharedDirectory: (appContext == null ? void 0 : appContext.sharedDirectory) || import_path.default.resolve(appDirectory, import_utils.SHARED_DIR),
181
184
  distDirectory: import_path.default.join(appDirectory, config.output.path || "dist"),
182
- sharedDirectory: import_path.default.resolve(appDirectory, import_utils.SHARED_DIR),
183
185
  plugins: serverPlugins
184
186
  };
185
187
  }
@@ -25,17 +25,17 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
25
25
  mod
26
26
  ));
27
27
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
- var modern_server_exports = {};
29
- __export(modern_server_exports, {
28
+ var modernServer_exports = {};
29
+ __export(modernServer_exports, {
30
30
  ModernServer: () => ModernServer
31
31
  });
32
- module.exports = __toCommonJS(modern_server_exports);
32
+ module.exports = __toCommonJS(modernServer_exports);
33
33
  var import_http = require("http");
34
34
  var import_path = __toESM(require("path"));
35
35
  var import_utils = require("@modern-js/utils");
36
36
  var import_route = require("../libs/route");
37
37
  var import_render = require("../libs/render");
38
- var import_serve_file = require("../libs/serve-file");
38
+ var import_serveFile = require("../libs/serveFile");
39
39
  var import_utils2 = require("../utils");
40
40
  var reader = __toESM(require("../libs/render/reader"));
41
41
  var import_proxy = require("../libs/proxy");
@@ -43,7 +43,6 @@ var import_context = require("../libs/context");
43
43
  var import_template = require("../libs/hook-api/template");
44
44
  var import_constants = require("../constants");
45
45
  var import_hook_api = require("../libs/hook-api");
46
- const API_DIR = "./api";
47
46
  const SERVER_DIR = "./server";
48
47
  class ModernServer {
49
48
  constructor({
@@ -78,7 +77,7 @@ class ModernServer {
78
77
  }
79
78
  // server prepare
80
79
  async onInit(runner, app) {
81
- var _a, _b;
80
+ var _a, _b, _c;
82
81
  this.runner = runner;
83
82
  const { distDir, staticGenerate, conf } = this;
84
83
  (0, import_utils2.debug)("final server conf", this.conf);
@@ -97,19 +96,6 @@ class ModernServer {
97
96
  this.warmupSSRBundle();
98
97
  await this.prepareFrameHandler();
99
98
  await this.prepareBeforeRouteHandler(usageRoutes, distDir);
100
- const staticPathRegExp = (0, import_utils2.getStaticReg)(
101
- this.conf.output || {},
102
- this.conf.html
103
- );
104
- this.staticFileHandler = (0, import_serve_file.createStaticFileHandler)(
105
- [
106
- {
107
- path: staticPathRegExp,
108
- target: distDir
109
- }
110
- ],
111
- this.conf.output
112
- );
113
99
  const ssrConfig = (_b = this.conf.server) == null ? void 0 : _b.ssr;
114
100
  const forceCSR = typeof ssrConfig === "object" ? ssrConfig.forceCSR : false;
115
101
  this.routeRenderHandler = (0, import_render.createRenderHandler)({
@@ -118,8 +104,8 @@ class ModernServer {
118
104
  forceCSR
119
105
  });
120
106
  await this.setupBeforeProdMiddleware();
121
- this.addHandler(this.staticFileHandler);
122
- this.addHandler(import_serve_file.faviconFallbackHandler);
107
+ this.addHandler(this.setupStaticMiddleware((_c = this.conf.output) == null ? void 0 : _c.assetPrefix));
108
+ this.addHandler(import_serveFile.faviconFallbackHandler);
123
109
  this.addBeforeRouteHandler();
124
110
  this.addHandler(this.routeHandler.bind(this));
125
111
  this.compose();
@@ -212,13 +198,12 @@ class ModernServer {
212
198
  const { getMiddlewares, ...collector } = (0, import_utils2.createMiddlewareCollecter)();
213
199
  await runner.gather(collector);
214
200
  const { api: pluginAPIExt, web: pluginWebExt } = getMiddlewares();
215
- const apiDir = import_path.default.join(workDir, API_DIR);
216
201
  const serverDir = import_path.default.join(workDir, SERVER_DIR);
217
202
  if (await import_utils.fs.pathExists(import_path.default.join(serverDir)) && !onlyApi) {
218
203
  const webExtension = (0, import_utils2.mergeExtension)(pluginWebExt);
219
204
  this.frameWebHandler = await this.prepareWebHandler(webExtension);
220
205
  }
221
- if (import_utils.fs.existsSync(apiDir) && !onlyWeb) {
206
+ if (!onlyWeb) {
222
207
  const apiExtension = (0, import_utils2.mergeExtension)(pluginAPIExt);
223
208
  this.frameAPIHandler = await this.prepareAPIHandler(apiExtension);
224
209
  }
@@ -243,6 +228,7 @@ class ModernServer {
243
228
  pwd: workDir,
244
229
  config: extension,
245
230
  prefix: Array.isArray(prefix) ? prefix[0] : prefix,
231
+ httpMethodDecider: bff == null ? void 0 : bff.httpMethodDecider,
246
232
  render: this.render.bind(this)
247
233
  },
248
234
  { onLast: () => null }
@@ -258,6 +244,22 @@ class ModernServer {
258
244
  this.addHandler(mid);
259
245
  });
260
246
  }
247
+ setupStaticMiddleware(prefix) {
248
+ const staticPathRegExp = (0, import_utils2.getStaticReg)(
249
+ this.conf.output,
250
+ this.conf.html,
251
+ prefix
252
+ );
253
+ return (0, import_serveFile.createStaticFileHandler)(
254
+ [
255
+ {
256
+ path: staticPathRegExp,
257
+ target: this.distDir
258
+ }
259
+ ],
260
+ prefix
261
+ );
262
+ }
261
263
  async handleAPI(context) {
262
264
  const { req, res } = context;
263
265
  if (!this.frameAPIHandler) {
@@ -15,13 +15,13 @@ var __copyProps = (to, from, except, desc) => {
15
15
  return to;
16
16
  };
17
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
- var modern_server_split_exports = {};
19
- __export(modern_server_split_exports, {
18
+ var modernServerSplit_exports = {};
19
+ __export(modernServerSplit_exports, {
20
20
  createProdServer: () => createProdServer
21
21
  });
22
- module.exports = __toCommonJS(modern_server_split_exports);
23
- var import_modern_server = require("./modern-server");
24
- class ModernSSRServer extends import_modern_server.ModernServer {
22
+ module.exports = __toCommonJS(modernServerSplit_exports);
23
+ var import_modernServer = require("./modernServer");
24
+ class ModernSSRServer extends import_modernServer.ModernServer {
25
25
  prepareAPIHandler(_) {
26
26
  return null;
27
27
  }
@@ -29,7 +29,7 @@ class ModernSSRServer extends import_modern_server.ModernServer {
29
29
  return this.render404(context);
30
30
  }
31
31
  }
32
- class ModernAPIServer extends import_modern_server.ModernServer {
32
+ class ModernAPIServer extends import_modernServer.ModernServer {
33
33
  prepareWebHandler(_) {
34
34
  return null;
35
35
  }
@@ -37,7 +37,7 @@ class ModernAPIServer extends import_modern_server.ModernServer {
37
37
  return routes.filter((route) => route.isApi);
38
38
  }
39
39
  }
40
- class ModernWebServer extends import_modern_server.ModernServer {
40
+ class ModernWebServer extends import_modernServer.ModernServer {
41
41
  async warmupSSRBundle() {
42
42
  return null;
43
43
  }
@@ -57,7 +57,7 @@ const createProdServer = (options) => {
57
57
  } else if (options.webOnly) {
58
58
  return new ModernWebServer(options);
59
59
  } else {
60
- return new import_modern_server.ModernServer(options);
60
+ return new import_modernServer.ModernServer(options);
61
61
  }
62
62
  };
63
63
  // Annotate the CommonJS export names for ESM import in node:
package/dist/cjs/utils.js CHANGED
@@ -25,8 +25,7 @@ __export(utils_exports, {
25
25
  isRedirect: () => isRedirect,
26
26
  mergeExtension: () => mergeExtension,
27
27
  noop: () => noop,
28
- prepareFavicons: () => prepareFavicons,
29
- useLocalPrefix: () => useLocalPrefix
28
+ prepareFavicons: () => prepareFavicons
30
29
  });
31
30
  module.exports = __toCommonJS(utils_exports);
32
31
  var import_utils = require("@modern-js/utils");
@@ -89,16 +88,9 @@ const createMiddlewareCollecter = () => {
89
88
  addAPIMiddleware
90
89
  };
91
90
  };
92
- const useLocalPrefix = (url) => {
93
- return (0, import_utils.isProd)() && !url.includes(".");
94
- };
95
- const getStaticReg = (output = {}, html = {}) => {
96
- const {
97
- distPath: { css: cssPath, js: jsPath, media: mediaPath } = {},
98
- assetPrefix = "/"
99
- } = output;
91
+ const getStaticReg = (output = {}, html = {}, prefix = "/") => {
92
+ const { distPath: { css: cssPath, js: jsPath, media: mediaPath } = {} } = output;
100
93
  const { favicon, faviconByEntries } = html;
101
- const prefix = useLocalPrefix(assetPrefix) ? assetPrefix : "";
102
94
  const favicons = prepareFavicons(favicon, faviconByEntries);
103
95
  const staticFiles = [cssPath, jsPath, mediaPath].filter((v) => Boolean(v));
104
96
  const staticReg = ["static/", "upload/", ...staticFiles];
@@ -147,6 +139,5 @@ const isRedirect = (code) => {
147
139
  isRedirect,
148
140
  mergeExtension,
149
141
  noop,
150
- prepareFavicons,
151
- useLocalPrefix
142
+ prepareFavicons
152
143
  });
@@ -15,12 +15,12 @@ var __copyProps = (to, from, except, desc) => {
15
15
  return to;
16
16
  };
17
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
- var worker_server_exports = {};
19
- __export(worker_server_exports, {
18
+ var workerServer_exports = {};
19
+ __export(workerServer_exports, {
20
20
  createHandler: () => createHandler,
21
21
  handleUrl: () => handleUrl
22
22
  });
23
- module.exports = __toCommonJS(worker_server_exports);
23
+ module.exports = __toCommonJS(workerServer_exports);
24
24
  var import_logger = require("./libs/logger");
25
25
  var import_route = require("./libs/route");
26
26
  var import_metrics = require("./libs/metrics");
package/dist/esm/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { Server } from "./server";
2
- import { ModernServer } from "./server/modern-server";
2
+ import { ModernServer } from "./server/modernServer";
3
3
  import { createProxyHandler } from "./libs/proxy";
4
4
  export * from "./type";
5
5
  export * from "./constants";
@@ -124,9 +124,9 @@ var __generator = this && this.__generator || function(thisArg, body) {
124
124
  };
125
125
  import serve from "serve-static";
126
126
  import { isString, isRegExp } from "@modern-js/utils";
127
- import { useLocalPrefix } from "../utils";
128
127
  var removedPrefix = function(req, prefix) {
129
- if (useLocalPrefix(prefix)) {
128
+ var useLocalPrefix = !prefix.includes(".");
129
+ if (useLocalPrefix) {
130
130
  req.url = req.url.slice(prefix.length);
131
131
  return function() {
132
132
  req.url = prefix + req.url;
@@ -144,14 +144,13 @@ var faviconFallbackHandler = function(context, next) {
144
144
  }
145
145
  };
146
146
  var createStaticFileHandler = function(rules) {
147
- var output = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
147
+ var assetPrefix = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "/";
148
148
  return function() {
149
149
  var _ref = // eslint-disable-next-line consistent-return
150
150
  _asyncToGenerator(function(context, next) {
151
- var requestUrl, req, res, _output_assetPrefix, assetPrefix, hitRule, resume;
151
+ var requestUrl, req, res, hitRule, resume;
152
152
  return __generator(this, function(_state) {
153
153
  requestUrl = context.url, req = context.req, res = context.res;
154
- _output_assetPrefix = output.assetPrefix, assetPrefix = _output_assetPrefix === void 0 ? "/" : _output_assetPrefix;
155
154
  hitRule = rules.find(function(item) {
156
155
  if (isString(item.path) && requestUrl.startsWith(item.path)) {
157
156
  return true;
@@ -225,7 +225,7 @@ import { serverManager, AppContext, ConfigContext, loadPlugins } from "@modern-j
225
225
  import { metrics as defaultMetrics } from "../libs/metrics";
226
226
  import { loadConfig, getServerConfigPath, requireConfig } from "../libs/loadConfig";
227
227
  import { debug } from "../utils";
228
- import { createProdServer } from "./modern-server-split";
228
+ import { createProdServer } from "./modernServerSplit";
229
229
  var Server = /*#__PURE__*/ function() {
230
230
  "use strict";
231
231
  function Server(options) {
@@ -496,7 +496,7 @@ var Server = /*#__PURE__*/ function() {
496
496
  key: "initAppContext",
497
497
  value: function initAppContext() {
498
498
  var options = this.options;
499
- var appDirectory = options.pwd, _options_plugins = options.plugins, plugins = _options_plugins === void 0 ? [] : _options_plugins, config = options.config;
499
+ var appDirectory = options.pwd, _options_plugins = options.plugins, plugins = _options_plugins === void 0 ? [] : _options_plugins, config = options.config, appContext = options.appContext;
500
500
  var serverPlugins = plugins.map(function(p) {
501
501
  return {
502
502
  server: p
@@ -504,8 +504,10 @@ var Server = /*#__PURE__*/ function() {
504
504
  });
505
505
  return {
506
506
  appDirectory: appDirectory,
507
+ apiDirectory: appContext === null || appContext === void 0 ? void 0 : appContext.apiDirectory,
508
+ lambdaDirectory: appContext === null || appContext === void 0 ? void 0 : appContext.lambdaDirectory,
509
+ sharedDirectory: (appContext === null || appContext === void 0 ? void 0 : appContext.sharedDirectory) || path.resolve(appDirectory, SHARED_DIR),
507
510
  distDirectory: path.join(appDirectory, config.output.path || "dist"),
508
- sharedDirectory: path.resolve(appDirectory, SHARED_DIR),
509
511
  plugins: serverPlugins
510
512
  };
511
513
  }
@@ -201,7 +201,7 @@ import path from "path";
201
201
  import { fs, isPromise, mime, ROUTE_SPEC_FILE } from "@modern-js/utils";
202
202
  import { RouteMatchManager } from "../libs/route";
203
203
  import { createRenderHandler } from "../libs/render";
204
- import { createStaticFileHandler, faviconFallbackHandler } from "../libs/serve-file";
204
+ import { createStaticFileHandler, faviconFallbackHandler } from "../libs/serveFile";
205
205
  import { createErrorDocument, createMiddlewareCollecter, getStaticReg, mergeExtension, noop, debug, isRedirect } from "../utils";
206
206
  import * as reader from "../libs/render/reader";
207
207
  import { createProxyHandler } from "../libs/proxy";
@@ -209,7 +209,6 @@ import { createContext } from "../libs/context";
209
209
  import { templateInjectableStream } from "../libs/hook-api/template";
210
210
  import { AGGRED_DIR, ERROR_DIGEST, ERROR_PAGE_TEXT, RUN_MODE } from "../constants";
211
211
  import { createAfterMatchContext, createAfterRenderContext, createMiddlewareContext } from "../libs/hook-api";
212
- var API_DIR = "./api";
213
212
  var SERVER_DIR = "./server";
214
213
  var ModernServer = /*#__PURE__*/ function() {
215
214
  "use strict";
@@ -232,7 +231,6 @@ var ModernServer = /*#__PURE__*/ function() {
232
231
  _defineProperty(this, "runMode", void 0);
233
232
  _defineProperty(this, "reader", reader);
234
233
  _defineProperty(this, "proxyTarget", void 0);
235
- _defineProperty(this, "staticFileHandler", void 0);
236
234
  _defineProperty(this, "routeRenderHandler", void 0);
237
235
  _defineProperty(this, "beforeRouteHandler", null);
238
236
  _defineProperty(this, "frameWebHandler", null);
@@ -261,7 +259,7 @@ var ModernServer = /*#__PURE__*/ function() {
261
259
  function onInit(runner, app) {
262
260
  var _this = this;
263
261
  return _asyncToGenerator(function() {
264
- var _conf_bff, _this_conf_server, distDir, staticGenerate, conf, usageRoutes, staticPathRegExp, ssrConfig, forceCSR;
262
+ var _conf_bff, _this_conf_server, _this_conf_output, distDir, staticGenerate, conf, usageRoutes, ssrConfig, forceCSR;
265
263
  return __generator(this, function(_state) {
266
264
  switch(_state.label){
267
265
  case 0:
@@ -293,13 +291,6 @@ var ModernServer = /*#__PURE__*/ function() {
293
291
  ];
294
292
  case 2:
295
293
  _state.sent();
296
- staticPathRegExp = getStaticReg(_this.conf.output || {}, _this.conf.html);
297
- _this.staticFileHandler = createStaticFileHandler([
298
- {
299
- path: staticPathRegExp,
300
- target: distDir
301
- }
302
- ], _this.conf.output);
303
294
  ssrConfig = (_this_conf_server = _this.conf.server) === null || _this_conf_server === void 0 ? void 0 : _this_conf_server.ssr;
304
295
  forceCSR = typeof ssrConfig === "object" ? ssrConfig.forceCSR : false;
305
296
  _this.routeRenderHandler = createRenderHandler({
@@ -313,7 +304,7 @@ var ModernServer = /*#__PURE__*/ function() {
313
304
  ];
314
305
  case 3:
315
306
  _state.sent();
316
- _this.addHandler(_this.staticFileHandler);
307
+ _this.addHandler(_this.setupStaticMiddleware((_this_conf_output = _this.conf.output) === null || _this_conf_output === void 0 ? void 0 : _this_conf_output.assetPrefix));
317
308
  _this.addHandler(faviconFallbackHandler);
318
309
  _this.addBeforeRouteHandler();
319
310
  _this.addHandler(_this.routeHandler.bind(_this));
@@ -516,7 +507,7 @@ var ModernServer = /*#__PURE__*/ function() {
516
507
  function prepareFrameHandler(options) {
517
508
  var _this = this;
518
509
  return _asyncToGenerator(function() {
519
- var workDir, runner, _ref, onlyApi, onlyWeb, _createMiddlewareCollecter, getMiddlewares, collector, _getMiddlewares, pluginAPIExt, pluginWebExt, apiDir, serverDir, webExtension, apiExtension;
510
+ var workDir, runner, _ref, onlyApi, onlyWeb, _createMiddlewareCollecter, getMiddlewares, collector, _getMiddlewares, pluginAPIExt, pluginWebExt, serverDir, webExtension, apiExtension;
520
511
  return __generator(this, function(_state) {
521
512
  switch(_state.label){
522
513
  case 0:
@@ -532,7 +523,6 @@ var ModernServer = /*#__PURE__*/ function() {
532
523
  case 1:
533
524
  _state.sent();
534
525
  _getMiddlewares = getMiddlewares(), pluginAPIExt = _getMiddlewares.api, pluginWebExt = _getMiddlewares.web;
535
- apiDir = path.join(workDir, API_DIR);
536
526
  serverDir = path.join(workDir, SERVER_DIR);
537
527
  return [
538
528
  4,
@@ -552,7 +542,7 @@ var ModernServer = /*#__PURE__*/ function() {
552
542
  _this.frameWebHandler = _state.sent();
553
543
  _state.label = 4;
554
544
  case 4:
555
- if (!(fs.existsSync(apiDir) && !onlyWeb)) return [
545
+ if (!!onlyWeb) return [
556
546
  3,
557
547
  6
558
548
  ];
@@ -621,6 +611,7 @@ var ModernServer = /*#__PURE__*/ function() {
621
611
  pwd: workDir,
622
612
  config: extension,
623
613
  prefix: Array.isArray(prefix) ? prefix[0] : prefix,
614
+ httpMethodDecider: bff === null || bff === void 0 ? void 0 : bff.httpMethodDecider,
624
615
  render: _this.render.bind(_this)
625
616
  }, {
626
617
  onLast: function() {
@@ -665,6 +656,18 @@ var ModernServer = /*#__PURE__*/ function() {
665
656
  })();
666
657
  }
667
658
  },
659
+ {
660
+ key: "setupStaticMiddleware",
661
+ value: function setupStaticMiddleware(prefix) {
662
+ var staticPathRegExp = getStaticReg(this.conf.output, this.conf.html, prefix);
663
+ return createStaticFileHandler([
664
+ {
665
+ path: staticPathRegExp,
666
+ target: this.distDir
667
+ }
668
+ ], prefix);
669
+ }
670
+ },
668
671
  {
669
672
  key: "handleAPI",
670
673
  value: function handleAPI(context) {
@@ -230,7 +230,7 @@ var __generator = this && this.__generator || function(thisArg, body) {
230
230
  };
231
231
  }
232
232
  };
233
- import { ModernServer } from "./modern-server";
233
+ import { ModernServer } from "./modernServer";
234
234
  var ModernSSRServer = /*#__PURE__*/ function(ModernServer) {
235
235
  "use strict";
236
236
  _inherits(ModernSSRServer, ModernServer);
package/dist/esm/utils.js CHANGED
@@ -51,7 +51,7 @@ function _unsupportedIterableToArray(o, minLen) {
51
51
  if (n === "Map" || n === "Set") return Array.from(n);
52
52
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
53
53
  }
54
- import { createDebugger, isProd } from "@modern-js/utils";
54
+ import { createDebugger } from "@modern-js/utils";
55
55
  var debug = createDebugger("prod-server");
56
56
  var mergeExtension = function(users) {
57
57
  var output = [];
@@ -85,14 +85,10 @@ var createMiddlewareCollecter = function() {
85
85
  addAPIMiddleware: addAPIMiddleware
86
86
  };
87
87
  };
88
- var useLocalPrefix = function(url) {
89
- return isProd() && !url.includes(".");
90
- };
91
88
  var getStaticReg = function() {
92
- var output = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, html = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
93
- var tmp = output.distPath, _ref = tmp === void 0 ? {} : tmp, cssPath = _ref.css, jsPath = _ref.js, mediaPath = _ref.media, _output_assetPrefix = output.assetPrefix, assetPrefix = _output_assetPrefix === void 0 ? "/" : _output_assetPrefix;
89
+ var output = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, html = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {}, prefix = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : "/";
90
+ var tmp = output.distPath, _ref = tmp === void 0 ? {} : tmp, cssPath = _ref.css, jsPath = _ref.js, mediaPath = _ref.media;
94
91
  var favicon = html.favicon, faviconByEntries = html.faviconByEntries;
95
- var prefix = useLocalPrefix(assetPrefix) ? assetPrefix : "";
96
92
  var favicons = prepareFavicons(favicon, faviconByEntries);
97
93
  var staticFiles = [
98
94
  cssPath,
@@ -144,4 +140,4 @@ var isRedirect = function(code) {
144
140
  308
145
141
  ].includes(code);
146
142
  };
147
- export { createErrorDocument, createMiddlewareCollecter, debug, getStaticReg, headersWithoutCookie, isRedirect, mergeExtension, noop, prepareFavicons, useLocalPrefix };
143
+ export { createErrorDocument, createMiddlewareCollecter, debug, getStaticReg, headersWithoutCookie, isRedirect, mergeExtension, noop, prepareFavicons };
@@ -1,5 +1,5 @@
1
1
  import { Server } from "./server";
2
- import { ModernServer } from "./server/modern-server";
2
+ import { ModernServer } from "./server/modernServer";
3
3
  import { createProxyHandler } from "./libs/proxy";
4
4
  export * from "./type";
5
5
  export * from "./constants";
@@ -1,8 +1,8 @@
1
1
  import serve from "serve-static";
2
2
  import { isString, isRegExp } from "@modern-js/utils";
3
- import { useLocalPrefix } from "../utils";
4
3
  const removedPrefix = (req, prefix) => {
5
- if (useLocalPrefix(prefix)) {
4
+ const useLocalPrefix = !prefix.includes(".");
5
+ if (useLocalPrefix) {
6
6
  req.url = req.url.slice(prefix.length);
7
7
  return () => {
8
8
  req.url = prefix + req.url;
@@ -20,11 +20,10 @@ const faviconFallbackHandler = (context, next) => {
20
20
  next();
21
21
  }
22
22
  };
23
- const createStaticFileHandler = (rules, output = {}) => (
23
+ const createStaticFileHandler = (rules, assetPrefix = "/") => (
24
24
  // eslint-disable-next-line consistent-return
25
25
  async (context, next) => {
26
26
  const { url: requestUrl, req, res } = context;
27
- const { assetPrefix = "/" } = output;
28
27
  const hitRule = rules.find((item) => {
29
28
  if (isString(item.path) && requestUrl.startsWith(item.path)) {
30
29
  return true;
@@ -21,7 +21,7 @@ import {
21
21
  requireConfig
22
22
  } from "../libs/loadConfig";
23
23
  import { debug } from "../utils";
24
- import { createProdServer } from "./modern-server-split";
24
+ import { createProdServer } from "./modernServerSplit";
25
25
  class Server {
26
26
  constructor(options) {
27
27
  this.serverImpl = createProdServer;
@@ -156,14 +156,16 @@ class Server {
156
156
  }
157
157
  initAppContext() {
158
158
  const { options } = this;
159
- const { pwd: appDirectory, plugins = [], config } = options;
159
+ const { pwd: appDirectory, plugins = [], config, appContext } = options;
160
160
  const serverPlugins = plugins.map((p) => ({
161
161
  server: p
162
162
  }));
163
163
  return {
164
164
  appDirectory,
165
+ apiDirectory: appContext == null ? void 0 : appContext.apiDirectory,
166
+ lambdaDirectory: appContext == null ? void 0 : appContext.lambdaDirectory,
167
+ sharedDirectory: (appContext == null ? void 0 : appContext.sharedDirectory) || path.resolve(appDirectory, SHARED_DIR),
165
168
  distDirectory: path.join(appDirectory, config.output.path || "dist"),
166
- sharedDirectory: path.resolve(appDirectory, SHARED_DIR),
167
169
  plugins: serverPlugins
168
170
  };
169
171
  }
@@ -8,7 +8,7 @@ import { createRenderHandler } from "../libs/render";
8
8
  import {
9
9
  createStaticFileHandler,
10
10
  faviconFallbackHandler
11
- } from "../libs/serve-file";
11
+ } from "../libs/serveFile";
12
12
  import {
13
13
  createErrorDocument,
14
14
  createMiddlewareCollecter,
@@ -33,7 +33,6 @@ import {
33
33
  createAfterRenderContext,
34
34
  createMiddlewareContext
35
35
  } from "../libs/hook-api";
36
- const API_DIR = "./api";
37
36
  const SERVER_DIR = "./server";
38
37
  class ModernServer {
39
38
  constructor({
@@ -68,7 +67,7 @@ class ModernServer {
68
67
  }
69
68
  // server prepare
70
69
  async onInit(runner, app) {
71
- var _a, _b;
70
+ var _a, _b, _c;
72
71
  this.runner = runner;
73
72
  const { distDir, staticGenerate, conf } = this;
74
73
  debug("final server conf", this.conf);
@@ -87,19 +86,6 @@ class ModernServer {
87
86
  this.warmupSSRBundle();
88
87
  await this.prepareFrameHandler();
89
88
  await this.prepareBeforeRouteHandler(usageRoutes, distDir);
90
- const staticPathRegExp = getStaticReg(
91
- this.conf.output || {},
92
- this.conf.html
93
- );
94
- this.staticFileHandler = createStaticFileHandler(
95
- [
96
- {
97
- path: staticPathRegExp,
98
- target: distDir
99
- }
100
- ],
101
- this.conf.output
102
- );
103
89
  const ssrConfig = (_b = this.conf.server) == null ? void 0 : _b.ssr;
104
90
  const forceCSR = typeof ssrConfig === "object" ? ssrConfig.forceCSR : false;
105
91
  this.routeRenderHandler = createRenderHandler({
@@ -108,7 +94,7 @@ class ModernServer {
108
94
  forceCSR
109
95
  });
110
96
  await this.setupBeforeProdMiddleware();
111
- this.addHandler(this.staticFileHandler);
97
+ this.addHandler(this.setupStaticMiddleware((_c = this.conf.output) == null ? void 0 : _c.assetPrefix));
112
98
  this.addHandler(faviconFallbackHandler);
113
99
  this.addBeforeRouteHandler();
114
100
  this.addHandler(this.routeHandler.bind(this));
@@ -202,13 +188,12 @@ class ModernServer {
202
188
  const { getMiddlewares, ...collector } = createMiddlewareCollecter();
203
189
  await runner.gather(collector);
204
190
  const { api: pluginAPIExt, web: pluginWebExt } = getMiddlewares();
205
- const apiDir = path.join(workDir, API_DIR);
206
191
  const serverDir = path.join(workDir, SERVER_DIR);
207
192
  if (await fs.pathExists(path.join(serverDir)) && !onlyApi) {
208
193
  const webExtension = mergeExtension(pluginWebExt);
209
194
  this.frameWebHandler = await this.prepareWebHandler(webExtension);
210
195
  }
211
- if (fs.existsSync(apiDir) && !onlyWeb) {
196
+ if (!onlyWeb) {
212
197
  const apiExtension = mergeExtension(pluginAPIExt);
213
198
  this.frameAPIHandler = await this.prepareAPIHandler(apiExtension);
214
199
  }
@@ -233,6 +218,7 @@ class ModernServer {
233
218
  pwd: workDir,
234
219
  config: extension,
235
220
  prefix: Array.isArray(prefix) ? prefix[0] : prefix,
221
+ httpMethodDecider: bff == null ? void 0 : bff.httpMethodDecider,
236
222
  render: this.render.bind(this)
237
223
  },
238
224
  { onLast: () => null }
@@ -248,6 +234,22 @@ class ModernServer {
248
234
  this.addHandler(mid);
249
235
  });
250
236
  }
237
+ setupStaticMiddleware(prefix) {
238
+ const staticPathRegExp = getStaticReg(
239
+ this.conf.output,
240
+ this.conf.html,
241
+ prefix
242
+ );
243
+ return createStaticFileHandler(
244
+ [
245
+ {
246
+ path: staticPathRegExp,
247
+ target: this.distDir
248
+ }
249
+ ],
250
+ prefix
251
+ );
252
+ }
251
253
  async handleAPI(context) {
252
254
  const { req, res } = context;
253
255
  if (!this.frameAPIHandler) {
@@ -1,4 +1,4 @@
1
- import { ModernServer } from "./modern-server";
1
+ import { ModernServer } from "./modernServer";
2
2
  class ModernSSRServer extends ModernServer {
3
3
  prepareAPIHandler(_) {
4
4
  return null;
@@ -1,4 +1,4 @@
1
- import { createDebugger, isProd } from "@modern-js/utils";
1
+ import { createDebugger } from "@modern-js/utils";
2
2
  const debug = createDebugger("prod-server");
3
3
  const mergeExtension = (users) => {
4
4
  const output = [];
@@ -58,16 +58,9 @@ const createMiddlewareCollecter = () => {
58
58
  addAPIMiddleware
59
59
  };
60
60
  };
61
- const useLocalPrefix = (url) => {
62
- return isProd() && !url.includes(".");
63
- };
64
- const getStaticReg = (output = {}, html = {}) => {
65
- const {
66
- distPath: { css: cssPath, js: jsPath, media: mediaPath } = {},
67
- assetPrefix = "/"
68
- } = output;
61
+ const getStaticReg = (output = {}, html = {}, prefix = "/") => {
62
+ const { distPath: { css: cssPath, js: jsPath, media: mediaPath } = {} } = output;
69
63
  const { favicon, faviconByEntries } = html;
70
- const prefix = useLocalPrefix(assetPrefix) ? assetPrefix : "";
71
64
  const favicons = prepareFavicons(favicon, faviconByEntries);
72
65
  const staticFiles = [cssPath, jsPath, mediaPath].filter((v) => Boolean(v));
73
66
  const staticReg = ["static/", "upload/", ...staticFiles];
@@ -115,6 +108,5 @@ export {
115
108
  isRedirect,
116
109
  mergeExtension,
117
110
  noop,
118
- prepareFavicons,
119
- useLocalPrefix
111
+ prepareFavicons
120
112
  };
@@ -2,7 +2,7 @@ import { ModernServerOptions } from './type';
2
2
  import { Server } from './server';
3
3
  export { Server };
4
4
  export type { ServerConfig } from '@modern-js/server-core';
5
- export { ModernServer } from './server/modern-server';
5
+ export { ModernServer } from './server/modernServer';
6
6
  export { createProxyHandler } from './libs/proxy';
7
7
  export * from './type';
8
8
  export * from './constants';
@@ -3,7 +3,7 @@
3
3
  /// <reference types="node" />
4
4
  /// <reference types="node" />
5
5
  /// <reference types="node/http" />
6
- /// <reference types=".dts-temp/x5zLsplldTCJONgx6eTKT/src/type" />
6
+ /// <reference types=".dts-temp/NtW8DT-FXC5GraMEoP2PI/src/type" />
7
7
  import { IncomingMessage, ServerResponse } from 'http';
8
8
  import { URL } from 'url';
9
9
  import qs from 'querystring';
@@ -1,4 +1,3 @@
1
- import { ServerOptions } from '@modern-js/server-core';
2
1
  import type { ModernServerContext } from '@modern-js/types';
3
2
  import { NextFunction, ModernServerHandler } from '../type';
4
3
  type Rule = {
@@ -6,5 +5,5 @@ type Rule = {
6
5
  target: string;
7
6
  };
8
7
  export declare const faviconFallbackHandler: ModernServerHandler;
9
- export declare const createStaticFileHandler: (rules: Rule[], output?: ServerOptions['output']) => (context: ModernServerContext, next: NextFunction) => Promise<void>;
8
+ export declare const createStaticFileHandler: (rules: Rule[], assetPrefix?: string) => (context: ModernServerContext, next: NextFunction) => Promise<void>;
10
9
  export {};
@@ -22,7 +22,6 @@ export declare class ModernServer implements ModernServerInterface {
22
22
  protected readonly runMode: string;
23
23
  protected reader: typeof reader;
24
24
  protected readonly proxyTarget: ModernServerOptions['proxyTarget'];
25
- private staticFileHandler;
26
25
  private routeRenderHandler;
27
26
  private beforeRouteHandler;
28
27
  private frameWebHandler;
@@ -63,6 +62,7 @@ export declare class ModernServer implements ModernServerInterface {
63
62
  protected prepareAPIHandler(extension: APIServerStartInput['config']): Promise<Adapter>;
64
63
  protected filterRoutes(routes: ModernRouteInterface[]): ServerRoute[];
65
64
  protected setupBeforeProdMiddleware(): Promise<void>;
65
+ protected setupStaticMiddleware(prefix?: string): (context: ModernServerContext, next: NextFunction) => Promise<void>;
66
66
  protected handleAPI(context: ModernServerContext): Promise<void>;
67
67
  protected handleWeb(context: ModernServerContext, route: ModernRoute): Promise<import("../type").RenderResult | null>;
68
68
  protected proxy(): Promise<any>;
@@ -26,7 +26,14 @@ export type ModernServerOptions = {
26
26
  ssrOnly?: boolean;
27
27
  webOnly?: boolean;
28
28
  runMode?: string;
29
- [propName: string]: any;
29
+ appContext?: {
30
+ appDirectory?: string;
31
+ sharedDirectory: string;
32
+ apiDirectory: string;
33
+ lambdaDirectory: string;
34
+ };
35
+ serverConfigFile?: string;
36
+ proxyTarget?: any;
30
37
  };
31
38
  export type RenderResult = {
32
39
  content: string | Buffer;
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node/http" />
3
- /// <reference types=".dts-temp/x5zLsplldTCJONgx6eTKT/src/type" />
3
+ /// <reference types=".dts-temp/NtW8DT-FXC5GraMEoP2PI/src/type" />
4
4
  import { IncomingMessage } from 'http';
5
5
  import type { OutputNormalizedConfig, HtmlNormalizedConfig } from '@modern-js/server-core';
6
6
  export declare const debug: any;
@@ -18,8 +18,7 @@ export declare const createMiddlewareCollecter: () => {
18
18
  addWebMiddleware: (input: any) => void;
19
19
  addAPIMiddleware: (input: any) => void;
20
20
  };
21
- export declare const useLocalPrefix: (url: string) => boolean;
22
- export declare const getStaticReg: (output?: OutputNormalizedConfig, html?: HtmlNormalizedConfig) => RegExp;
21
+ export declare const getStaticReg: (output?: OutputNormalizedConfig, html?: HtmlNormalizedConfig, prefix?: string) => RegExp;
23
22
  export declare const prepareFavicons: (favicon: string | undefined, faviconByEntries?: Record<string, string | undefined>) => string[];
24
23
  export declare const headersWithoutCookie: (headers: IncomingMessage['headers']) => import("http").IncomingHttpHeaders;
25
24
  export declare const isRedirect: (code: number) => boolean;
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "modern",
12
12
  "modern.js"
13
13
  ],
14
- "version": "2.6.0",
14
+ "version": "2.7.0",
15
15
  "jsnext:source": "./src/index.ts",
16
16
  "types": "./dist/types/index.d.ts",
17
17
  "main": "./dist/cjs/index.js",
@@ -27,11 +27,11 @@
27
27
  },
28
28
  "./worker": {
29
29
  "node": {
30
- "jsnext:source": "./src/worker-server.ts",
31
- "import": "./dist/esm-node/worker-server.js",
32
- "require": "./dist/cjs/worker-server.js"
30
+ "jsnext:source": "./src/workerServer.ts",
31
+ "import": "./dist/esm-node/workerServer.js",
32
+ "require": "./dist/cjs/workerServer.js"
33
33
  },
34
- "default": "./dist/esm/worker-server.js"
34
+ "default": "./dist/esm/workerServer.js"
35
35
  }
36
36
  },
37
37
  "typesVersions": {
@@ -40,7 +40,7 @@
40
40
  "./dist/types/index.d.ts"
41
41
  ],
42
42
  "worker": [
43
- "./dist/types/worker-server.d.ts"
43
+ "./dist/types/workerServer.d.ts"
44
44
  ]
45
45
  }
46
46
  },
@@ -54,8 +54,8 @@
54
54
  "merge-deep": "^3.0.3",
55
55
  "path-to-regexp": "^6.2.0",
56
56
  "serve-static": "^1.14.1",
57
- "@modern-js/utils": "2.6.0",
58
- "@modern-js/server-core": "2.6.0"
57
+ "@modern-js/utils": "2.7.0",
58
+ "@modern-js/server-core": "2.7.0"
59
59
  },
60
60
  "devDependencies": {
61
61
  "@types/cookie": "^0.4.1",
@@ -71,10 +71,10 @@
71
71
  "node-mocks-http": "^1.11.0",
72
72
  "portfinder": "^1.0.28",
73
73
  "typescript": "^4",
74
- "@modern-js/types": "2.6.0",
75
- "@modern-js/server-core": "2.6.0",
76
- "@scripts/jest-config": "2.6.0",
77
- "@scripts/build": "2.6.0"
74
+ "@modern-js/types": "2.7.0",
75
+ "@modern-js/server-core": "2.7.0",
76
+ "@scripts/jest-config": "2.7.0",
77
+ "@scripts/build": "2.7.0"
78
78
  },
79
79
  "sideEffects": false,
80
80
  "publishConfig": {
File without changes