@modern-js/prod-server 2.4.1-beta.0 → 2.5.1-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/CHANGELOG.md +18 -3
  2. package/dist/cjs/constants.js +62 -0
  3. package/dist/cjs/index.js +44 -0
  4. package/dist/cjs/libs/context/context.js +189 -0
  5. package/dist/cjs/libs/context/index.js +30 -0
  6. package/dist/cjs/libs/hook-api/index.js +151 -0
  7. package/dist/cjs/libs/hook-api/route.js +43 -0
  8. package/dist/cjs/libs/hook-api/template.js +97 -0
  9. package/dist/cjs/libs/loadConfig.js +76 -0
  10. package/dist/cjs/libs/logger.js +122 -0
  11. package/dist/cjs/libs/metrics.js +34 -0
  12. package/dist/cjs/libs/proxy.js +81 -0
  13. package/dist/cjs/libs/render/cache/__tests__/cache.fun.test.js +93 -0
  14. package/dist/cjs/libs/render/cache/__tests__/cache.test.js +210 -0
  15. package/dist/cjs/libs/render/cache/__tests__/cacheable.js +70 -0
  16. package/dist/cjs/libs/render/cache/__tests__/error-configuration.js +60 -0
  17. package/dist/cjs/libs/render/cache/__tests__/matched-cache.js +114 -0
  18. package/dist/cjs/libs/render/cache/index.js +97 -0
  19. package/dist/cjs/libs/render/cache/page-caches/index.js +33 -0
  20. package/dist/cjs/libs/render/cache/page-caches/lru.js +58 -0
  21. package/dist/cjs/libs/render/cache/spr.js +242 -0
  22. package/dist/cjs/libs/render/cache/type.js +15 -0
  23. package/dist/cjs/libs/render/cache/util.js +116 -0
  24. package/dist/cjs/libs/render/index.js +93 -0
  25. package/dist/cjs/libs/render/measure.js +75 -0
  26. package/dist/cjs/libs/render/reader.js +118 -0
  27. package/dist/cjs/libs/render/ssr.js +103 -0
  28. package/dist/cjs/libs/render/static.js +67 -0
  29. package/dist/cjs/libs/render/type.js +32 -0
  30. package/dist/cjs/libs/route/index.js +78 -0
  31. package/dist/cjs/libs/route/matcher.js +106 -0
  32. package/dist/cjs/libs/route/route.js +39 -0
  33. package/dist/cjs/libs/serve-file.js +77 -0
  34. package/dist/cjs/server/index.js +169 -0
  35. package/dist/cjs/server/modern-server-split.js +66 -0
  36. package/dist/cjs/server/modern-server.js +491 -0
  37. package/dist/cjs/type.js +15 -0
  38. package/dist/cjs/utils.js +152 -0
  39. package/dist/cjs/worker-server.js +93 -0
  40. package/dist/esm/constants.js +29 -0
  41. package/dist/esm/index.js +13 -0
  42. package/dist/esm/libs/context/context.js +274 -0
  43. package/dist/esm/libs/context/index.js +5 -0
  44. package/dist/esm/libs/hook-api/index.js +281 -0
  45. package/dist/esm/libs/hook-api/route.js +68 -0
  46. package/dist/esm/libs/hook-api/template.js +127 -0
  47. package/dist/esm/libs/loadConfig.js +82 -0
  48. package/dist/esm/libs/logger.js +205 -0
  49. package/dist/esm/libs/metrics.js +6 -0
  50. package/dist/esm/libs/proxy.js +244 -0
  51. package/dist/esm/libs/render/cache/__tests__/cache.fun.test.js +291 -0
  52. package/dist/esm/libs/render/cache/__tests__/cache.test.js +781 -0
  53. package/dist/esm/libs/render/cache/__tests__/cacheable.js +67 -0
  54. package/dist/esm/libs/render/cache/__tests__/error-configuration.js +45 -0
  55. package/dist/esm/libs/render/cache/__tests__/matched-cache.js +147 -0
  56. package/dist/esm/libs/render/cache/index.js +346 -0
  57. package/dist/esm/libs/render/cache/page-caches/index.js +154 -0
  58. package/dist/esm/libs/render/cache/page-caches/lru.js +84 -0
  59. package/dist/esm/libs/render/cache/spr.js +492 -0
  60. package/dist/esm/libs/render/cache/type.js +1 -0
  61. package/dist/esm/libs/render/cache/util.js +280 -0
  62. package/dist/esm/libs/render/index.js +234 -0
  63. package/dist/esm/libs/render/measure.js +146 -0
  64. package/dist/esm/libs/render/reader.js +339 -0
  65. package/dist/esm/libs/render/ssr.js +223 -0
  66. package/dist/esm/libs/render/static.js +216 -0
  67. package/dist/esm/libs/render/type.js +7 -0
  68. package/dist/esm/libs/route/index.js +130 -0
  69. package/dist/esm/libs/route/matcher.js +143 -0
  70. package/dist/esm/libs/route/route.js +40 -0
  71. package/dist/esm/libs/serve-file.js +184 -0
  72. package/dist/esm/server/index.js +505 -0
  73. package/dist/esm/server/modern-server-split.js +360 -0
  74. package/dist/esm/server/modern-server.js +1090 -0
  75. package/dist/esm/type.js +1 -0
  76. package/dist/esm/utils.js +147 -0
  77. package/dist/esm/worker-server.js +233 -0
  78. package/dist/esm-node/constants.js +35 -0
  79. package/dist/esm-node/index.js +18 -0
  80. package/dist/esm-node/libs/context/context.js +160 -0
  81. package/dist/esm-node/libs/context/index.js +6 -0
  82. package/dist/esm-node/libs/hook-api/index.js +119 -0
  83. package/dist/esm-node/libs/hook-api/route.js +20 -0
  84. package/dist/esm-node/libs/hook-api/template.js +73 -0
  85. package/dist/esm-node/libs/loadConfig.js +45 -0
  86. package/dist/esm-node/libs/logger.js +98 -0
  87. package/dist/esm-node/libs/metrics.js +11 -0
  88. package/dist/esm-node/libs/proxy.js +57 -0
  89. package/dist/esm-node/libs/render/cache/__tests__/cache.fun.test.js +83 -0
  90. package/dist/esm-node/libs/render/cache/__tests__/cache.test.js +210 -0
  91. package/dist/esm-node/libs/render/cache/__tests__/cacheable.js +47 -0
  92. package/dist/esm-node/libs/render/cache/__tests__/error-configuration.js +37 -0
  93. package/dist/esm-node/libs/render/cache/__tests__/matched-cache.js +91 -0
  94. package/dist/esm-node/libs/render/cache/index.js +76 -0
  95. package/dist/esm-node/libs/render/cache/page-caches/index.js +10 -0
  96. package/dist/esm-node/libs/render/cache/page-caches/lru.js +29 -0
  97. package/dist/esm-node/libs/render/cache/spr.js +220 -0
  98. package/dist/esm-node/libs/render/cache/type.js +0 -0
  99. package/dist/esm-node/libs/render/cache/util.js +80 -0
  100. package/dist/esm-node/libs/render/index.js +64 -0
  101. package/dist/esm-node/libs/render/measure.js +51 -0
  102. package/dist/esm-node/libs/render/reader.js +85 -0
  103. package/dist/esm-node/libs/render/ssr.js +80 -0
  104. package/dist/esm-node/libs/render/static.js +38 -0
  105. package/dist/esm-node/libs/render/type.js +9 -0
  106. package/dist/esm-node/libs/route/index.js +54 -0
  107. package/dist/esm-node/libs/route/matcher.js +87 -0
  108. package/dist/esm-node/libs/route/route.js +16 -0
  109. package/dist/esm-node/libs/serve-file.js +47 -0
  110. package/dist/esm-node/server/index.js +156 -0
  111. package/dist/esm-node/server/modern-server-split.js +43 -0
  112. package/dist/esm-node/server/modern-server.js +484 -0
  113. package/dist/esm-node/type.js +0 -0
  114. package/dist/esm-node/utils.js +120 -0
  115. package/dist/esm-node/worker-server.js +69 -0
  116. package/dist/js/modern/libs/render/index.js +4 -2
  117. package/dist/js/modern/server/modern-server.js +14 -8
  118. package/dist/js/node/libs/render/index.js +4 -2
  119. package/dist/js/node/server/modern-server.js +14 -8
  120. package/dist/js/treeshaking/libs/render/index.js +4 -3
  121. package/dist/js/treeshaking/server/modern-server.js +14 -8
  122. package/dist/types/libs/context/context.d.ts +1 -1
  123. package/dist/types/libs/render/index.d.ts +3 -1
  124. package/dist/types/utils.d.ts +1 -1
  125. package/package.json +17 -18
