@modern-js/prod-server 2.39.2 → 2.41.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.
@@ -231,6 +231,7 @@ class ModernServerContext {
231
231
  (0, import_class_private_field_set._)(this, _urls, /* @__PURE__ */ new Map());
232
232
  (0, import_class_private_field_set._)(this, _queries, /* @__PURE__ */ new Map());
233
233
  this.serverTiming = new import_serverTiming.ServerTiming(this.res, (0, import_utils.cutNameByHyphen)((options === null || options === void 0 ? void 0 : options.metaName) || "modern-js"));
234
+ req.reporter && (this.reporter = req.reporter);
234
235
  }
235
236
  }
236
237
  // Annotate the CommonJS export names for ESM import in node:
@@ -29,6 +29,7 @@ var import_hook_api = require("./libs/hook-api/index.worker");
29
29
  var import_route = require("./libs/route");
30
30
  var import_metrics = require("./libs/metrics");
31
31
  var import_reporter = require("./libs/reporter");
32
+ const calcFallback = (metaName) => `x-${metaName.split(/[-_]/)[0]}-ssr-fallback`;
32
33
  class ReturnResponse {
33
34
  /**
34
35
  * Iterate a Object
@@ -91,7 +92,8 @@ const checkIsSent = (context) => {
91
92
  const middlewarePipeline = (0, import_plugin.createAsyncPipeline)();
92
93
  const createHandler = (manifest) => {
93
94
  const routeMgr = new import_route.RouteMatchManager();
94
- const { pages, routes } = manifest;
95
+ const { pages, routes, options: manifestOpts } = manifest;
96
+ const { metaName = "modern-js", forceCSR = false } = manifestOpts || {};
95
97
  routeMgr.reset(routes);
96
98
  return async (options) => {
97
99
  var _page_serverHooks_afterMatch, _page_serverHooks;
@@ -103,6 +105,9 @@ const createHandler = (manifest) => {
103
105
  }
104
106
  const entryName = pageMatch.spec.urlPath;
105
107
  const page = pages[entryName];
108
+ if (forceCSR && url.searchParams.get("csr") === "1") {
109
+ return createResponse(page.template);
110
+ }
106
111
  const logger = (0, import_logger.createLogger)({
107
112
  level: "warn"
108
113
  });
@@ -122,6 +127,9 @@ const createHandler = (manifest) => {
122
127
  if (checkIsSent(hookContext)) {
123
128
  return new ReturnResponse(hookContext.res.body || "Unkown body", hookContext.res.status, hookContext.res.headers);
124
129
  }
130
+ if (forceCSR && middlewarsHookContext.request.headers[calcFallback(metaName)]) {
131
+ return createResponse(page.template);
132
+ }
125
133
  const responseLike = {
126
134
  headers: {},
127
135
  statusCode: 200,
@@ -214,6 +222,7 @@ function createWorkerHookContext(url, logger, metrics, reporter) {
214
222
  reporter
215
223
  };
216
224
  }
225
+ let appliedMiddlewares = false;
217
226
  function applyMiddlewares(ctx, middleware) {
218
227
  if (middleware) {
219
228
  const middlewares = (() => {
@@ -225,9 +234,12 @@ function applyMiddlewares(ctx, middleware) {
225
234
  ];
226
235
  }
227
236
  })();
228
- middlewares.forEach((middleware2) => {
229
- middlewarePipeline.use(middleware2);
230
- });
237
+ if (!appliedMiddlewares) {
238
+ middlewares.forEach((middleware2) => {
239
+ middlewarePipeline.use(middleware2);
240
+ });
241
+ appliedMiddlewares = true;
242
+ }
231
243
  middlewarePipeline.run(ctx, {
232
244
  onLast: () => void 0
233
245
  });
@@ -42,6 +42,7 @@ var ModernServerContext = /* @__PURE__ */ function() {
42
42
  _class_private_field_set(this, _urls, /* @__PURE__ */ new Map());
43
43
  _class_private_field_set(this, _queries, /* @__PURE__ */ new Map());
44
44
  this.serverTiming = new ServerTiming(this.res, cutNameByHyphen((options === null || options === void 0 ? void 0 : options.metaName) || "modern-js"));
45
+ req.reporter && (this.reporter = req.reporter);
45
46
  }
46
47
  _create_class(ModernServerContext2, [
47
48
  {
@@ -10,6 +10,9 @@ import { createAfterMatchContext, createAfterRenderContext, createMiddlewareCont
10
10
  import { RouteMatchManager } from "./libs/route";
11
11
  import { metrics as defaultMetrics } from "./libs/metrics";
12
12
  import { defaultReporter } from "./libs/reporter";
13
+ var calcFallback = function(metaName) {
14
+ return "x-".concat(metaName.split(/[-_]/)[0], "-ssr-fallback");
15
+ };
13
16
  var ReturnResponse = /* @__PURE__ */ function() {
14
17
  "use strict";
15
18
  function ReturnResponse2(body, status) {
@@ -88,10 +91,11 @@ var checkIsSent = function(context) {
88
91
  var middlewarePipeline = createAsyncPipeline();
89
92
  var createHandler = function(manifest) {
90
93
  var routeMgr = new RouteMatchManager();
91
- var pages = manifest.pages, routes = manifest.routes;
94
+ var pages = manifest.pages, routes = manifest.routes, manifestOpts = manifest.options;
95
+ var _ref = manifestOpts || {}, _ref_metaName = _ref.metaName, metaName = _ref_metaName === void 0 ? "modern-js" : _ref_metaName, _ref_forceCSR = _ref.forceCSR, forceCSR = _ref_forceCSR === void 0 ? false : _ref_forceCSR;
92
96
  routeMgr.reset(routes);
93
97
  return function() {
94
- var _ref = _async_to_generator(function(options) {
98
+ var _ref2 = _async_to_generator(function(options) {
95
99
  var _page_serverHooks_afterMatch, _page_serverHooks, request, loadableStats, routeManifest, url, pageMatch, entryName, page, logger, metrics, reporter, hookContext, afterMatchHookContext, _page_serverHooks1, _page_serverHooks_afterRender, _page_serverHooks2, middlewarsHookContext, responseLike, params, baseUrl, serverRenderContext, body, afterRenderHookContext, e;
96
100
  function createServerRequest(url2, baseUrl2, request2, params2) {
97
101
  var pathname = url2.pathname, host = url2.host, searchParams = url2.searchParams;
@@ -125,6 +129,12 @@ var createHandler = function(manifest) {
125
129
  }
126
130
  entryName = pageMatch.spec.urlPath;
127
131
  page = pages[entryName];
132
+ if (forceCSR && url.searchParams.get("csr") === "1") {
133
+ return [
134
+ 2,
135
+ createResponse(page.template)
136
+ ];
137
+ }
128
138
  logger = createLogger({
129
139
  level: "warn"
130
140
  });
@@ -162,6 +172,12 @@ var createHandler = function(manifest) {
162
172
  new ReturnResponse(hookContext.res.body || "Unkown body", hookContext.res.status, hookContext.res.headers)
163
173
  ];
164
174
  }
175
+ if (forceCSR && middlewarsHookContext.request.headers[calcFallback(metaName)]) {
176
+ return [
177
+ 2,
178
+ createResponse(page.template)
179
+ ];
180
+ }
165
181
  responseLike = {
166
182
  headers: {},
167
183
  statusCode: 200,
@@ -232,7 +248,7 @@ var createHandler = function(manifest) {
232
248
  });
233
249
  });
234
250
  return function(options) {
235
- return _ref.apply(this, arguments);
251
+ return _ref2.apply(this, arguments);
236
252
  };
237
253
  }();
238
254
  };
@@ -261,6 +277,7 @@ function createWorkerHookContext(url, logger, metrics, reporter) {
261
277
  reporter
262
278
  };
263
279
  }
280
+ var appliedMiddlewares = false;
264
281
  function applyMiddlewares(ctx, middleware) {
265
282
  if (middleware) {
266
283
  var middlewares = function() {
@@ -272,9 +289,12 @@ function applyMiddlewares(ctx, middleware) {
272
289
  ];
273
290
  }
274
291
  }();
275
- middlewares.forEach(function(middleware2) {
276
- middlewarePipeline.use(middleware2);
277
- });
292
+ if (!appliedMiddlewares) {
293
+ middlewares.forEach(function(middleware2) {
294
+ middlewarePipeline.use(middleware2);
295
+ });
296
+ appliedMiddlewares = true;
297
+ }
278
298
  middlewarePipeline.run(ctx, {
279
299
  onLast: function() {
280
300
  return void 0;
@@ -198,6 +198,7 @@ class ModernServerContext {
198
198
  _class_private_field_set(this, _urls, /* @__PURE__ */ new Map());
199
199
  _class_private_field_set(this, _queries, /* @__PURE__ */ new Map());
200
200
  this.serverTiming = new ServerTiming(this.res, cutNameByHyphen((options === null || options === void 0 ? void 0 : options.metaName) || "modern-js"));
201
+ req.reporter && (this.reporter = req.reporter);
201
202
  }
202
203
  }
203
204
  export {
@@ -5,6 +5,7 @@ import { createAfterMatchContext, createAfterRenderContext, createMiddlewareCont
5
5
  import { RouteMatchManager } from "./libs/route";
6
6
  import { metrics as defaultMetrics } from "./libs/metrics";
7
7
  import { defaultReporter } from "./libs/reporter";
8
+ const calcFallback = (metaName) => `x-${metaName.split(/[-_]/)[0]}-ssr-fallback`;
8
9
  class ReturnResponse {
9
10
  /**
10
11
  * Iterate a Object
@@ -67,7 +68,8 @@ const checkIsSent = (context) => {
67
68
  const middlewarePipeline = createAsyncPipeline();
68
69
  const createHandler = (manifest) => {
69
70
  const routeMgr = new RouteMatchManager();
70
- const { pages, routes } = manifest;
71
+ const { pages, routes, options: manifestOpts } = manifest;
72
+ const { metaName = "modern-js", forceCSR = false } = manifestOpts || {};
71
73
  routeMgr.reset(routes);
72
74
  return async (options) => {
73
75
  var _page_serverHooks_afterMatch, _page_serverHooks;
@@ -79,6 +81,9 @@ const createHandler = (manifest) => {
79
81
  }
80
82
  const entryName = pageMatch.spec.urlPath;
81
83
  const page = pages[entryName];
84
+ if (forceCSR && url.searchParams.get("csr") === "1") {
85
+ return createResponse(page.template);
86
+ }
82
87
  const logger = createLogger({
83
88
  level: "warn"
84
89
  });
@@ -98,6 +103,9 @@ const createHandler = (manifest) => {
98
103
  if (checkIsSent(hookContext)) {
99
104
  return new ReturnResponse(hookContext.res.body || "Unkown body", hookContext.res.status, hookContext.res.headers);
100
105
  }
106
+ if (forceCSR && middlewarsHookContext.request.headers[calcFallback(metaName)]) {
107
+ return createResponse(page.template);
108
+ }
101
109
  const responseLike = {
102
110
  headers: {},
103
111
  statusCode: 200,
@@ -190,6 +198,7 @@ function createWorkerHookContext(url, logger, metrics, reporter) {
190
198
  reporter
191
199
  };
192
200
  }
201
+ let appliedMiddlewares = false;
193
202
  function applyMiddlewares(ctx, middleware) {
194
203
  if (middleware) {
195
204
  const middlewares = (() => {
@@ -201,9 +210,12 @@ function applyMiddlewares(ctx, middleware) {
201
210
  ];
202
211
  }
203
212
  })();
204
- middlewares.forEach((middleware2) => {
205
- middlewarePipeline.use(middleware2);
206
- });
213
+ if (!appliedMiddlewares) {
214
+ middlewares.forEach((middleware2) => {
215
+ middlewarePipeline.use(middleware2);
216
+ });
217
+ appliedMiddlewares = true;
218
+ }
207
219
  middlewarePipeline.run(ctx, {
208
220
  onLast: () => void 0
209
221
  });
@@ -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/4t_qqLOCFy4IT_CatFGOb/src/type" />
5
+ /// <reference types=".dts-temp/MyKuaUY5TchUfAps6LPPb/src/type" />
6
6
  import { IncomingMessage, ServerResponse } from 'http';
7
7
  import qs from 'querystring';
8
8
  import type { ModernServerContext as ModernServerContextInterface, Reporter as ModernServerReporter, ServerTiming as ModernServerTiming } from '@modern-js/types';
@@ -5,12 +5,13 @@ import { IncomingMessage, Server, ServerResponse } from 'http';
5
5
  import { Readable } from 'stream';
6
6
  import { serverManager, ServerOptions } from '@modern-js/server-core';
7
7
  import type { ServerPlugin } from '@modern-js/server-core';
8
- import type { Metrics, Logger, NextFunction, ModernServerContext, InternalPlugins } from '@modern-js/types';
8
+ import type { Metrics, Logger, NextFunction, ModernServerContext, InternalPlugins, Reporter } from '@modern-js/types';
9
9
  import type { ModernRouteInterface } from './libs/route';
10
10
  declare module 'http' {
11
11
  interface IncomingMessage {
12
12
  logger: Logger;
13
13
  metrics: Metrics;
14
+ reporter?: Reporter;
14
15
  body?: any;
15
16
  }
16
17
  interface OutgoingMessage {
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node/http" />
3
- /// <reference types=".dts-temp/4t_qqLOCFy4IT_CatFGOb/src/type" />
3
+ /// <reference types=".dts-temp/MyKuaUY5TchUfAps6LPPb/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;
@@ -50,6 +50,10 @@ export type Manifest = {
50
50
  */
51
51
  pages: Record<string, Page>;
52
52
  routes: ModernRouteInterface[];
53
+ options?: {
54
+ forceCSR?: boolean;
55
+ metaName?: string;
56
+ };
53
57
  };
54
58
  export declare const createHandler: (manifest: Manifest) => (options: HandlerOptions) => Promise<ReturnResponse>;
55
59
  export {};
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "modern",
16
16
  "modern.js"
17
17
  ],
18
- "version": "2.39.2",
18
+ "version": "2.41.0",
19
19
  "jsnext:source": "./src/index.ts",
20
20
  "types": "./dist/types/index.d.ts",
21
21
  "main": "./dist/cjs/index.js",
@@ -63,24 +63,24 @@
63
63
  }
64
64
  },
65
65
  "dependencies": {
66
- "@swc/helpers": "0.5.1",
67
- "cookie": "^0.4.2",
66
+ "@swc/helpers": "0.5.3",
67
+ "cookie": "0.5.0",
68
68
  "etag": "^1.8.1",
69
69
  "fresh": "^0.5.2",
70
- "http-proxy-middleware": "^2.0.1",
70
+ "http-proxy-middleware": "^2.0.4",
71
71
  "ignore-styles": "^5.0.1",
72
72
  "lru-cache": "^6.0.0",
73
73
  "merge-deep": "^3.0.3",
74
74
  "node-html-parser": "^6.1.5",
75
75
  "path-to-regexp": "^6.2.0",
76
76
  "serve-static": "^1.14.1",
77
- "@modern-js/plugin": "2.39.2",
78
- "@modern-js/server-core": "2.39.2",
79
- "@modern-js/utils": "2.39.2",
80
- "@modern-js/runtime-utils": "2.39.2"
77
+ "@modern-js/plugin": "2.41.0",
78
+ "@modern-js/server-core": "2.41.0",
79
+ "@modern-js/utils": "2.41.0",
80
+ "@modern-js/runtime-utils": "2.41.0"
81
81
  },
82
82
  "devDependencies": {
83
- "@types/cookie": "^0.4.1",
83
+ "@types/cookie": "0.5.1",
84
84
  "@types/etag": "^1.8.1",
85
85
  "@types/fresh": "^0.5.0",
86
86
  "@types/jest": "^29",
@@ -89,17 +89,17 @@
89
89
  "@types/node": "^14",
90
90
  "@types/serve-static": "^1.13.10",
91
91
  "@types/ws": "^8.5.5",
92
- "axios": "^1.2.1",
92
+ "axios": "^1.6.0",
93
93
  "jest": "^29",
94
94
  "memfs": "^3.5.1",
95
95
  "node-mocks-http": "^1.11.0",
96
96
  "portfinder": "^1.0.28",
97
97
  "typescript": "^5",
98
98
  "ws": "^8.13.0",
99
- "@modern-js/server-core": "2.39.2",
100
- "@modern-js/types": "2.39.2",
101
- "@scripts/build": "2.39.2",
102
- "@scripts/jest-config": "2.39.2"
99
+ "@modern-js/server-core": "2.41.0",
100
+ "@scripts/build": "2.41.0",
101
+ "@modern-js/types": "2.41.0",
102
+ "@scripts/jest-config": "2.41.0"
103
103
  },
104
104
  "sideEffects": false,
105
105
  "publishConfig": {