@modern-js/prod-server 2.14.0 → 2.16.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 (122) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/cjs/constants.js +15 -31
  3. package/dist/cjs/index.js +35 -37
  4. package/dist/cjs/libs/context/context.js +53 -66
  5. package/dist/cjs/libs/context/index.js +15 -28
  6. package/dist/cjs/libs/hook-api/index.js +59 -54
  7. package/dist/cjs/libs/hook-api/route.js +28 -30
  8. package/dist/cjs/libs/hook-api/template.js +30 -34
  9. package/dist/cjs/libs/loadConfig.js +74 -65
  10. package/dist/cjs/libs/logger.js +46 -37
  11. package/dist/cjs/libs/metrics.js +7 -25
  12. package/dist/cjs/libs/proxy.js +29 -46
  13. package/dist/cjs/libs/render/cache/__tests__/cache.fun.test.js +48 -64
  14. package/dist/cjs/libs/render/cache/__tests__/cache.test.js +53 -37
  15. package/dist/cjs/libs/render/cache/__tests__/cacheable.js +38 -34
  16. package/dist/cjs/libs/render/cache/__tests__/error-configuration.js +22 -30
  17. package/dist/cjs/libs/render/cache/__tests__/matched-cache.js +86 -46
  18. package/dist/cjs/libs/render/cache/index.js +17 -37
  19. package/dist/cjs/libs/render/cache/page-caches/index.js +12 -28
  20. package/dist/cjs/libs/render/cache/page-caches/lru.js +32 -40
  21. package/dist/cjs/libs/render/cache/spr.js +104 -111
  22. package/dist/cjs/libs/render/cache/type.js +4 -15
  23. package/dist/cjs/libs/render/cache/util.js +29 -53
  24. package/dist/cjs/libs/render/index.js +75 -73
  25. package/dist/cjs/libs/render/measure.js +19 -34
  26. package/dist/cjs/libs/render/reader.js +52 -61
  27. package/dist/cjs/libs/render/ssr.js +34 -66
  28. package/dist/cjs/libs/render/static.js +22 -45
  29. package/dist/cjs/libs/render/type.js +10 -28
  30. package/dist/cjs/libs/render/utils.js +17 -38
  31. package/dist/cjs/libs/route/index.js +32 -31
  32. package/dist/cjs/libs/route/matcher.js +38 -38
  33. package/dist/cjs/libs/route/route.js +29 -26
  34. package/dist/cjs/libs/serveFile.js +23 -41
  35. package/dist/cjs/server/index.js +101 -107
  36. package/dist/cjs/server/modernServer.js +191 -171
  37. package/dist/cjs/server/modernServerSplit.js +12 -30
  38. package/dist/cjs/type.js +4 -15
  39. package/dist/cjs/utils.js +50 -50
  40. package/dist/cjs/workerServer.js +26 -36
  41. package/dist/esm/constants.js +24 -25
  42. package/dist/esm/index.js +11 -10
  43. package/dist/esm/libs/context/context.js +271 -264
  44. package/dist/esm/libs/context/index.js +3 -3
  45. package/dist/esm/libs/hook-api/index.js +237 -223
  46. package/dist/esm/libs/hook-api/route.js +62 -60
  47. package/dist/esm/libs/hook-api/template.js +117 -115
  48. package/dist/esm/libs/loadConfig.js +68 -69
  49. package/dist/esm/libs/logger.js +188 -174
  50. package/dist/esm/libs/metrics.js +6 -3
  51. package/dist/esm/libs/proxy.js +236 -221
  52. package/dist/esm/libs/render/cache/__tests__/cache.fun.test.js +286 -267
  53. package/dist/esm/libs/render/cache/__tests__/cache.test.js +765 -745
  54. package/dist/esm/libs/render/cache/__tests__/cacheable.js +62 -63
  55. package/dist/esm/libs/render/cache/__tests__/error-configuration.js +42 -43
  56. package/dist/esm/libs/render/cache/__tests__/matched-cache.js +134 -135
  57. package/dist/esm/libs/render/cache/index.js +337 -326
  58. package/dist/esm/libs/render/cache/page-caches/index.js +147 -141
  59. package/dist/esm/libs/render/cache/page-caches/lru.js +78 -76
  60. package/dist/esm/libs/render/cache/spr.js +465 -456
  61. package/dist/esm/libs/render/cache/type.js +1 -1
  62. package/dist/esm/libs/render/cache/util.js +266 -246
  63. package/dist/esm/libs/render/index.js +226 -218
  64. package/dist/esm/libs/render/measure.js +136 -128
  65. package/dist/esm/libs/render/reader.js +315 -304
  66. package/dist/esm/libs/render/ssr.js +214 -209
  67. package/dist/esm/libs/render/static.js +208 -198
  68. package/dist/esm/libs/render/type.js +6 -7
  69. package/dist/esm/libs/render/utils.js +8 -9
  70. package/dist/esm/libs/route/index.js +134 -123
  71. package/dist/esm/libs/route/matcher.js +140 -130
  72. package/dist/esm/libs/route/route.js +36 -37
  73. package/dist/esm/libs/serveFile.js +177 -168
  74. package/dist/esm/server/index.js +578 -549
  75. package/dist/esm/server/modernServer.js +1137 -1074
  76. package/dist/esm/server/modernServerSplit.js +344 -328
  77. package/dist/esm/type.js +1 -1
  78. package/dist/esm/utils.js +133 -124
  79. package/dist/esm/workerServer.js +226 -220
  80. package/dist/esm-node/constants.js +7 -14
  81. package/dist/esm-node/index.js +4 -9
  82. package/dist/esm-node/libs/context/context.js +32 -25
  83. package/dist/esm-node/libs/context/index.js +2 -5
  84. package/dist/esm-node/libs/hook-api/index.js +40 -21
  85. package/dist/esm-node/libs/hook-api/route.js +21 -8
  86. package/dist/esm-node/libs/hook-api/template.js +19 -14
  87. package/dist/esm-node/libs/loadConfig.js +11 -28
  88. package/dist/esm-node/libs/logger.js +37 -17
  89. package/dist/esm-node/libs/metrics.js +1 -3
  90. package/dist/esm-node/libs/proxy.js +14 -22
  91. package/dist/esm-node/libs/render/cache/__tests__/cache.fun.test.js +25 -36
  92. package/dist/esm-node/libs/render/cache/__tests__/cache.test.js +23 -11
  93. package/dist/esm-node/libs/render/cache/__tests__/cacheable.js +32 -13
  94. package/dist/esm-node/libs/render/cache/__tests__/error-configuration.js +16 -9
  95. package/dist/esm-node/libs/render/cache/__tests__/matched-cache.js +80 -25
  96. package/dist/esm-node/libs/render/cache/index.js +3 -10
  97. package/dist/esm-node/libs/render/cache/page-caches/index.js +4 -5
  98. package/dist/esm-node/libs/render/cache/page-caches/lru.js +20 -8
  99. package/dist/esm-node/libs/render/cache/spr.js +79 -80
  100. package/dist/esm-node/libs/render/cache/type.js +1 -0
  101. package/dist/esm-node/libs/render/cache/util.js +13 -23
  102. package/dist/esm-node/libs/render/index.js +10 -28
  103. package/dist/esm-node/libs/render/measure.js +7 -13
  104. package/dist/esm-node/libs/render/reader.js +31 -26
  105. package/dist/esm-node/libs/render/ssr.js +5 -21
  106. package/dist/esm-node/libs/render/static.js +1 -4
  107. package/dist/esm-node/libs/render/type.js +3 -6
  108. package/dist/esm-node/libs/render/utils.js +6 -18
  109. package/dist/esm-node/libs/route/index.js +20 -9
  110. package/dist/esm-node/libs/route/matcher.js +28 -17
  111. package/dist/esm-node/libs/route/route.js +23 -5
  112. package/dist/esm-node/libs/serveFile.js +2 -6
  113. package/dist/esm-node/server/index.js +72 -75
  114. package/dist/esm-node/server/modernServer.js +102 -130
  115. package/dist/esm-node/server/modernServerSplit.js +1 -4
  116. package/dist/esm-node/type.js +1 -0
  117. package/dist/esm-node/utils.js +41 -32
  118. package/dist/esm-node/workerServer.js +9 -10
  119. package/dist/types/libs/context/context.d.ts +1 -1
  120. package/dist/types/server/modernServer.d.ts +1 -1
  121. package/dist/types/utils.d.ts +1 -1
  122. package/package.json +12 -8