@@ -116,7 +116,7 @@ class ModernServer {
116
116
  }
117
117
  onInit(runner, app) {
118
118
  return __async(this, null, function* () {
119
- var _a;
119
+ var _a, _b;
120
120
  this.runner = runner;
121
121
  const { distDir, staticGenerate, conf } = this;
122
122
  debug("final server conf", this.conf);
@@ -148,9 +148,12 @@ class ModernServer {
148
148
  ],
149
149
  this.conf.output
150
150
  );
151
+ const ssrConfig = (_b = this.conf.server) == null ? void 0 : _b.ssr;
152
+ const forceCSR = typeof ssrConfig === "object" ? ssrConfig.forceCSR : false;
151
153
  this.routeRenderHandler = createRenderHandler({
152
154
  distDir,
153
- staticGenerate
155
+ staticGenerate,
156
+ forceCSR
154
157
  });
155
158
  yield this.setupBeforeProdMiddleware();
156
159
  this.addHandler(this.staticFileHandler);
@@ -187,8 +190,8 @@ class ModernServer {
187
190
  }
188
191
  render(req, res, url) {
189
192
  return __async(this, null, function* () {
190
- req.logger = this.logger;
191
- req.metrics = this.metrics;
193
+ req.logger = req.logger || this.logger;
194
+ req.metrics = req.metrics || this.metrics;
192
195
  const context = createContext(req, res);
193
196
  const matched = this.router.match(url || context.path);
194
197
  if (!matched) {
@@ -281,7 +284,8 @@ class ModernServer {
281
284
  {
282
285
  pwd: workDir,
283
286
  config: extension,
284
- prefix: Array.isArray(prefix) ? prefix[0] : prefix
287
+ prefix: Array.isArray(prefix) ? prefix[0] : prefix,
288
+ render: this.render.bind(this)
285
289
  },
286
290
  { onLast: () => null }
287
291
  );
@@ -327,7 +331,9 @@ class ModernServer {
327
331
  const bundles = this.router.getBundles();
328
332
  bundles.forEach((bundle) => {
329
333
  const filepath = path.join(distDir, bundle);
330
- require(filepath);
334
+ if (fs.existsSync(filepath)) {
335
+ require(filepath);
336
+ }
331
337
  });
332
338
  }
333
339
  createContext(req, res, options = {}) {
@@ -486,8 +492,8 @@ class ModernServer {
486
492
  requestHandler(req, res, next = () => {
487
493
  }) {
488
494
  res.statusCode = 200;
489
- req.logger = this.logger;
490
- req.metrics = this.metrics;
495
+ req.logger = req.logger || this.logger;
496
+ req.metrics = req.metrics || this.metrics;
491
497
  let context;
492
498
  try {
493
499
  context = this.createContext(req, res);
@@ -54,7 +54,8 @@ var import_reader = require("./reader");
54
54
  var ssr = __toESM(require("./ssr"));
55
55
  const createRenderHandler = ({
56
56
  distDir,
57
- staticGenerate
57
+ staticGenerate,
58
+ forceCSR
58
59
  }) => function render(_0) {
59
60
  return __async(this, arguments, function* ({
60
61
  ctx,
@@ -78,7 +79,8 @@ const createRenderHandler = ({
78
79
  if (!content) {
79
80
  return null;
80
81
  }
81
- if (route.isSSR) {
82
+ const useCSR = forceCSR && ctx.query.csr;
83
+ if (route.isSSR && !useCSR) {
82
84
  try {
83
85
  const result = yield ssr.render(
84
86
  ctx,
@@ -120,7 +120,7 @@ class ModernServer {
120
120
  }
121
121
  onInit(runner, app) {
122
122
  return __async(this, null, function* () {
123
- var _a;
123
+ var _a, _b;
124
124
  this.runner = runner;
125
125
  const { distDir, staticGenerate, conf } = this;
126
126
  (0, import_utils2.debug)("final server conf", this.conf);
@@ -152,9 +152,12 @@ class ModernServer {
152
152
  ],
153
153
  this.conf.output
154
154
  );
155
+ const ssrConfig = (_b = this.conf.server) == null ? void 0 : _b.ssr;
156
+ const forceCSR = typeof ssrConfig === "object" ? ssrConfig.forceCSR : false;
155
157
  this.routeRenderHandler = (0, import_render.createRenderHandler)({
156
158
  distDir,
157
- staticGenerate
159
+ staticGenerate,
160
+ forceCSR
158
161
  });
159
162
  yield this.setupBeforeProdMiddleware();
160
163
  this.addHandler(this.staticFileHandler);
@@ -191,8 +194,8 @@ class ModernServer {
191
194
  }
192
195
  render(req, res, url) {
193
196
  return __async(this, null, function* () {
194
- req.logger = this.logger;
195
- req.metrics = this.metrics;
197
+ req.logger = req.logger || this.logger;
198
+ req.metrics = req.metrics || this.metrics;
196
199
  const context = (0, import_context.createContext)(req, res);
197
200
  const matched = this.router.match(url || context.path);
198
201
  if (!matched) {
@@ -285,7 +288,8 @@ class ModernServer {
285
288
  {
286
289
  pwd: workDir,
287
290
  config: extension,
288
- prefix: Array.isArray(prefix) ? prefix[0] : prefix
291
+ prefix: Array.isArray(prefix) ? prefix[0] : prefix,
292
+ render: this.render.bind(this)
289
293
  },
290
294
  { onLast: () => null }
291
295
  );
@@ -331,7 +335,9 @@ class ModernServer {
331
335
  const bundles = this.router.getBundles();
332
336
  bundles.forEach((bundle) => {
333
337
  const filepath = import_path.default.join(distDir, bundle);
334
- require(filepath);
338
+ if (import_utils.fs.existsSync(filepath)) {
339
+ require(filepath);
340
+ }
335
341
  });
336
342
  }
337
343
  createContext(req, res, options = {}) {
@@ -490,8 +496,8 @@ class ModernServer {
490
496
  requestHandler(req, res, next = () => {
491
497
  }) {
492
498
  res.statusCode = 200;
493
- req.logger = this.logger;
494
- req.metrics = this.metrics;
499
+ req.logger = req.logger || this.logger;
500
+ req.metrics = req.metrics || this.metrics;
495
501
  let context;
496
502
  try {
497
503
  context = this.createContext(req, res);
@@ -129,10 +129,10 @@ import { handleDirectory } from "./static";
129
129
  import { readFile } from "./reader";
130
130
  import * as ssr from "./ssr";
131
131
  var createRenderHandler = function(param) {
132
- var distDir = param.distDir, staticGenerate = param.staticGenerate;
132
+ var distDir = param.distDir, staticGenerate = param.staticGenerate, forceCSR = param.forceCSR;
133
133
  return function() {
134
134
  var _render = _asyncToGenerator(function(param) {
135
- var ctx, route, runner, entryPath, urlPath, entry, result, templatePath, content, result1, err;
135
+ var ctx, route, runner, entryPath, urlPath, entry, result, templatePath, content, useCSR, result1, err;
136
136
  return __generator(this, function(_state) {
137
137
  switch(_state.label){
138
138
  case 0:
@@ -176,7 +176,8 @@ var createRenderHandler = function(param) {
176
176
  null
177
177
  ];
178
178
  }
179
- if (!route.isSSR) return [
179
+ useCSR = forceCSR && ctx.query.csr;
180
+ if (!(route.isSSR && !useCSR)) return [
180
181
  3,
181
182
  7
182
183
  ];
@@ -257,7 +257,7 @@ var ModernServer = /*#__PURE__*/ function() {
257
257
  value: function onInit(runner, app) {
258
258
  var _this = this;
259
259
  return _asyncToGenerator(function() {
260
- var _conf_bff, distDir, staticGenerate, conf, usageRoutes, staticPathRegExp;
260
+ var _conf_bff, _this_conf_server, distDir, staticGenerate, conf, usageRoutes, staticPathRegExp, ssrConfig, forceCSR;
261
261
  return __generator(this, function(_state) {
262
262
  switch(_state.label){
263
263
  case 0:
@@ -296,9 +296,12 @@ var ModernServer = /*#__PURE__*/ function() {
296
296
  target: distDir
297
297
  }
298
298
  ], _this.conf.output);
299
+ ssrConfig = (_this_conf_server = _this.conf.server) === null || _this_conf_server === void 0 ? void 0 : _this_conf_server.ssr;
300
+ forceCSR = typeof ssrConfig === "object" ? ssrConfig.forceCSR : false;
299
301
  _this.routeRenderHandler = createRenderHandler({
300
302
  distDir: distDir,
301
- staticGenerate: staticGenerate
303
+ staticGenerate: staticGenerate,
304
+ forceCSR: forceCSR
302
305
  });
303
306
  return [
304
307
  4,
@@ -393,8 +396,8 @@ var ModernServer = /*#__PURE__*/ function() {
393
396
  return __generator(this, function(_state) {
394
397
  switch(_state.label){
395
398
  case 0:
396
- req.logger = _this.logger;
397
- req.metrics = _this.metrics;
399
+ req.logger = req.logger || _this.logger;
400
+ req.metrics = req.metrics || _this.metrics;
398
401
  context = createContext(req, res);
399
402
  matched = _this.router.match(url || context.path);
400
403
  if (!matched) {
@@ -606,7 +609,8 @@ var ModernServer = /*#__PURE__*/ function() {
606
609
  runner.prepareApiServer({
607
610
  pwd: workDir,
608
611
  config: extension,
609
- prefix: Array.isArray(prefix) ? prefix[0] : prefix
612
+ prefix: Array.isArray(prefix) ? prefix[0] : prefix,
613
+ render: _this.render.bind(_this)
610
614
  }, {
611
615
  onLast: function() {
612
616
  return null;
@@ -715,7 +719,9 @@ var ModernServer = /*#__PURE__*/ function() {
715
719
  var bundles = this.router.getBundles();
716
720
  bundles.forEach(function(bundle) {
717
721
  var filepath = path.join(distDir, bundle);
718
- require(filepath);
722
+ if (fs.existsSync(filepath)) {
723
+ require(filepath);
724
+ }
719
725
  });
720
726
  }
721
727
  },
@@ -973,8 +979,8 @@ var ModernServer = /*#__PURE__*/ function() {
973
979
  value: function requestHandler(req, res) {
974
980
  var next = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : function() {};
975
981
  res.statusCode = 200;
976
- req.logger = this.logger;
977
- req.metrics = this.metrics;
982
+ req.logger = req.logger || this.logger;
983
+ req.metrics = req.metrics || this.metrics;
978
984
  var context;
979
985
  try {
980
986
  context = this.createContext(req, res);
@@ -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/lM3iZKWPu2jm0FkDHIE8Y/src/type" />
6
+ /// <reference types=".dts-temp/8rnsll2mo9ytj_poqlbk_/src/type" />
7
7
  import { IncomingMessage, ServerResponse } from 'http';
8
8
  import { URL } from 'url';
9
9
  import qs from 'querystring';
@@ -3,10 +3,12 @@ import { RenderResult, ServerHookRunner } from '../../type';
3
3
  import { ModernRoute } from '../route';
4
4
  export declare const createRenderHandler: ({
5
5
  distDir,
6
- staticGenerate
6
+ staticGenerate,
7
+ forceCSR
7
8
  }: {
8
9
  distDir: string;
9
10
  staticGenerate: boolean;
11
+ forceCSR?: boolean | undefined;
10
12
  }) => ({
11
13
  ctx,
12
14
  route,
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node/http" />
3
- /// <reference types=".dts-temp/lM3iZKWPu2jm0FkDHIE8Y/src/type" />
3
+ /// <reference types=".dts-temp/8rnsll2mo9ytj_poqlbk_/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
@@ -11,28 +11,27 @@
11
11
  "modern",
12
12
  "modern.js"
13
13
  ],
14
- "version": "2.4.1-beta.0",
14
+ "version": "2.5.1-alpha.0",
15
15
  "jsnext:source": "./src/index.ts",
16
16
  "types": "./dist/types/index.d.ts",
17
- "main": "./dist/js/node/index.js",
18
- "module": "./dist/js/treeshaking/index.js",
19
- "jsnext:modern": "./dist/js/modern/index.js",
17
+ "main": "./dist/cjs/index.js",
18
+ "module": "./dist/esm/index.js",
20
19
  "exports": {
21
20
  ".": {
22
21
  "node": {
23
22
  "jsnext:source": "./src/index.ts",
24
- "import": "./dist/js/modern/index.js",
25
- "require": "./dist/js/node/index.js"
23
+ "import": "./dist/esm-node/index.js",
24
+ "require": "./dist/cjs/index.js"
26
25
  },
27
- "default": "./dist/js/treeshaking/index.js"
26
+ "default": "./dist/esm/index.js"
28
27
  },
29
28
  "./worker": {
30
29
  "node": {
31
30
  "jsnext:source": "./src/worker-server.ts",
32
- "import": "./dist/js/modern/worker-server.js",
33
- "require": "./dist/js/node/worker-server.js"
31
+ "import": "./dist/esm-node/worker-server.js",
32
+ "require": "./dist/cjs/worker-server.js"
34
33
  },
35
- "default": "./dist/js/treeshaking/worker-server.js"
34
+ "default": "./dist/esm/worker-server.js"
36
35
  }
37
36
  },
38
37
  "typesVersions": {
@@ -46,6 +45,8 @@
46
45
  }
47
46
  },
48
47
  "dependencies": {
48
+ "@modern-js/utils": "2.5.0",
49
+ "@modern-js/server-core": "2.5.1-alpha.0",
49
50
  "etag": "^1.8.1",
50
51
  "fresh": "^0.5.2",
51
52
  "cookie": "^0.4.2",
@@ -54,11 +55,13 @@
54
55
  "lru-cache": "^6.0.0",
55
56
  "merge-deep": "^3.0.3",
56
57
  "path-to-regexp": "^6.2.0",
57
- "serve-static": "^1.14.1",
58
- "@modern-js/utils": "2.4.1-beta.0",
59
- "@modern-js/server-core": "2.4.1-beta.0"
58
+ "serve-static": "^1.14.1"
60
59
  },
61
60
  "devDependencies": {
61
+ "@modern-js/types": "2.5.0",
62
+ "@modern-js/server-core": "2.5.1-alpha.0",
63
+ "@scripts/jest-config": "2.5.0",
64
+ "@scripts/build": "2.5.0",
62
65
  "@types/cookie": "^0.4.1",
63
66
  "@types/jest": "^27",
64
67
  "@types/lru-cache": "^5.1.1",
@@ -71,11 +74,7 @@
71
74
  "jest": "^27",
72
75
  "node-mocks-http": "^1.11.0",
73
76
  "portfinder": "^1.0.28",
74
- "typescript": "^4",
75
- "@modern-js/types": "2.4.0",
76
- "@modern-js/server-core": "2.4.1-beta.0",
77
- "@scripts/build": "2.4.0",
78
- "@scripts/jest-config": "2.4.0"
77
+ "typescript": "^4"
79
78
  },
80
79
  "sideEffects": false,
81
80
  "publishConfig": {