@modern-js/prod-server 2.40.0 → 2.42.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.
- package/dist/cjs/libs/hook-api/index.js +2 -1
- package/dist/cjs/libs/hook-api/index.worker.js +2 -1
- package/dist/cjs/server/modernServer.js +1 -1
- package/dist/cjs/workerServer.js +34 -10
- package/dist/esm/libs/hook-api/index.js +2 -1
- package/dist/esm/libs/hook-api/index.worker.js +2 -1
- package/dist/esm/server/modernServer.js +1 -1
- package/dist/esm/workerServer.js +75 -13
- package/dist/esm-node/libs/hook-api/index.js +2 -1
- package/dist/esm-node/libs/hook-api/index.worker.js +2 -1
- package/dist/esm-node/server/modernServer.js +1 -1
- package/dist/esm-node/workerServer.js +34 -10
- package/dist/types/constants.d.ts +20 -20
- package/dist/types/index.d.ts +1 -1
- package/dist/types/libs/context/context.d.ts +50 -50
- package/dist/types/libs/context/index.d.ts +1 -1
- package/dist/types/libs/hook-api/base.d.ts +43 -43
- package/dist/types/libs/hook-api/index.d.ts +3 -3
- package/dist/types/libs/hook-api/index.worker.d.ts +13 -13
- package/dist/types/libs/hook-api/route.d.ts +8 -8
- package/dist/types/libs/hook-api/template.d.ts +18 -18
- package/dist/types/libs/hook-api/templateForStream.d.ts +6 -11
- package/dist/types/libs/loadConfig.d.ts +5 -9
- package/dist/types/libs/metrics.d.ts +1 -1
- package/dist/types/libs/preload/flushServerHeader.d.ts +6 -12
- package/dist/types/libs/preload/index.d.ts +1 -1
- package/dist/types/libs/preload/parseLinks.d.ts +9 -13
- package/dist/types/libs/preload/shouldFlushServerHeader.d.ts +1 -1
- package/dist/types/libs/preload/transformLinks2String.d.ts +1 -1
- package/dist/types/libs/proxy.d.ts +3 -3
- package/dist/types/libs/render/cache/__tests__/cache.fun.test.d.ts +1 -1
- package/dist/types/libs/render/cache/__tests__/cache.test.d.ts +1 -1
- package/dist/types/libs/render/cache/__tests__/cacheable.d.ts +58 -58
- package/dist/types/libs/render/cache/__tests__/error-configuration.d.ts +23 -23
- package/dist/types/libs/render/cache/__tests__/matched-cache.d.ts +101 -101
- package/dist/types/libs/render/cache/index.d.ts +1 -1
- package/dist/types/libs/render/cache/page-caches/index.d.ts +1 -1
- package/dist/types/libs/render/cache/page-caches/lru.d.ts +12 -12
- package/dist/types/libs/render/cache/spr.d.ts +16 -16
- package/dist/types/libs/render/cache/type.d.ts +33 -33
- package/dist/types/libs/render/cache/util.d.ts +3 -3
- package/dist/types/libs/render/index.d.ts +11 -11
- package/dist/types/libs/render/measure.d.ts +6 -6
- package/dist/types/libs/render/reader.d.ts +13 -13
- package/dist/types/libs/render/ssr.d.ts +9 -9
- package/dist/types/libs/render/static.d.ts +1 -1
- package/dist/types/libs/render/type.d.ts +18 -18
- package/dist/types/libs/render/utils.d.ts +1 -1
- package/dist/types/libs/reporter.d.ts +1 -1
- package/dist/types/libs/route/index.d.ts +10 -10
- package/dist/types/libs/route/matcher.d.ts +12 -12
- package/dist/types/libs/route/route.d.ts +11 -11
- package/dist/types/libs/serveFile.d.ts +3 -3
- package/dist/types/libs/serverTiming.d.ts +8 -8
- package/dist/types/renderHtml.d.ts +15 -15
- package/dist/types/server/index.d.ts +46 -48
- package/dist/types/server/modernServer.d.ts +57 -69
- package/dist/types/server/modernServerSplit.d.ts +1 -1
- package/dist/types/type.d.ts +48 -48
- package/dist/types/utils.d.ts +8 -8
- package/dist/types/workerServer.d.ts +45 -44
- package/package.json +14 -14
|
@@ -43,10 +43,11 @@ const createAfterMatchContext = (context, entryName) => {
|
|
|
43
43
|
router: new import_route.RouteAPI(entryName)
|
|
44
44
|
};
|
|
45
45
|
};
|
|
46
|
-
const createAfterRenderContext = (context, content) => {
|
|
46
|
+
const createAfterRenderContext = (context, route, content) => {
|
|
47
47
|
const baseContext = base(context);
|
|
48
48
|
return {
|
|
49
49
|
...baseContext,
|
|
50
|
+
route,
|
|
50
51
|
template: new import_template.TemplateAPI(content)
|
|
51
52
|
};
|
|
52
53
|
};
|
|
@@ -85,10 +85,11 @@ const createAfterMatchContext = (context, entryName) => {
|
|
|
85
85
|
router: new import_route.RouteAPI(entryName)
|
|
86
86
|
};
|
|
87
87
|
};
|
|
88
|
-
const createAfterRenderContext = (context, content) => {
|
|
88
|
+
const createAfterRenderContext = (context, route, content) => {
|
|
89
89
|
const baseContext = base(context);
|
|
90
90
|
return {
|
|
91
91
|
...baseContext,
|
|
92
|
+
route,
|
|
92
93
|
template: new import_template.TemplateAPI(content)
|
|
93
94
|
};
|
|
94
95
|
};
|
|
@@ -373,7 +373,7 @@ class ModernServer {
|
|
|
373
373
|
return;
|
|
374
374
|
}
|
|
375
375
|
if (route.entryName && this.runMode === import_constants.RUN_MODE.FULL) {
|
|
376
|
-
const afterRenderContext = (0, import_hook_api.createAfterRenderContext)(context, response.toString());
|
|
376
|
+
const afterRenderContext = (0, import_hook_api.createAfterRenderContext)(context, route, response.toString());
|
|
377
377
|
const end2 = (0, import_time.time)();
|
|
378
378
|
await this.runner.afterRender(afterRenderContext, {
|
|
379
379
|
onLast: import_utils2.noop
|
package/dist/cjs/workerServer.js
CHANGED
|
@@ -24,11 +24,28 @@ __export(workerServer_exports, {
|
|
|
24
24
|
module.exports = __toCommonJS(workerServer_exports);
|
|
25
25
|
var import_define_property = require("@swc/helpers/_/_define_property");
|
|
26
26
|
var import_plugin = require("@modern-js/plugin");
|
|
27
|
-
var import_logger = require("@modern-js/utils/logger");
|
|
28
27
|
var import_hook_api = require("./libs/hook-api/index.worker");
|
|
29
28
|
var import_route = require("./libs/route");
|
|
30
29
|
var import_metrics = require("./libs/metrics");
|
|
31
30
|
var import_reporter = require("./libs/reporter");
|
|
31
|
+
const createLogger = () => ({
|
|
32
|
+
error(message, ...args) {
|
|
33
|
+
console.error(message, ...args);
|
|
34
|
+
},
|
|
35
|
+
info(message, ...args) {
|
|
36
|
+
console.error(message, ...args);
|
|
37
|
+
},
|
|
38
|
+
warn(message, ...args) {
|
|
39
|
+
console.warn(message, ...args);
|
|
40
|
+
},
|
|
41
|
+
debug(message, ...args) {
|
|
42
|
+
console.debug(message, ...args);
|
|
43
|
+
},
|
|
44
|
+
log(message, ...args) {
|
|
45
|
+
console.log(message, ...args);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
const calcFallback = (metaName) => `x-${metaName.split(/[-_]/)[0]}-ssr-fallback`;
|
|
32
49
|
class ReturnResponse {
|
|
33
50
|
/**
|
|
34
51
|
* Iterate a Object
|
|
@@ -91,7 +108,8 @@ const checkIsSent = (context) => {
|
|
|
91
108
|
const middlewarePipeline = (0, import_plugin.createAsyncPipeline)();
|
|
92
109
|
const createHandler = (manifest) => {
|
|
93
110
|
const routeMgr = new import_route.RouteMatchManager();
|
|
94
|
-
const { pages, routes, options: manifestOpts
|
|
111
|
+
const { pages, routes, options: manifestOpts } = manifest;
|
|
112
|
+
const { metaName = "modern-js", forceCSR = false } = manifestOpts || {};
|
|
95
113
|
routeMgr.reset(routes);
|
|
96
114
|
return async (options) => {
|
|
97
115
|
var _page_serverHooks_afterMatch, _page_serverHooks;
|
|
@@ -103,14 +121,13 @@ const createHandler = (manifest) => {
|
|
|
103
121
|
}
|
|
104
122
|
const entryName = pageMatch.spec.urlPath;
|
|
105
123
|
const page = pages[entryName];
|
|
106
|
-
if (
|
|
124
|
+
if (forceCSR && url.searchParams.get("csr") === "1") {
|
|
107
125
|
return createResponse(page.template);
|
|
108
126
|
}
|
|
109
|
-
const logger = (
|
|
110
|
-
level: "warn"
|
|
111
|
-
});
|
|
127
|
+
const logger = createLogger();
|
|
112
128
|
const metrics = import_metrics.metrics;
|
|
113
129
|
const reporter = import_reporter.defaultReporter;
|
|
130
|
+
const route = pageMatch.generate(url.pathname);
|
|
114
131
|
const hookContext = createWorkerHookContext(request.url, logger, metrics, reporter);
|
|
115
132
|
const afterMatchHookContext = (0, import_hook_api.createAfterMatchContext)(hookContext, entryName);
|
|
116
133
|
page === null || page === void 0 ? void 0 : (_page_serverHooks = page.serverHooks) === null || _page_serverHooks === void 0 ? void 0 : (_page_serverHooks_afterMatch = _page_serverHooks.afterMatch) === null || _page_serverHooks_afterMatch === void 0 ? void 0 : _page_serverHooks_afterMatch.call(_page_serverHooks, afterMatchHookContext, () => void 0);
|
|
@@ -125,6 +142,9 @@ const createHandler = (manifest) => {
|
|
|
125
142
|
if (checkIsSent(hookContext)) {
|
|
126
143
|
return new ReturnResponse(hookContext.res.body || "Unkown body", hookContext.res.status, hookContext.res.headers);
|
|
127
144
|
}
|
|
145
|
+
if (forceCSR && middlewarsHookContext.request.headers[calcFallback(metaName)]) {
|
|
146
|
+
return createResponse(page.template);
|
|
147
|
+
}
|
|
128
148
|
const responseLike = {
|
|
129
149
|
headers: {},
|
|
130
150
|
statusCode: 200,
|
|
@@ -158,7 +178,7 @@ const createHandler = (manifest) => {
|
|
|
158
178
|
}
|
|
159
179
|
};
|
|
160
180
|
const body = await page.serverRender(serverRenderContext);
|
|
161
|
-
const afterRenderHookContext = (0, import_hook_api.createAfterRenderContext)(hookContext, body);
|
|
181
|
+
const afterRenderHookContext = (0, import_hook_api.createAfterRenderContext)(hookContext, route, body);
|
|
162
182
|
(_page_serverHooks2 = page.serverHooks) === null || _page_serverHooks2 === void 0 ? void 0 : (_page_serverHooks_afterRender = _page_serverHooks2.afterRender) === null || _page_serverHooks_afterRender === void 0 ? void 0 : _page_serverHooks_afterRender.call(_page_serverHooks2, afterRenderHookContext, () => void 0);
|
|
163
183
|
if (checkIsSent(hookContext)) {
|
|
164
184
|
return new ReturnResponse(hookContext.res.body || "Unkown body", hookContext.res.status, hookContext.res.headers);
|
|
@@ -217,6 +237,7 @@ function createWorkerHookContext(url, logger, metrics, reporter) {
|
|
|
217
237
|
reporter
|
|
218
238
|
};
|
|
219
239
|
}
|
|
240
|
+
let appliedMiddlewares = false;
|
|
220
241
|
function applyMiddlewares(ctx, middleware) {
|
|
221
242
|
if (middleware) {
|
|
222
243
|
const middlewares = (() => {
|
|
@@ -228,9 +249,12 @@ function applyMiddlewares(ctx, middleware) {
|
|
|
228
249
|
];
|
|
229
250
|
}
|
|
230
251
|
})();
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
252
|
+
if (!appliedMiddlewares) {
|
|
253
|
+
middlewares.forEach((middleware2) => {
|
|
254
|
+
middlewarePipeline.use(middleware2);
|
|
255
|
+
});
|
|
256
|
+
appliedMiddlewares = true;
|
|
257
|
+
}
|
|
234
258
|
middlewarePipeline.run(ctx, {
|
|
235
259
|
onLast: () => void 0
|
|
236
260
|
});
|
|
@@ -18,9 +18,10 @@ var createAfterMatchContext = function(context, entryName) {
|
|
|
18
18
|
router: new RouteAPI(entryName)
|
|
19
19
|
});
|
|
20
20
|
};
|
|
21
|
-
var createAfterRenderContext = function(context, content) {
|
|
21
|
+
var createAfterRenderContext = function(context, route, content) {
|
|
22
22
|
var baseContext = base(context);
|
|
23
23
|
return _object_spread_props(_object_spread({}, baseContext), {
|
|
24
|
+
route,
|
|
24
25
|
template: new TemplateAPI(content)
|
|
25
26
|
});
|
|
26
27
|
};
|
|
@@ -82,9 +82,10 @@ var createAfterMatchContext = function(context, entryName) {
|
|
|
82
82
|
router: new RouteAPI(entryName)
|
|
83
83
|
});
|
|
84
84
|
};
|
|
85
|
-
var createAfterRenderContext = function(context, content) {
|
|
85
|
+
var createAfterRenderContext = function(context, route, content) {
|
|
86
86
|
var baseContext = base(context);
|
|
87
87
|
return _object_spread_props(_object_spread({}, baseContext), {
|
|
88
|
+
route,
|
|
88
89
|
template: new TemplateAPI(content)
|
|
89
90
|
});
|
|
90
91
|
};
|
|
@@ -800,7 +800,7 @@ var ModernServer = /* @__PURE__ */ function() {
|
|
|
800
800
|
3,
|
|
801
801
|
10
|
|
802
802
|
];
|
|
803
|
-
afterRenderContext = createAfterRenderContext(context, response.toString());
|
|
803
|
+
afterRenderContext = createAfterRenderContext(context, route, response.toString());
|
|
804
804
|
end3 = time();
|
|
805
805
|
return [
|
|
806
806
|
4,
|
package/dist/esm/workerServer.js
CHANGED
|
@@ -3,13 +3,65 @@ import { _ as _class_call_check } from "@swc/helpers/_/_class_call_check";
|
|
|
3
3
|
import { _ as _create_class } from "@swc/helpers/_/_create_class";
|
|
4
4
|
import { _ as _define_property } from "@swc/helpers/_/_define_property";
|
|
5
5
|
import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
|
|
6
|
+
import { _ as _to_consumable_array } from "@swc/helpers/_/_to_consumable_array";
|
|
6
7
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
7
8
|
import { createAsyncPipeline } from "@modern-js/plugin";
|
|
8
|
-
import { createLogger } from "@modern-js/utils/logger";
|
|
9
9
|
import { createAfterMatchContext, createAfterRenderContext, createMiddlewareContext } from "./libs/hook-api/index.worker";
|
|
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 createLogger = function() {
|
|
14
|
+
return {
|
|
15
|
+
error: function error(message) {
|
|
16
|
+
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
17
|
+
args[_key - 1] = arguments[_key];
|
|
18
|
+
}
|
|
19
|
+
var _console;
|
|
20
|
+
(_console = console).error.apply(_console, [
|
|
21
|
+
message
|
|
22
|
+
].concat(_to_consumable_array(args)));
|
|
23
|
+
},
|
|
24
|
+
info: function info(message) {
|
|
25
|
+
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
26
|
+
args[_key - 1] = arguments[_key];
|
|
27
|
+
}
|
|
28
|
+
var _console;
|
|
29
|
+
(_console = console).error.apply(_console, [
|
|
30
|
+
message
|
|
31
|
+
].concat(_to_consumable_array(args)));
|
|
32
|
+
},
|
|
33
|
+
warn: function warn(message) {
|
|
34
|
+
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
35
|
+
args[_key - 1] = arguments[_key];
|
|
36
|
+
}
|
|
37
|
+
var _console;
|
|
38
|
+
(_console = console).warn.apply(_console, [
|
|
39
|
+
message
|
|
40
|
+
].concat(_to_consumable_array(args)));
|
|
41
|
+
},
|
|
42
|
+
debug: function debug(message) {
|
|
43
|
+
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
44
|
+
args[_key - 1] = arguments[_key];
|
|
45
|
+
}
|
|
46
|
+
var _console;
|
|
47
|
+
(_console = console).debug.apply(_console, [
|
|
48
|
+
message
|
|
49
|
+
].concat(_to_consumable_array(args)));
|
|
50
|
+
},
|
|
51
|
+
log: function log(message) {
|
|
52
|
+
for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
|
53
|
+
args[_key - 1] = arguments[_key];
|
|
54
|
+
}
|
|
55
|
+
var _console;
|
|
56
|
+
(_console = console).log.apply(_console, [
|
|
57
|
+
message
|
|
58
|
+
].concat(_to_consumable_array(args)));
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
var calcFallback = function(metaName) {
|
|
63
|
+
return "x-".concat(metaName.split(/[-_]/)[0], "-ssr-fallback");
|
|
64
|
+
};
|
|
13
65
|
var ReturnResponse = /* @__PURE__ */ function() {
|
|
14
66
|
"use strict";
|
|
15
67
|
function ReturnResponse2(body, status) {
|
|
@@ -88,11 +140,12 @@ var checkIsSent = function(context) {
|
|
|
88
140
|
var middlewarePipeline = createAsyncPipeline();
|
|
89
141
|
var createHandler = function(manifest) {
|
|
90
142
|
var routeMgr = new RouteMatchManager();
|
|
91
|
-
var pages = manifest.pages, routes = manifest.routes,
|
|
143
|
+
var pages = manifest.pages, routes = manifest.routes, manifestOpts = manifest.options;
|
|
144
|
+
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
145
|
routeMgr.reset(routes);
|
|
93
146
|
return function() {
|
|
94
|
-
var
|
|
95
|
-
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;
|
|
147
|
+
var _ref2 = _async_to_generator(function(options) {
|
|
148
|
+
var _page_serverHooks_afterMatch, _page_serverHooks, request, loadableStats, routeManifest, url, pageMatch, entryName, page, logger, metrics, reporter, route, hookContext, afterMatchHookContext, _page_serverHooks1, _page_serverHooks_afterRender, _page_serverHooks2, middlewarsHookContext, responseLike, params, baseUrl, serverRenderContext, body, afterRenderHookContext, e;
|
|
96
149
|
function createServerRequest(url2, baseUrl2, request2, params2) {
|
|
97
150
|
var pathname = url2.pathname, host = url2.host, searchParams = url2.searchParams;
|
|
98
151
|
var rawHeaders = request2.headers;
|
|
@@ -125,17 +178,16 @@ var createHandler = function(manifest) {
|
|
|
125
178
|
}
|
|
126
179
|
entryName = pageMatch.spec.urlPath;
|
|
127
180
|
page = pages[entryName];
|
|
128
|
-
if (
|
|
181
|
+
if (forceCSR && url.searchParams.get("csr") === "1") {
|
|
129
182
|
return [
|
|
130
183
|
2,
|
|
131
184
|
createResponse(page.template)
|
|
132
185
|
];
|
|
133
186
|
}
|
|
134
|
-
logger = createLogger(
|
|
135
|
-
level: "warn"
|
|
136
|
-
});
|
|
187
|
+
logger = createLogger();
|
|
137
188
|
metrics = defaultMetrics;
|
|
138
189
|
reporter = defaultReporter;
|
|
190
|
+
route = pageMatch.generate(url.pathname);
|
|
139
191
|
hookContext = createWorkerHookContext(request.url, logger, metrics, reporter);
|
|
140
192
|
afterMatchHookContext = createAfterMatchContext(hookContext, entryName);
|
|
141
193
|
page === null || page === void 0 ? void 0 : (_page_serverHooks = page.serverHooks) === null || _page_serverHooks === void 0 ? void 0 : (_page_serverHooks_afterMatch = _page_serverHooks.afterMatch) === null || _page_serverHooks_afterMatch === void 0 ? void 0 : _page_serverHooks_afterMatch.call(_page_serverHooks, afterMatchHookContext, function() {
|
|
@@ -168,6 +220,12 @@ var createHandler = function(manifest) {
|
|
|
168
220
|
new ReturnResponse(hookContext.res.body || "Unkown body", hookContext.res.status, hookContext.res.headers)
|
|
169
221
|
];
|
|
170
222
|
}
|
|
223
|
+
if (forceCSR && middlewarsHookContext.request.headers[calcFallback(metaName)]) {
|
|
224
|
+
return [
|
|
225
|
+
2,
|
|
226
|
+
createResponse(page.template)
|
|
227
|
+
];
|
|
228
|
+
}
|
|
171
229
|
responseLike = {
|
|
172
230
|
headers: {},
|
|
173
231
|
statusCode: 200,
|
|
@@ -206,7 +264,7 @@ var createHandler = function(manifest) {
|
|
|
206
264
|
];
|
|
207
265
|
case 2:
|
|
208
266
|
body = _state.sent();
|
|
209
|
-
afterRenderHookContext = createAfterRenderContext(hookContext, body);
|
|
267
|
+
afterRenderHookContext = createAfterRenderContext(hookContext, route, body);
|
|
210
268
|
(_page_serverHooks2 = page.serverHooks) === null || _page_serverHooks2 === void 0 ? void 0 : (_page_serverHooks_afterRender = _page_serverHooks2.afterRender) === null || _page_serverHooks_afterRender === void 0 ? void 0 : _page_serverHooks_afterRender.call(_page_serverHooks2, afterRenderHookContext, function() {
|
|
211
269
|
return void 0;
|
|
212
270
|
});
|
|
@@ -238,7 +296,7 @@ var createHandler = function(manifest) {
|
|
|
238
296
|
});
|
|
239
297
|
});
|
|
240
298
|
return function(options) {
|
|
241
|
-
return
|
|
299
|
+
return _ref2.apply(this, arguments);
|
|
242
300
|
};
|
|
243
301
|
}();
|
|
244
302
|
};
|
|
@@ -267,6 +325,7 @@ function createWorkerHookContext(url, logger, metrics, reporter) {
|
|
|
267
325
|
reporter
|
|
268
326
|
};
|
|
269
327
|
}
|
|
328
|
+
var appliedMiddlewares = false;
|
|
270
329
|
function applyMiddlewares(ctx, middleware) {
|
|
271
330
|
if (middleware) {
|
|
272
331
|
var middlewares = function() {
|
|
@@ -278,9 +337,12 @@ function applyMiddlewares(ctx, middleware) {
|
|
|
278
337
|
];
|
|
279
338
|
}
|
|
280
339
|
}();
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
340
|
+
if (!appliedMiddlewares) {
|
|
341
|
+
middlewares.forEach(function(middleware2) {
|
|
342
|
+
middlewarePipeline.use(middleware2);
|
|
343
|
+
});
|
|
344
|
+
appliedMiddlewares = true;
|
|
345
|
+
}
|
|
284
346
|
middlewarePipeline.run(ctx, {
|
|
285
347
|
onLast: function() {
|
|
286
348
|
return void 0;
|
|
@@ -17,10 +17,11 @@ const createAfterMatchContext = (context, entryName) => {
|
|
|
17
17
|
router: new RouteAPI(entryName)
|
|
18
18
|
};
|
|
19
19
|
};
|
|
20
|
-
const createAfterRenderContext = (context, content) => {
|
|
20
|
+
const createAfterRenderContext = (context, route, content) => {
|
|
21
21
|
const baseContext = base(context);
|
|
22
22
|
return {
|
|
23
23
|
...baseContext,
|
|
24
|
+
route,
|
|
24
25
|
template: new TemplateAPI(content)
|
|
25
26
|
};
|
|
26
27
|
};
|
|
@@ -59,10 +59,11 @@ const createAfterMatchContext = (context, entryName) => {
|
|
|
59
59
|
router: new RouteAPI(entryName)
|
|
60
60
|
};
|
|
61
61
|
};
|
|
62
|
-
const createAfterRenderContext = (context, content) => {
|
|
62
|
+
const createAfterRenderContext = (context, route, content) => {
|
|
63
63
|
const baseContext = base(context);
|
|
64
64
|
return {
|
|
65
65
|
...baseContext,
|
|
66
|
+
route,
|
|
66
67
|
template: new TemplateAPI(content)
|
|
67
68
|
};
|
|
68
69
|
};
|
|
@@ -340,7 +340,7 @@ class ModernServer {
|
|
|
340
340
|
return;
|
|
341
341
|
}
|
|
342
342
|
if (route.entryName && this.runMode === RUN_MODE.FULL) {
|
|
343
|
-
const afterRenderContext = createAfterRenderContext(context, response.toString());
|
|
343
|
+
const afterRenderContext = createAfterRenderContext(context, route, response.toString());
|
|
344
344
|
const end2 = time();
|
|
345
345
|
await this.runner.afterRender(afterRenderContext, {
|
|
346
346
|
onLast: noop
|
|
@@ -1,10 +1,27 @@
|
|
|
1
1
|
import { _ as _define_property } from "@swc/helpers/_/_define_property";
|
|
2
2
|
import { createAsyncPipeline } from "@modern-js/plugin";
|
|
3
|
-
import { createLogger } from "@modern-js/utils/logger";
|
|
4
3
|
import { createAfterMatchContext, createAfterRenderContext, createMiddlewareContext } from "./libs/hook-api/index.worker";
|
|
5
4
|
import { RouteMatchManager } from "./libs/route";
|
|
6
5
|
import { metrics as defaultMetrics } from "./libs/metrics";
|
|
7
6
|
import { defaultReporter } from "./libs/reporter";
|
|
7
|
+
const createLogger = () => ({
|
|
8
|
+
error(message, ...args) {
|
|
9
|
+
console.error(message, ...args);
|
|
10
|
+
},
|
|
11
|
+
info(message, ...args) {
|
|
12
|
+
console.error(message, ...args);
|
|
13
|
+
},
|
|
14
|
+
warn(message, ...args) {
|
|
15
|
+
console.warn(message, ...args);
|
|
16
|
+
},
|
|
17
|
+
debug(message, ...args) {
|
|
18
|
+
console.debug(message, ...args);
|
|
19
|
+
},
|
|
20
|
+
log(message, ...args) {
|
|
21
|
+
console.log(message, ...args);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
const calcFallback = (metaName) => `x-${metaName.split(/[-_]/)[0]}-ssr-fallback`;
|
|
8
25
|
class ReturnResponse {
|
|
9
26
|
/**
|
|
10
27
|
* Iterate a Object
|
|
@@ -67,7 +84,8 @@ const checkIsSent = (context) => {
|
|
|
67
84
|
const middlewarePipeline = createAsyncPipeline();
|
|
68
85
|
const createHandler = (manifest) => {
|
|
69
86
|
const routeMgr = new RouteMatchManager();
|
|
70
|
-
const { pages, routes, options: manifestOpts
|
|
87
|
+
const { pages, routes, options: manifestOpts } = manifest;
|
|
88
|
+
const { metaName = "modern-js", forceCSR = false } = manifestOpts || {};
|
|
71
89
|
routeMgr.reset(routes);
|
|
72
90
|
return async (options) => {
|
|
73
91
|
var _page_serverHooks_afterMatch, _page_serverHooks;
|
|
@@ -79,14 +97,13 @@ const createHandler = (manifest) => {
|
|
|
79
97
|
}
|
|
80
98
|
const entryName = pageMatch.spec.urlPath;
|
|
81
99
|
const page = pages[entryName];
|
|
82
|
-
if (
|
|
100
|
+
if (forceCSR && url.searchParams.get("csr") === "1") {
|
|
83
101
|
return createResponse(page.template);
|
|
84
102
|
}
|
|
85
|
-
const logger = createLogger(
|
|
86
|
-
level: "warn"
|
|
87
|
-
});
|
|
103
|
+
const logger = createLogger();
|
|
88
104
|
const metrics = defaultMetrics;
|
|
89
105
|
const reporter = defaultReporter;
|
|
106
|
+
const route = pageMatch.generate(url.pathname);
|
|
90
107
|
const hookContext = createWorkerHookContext(request.url, logger, metrics, reporter);
|
|
91
108
|
const afterMatchHookContext = createAfterMatchContext(hookContext, entryName);
|
|
92
109
|
page === null || page === void 0 ? void 0 : (_page_serverHooks = page.serverHooks) === null || _page_serverHooks === void 0 ? void 0 : (_page_serverHooks_afterMatch = _page_serverHooks.afterMatch) === null || _page_serverHooks_afterMatch === void 0 ? void 0 : _page_serverHooks_afterMatch.call(_page_serverHooks, afterMatchHookContext, () => void 0);
|
|
@@ -101,6 +118,9 @@ const createHandler = (manifest) => {
|
|
|
101
118
|
if (checkIsSent(hookContext)) {
|
|
102
119
|
return new ReturnResponse(hookContext.res.body || "Unkown body", hookContext.res.status, hookContext.res.headers);
|
|
103
120
|
}
|
|
121
|
+
if (forceCSR && middlewarsHookContext.request.headers[calcFallback(metaName)]) {
|
|
122
|
+
return createResponse(page.template);
|
|
123
|
+
}
|
|
104
124
|
const responseLike = {
|
|
105
125
|
headers: {},
|
|
106
126
|
statusCode: 200,
|
|
@@ -134,7 +154,7 @@ const createHandler = (manifest) => {
|
|
|
134
154
|
}
|
|
135
155
|
};
|
|
136
156
|
const body = await page.serverRender(serverRenderContext);
|
|
137
|
-
const afterRenderHookContext = createAfterRenderContext(hookContext, body);
|
|
157
|
+
const afterRenderHookContext = createAfterRenderContext(hookContext, route, body);
|
|
138
158
|
(_page_serverHooks2 = page.serverHooks) === null || _page_serverHooks2 === void 0 ? void 0 : (_page_serverHooks_afterRender = _page_serverHooks2.afterRender) === null || _page_serverHooks_afterRender === void 0 ? void 0 : _page_serverHooks_afterRender.call(_page_serverHooks2, afterRenderHookContext, () => void 0);
|
|
139
159
|
if (checkIsSent(hookContext)) {
|
|
140
160
|
return new ReturnResponse(hookContext.res.body || "Unkown body", hookContext.res.status, hookContext.res.headers);
|
|
@@ -193,6 +213,7 @@ function createWorkerHookContext(url, logger, metrics, reporter) {
|
|
|
193
213
|
reporter
|
|
194
214
|
};
|
|
195
215
|
}
|
|
216
|
+
let appliedMiddlewares = false;
|
|
196
217
|
function applyMiddlewares(ctx, middleware) {
|
|
197
218
|
if (middleware) {
|
|
198
219
|
const middlewares = (() => {
|
|
@@ -204,9 +225,12 @@ function applyMiddlewares(ctx, middleware) {
|
|
|
204
225
|
];
|
|
205
226
|
}
|
|
206
227
|
})();
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
228
|
+
if (!appliedMiddlewares) {
|
|
229
|
+
middlewares.forEach((middleware2) => {
|
|
230
|
+
middlewarePipeline.use(middleware2);
|
|
231
|
+
});
|
|
232
|
+
appliedMiddlewares = true;
|
|
233
|
+
}
|
|
210
234
|
middlewarePipeline.run(ctx, {
|
|
211
235
|
onLast: () => void 0
|
|
212
236
|
});
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
export declare const AGGRED_DIR: {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
mock: string;
|
|
3
|
+
server: string;
|
|
4
|
+
api: string;
|
|
5
|
+
shared: string;
|
|
6
|
+
lambda: string;
|
|
7
7
|
};
|
|
8
8
|
export declare enum ApiServerMode {
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
func = "function",
|
|
10
|
+
frame = "framework"
|
|
11
11
|
}
|
|
12
12
|
export declare const ERROR_DIGEST: {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
INIT: string;
|
|
14
|
+
ENOTF: string;
|
|
15
|
+
WARMUP: string;
|
|
16
|
+
EINTER: string;
|
|
17
|
+
ERENDER: string;
|
|
18
|
+
EMICROINJ: string;
|
|
19
19
|
};
|
|
20
20
|
export declare const ERROR_PAGE_TEXT: Record<number, string>;
|
|
21
21
|
export declare const RUN_MODE: {
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
FULL: string;
|
|
23
|
+
TYPE: string;
|
|
24
24
|
};
|
|
25
25
|
export declare enum ServerReportTimings {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
26
|
+
SERVER_HANDLE_REQUEST = "server-handle-request",
|
|
27
|
+
SERVER_MIDDLEWARE = "server-middleware",
|
|
28
|
+
SERVER_HOOK_AFTER_RENDER = "server-hook-after-render",
|
|
29
|
+
SERVER_HOOK_AFTER_MATCH = "server-hook-after-match"
|
|
30
|
+
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,62 +1,62 @@
|
|
|
1
|
+
/// <reference path="../../type.d.ts" />
|
|
1
2
|
/// <reference types="node" />
|
|
2
3
|
/// <reference types="node" />
|
|
3
4
|
/// <reference types="node" />
|
|
4
5
|
/// <reference types="node/http" />
|
|
5
|
-
/// <reference types=".dts-temp/x-wr1AtAisepvCMvqMiIW/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';
|
|
9
9
|
export type ContextOptions = {
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
metaName?: string;
|
|
11
|
+
etag?: boolean;
|
|
12
12
|
};
|
|
13
13
|
type ResponseBody = string | Buffer;
|
|
14
14
|
export declare class ModernServerContext implements ModernServerContextInterface {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
15
|
+
#private;
|
|
16
|
+
/**
|
|
17
|
+
* http request
|
|
18
|
+
*/
|
|
19
|
+
req: IncomingMessage;
|
|
20
|
+
/**
|
|
21
|
+
* http response
|
|
22
|
+
*/
|
|
23
|
+
res: ServerResponse;
|
|
24
|
+
/**
|
|
25
|
+
* url params
|
|
26
|
+
*/
|
|
27
|
+
params: Record<string, string>;
|
|
28
|
+
reporter: ModernServerReporter;
|
|
29
|
+
serverTiming: ModernServerTiming;
|
|
30
|
+
get logger(): import("@modern-js/types").Logger;
|
|
31
|
+
get metrics(): import("@modern-js/types").Metrics;
|
|
32
|
+
serverData: Record<string, any>;
|
|
33
|
+
private options;
|
|
34
|
+
constructor(req: IncomingMessage, res: ServerResponse, options?: ContextOptions);
|
|
35
|
+
private get parsedURL();
|
|
36
|
+
private bind;
|
|
37
|
+
send(body: ResponseBody): void;
|
|
38
|
+
setParams(params: Record<string, string>): void;
|
|
39
|
+
setServerData(key: string, value: any): void;
|
|
40
|
+
getReqHeader(key: string): string | string[];
|
|
41
|
+
get fresh(): boolean;
|
|
42
|
+
get headers(): import("http").IncomingHttpHeaders;
|
|
43
|
+
get method(): string;
|
|
44
|
+
get url(): string;
|
|
45
|
+
set url(val: string);
|
|
46
|
+
get host(): string;
|
|
47
|
+
get protocol(): string;
|
|
48
|
+
get origin(): string;
|
|
49
|
+
get href(): string;
|
|
50
|
+
get path(): string;
|
|
51
|
+
set path(p: string);
|
|
52
|
+
get querystring(): string;
|
|
53
|
+
get query(): qs.ParsedUrlQuery;
|
|
54
|
+
get status(): number;
|
|
55
|
+
set status(statusCode: number);
|
|
56
|
+
/**
|
|
57
|
+
* 判断链接是否已经关闭
|
|
58
|
+
*/
|
|
59
|
+
resHasHandled(): boolean;
|
|
60
|
+
error(dig: string, e?: Error | string): void;
|
|
61
61
|
}
|
|
62
|
-
export {};
|
|
62
|
+
export {};
|
|
@@ -2,4 +2,4 @@ import { IncomingMessage, ServerResponse } from 'http';
|
|
|
2
2
|
import { ModernServerContext, ContextOptions } from './context';
|
|
3
3
|
export declare const createContext: (req: IncomingMessage, res: ServerResponse, options?: ContextOptions) => ModernServerContext;
|
|
4
4
|
export { ModernServerContext };
|
|
5
|
-
export type { ContextOptions };
|
|
5
|
+
export type { ContextOptions };
|