@@ -1,82 +1,37 @@
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) {
3
+ Object.defineProperty(obj, key, {
4
+ value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ } else {
10
+ obj[key] = value;
11
+ }
12
+ return obj;
13
+ }
1
14
  import { createServer } from "http";
2
15
  import path from "path";
3
- import {
4
- fs,
5
- isPromise,
6
- isWebOnly,
7
- mime,
8
- ROUTE_SPEC_FILE
9
- } from "@modern-js/utils";
10
- import {
11
- RouteMatchManager
12
- } from "../libs/route";
16
+ import { fs, isPromise, isWebOnly, mime, ROUTE_SPEC_FILE } from "@modern-js/utils";
17
+ import { RouteMatchManager } from "../libs/route";
13
18
  import { createRenderHandler } from "../libs/render";
14
- import {
15
- createStaticFileHandler,
16
- faviconFallbackHandler
17
- } from "../libs/serveFile";
18
- import {
19
- createErrorDocument,
20
- createMiddlewareCollecter,
21
- getStaticReg,
22
- mergeExtension,
23
- noop,
24
- debug,
25
- isRedirect
26
- } from "../utils";
19
+ import { createStaticFileHandler, faviconFallbackHandler } from "../libs/serveFile";
20
+ import { createErrorDocument, createMiddlewareCollecter, getStaticReg, mergeExtension, noop, debug, isRedirect } from "../utils";
27
21
  import * as reader from "../libs/render/reader";
28
22
  import { createProxyHandler } from "../libs/proxy";
29
23
  import { createContext } from "../libs/context";
30
- import {
31
- AGGRED_DIR,
32
- ERROR_DIGEST,
33
- ERROR_PAGE_TEXT,
34
- RUN_MODE
35
- } from "../constants";
36
- import {
37
- createAfterMatchContext,
38
- createAfterRenderContext,
39
- createMiddlewareContext
40
- } from "../libs/hook-api";
24
+ import { AGGRED_DIR, ERROR_DIGEST, ERROR_PAGE_TEXT, RUN_MODE } from "../constants";
25
+ import { createAfterMatchContext, createAfterRenderContext, createMiddlewareContext } from "../libs/hook-api";
41
26
  const SERVER_DIR = "./server";
42
- class ModernServer {
43
- constructor({
44
- pwd,
45
- config,
46
- routes,
47
- staticGenerate,
48
- logger,
49
- metrics,
50
- runMode,
51
- proxyTarget
52
- }) {
53
- this.handlers = [];
54
- this.reader = reader;
55
- this.loaderHandler = null;
56
- this.frameWebHandler = null;
57
- this.frameAPIHandler = null;
58
- this.proxyHandler = null;
59
- require("ignore-styles");
60
- this.pwd = pwd;
61
- this.distDir = path.join(pwd, config.output.path || "dist");
62
- this.workDir = this.distDir;
63
- this.conf = config;
64
- debug("server conf", this.conf);
65
- this.logger = logger;
66
- this.metrics = metrics;
67
- this.router = new RouteMatchManager();
68
- this.presetRoutes = routes;
69
- this.proxyTarget = proxyTarget;
70
- this.staticGenerate = staticGenerate || false;
71
- this.runMode = runMode || RUN_MODE.FULL;
72
- }
27
+ export class ModernServer {
73
28
  // server prepare
74
29
  async onInit(runner, app) {
75
- var _a, _b, _c;
30
+ var _conf_bff, _this_conf_server, _this_conf_output;
76
31
  this.runner = runner;
77
32
  const { distDir, staticGenerate, conf } = this;
78
33
  debug("final server conf", this.conf);
79
- this.proxyHandler = createProxyHandler((_a = conf.bff) == null ? void 0 : _a.proxy);
34
+ this.proxyHandler = createProxyHandler((_conf_bff = conf.bff) === null || _conf_bff === void 0 ? void 0 : _conf_bff.proxy);
80
35
  if (this.proxyHandler) {
81
36
  this.proxyHandler.forEach((handler) => {
82
37
  this.addHandler(handler);
@@ -91,7 +46,7 @@ class ModernServer {
91
46
  this.warmupSSRBundle();
92
47
  await this.prepareFrameHandler();
93
48
  await this.prepareLoaderHandler(usageRoutes, distDir);
94
- const ssrConfig = (_b = this.conf.server) == null ? void 0 : _b.ssr;
49
+ const ssrConfig = (_this_conf_server = this.conf.server) === null || _this_conf_server === void 0 ? void 0 : _this_conf_server.ssr;
95
50
  const forceCSR = typeof ssrConfig === "object" ? ssrConfig.forceCSR : false;
96
51
  this.routeRenderHandler = createRenderHandler({
97
52
  distDir,
@@ -99,7 +54,7 @@ class ModernServer {
99
54
  forceCSR
100
55
  });
101
56
  await this.setupBeforeProdMiddleware();
102
- this.addHandler(this.setupStaticMiddleware((_c = this.conf.output) == null ? void 0 : _c.assetPrefix));
57
+ this.addHandler(this.setupStaticMiddleware((_this_conf_output = this.conf.output) === null || _this_conf_output === void 0 ? void 0 : _this_conf_output.assetPrefix));
103
58
  this.addHandler(faviconFallbackHandler);
104
59
  this.addHandler(this.routeHandler.bind(this));
105
60
  this.compose();
@@ -107,14 +62,17 @@ class ModernServer {
107
62
  // server ready
108
63
  onRepack(_) {
109
64
  }
110
- onServerChange({ filepath }) {
65
+ async onServerChange({ filepath }) {
111
66
  const { pwd } = this;
112
67
  const { api, server } = AGGRED_DIR;
113
68
  const apiPath = path.normalize(path.join(pwd, api));
114
69
  const serverPath = path.normalize(path.join(pwd, server));
115
70
  const onlyApi = filepath.startsWith(apiPath);
116
71
  const onlyWeb = filepath.startsWith(serverPath);
117
- this.prepareFrameHandler({ onlyWeb, onlyApi });
72
+ await this.prepareFrameHandler({
73
+ onlyWeb,
74
+ onlyApi
75
+ });
118
76
  }
119
77
  // exposed requestHandler
120
78
  getRequestHandler() {
@@ -166,15 +124,12 @@ class ModernServer {
166
124
  }
167
125
  async prepareLoaderHandler(specs, distDir) {
168
126
  const { runner } = this;
169
- const handler = await runner.prepareLoaderHandler(
170
- {
171
- serverRoutes: specs,
172
- distDir
173
- },
174
- {
175
- onLast: () => null
176
- }
177
- );
127
+ const handler = await runner.prepareLoaderHandler({
128
+ serverRoutes: specs,
129
+ distDir
130
+ }, {
131
+ onLast: () => null
132
+ });
178
133
  this.loaderHandler = handler;
179
134
  }
180
135
  // gather frame extension and get framework handler
@@ -196,19 +151,18 @@ class ModernServer {
196
151
  }
197
152
  async prepareWebHandler(extension) {
198
153
  const { workDir, runner } = this;
199
- const handler = await runner.prepareWebServer(
200
- {
201
- pwd: workDir,
202
- config: extension
203
- },
204
- { onLast: () => null }
205
- );
154
+ const handler = await runner.prepareWebServer({
155
+ pwd: workDir,
156
+ config: extension
157
+ }, {
158
+ onLast: () => null
159
+ });
206
160
  return handler;
207
161
  }
208
162
  async prepareAPIHandler(extension) {
209
163
  const { workDir, runner, conf } = this;
210
164
  const { bff } = conf;
211
- const prefix = (bff == null ? void 0 : bff.prefix) || "/api";
165
+ const prefix = (bff === null || bff === void 0 ? void 0 : bff.prefix) || "/api";
212
166
  const webOnly = await isWebOnly();
213
167
  if (webOnly && process.env.NODE_ENV === "development") {
214
168
  return (req, res) => {
@@ -216,16 +170,15 @@ class ModernServer {
216
170
  res.end(JSON.stringify(""));
217
171
  };
218
172
  }
219
- return runner.prepareApiServer(
220
- {
221
- pwd: workDir,
222
- config: extension,
223
- prefix: Array.isArray(prefix) ? prefix[0] : prefix,
224
- httpMethodDecider: bff == null ? void 0 : bff.httpMethodDecider,
225
- render: this.render.bind(this)
226
- },
227
- { onLast: () => null }
228
- );
173
+ return runner.prepareApiServer({
174
+ pwd: workDir,
175
+ config: extension,
176
+ prefix: Array.isArray(prefix) ? prefix[0] : prefix,
177
+ httpMethodDecider: bff === null || bff === void 0 ? void 0 : bff.httpMethodDecider,
178
+ render: this.render.bind(this)
179
+ }, {
180
+ onLast: () => null
181
+ });
229
182
  }
230
183
  filterRoutes(routes) {
231
184
  return routes;
@@ -238,20 +191,13 @@ class ModernServer {
238
191
  });
239
192
  }
240
193
  setupStaticMiddleware(prefix) {
241
- const staticPathRegExp = getStaticReg(
242
- this.conf.output,
243
- this.conf.html,
244
- prefix
245
- );
246
- return createStaticFileHandler(
247
- [
248
- {
249
- path: staticPathRegExp,
250
- target: this.distDir
251
- }
252
- ],
253
- prefix
254
- );
194
+ const staticPathRegExp = getStaticReg(this.conf.output, this.conf.html, prefix);
195
+ return createStaticFileHandler([
196
+ {
197
+ path: staticPathRegExp,
198
+ target: this.distDir
199
+ }
200
+ ], prefix);
255
201
  }
256
202
  async handleAPI(context) {
257
203
  const { req, res } = context;
@@ -291,11 +237,7 @@ class ModernServer {
291
237
  return null;
292
238
  }
293
239
  if (renderResult.redirect) {
294
- this.redirect(
295
- res,
296
- renderResult.content,
297
- renderResult.statusCode
298
- );
240
+ this.redirect(res, renderResult.content, renderResult.statusCode);
299
241
  return null;
300
242
  }
301
243
  if (this.isSend(res)) {
@@ -336,12 +278,11 @@ class ModernServer {
336
278
  return;
337
279
  }
338
280
  if (route.entryName) {
339
- const afterMatchContext = createAfterMatchContext(
340
- context,
341
- route.entryName
342
- );
281
+ const afterMatchContext = createAfterMatchContext(context, route.entryName);
343
282
  if (this.runMode === RUN_MODE.FULL) {
344
- await this.runner.afterMatch(afterMatchContext, { onLast: noop });
283
+ await this.runner.afterMatch(afterMatchContext, {
284
+ onLast: noop
285
+ });
345
286
  }
346
287
  if (this.isSend(res)) {
347
288
  return;
@@ -383,12 +324,11 @@ class ModernServer {
383
324
  return;
384
325
  }
385
326
  if (route.entryName) {
386
- const afterRenderContext = createAfterRenderContext(
387
- context,
388
- response.toString()
389
- );
327
+ const afterRenderContext = createAfterRenderContext(context, response.toString());
390
328
  if (this.runMode === RUN_MODE.FULL) {
391
- await this.runner.afterRender(afterRenderContext, { onLast: noop });
329
+ await this.runner.afterRender(afterRenderContext, {
330
+ onLast: noop
331
+ });
392
332
  }
393
333
  if (this.isSend(res)) {
394
334
  return;
@@ -500,7 +440,39 @@ class ModernServer {
500
440
  const text = ERROR_PAGE_TEXT[status] || ERROR_PAGE_TEXT[500];
501
441
  context.res.end(createErrorDocument(status, text));
502
442
  }
443
+ constructor({ pwd, config, routes, staticGenerate, logger, metrics, runMode, proxyTarget }) {
444
+ _define_property(this, "pwd", void 0);
445
+ _define_property(this, "distDir", void 0);
446
+ _define_property(this, "workDir", void 0);
447
+ _define_property(this, "router", void 0);
448
+ _define_property(this, "conf", void 0);
449
+ _define_property(this, "handlers", []);
450
+ _define_property(this, "presetRoutes", void 0);
451
+ _define_property(this, "runner", void 0);
452
+ _define_property(this, "logger", void 0);
453
+ _define_property(this, "metrics", void 0);
454
+ _define_property(this, "runMode", void 0);
455
+ _define_property(this, "reader", reader);
456
+ _define_property(this, "proxyTarget", void 0);
457
+ _define_property(this, "routeRenderHandler", void 0);
458
+ _define_property(this, "loaderHandler", null);
459
+ _define_property(this, "frameWebHandler", null);
460
+ _define_property(this, "frameAPIHandler", null);
461
+ _define_property(this, "proxyHandler", null);
462
+ _define_property(this, "_handler", void 0);
463
+ _define_property(this, "staticGenerate", void 0);
464
+ require("ignore-styles");
465
+ this.pwd = pwd;
466
+ this.distDir = path.join(pwd, config.output.path || "dist");
467
+ this.workDir = this.distDir;
468
+ this.conf = config;
469
+ debug("server conf", this.conf);
470
+ this.logger = logger;
471
+ this.metrics = metrics;
472
+ this.router = new RouteMatchManager();
473
+ this.presetRoutes = routes;
474
+ this.proxyTarget = proxyTarget;
475
+ this.staticGenerate = staticGenerate || false;
476
+ this.runMode = runMode || RUN_MODE.FULL;
477
+ }
503
478
  }
504
- export {
505
- ModernServer
506
- };
@@ -27,7 +27,7 @@ class ModernWebServer extends ModernServer {
27
27
  return super.handleWeb(context, route);
28
28
  }
29
29
  }
30
- const createProdServer = (options) => {
30
+ export const createProdServer = (options) => {
31
31
  if (options.apiOnly) {
32
32
  return new ModernAPIServer(options);
33
33
  } else if (options.ssrOnly) {
@@ -38,6 +38,3 @@ const createProdServer = (options) => {
38
38
  return new ModernServer(options);
39
39
  }
40
40
  };
41
- export {
42
- createProdServer
43
- };
@@ -0,0 +1 @@
1
+ export {};
@@ -1,12 +1,14 @@
1
1
  import { createDebugger } from "@modern-js/utils";
2
- const debug = createDebugger("prod-server");
3
- const mergeExtension = (users) => {
2
+ export const debug = createDebugger("prod-server");
3
+ export const mergeExtension = (users) => {
4
4
  const output = [];
5
- return { middleware: output.concat(users) };
5
+ return {
6
+ middleware: output.concat(users)
7
+ };
6
8
  };
7
- const noop = () => {
9
+ export const noop = () => {
8
10
  };
9
- const createErrorDocument = (status, text) => {
11
+ export const createErrorDocument = (status, text) => {
10
12
  const title = `${status}: ${text}`;
11
13
  return `<!DOCTYPE html>
12
14
  <html lang="en">
@@ -39,7 +41,7 @@ const createErrorDocument = (status, text) => {
39
41
  </html>
40
42
  `;
41
43
  };
42
- const createMiddlewareCollecter = () => {
44
+ export const createMiddlewareCollecter = () => {
43
45
  const webMiddlewares = [];
44
46
  const apiMiddlewares = [];
45
47
  const addWebMiddleware = (input) => {
@@ -58,20 +60,33 @@ const createMiddlewareCollecter = () => {
58
60
  addAPIMiddleware
59
61
  };
60
62
  };
61
- const getStaticReg = (output = {}, html = {}, prefix = "/") => {
63
+ export const getStaticReg = (output = {}, html = {}, prefix = "/") => {
62
64
  const { distPath: { css: cssPath, js: jsPath, media: mediaPath } = {} } = output;
63
65
  const { favicon, faviconByEntries } = html;
64
66
  const favicons = prepareFavicons(favicon, faviconByEntries);
65
- const staticFiles = [cssPath, jsPath, mediaPath].filter((v) => Boolean(v));
66
- const staticReg = ["static/", "upload/", ...staticFiles];
67
- const iconReg = ["favicon.ico", "icon.png", ...favicons];
67
+ const staticFiles = [
68
+ cssPath,
69
+ jsPath,
70
+ mediaPath
71
+ ].filter((v) => Boolean(v));
72
+ const staticReg = [
73
+ "static/",
74
+ "upload/",
75
+ ...staticFiles
76
+ ];
77
+ const iconReg = [
78
+ "favicon.ico",
79
+ "icon.png",
80
+ ...favicons
81
+ ];
68
82
  const regPrefix = prefix.endsWith("/") ? prefix : `${prefix}/`;
69
- const staticPathRegExp = new RegExp(
70
- `^${regPrefix}(${[...staticReg, ...iconReg].join("|")})`
71
- );
83
+ const staticPathRegExp = new RegExp(`^${regPrefix}(${[
84
+ ...staticReg,
85
+ ...iconReg
86
+ ].join("|")})`);
72
87
  return staticPathRegExp;
73
88
  };
74
- const prepareFavicons = (favicon, faviconByEntries) => {
89
+ export const prepareFavicons = (favicon, faviconByEntries) => {
75
90
  const faviconNames = [];
76
91
  if (favicon) {
77
92
  faviconNames.push(favicon.substring(favicon.lastIndexOf("/") + 1));
@@ -80,33 +95,27 @@ const prepareFavicons = (favicon, faviconByEntries) => {
80
95
  Object.keys(faviconByEntries).forEach((f) => {
81
96
  const curFavicon = faviconByEntries[f];
82
97
  if (curFavicon) {
83
- faviconNames.push(
84
- curFavicon.substring(curFavicon.lastIndexOf("/") + 1)
85
- );
98
+ faviconNames.push(curFavicon.substring(curFavicon.lastIndexOf("/") + 1));
86
99
  }
87
100
  });
88
101
  }
89
102
  return faviconNames;
90
103
  };
91
- const headersWithoutCookie = (headers) => {
104
+ export const headersWithoutCookie = (headers) => {
92
105
  if (typeof headers.cookie !== "undefined") {
93
- const safeHeaders = { ...headers };
106
+ const safeHeaders = {
107
+ ...headers
108
+ };
94
109
  delete safeHeaders.cookie;
95
110
  return safeHeaders;
96
111
  }
97
112
  return headers;
98
113
  };
99
- const isRedirect = (code) => {
100
- return [301, 302, 307, 308].includes(code);
101
- };
102
- export {
103
- createErrorDocument,
104
- createMiddlewareCollecter,
105
- debug,
106
- getStaticReg,
107
- headersWithoutCookie,
108
- isRedirect,
109
- mergeExtension,
110
- noop,
111
- prepareFavicons
114
+ export const isRedirect = (code) => {
115
+ return [
116
+ 301,
117
+ 302,
118
+ 307,
119
+ 308
120
+ ].includes(code);
112
121
  };
@@ -1,15 +1,15 @@
1
1
  import { Logger } from "./libs/logger";
2
2
  import { RouteMatchManager } from "./libs/route";
3
3
  import { metrics as defaultMetrics } from "./libs/metrics";
4
- const handleUrl = (url) => {
4
+ export const handleUrl = (url) => {
5
5
  return url.replace(/^https?:\/\/.*?\//gi, "/");
6
6
  };
7
- const createHandler = (manifest) => {
7
+ export const createHandler = (manifest) => {
8
8
  const routeMgr = new RouteMatchManager();
9
9
  const { pages, routes } = manifest;
10
10
  routeMgr.reset(routes);
11
11
  return async (ctx) => {
12
- var _a, _b, _c, _d, _e, _f;
12
+ var _ctx_request, _ctx_request1, _ctx_request2;
13
13
  const pageMatch = routeMgr.match(ctx.url);
14
14
  if (!pageMatch) {
15
15
  ctx.body = "404: Page not found";
@@ -17,9 +17,12 @@ const createHandler = (manifest) => {
17
17
  return;
18
18
  }
19
19
  const page = pages[pageMatch.spec.urlPath];
20
- (_b = (_a = ctx.request).query) != null ? _b : _a.query = ctx.query;
21
- (_d = (_c = ctx.request).pathname) != null ? _d : _c.pathname = ctx.pathname;
22
- (_f = (_e = ctx.request).params) != null ? _f : _e.params = ctx.params;
20
+ var _query;
21
+ (_query = (_ctx_request = ctx.request).query) !== null && _query !== void 0 ? _query : _ctx_request.query = ctx.query;
22
+ var _pathname;
23
+ (_pathname = (_ctx_request1 = ctx.request).pathname) !== null && _pathname !== void 0 ? _pathname : _ctx_request1.pathname = ctx.pathname;
24
+ var _params;
25
+ (_params = (_ctx_request2 = ctx.request).params) !== null && _params !== void 0 ? _params : _ctx_request2.params = ctx.params;
23
26
  const params = pageMatch.parseURLParams(ctx.url);
24
27
  if (page.serverRender) {
25
28
  try {
@@ -63,7 +66,3 @@ const createHandler = (manifest) => {
63
66
  ctx.status = 404;
64
67
  };
65
68
  };
66
- export {
67
- createHandler,
68
- handleUrl
69
- };
@@ -2,7 +2,7 @@
2
2
  /// <reference types="node" />
3
3
  /// <reference types="node" />
4
4
  /// <reference types="node/http" />
5
- /// <reference types=".dts-temp/n1HIMoX_AzoA1M8E5zepR/src/type" />
5
+ /// <reference types=".dts-temp/vHqeIaScy5kMV0h9s6umT/src/type" />
6
6
  import { IncomingMessage, ServerResponse } from 'http';
7
7
  import qs from 'querystring';
8
8
  import type { ModernServerContext as ModernServerContextInterface } from '@modern-js/types';
@@ -46,7 +46,7 @@ export declare class ModernServer implements ModernServerInterface {
46
46
  filepath
47
47
  }: {
48
48
  filepath: string;
49
- }): void;
49
+ }): Promise<void>;
50
50
  getRequestHandler(): (req: IncomingMessage, res: ServerResponse, next?: () => void) => void | ServerResponse;
51
51
  render(req: IncomingMessage, res: ServerResponse, url?: string): Promise<string | import("stream").Readable | null>;
52
52
  createHTTPServer(handler: (req: IncomingMessage, res: ServerResponse, next?: () => void) => void): Promise<Server<typeof IncomingMessage, typeof ServerResponse>>;
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node/http" />
3
- /// <reference types=".dts-temp/n1HIMoX_AzoA1M8E5zepR/src/type" />
3
+ /// <reference types=".dts-temp/vHqeIaScy5kMV0h9s6umT/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;
package/package.json CHANGED
@@ -3,7 +3,11 @@
3
3
  "description": "A Progressive React Framework for modern web development.",
4
4
  "homepage": "https://modernjs.dev",
5
5
  "bugs": "https://github.com/web-infra-dev/modern.js/issues",
6
- "repository": "web-infra-dev/modern.js",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/web-infra-dev/modern.js",
9
+ "directory": "packages/server/prod-server"
10
+ },
7
11
  "license": "MIT",
8
12
  "keywords": [
9
13
  "react",
@@ -11,7 +15,7 @@
11
15
  "modern",
12
16
  "modern.js"
13
17
  ],
14
- "version": "2.14.0",
18
+ "version": "2.16.0",
15
19
  "jsnext:source": "./src/index.ts",
16
20
  "types": "./dist/types/index.d.ts",
17
21
  "main": "./dist/cjs/index.js",
@@ -56,8 +60,8 @@
56
60
  "merge-deep": "^3.0.3",
57
61
  "path-to-regexp": "^6.2.0",
58
62
  "serve-static": "^1.14.1",
59
- "@modern-js/utils": "2.14.0",
60
- "@modern-js/server-core": "2.14.0"
63
+ "@modern-js/utils": "2.16.0",
64
+ "@modern-js/server-core": "2.16.0"
61
65
  },
62
66
  "devDependencies": {
63
67
  "@types/cookie": "^0.4.1",
@@ -73,10 +77,10 @@
73
77
  "node-mocks-http": "^1.11.0",
74
78
  "portfinder": "^1.0.28",
75
79
  "typescript": "^4",
76
- "@modern-js/types": "2.14.0",
77
- "@modern-js/server-core": "2.14.0",
78
- "@scripts/jest-config": "2.14.0",
79
- "@scripts/build": "2.14.0"
80
+ "@modern-js/types": "2.16.0",
81
+ "@modern-js/server-core": "2.16.0",
82
+ "@scripts/jest-config": "2.16.0",
83
+ "@scripts/build": "2.16.0"
80
84
  },
81
85
  "sideEffects": false,
82
86
  "publishConfig": {