@modern-js/server-core 2.47.1-alpha.0 → 2.48.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/index.js +4 -6
- package/dist/cjs/{core/loadPlugins.js → loadPlugins.js} +1 -1
- package/dist/cjs/{core/plugin.js → plugin.js} +3 -1
- package/dist/esm/index.js +2 -3
- package/dist/esm/{core/loadPlugins.js → loadPlugins.js} +1 -1
- package/dist/esm/{core/plugin.js → plugin.js} +3 -1
- package/dist/types/index.d.ts +2 -3
- package/dist/types/{core/loadPlugins.d.ts → loadPlugins.d.ts} +1 -1
- package/dist/types/{core/plugin.d.ts → plugin.d.ts} +35 -32
- package/package.json +6 -29
- package/dist/cjs/base/adapters/node/bff.js +0 -69
- package/dist/cjs/base/adapters/node/hono.js +0 -62
- package/dist/cjs/base/adapters/node/index.js +0 -32
- package/dist/cjs/base/adapters/node/loadServer.js +0 -56
- package/dist/cjs/base/adapters/node/middlewares/index.js +0 -26
- package/dist/cjs/base/adapters/node/middlewares/mock.js +0 -113
- package/dist/cjs/base/adapters/node/middlewares/serverStatic.js +0 -105
- package/dist/cjs/base/adapters/node/middlewares/templates.js +0 -65
- package/dist/cjs/base/adapters/node/node.js +0 -121
- package/dist/cjs/base/adapters/node/polyfills/index.js +0 -24
- package/dist/cjs/base/adapters/node/polyfills/install.js +0 -57
- package/dist/cjs/base/adapters/node/polyfills/stream.js +0 -159
- package/dist/cjs/base/constants.js +0 -55
- package/dist/cjs/base/index.js +0 -73
- package/dist/cjs/base/middlewares/customServer/base.js +0 -115
- package/dist/cjs/base/middlewares/customServer/context.js +0 -78
- package/dist/cjs/base/middlewares/customServer/index.js +0 -138
- package/dist/cjs/base/middlewares/customServer/routerApi.js +0 -48
- package/dist/cjs/base/middlewares/customServer/template.js +0 -60
- package/dist/cjs/base/middlewares/dataHandler.js +0 -69
- package/dist/cjs/base/middlewares/faviconFallback.js +0 -34
- package/dist/cjs/base/middlewares/index.js +0 -28
- package/dist/cjs/base/middlewares/monitor.js +0 -75
- package/dist/cjs/base/middlewares/renderHandler/index.js +0 -92
- package/dist/cjs/base/middlewares/renderHandler/render.js +0 -90
- package/dist/cjs/base/middlewares/renderHandler/serverTiming.js +0 -43
- package/dist/cjs/base/middlewares/renderHandler/ssrCache.js +0 -173
- package/dist/cjs/base/middlewares/renderHandler/ssrRender.js +0 -183
- package/dist/cjs/base/serverBase.js +0 -167
- package/dist/cjs/base/utils/debug.js +0 -29
- package/dist/cjs/base/utils/entry.js +0 -30
- package/dist/cjs/base/utils/env.js +0 -45
- package/dist/cjs/base/utils/error.js +0 -65
- package/dist/cjs/base/utils/index.js +0 -40
- package/dist/cjs/base/utils/middlewareCollector.js +0 -54
- package/dist/cjs/base/utils/path.js +0 -46
- package/dist/cjs/base/utils/request.js +0 -65
- package/dist/cjs/base/utils/serverConfig.js +0 -71
- package/dist/cjs/base/utils/transformStream.js +0 -38
- package/dist/cjs/base/utils/warmup.js +0 -43
- package/dist/cjs/core/hono.js +0 -16
- package/dist/cjs/core/index.js +0 -24
- package/dist/cjs/core/render.js +0 -16
- package/dist/cjs/core/server.js +0 -22
- package/dist/esm/base/adapters/node/bff.js +0 -45
- package/dist/esm/base/adapters/node/hono.js +0 -37
- package/dist/esm/base/adapters/node/index.js +0 -6
- package/dist/esm/base/adapters/node/loadServer.js +0 -22
- package/dist/esm/base/adapters/node/middlewares/index.js +0 -3
- package/dist/esm/base/adapters/node/middlewares/mock.js +0 -79
- package/dist/esm/base/adapters/node/middlewares/serverStatic.js +0 -71
- package/dist/esm/base/adapters/node/middlewares/templates.js +0 -31
- package/dist/esm/base/adapters/node/node.js +0 -95
- package/dist/esm/base/adapters/node/polyfills/index.js +0 -2
- package/dist/esm/base/adapters/node/polyfills/install.js +0 -33
- package/dist/esm/base/adapters/node/polyfills/stream.js +0 -132
- package/dist/esm/base/constants.js +0 -29
- package/dist/esm/base/index.js +0 -32
- package/dist/esm/base/middlewares/customServer/base.js +0 -91
- package/dist/esm/base/middlewares/customServer/context.js +0 -51
- package/dist/esm/base/middlewares/customServer/index.js +0 -114
- package/dist/esm/base/middlewares/customServer/routerApi.js +0 -24
- package/dist/esm/base/middlewares/customServer/template.js +0 -36
- package/dist/esm/base/middlewares/dataHandler.js +0 -35
- package/dist/esm/base/middlewares/faviconFallback.js +0 -10
- package/dist/esm/base/middlewares/index.js +0 -4
- package/dist/esm/base/middlewares/monitor.js +0 -49
- package/dist/esm/base/middlewares/renderHandler/index.js +0 -67
- package/dist/esm/base/middlewares/renderHandler/render.js +0 -66
- package/dist/esm/base/middlewares/renderHandler/serverTiming.js +0 -19
- package/dist/esm/base/middlewares/renderHandler/ssrCache.js +0 -149
- package/dist/esm/base/middlewares/renderHandler/ssrRender.js +0 -149
- package/dist/esm/base/serverBase.js +0 -143
- package/dist/esm/base/utils/debug.js +0 -5
- package/dist/esm/base/utils/entry.js +0 -6
- package/dist/esm/base/utils/env.js +0 -20
- package/dist/esm/base/utils/error.js +0 -41
- package/dist/esm/base/utils/index.js +0 -10
- package/dist/esm/base/utils/middlewareCollector.js +0 -29
- package/dist/esm/base/utils/path.js +0 -12
- package/dist/esm/base/utils/request.js +0 -38
- package/dist/esm/base/utils/serverConfig.js +0 -35
- package/dist/esm/base/utils/transformStream.js +0 -14
- package/dist/esm/base/utils/warmup.js +0 -9
- package/dist/esm/core/hono.js +0 -0
- package/dist/esm/core/index.js +0 -2
- package/dist/esm/core/render.js +0 -0
- package/dist/esm/core/server.js +0 -1
- package/dist/types/base/adapters/node/bff.d.ts +0 -4
- package/dist/types/base/adapters/node/hono.d.ts +0 -30
- package/dist/types/base/adapters/node/index.d.ts +0 -6
- package/dist/types/base/adapters/node/loadServer.d.ts +0 -3
- package/dist/types/base/adapters/node/middlewares/index.d.ts +0 -3
- package/dist/types/base/adapters/node/middlewares/mock.d.ts +0 -5
- package/dist/types/base/adapters/node/middlewares/serverStatic.d.ts +0 -9
- package/dist/types/base/adapters/node/middlewares/templates.d.ts +0 -3
- package/dist/types/base/adapters/node/node.d.ts +0 -12
- package/dist/types/base/adapters/node/polyfills/index.d.ts +0 -2
- package/dist/types/base/adapters/node/polyfills/install.d.ts +0 -1
- package/dist/types/base/adapters/node/polyfills/stream.d.ts +0 -18
- package/dist/types/base/constants.d.ts +0 -23
- package/dist/types/base/index.d.ts +0 -9
- package/dist/types/base/middlewares/customServer/base.d.ts +0 -3
- package/dist/types/base/middlewares/customServer/context.d.ts +0 -7
- package/dist/types/base/middlewares/customServer/index.d.ts +0 -13
- package/dist/types/base/middlewares/customServer/routerApi.d.ts +0 -9
- package/dist/types/base/middlewares/customServer/template.d.ts +0 -11
- package/dist/types/base/middlewares/dataHandler.d.ts +0 -3
- package/dist/types/base/middlewares/faviconFallback.d.ts +0 -2
- package/dist/types/base/middlewares/index.d.ts +0 -4
- package/dist/types/base/middlewares/monitor.d.ts +0 -7
- package/dist/types/base/middlewares/renderHandler/index.d.ts +0 -9
- package/dist/types/base/middlewares/renderHandler/render.d.ts +0 -12
- package/dist/types/base/middlewares/renderHandler/serverTiming.d.ts +0 -7
- package/dist/types/base/middlewares/renderHandler/ssrCache.d.ts +0 -17
- package/dist/types/base/middlewares/renderHandler/ssrRender.d.ts +0 -18
- package/dist/types/base/serverBase.d.ts +0 -49
- package/dist/types/base/utils/debug.d.ts +0 -1
- package/dist/types/base/utils/entry.d.ts +0 -2
- package/dist/types/base/utils/env.d.ts +0 -2
- package/dist/types/base/utils/error.d.ts +0 -1
- package/dist/types/base/utils/index.d.ts +0 -10
- package/dist/types/base/utils/middlewareCollector.d.ts +0 -12
- package/dist/types/base/utils/path.d.ts +0 -3
- package/dist/types/base/utils/request.d.ts +0 -12
- package/dist/types/base/utils/serverConfig.d.ts +0 -14
- package/dist/types/base/utils/transformStream.d.ts +0 -2
- package/dist/types/base/utils/warmup.d.ts +0 -1
- package/dist/types/core/hono.d.ts +0 -1
- package/dist/types/core/index.d.ts +0 -2
- package/dist/types/core/render.d.ts +0 -11
- package/dist/types/core/server.d.ts +0 -71
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import { _ as _define_property } from "@swc/helpers/_/_define_property";
|
|
2
|
-
import { Stream } from "node:stream";
|
|
3
|
-
import { ReadableStream } from "@web-std/stream";
|
|
4
|
-
async function writeReadableStreamToWritable(stream, writable) {
|
|
5
|
-
const reader = stream.getReader();
|
|
6
|
-
const flushable = writable;
|
|
7
|
-
try {
|
|
8
|
-
while (true) {
|
|
9
|
-
const { done, value } = await reader.read();
|
|
10
|
-
if (done) {
|
|
11
|
-
writable.end();
|
|
12
|
-
break;
|
|
13
|
-
}
|
|
14
|
-
writable.write(value);
|
|
15
|
-
if (typeof flushable.flush === "function") {
|
|
16
|
-
flushable.flush();
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
} catch (error) {
|
|
20
|
-
writable.destroy(error);
|
|
21
|
-
throw error;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
async function writeAsyncIterableToWritable(iterable, writable) {
|
|
25
|
-
try {
|
|
26
|
-
for await (const chunk of iterable) {
|
|
27
|
-
writable.write(chunk);
|
|
28
|
-
}
|
|
29
|
-
writable.end();
|
|
30
|
-
} catch (error) {
|
|
31
|
-
writable.destroy(error);
|
|
32
|
-
throw error;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
async function readableStreamToString(stream, encoding) {
|
|
36
|
-
const reader = stream.getReader();
|
|
37
|
-
const chunks = [];
|
|
38
|
-
while (true) {
|
|
39
|
-
const { done, value } = await reader.read();
|
|
40
|
-
if (done) {
|
|
41
|
-
break;
|
|
42
|
-
}
|
|
43
|
-
if (value) {
|
|
44
|
-
chunks.push(value);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return Buffer.concat(chunks).toString(encoding);
|
|
48
|
-
}
|
|
49
|
-
const createReadableStreamFromReadable = (source) => {
|
|
50
|
-
const pump = new StreamPump(source);
|
|
51
|
-
const stream = new ReadableStream(pump, pump);
|
|
52
|
-
return stream;
|
|
53
|
-
};
|
|
54
|
-
class StreamPump {
|
|
55
|
-
size(chunk) {
|
|
56
|
-
return (chunk === null || chunk === void 0 ? void 0 : chunk.byteLength) || 0;
|
|
57
|
-
}
|
|
58
|
-
start(controller) {
|
|
59
|
-
this.controller = controller;
|
|
60
|
-
this.stream.on("data", this.enqueue);
|
|
61
|
-
this.stream.once("error", this.error);
|
|
62
|
-
this.stream.once("end", this.close);
|
|
63
|
-
this.stream.once("close", this.close);
|
|
64
|
-
}
|
|
65
|
-
pull() {
|
|
66
|
-
this.resume();
|
|
67
|
-
}
|
|
68
|
-
cancel(reason) {
|
|
69
|
-
if (this.stream.destroy) {
|
|
70
|
-
this.stream.destroy(reason);
|
|
71
|
-
}
|
|
72
|
-
this.stream.off("data", this.enqueue);
|
|
73
|
-
this.stream.off("error", this.error);
|
|
74
|
-
this.stream.off("end", this.close);
|
|
75
|
-
this.stream.off("close", this.close);
|
|
76
|
-
}
|
|
77
|
-
enqueue(chunk) {
|
|
78
|
-
if (this.controller) {
|
|
79
|
-
try {
|
|
80
|
-
const bytes = chunk instanceof Uint8Array ? chunk : Buffer.from(chunk);
|
|
81
|
-
const available = (this.controller.desiredSize || 0) - bytes.byteLength;
|
|
82
|
-
this.controller.enqueue(bytes);
|
|
83
|
-
if (available <= 0) {
|
|
84
|
-
this.pause();
|
|
85
|
-
}
|
|
86
|
-
} catch (error) {
|
|
87
|
-
this.controller.error(new Error("Could not create Buffer, chunk must be of type string or an instance of Buffer, ArrayBuffer, or Array or an Array-like Object"));
|
|
88
|
-
this.cancel();
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
pause() {
|
|
93
|
-
if (this.stream.pause) {
|
|
94
|
-
this.stream.pause();
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
resume() {
|
|
98
|
-
if (this.stream.readable && this.stream.resume) {
|
|
99
|
-
this.stream.resume();
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
close() {
|
|
103
|
-
if (this.controller) {
|
|
104
|
-
this.controller.close();
|
|
105
|
-
delete this.controller;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
error(error) {
|
|
109
|
-
if (this.controller) {
|
|
110
|
-
this.controller.error(error);
|
|
111
|
-
delete this.controller;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
constructor(stream) {
|
|
115
|
-
_define_property(this, "highWaterMark", void 0);
|
|
116
|
-
_define_property(this, "accumalatedSize", void 0);
|
|
117
|
-
_define_property(this, "stream", void 0);
|
|
118
|
-
_define_property(this, "controller", void 0);
|
|
119
|
-
this.highWaterMark = stream.readableHighWaterMark || new Stream.Readable().readableHighWaterMark;
|
|
120
|
-
this.accumalatedSize = 0;
|
|
121
|
-
this.stream = stream;
|
|
122
|
-
this.enqueue = this.enqueue.bind(this);
|
|
123
|
-
this.error = this.error.bind(this);
|
|
124
|
-
this.close = this.close.bind(this);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
export {
|
|
128
|
-
createReadableStreamFromReadable,
|
|
129
|
-
readableStreamToString,
|
|
130
|
-
writeAsyncIterableToWritable,
|
|
131
|
-
writeReadableStreamToWritable
|
|
132
|
-
};
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
const AGGRED_DIR = {
|
|
2
|
-
mock: "config/mock",
|
|
3
|
-
server: "server",
|
|
4
|
-
api: "api",
|
|
5
|
-
shared: "shared",
|
|
6
|
-
lambda: "lambda"
|
|
7
|
-
};
|
|
8
|
-
const REPLACE_REG = {
|
|
9
|
-
before: {
|
|
10
|
-
head: "<head[^>]*>",
|
|
11
|
-
body: "<body[^>]*>"
|
|
12
|
-
},
|
|
13
|
-
after: {
|
|
14
|
-
head: "</head>",
|
|
15
|
-
body: "</body>"
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
var ServerReportTimings;
|
|
19
|
-
(function(ServerReportTimings2) {
|
|
20
|
-
ServerReportTimings2["SERVER_HANDLE_REQUEST"] = "server-handle-request";
|
|
21
|
-
ServerReportTimings2["SERVER_MIDDLEWARE"] = "server-middleware";
|
|
22
|
-
ServerReportTimings2["SERVER_HOOK_AFTER_RENDER"] = "server-hook-after-render";
|
|
23
|
-
ServerReportTimings2["SERVER_HOOK_AFTER_MATCH"] = "server-hook-after-match";
|
|
24
|
-
})(ServerReportTimings || (ServerReportTimings = {}));
|
|
25
|
-
export {
|
|
26
|
-
AGGRED_DIR,
|
|
27
|
-
REPLACE_REG,
|
|
28
|
-
ServerReportTimings
|
|
29
|
-
};
|
package/dist/esm/base/index.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { ServerBase } from "./serverBase";
|
|
2
|
-
import { createErrorHtml } from "./utils";
|
|
3
|
-
import { AGGRED_DIR } from "./constants";
|
|
4
|
-
import { httpCallBack2HonoMid, createNodeServer, loadServerEnv, connectMid2HonoMid, sendResponse, createStaticMiddleware, bindBFFHandler, registerMockHandlers, createInjectHtml } from "./adapters/node";
|
|
5
|
-
import { favionFallbackMiddleware, bindDataHandlers, injectReporter, getRenderHandler, injectLogger, bindRenderHandler } from "./middlewares";
|
|
6
|
-
function createServerBase(options) {
|
|
7
|
-
if (options == null) {
|
|
8
|
-
throw new Error("can not start server without options");
|
|
9
|
-
}
|
|
10
|
-
const server = new ServerBase(options);
|
|
11
|
-
return server;
|
|
12
|
-
}
|
|
13
|
-
export {
|
|
14
|
-
AGGRED_DIR,
|
|
15
|
-
bindBFFHandler,
|
|
16
|
-
bindDataHandlers,
|
|
17
|
-
bindRenderHandler,
|
|
18
|
-
connectMid2HonoMid,
|
|
19
|
-
createErrorHtml,
|
|
20
|
-
createInjectHtml,
|
|
21
|
-
createNodeServer,
|
|
22
|
-
createServerBase,
|
|
23
|
-
createStaticMiddleware,
|
|
24
|
-
favionFallbackMiddleware,
|
|
25
|
-
getRenderHandler,
|
|
26
|
-
httpCallBack2HonoMid,
|
|
27
|
-
injectLogger,
|
|
28
|
-
injectReporter,
|
|
29
|
-
loadServerEnv,
|
|
30
|
-
registerMockHandlers,
|
|
31
|
-
sendResponse
|
|
32
|
-
};
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { _ as _define_property } from "@swc/helpers/_/_define_property";
|
|
2
|
-
import { getCookie } from "hono/cookie";
|
|
3
|
-
import { getHost } from "../../utils";
|
|
4
|
-
function createBaseHookContext(c, logger, metrics) {
|
|
5
|
-
return {
|
|
6
|
-
request: new BaseHookRequest(c),
|
|
7
|
-
response: new BaseHookResponse(c),
|
|
8
|
-
logger,
|
|
9
|
-
metrics
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
class BaseHookRequest {
|
|
13
|
-
get url() {
|
|
14
|
-
return this.req.url;
|
|
15
|
-
}
|
|
16
|
-
get host() {
|
|
17
|
-
return getHost(this.req.raw);
|
|
18
|
-
}
|
|
19
|
-
get pathname() {
|
|
20
|
-
return this.req.path;
|
|
21
|
-
}
|
|
22
|
-
get query() {
|
|
23
|
-
return this.req.query();
|
|
24
|
-
}
|
|
25
|
-
get headers() {
|
|
26
|
-
return this.req.header();
|
|
27
|
-
}
|
|
28
|
-
get cookies() {
|
|
29
|
-
return {
|
|
30
|
-
// FIXME: ModernRequest Type Error
|
|
31
|
-
get: (key) => {
|
|
32
|
-
return getCookie(this.c, key);
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
get cookie() {
|
|
37
|
-
return this.req.header("cookie");
|
|
38
|
-
}
|
|
39
|
-
constructor(c) {
|
|
40
|
-
_define_property(this, "req", void 0);
|
|
41
|
-
_define_property(this, "c", void 0);
|
|
42
|
-
this.c = c;
|
|
43
|
-
this.req = c.req;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
class BaseHookResponse {
|
|
47
|
-
get(key) {
|
|
48
|
-
return this.c.res.headers.get(key);
|
|
49
|
-
}
|
|
50
|
-
set(key, value) {
|
|
51
|
-
if ([
|
|
52
|
-
"set-cookie",
|
|
53
|
-
"Set-Cookie"
|
|
54
|
-
].includes(key)) {
|
|
55
|
-
this.c.header(key, value.toString(), {
|
|
56
|
-
append: true
|
|
57
|
-
});
|
|
58
|
-
} else {
|
|
59
|
-
this.c.header(key, value.toString());
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
status(code) {
|
|
63
|
-
this.c.status(code);
|
|
64
|
-
}
|
|
65
|
-
get cookies() {
|
|
66
|
-
const setCookie = (key, value) => {
|
|
67
|
-
this.c.header("set-cookie", `${key}=${value}`, {
|
|
68
|
-
append: true
|
|
69
|
-
});
|
|
70
|
-
};
|
|
71
|
-
const clearCookie = () => {
|
|
72
|
-
this.c.header("set-cookie", void 0);
|
|
73
|
-
};
|
|
74
|
-
return {
|
|
75
|
-
set: setCookie,
|
|
76
|
-
clear: clearCookie
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
raw(body, options) {
|
|
80
|
-
this.c.res = this.c.newResponse(body, options);
|
|
81
|
-
this.private_overrided = true;
|
|
82
|
-
}
|
|
83
|
-
constructor(c) {
|
|
84
|
-
_define_property(this, "private_overrided", false);
|
|
85
|
-
_define_property(this, "c", void 0);
|
|
86
|
-
this.c = c;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
export {
|
|
90
|
-
createBaseHookContext
|
|
91
|
-
};
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { RouterAPI } from "./routerApi";
|
|
2
|
-
import { TemplateApi } from "./template";
|
|
3
|
-
import { createBaseHookContext } from "./base";
|
|
4
|
-
function createAfterMatchCtx(c, entryName, logger, metrics) {
|
|
5
|
-
const baseContext = createBaseHookContext(c, logger, metrics);
|
|
6
|
-
return {
|
|
7
|
-
...baseContext,
|
|
8
|
-
router: new RouterAPI(entryName)
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
async function createAfterRenderCtx(c, logger, metrics) {
|
|
12
|
-
const baseContext = createBaseHookContext(c, logger, metrics);
|
|
13
|
-
const resBody = await c.res.text();
|
|
14
|
-
return {
|
|
15
|
-
...baseContext,
|
|
16
|
-
template: new TemplateApi(resBody)
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
function createCustomMiddlewaresCtx(c, logger, metrics) {
|
|
20
|
-
var _c_env_node, _c_env_node1;
|
|
21
|
-
const baseContext = createBaseHookContext(c, logger, metrics);
|
|
22
|
-
const reporter = c.get("reporter");
|
|
23
|
-
return {
|
|
24
|
-
...baseContext,
|
|
25
|
-
reporter,
|
|
26
|
-
response: {
|
|
27
|
-
...baseContext.response,
|
|
28
|
-
locals: {}
|
|
29
|
-
},
|
|
30
|
-
source: {
|
|
31
|
-
req: (_c_env_node = c.env.node) === null || _c_env_node === void 0 ? void 0 : _c_env_node.req,
|
|
32
|
-
res: (_c_env_node1 = c.env.node) === null || _c_env_node1 === void 0 ? void 0 : _c_env_node1.res
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
function createAfterStreamingRenderContext(c, logger, route, metrics) {
|
|
37
|
-
const baseContext = createBaseHookContext(c, logger, metrics);
|
|
38
|
-
return (chunk) => {
|
|
39
|
-
return {
|
|
40
|
-
...baseContext,
|
|
41
|
-
route,
|
|
42
|
-
chunk
|
|
43
|
-
};
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
export {
|
|
47
|
-
createAfterMatchCtx,
|
|
48
|
-
createAfterRenderCtx,
|
|
49
|
-
createAfterStreamingRenderContext,
|
|
50
|
-
createCustomMiddlewaresCtx
|
|
51
|
-
};
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
import { _ as _define_property } from "@swc/helpers/_/_define_property";
|
|
2
|
-
import { time } from "@modern-js/runtime-utils/time";
|
|
3
|
-
import { createTransformStream } from "../../utils";
|
|
4
|
-
import { ServerReportTimings } from "../../constants";
|
|
5
|
-
import { createAfterMatchCtx, createAfterRenderCtx, createCustomMiddlewaresCtx, createAfterStreamingRenderContext } from "./context";
|
|
6
|
-
const noop = () => {
|
|
7
|
-
};
|
|
8
|
-
class CustomServer {
|
|
9
|
-
getHookMiddleware(entryName, routes) {
|
|
10
|
-
return async (c, next) => {
|
|
11
|
-
const routeInfo = routes.find((route) => route.entryName === entryName);
|
|
12
|
-
const logger = c.get("logger");
|
|
13
|
-
const reporter = c.get("reporter");
|
|
14
|
-
const metrics = c.get("metrics");
|
|
15
|
-
const afterMatchCtx = createAfterMatchCtx(c, entryName, logger, metrics);
|
|
16
|
-
const getCost = time();
|
|
17
|
-
await this.runner.afterMatch(afterMatchCtx, {
|
|
18
|
-
onLast: noop
|
|
19
|
-
});
|
|
20
|
-
const cost = getCost();
|
|
21
|
-
cost && reporter.reportTiming(ServerReportTimings.SERVER_HOOK_AFTER_MATCH, cost);
|
|
22
|
-
const {
|
|
23
|
-
// current,
|
|
24
|
-
url,
|
|
25
|
-
status
|
|
26
|
-
} = afterMatchCtx.router;
|
|
27
|
-
if (url) {
|
|
28
|
-
return c.redirect(url, status);
|
|
29
|
-
}
|
|
30
|
-
const { current } = afterMatchCtx.router;
|
|
31
|
-
if (current !== entryName) {
|
|
32
|
-
const rewriteRoute = routes.find((route) => route.entryName === current);
|
|
33
|
-
if (rewriteRoute) {
|
|
34
|
-
return this.serverBase.request(rewriteRoute.urlPath);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
if (c.finalized) {
|
|
38
|
-
return void 0;
|
|
39
|
-
}
|
|
40
|
-
await next();
|
|
41
|
-
if (c.finalized && !c.res.body) {
|
|
42
|
-
return void 0;
|
|
43
|
-
}
|
|
44
|
-
if (routeInfo.isStream) {
|
|
45
|
-
var _c_res_body;
|
|
46
|
-
const afterStreamingRenderContext = createAfterStreamingRenderContext(c, logger, routeInfo, metrics);
|
|
47
|
-
const injectStream = createTransformStream((chunk) => {
|
|
48
|
-
const context = afterStreamingRenderContext(chunk);
|
|
49
|
-
return this.runner.afterStreamingRender(context, {
|
|
50
|
-
onLast: ({ chunk: chunk2 }) => chunk2
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
(_c_res_body = c.res.body) === null || _c_res_body === void 0 ? void 0 : _c_res_body.pipeThrough(injectStream);
|
|
54
|
-
const { headers, status: status2, statusText } = c.res;
|
|
55
|
-
c.res = c.body(injectStream.readable, {
|
|
56
|
-
headers,
|
|
57
|
-
status: status2,
|
|
58
|
-
statusText
|
|
59
|
-
});
|
|
60
|
-
} else {
|
|
61
|
-
const afterRenderCtx = await createAfterRenderCtx(c, logger, metrics);
|
|
62
|
-
const getCost2 = time();
|
|
63
|
-
await this.runner.afterRender(afterRenderCtx, {
|
|
64
|
-
onLast: noop
|
|
65
|
-
});
|
|
66
|
-
const cost2 = getCost2();
|
|
67
|
-
cost2 && reporter.reportTiming(ServerReportTimings.SERVER_HOOK_AFTER_RENDER, cost2);
|
|
68
|
-
if (afterRenderCtx.response.private_overrided) {
|
|
69
|
-
return void 0;
|
|
70
|
-
}
|
|
71
|
-
const newBody = afterRenderCtx.template.get();
|
|
72
|
-
c.res = c.body(newBody);
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
getServerMiddleware() {
|
|
77
|
-
return async (c, next) => {
|
|
78
|
-
const serverMiddleware = await this.serverMiddlewarePromise;
|
|
79
|
-
if (!serverMiddleware) {
|
|
80
|
-
return next();
|
|
81
|
-
}
|
|
82
|
-
const reporter = c.get("reporter");
|
|
83
|
-
const logger = c.get("logger");
|
|
84
|
-
const metrics = c.get("metrics");
|
|
85
|
-
const customMiddlewareCtx = createCustomMiddlewaresCtx(c, logger, metrics);
|
|
86
|
-
const getCost = time();
|
|
87
|
-
await serverMiddleware(customMiddlewareCtx);
|
|
88
|
-
const cost = getCost();
|
|
89
|
-
cost && reporter.reportTiming(ServerReportTimings.SERVER_MIDDLEWARE, cost);
|
|
90
|
-
if (!c.finalized) {
|
|
91
|
-
return next();
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
constructor(runner, serverBase, pwd) {
|
|
96
|
-
_define_property(this, "runner", void 0);
|
|
97
|
-
_define_property(this, "serverMiddlewarePromise", void 0);
|
|
98
|
-
_define_property(this, "serverBase", void 0);
|
|
99
|
-
this.runner = runner;
|
|
100
|
-
this.serverBase = serverBase;
|
|
101
|
-
const webExtension = [];
|
|
102
|
-
this.serverMiddlewarePromise = runner.prepareWebServer({
|
|
103
|
-
pwd,
|
|
104
|
-
config: {
|
|
105
|
-
middleware: webExtension
|
|
106
|
-
}
|
|
107
|
-
}, {
|
|
108
|
-
onLast: () => null
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
export {
|
|
113
|
-
CustomServer
|
|
114
|
-
};
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { _ as _define_property } from "@swc/helpers/_/_define_property";
|
|
2
|
-
class RouterAPI {
|
|
3
|
-
redirect(url, status = 302) {
|
|
4
|
-
this.url = url;
|
|
5
|
-
this.status = status;
|
|
6
|
-
}
|
|
7
|
-
rewrite(entryName) {
|
|
8
|
-
this.current = entryName;
|
|
9
|
-
}
|
|
10
|
-
use(entryName) {
|
|
11
|
-
this.rewrite(entryName);
|
|
12
|
-
}
|
|
13
|
-
constructor(entryName) {
|
|
14
|
-
_define_property(this, "current", void 0);
|
|
15
|
-
_define_property(this, "status", void 0);
|
|
16
|
-
_define_property(this, "url", void 0);
|
|
17
|
-
this.current = entryName;
|
|
18
|
-
this.status = 200;
|
|
19
|
-
this.url = "";
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
export {
|
|
23
|
-
RouterAPI
|
|
24
|
-
};
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { _ as _define_property } from "@swc/helpers/_/_define_property";
|
|
2
|
-
import { REPLACE_REG } from "../../constants";
|
|
3
|
-
class TemplateApi {
|
|
4
|
-
set(content) {
|
|
5
|
-
this.body = content;
|
|
6
|
-
}
|
|
7
|
-
get() {
|
|
8
|
-
return this.body;
|
|
9
|
-
}
|
|
10
|
-
prependHead(fragment) {
|
|
11
|
-
const { head } = REPLACE_REG.before;
|
|
12
|
-
this.replaceBody(new RegExp(head), (beforeHead) => `${beforeHead}${fragment}`);
|
|
13
|
-
}
|
|
14
|
-
appendHead(fragment) {
|
|
15
|
-
const { head } = REPLACE_REG.after;
|
|
16
|
-
this.replaceBody(head, () => `${fragment}${head}`);
|
|
17
|
-
}
|
|
18
|
-
prependBody(fragment) {
|
|
19
|
-
const { body } = REPLACE_REG.before;
|
|
20
|
-
this.replaceBody(new RegExp(body), (beforeBody) => `${beforeBody}${fragment}`);
|
|
21
|
-
}
|
|
22
|
-
appendBody(fragment) {
|
|
23
|
-
const { body } = REPLACE_REG.after;
|
|
24
|
-
this.replaceBody(body, () => `${fragment}${body}`);
|
|
25
|
-
}
|
|
26
|
-
replaceBody(searchValue, replaceCb) {
|
|
27
|
-
this.body = this.body.replace(searchValue, replaceCb);
|
|
28
|
-
}
|
|
29
|
-
constructor(body) {
|
|
30
|
-
_define_property(this, "body", void 0);
|
|
31
|
-
this.body = body;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
export {
|
|
35
|
-
TemplateApi
|
|
36
|
-
};
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { MAIN_ENTRY_NAME, SERVER_BUNDLE_DIRECTORY } from "@modern-js/utils";
|
|
2
|
-
import { getPathModule, sortRoutes } from "../utils";
|
|
3
|
-
const bindDataHandlers = async (server, routes, distDir) => {
|
|
4
|
-
const path = await getPathModule();
|
|
5
|
-
routes.sort(sortRoutes).forEach((route) => {
|
|
6
|
-
const bundlePath = path.join(distDir, SERVER_BUNDLE_DIRECTORY, `${route.entryName || MAIN_ENTRY_NAME}-server-loaders.js`);
|
|
7
|
-
server.all(`${route.urlPath === "/" ? "*" : `${route.urlPath}/*`}`, createDataHandler(routes, bundlePath));
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
const createDataHandler = (serverRoutes, buildModulePath) => {
|
|
11
|
-
return async (context, next) => {
|
|
12
|
-
let buildModule;
|
|
13
|
-
try {
|
|
14
|
-
buildModule = await import(buildModulePath);
|
|
15
|
-
} catch (_) {
|
|
16
|
-
return next();
|
|
17
|
-
}
|
|
18
|
-
const { routes, handleRequest } = buildModule;
|
|
19
|
-
const logger = context.get("logger");
|
|
20
|
-
const reporter = context.get("reporter");
|
|
21
|
-
const response = await handleRequest({
|
|
22
|
-
request: context.req.raw,
|
|
23
|
-
serverRoutes,
|
|
24
|
-
context: {
|
|
25
|
-
logger,
|
|
26
|
-
reporter
|
|
27
|
-
},
|
|
28
|
-
routes
|
|
29
|
-
});
|
|
30
|
-
return response ? response : next();
|
|
31
|
-
};
|
|
32
|
-
};
|
|
33
|
-
export {
|
|
34
|
-
bindDataHandlers
|
|
35
|
-
};
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import { time } from "@modern-js/runtime-utils/time";
|
|
2
|
-
import { ServerReportTimings } from "../constants";
|
|
3
|
-
const defaultReporter = {
|
|
4
|
-
init() {
|
|
5
|
-
},
|
|
6
|
-
reportError() {
|
|
7
|
-
},
|
|
8
|
-
reportTiming() {
|
|
9
|
-
},
|
|
10
|
-
reportInfo() {
|
|
11
|
-
},
|
|
12
|
-
reportWarn() {
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
|
-
function injectReporter() {
|
|
16
|
-
return async (c, next) => {
|
|
17
|
-
const reporter = c.get("reporter");
|
|
18
|
-
if (!reporter) {
|
|
19
|
-
c.set("reporter", defaultReporter);
|
|
20
|
-
}
|
|
21
|
-
await next();
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
function initReporter(entryName) {
|
|
25
|
-
return async (c, next) => {
|
|
26
|
-
const reporter = c.get("reporter");
|
|
27
|
-
await reporter.init({
|
|
28
|
-
entryName
|
|
29
|
-
});
|
|
30
|
-
const getCost = time();
|
|
31
|
-
await next();
|
|
32
|
-
const cost = getCost();
|
|
33
|
-
reporter.reportTiming(ServerReportTimings.SERVER_HANDLE_REQUEST, cost);
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
function injectLogger(inputLogger) {
|
|
37
|
-
return async (c, next) => {
|
|
38
|
-
const logger = c.get("logger");
|
|
39
|
-
if (!logger && inputLogger) {
|
|
40
|
-
c.set("logger", inputLogger);
|
|
41
|
-
}
|
|
42
|
-
await next();
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
export {
|
|
46
|
-
initReporter,
|
|
47
|
-
injectLogger,
|
|
48
|
-
injectReporter
|
|
49
|
-
};
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { warmup, checkIsProd, sortRoutes, getPathModule } from "../../utils";
|
|
2
|
-
import { initReporter } from "../monitor";
|
|
3
|
-
import { CustomServer } from "../customServer";
|
|
4
|
-
import { ssrCache } from "./ssrCache";
|
|
5
|
-
import { createRender } from "./render";
|
|
6
|
-
function createRenderHandler(render) {
|
|
7
|
-
return async (c, _) => {
|
|
8
|
-
var _c_env_node;
|
|
9
|
-
const logger = c.get("logger");
|
|
10
|
-
const reporter = c.get("reporter");
|
|
11
|
-
const request = c.req.raw;
|
|
12
|
-
const nodeReq = (_c_env_node = c.env.node) === null || _c_env_node === void 0 ? void 0 : _c_env_node.req;
|
|
13
|
-
const templates = c.get("templates");
|
|
14
|
-
const res = await render(request, {
|
|
15
|
-
logger,
|
|
16
|
-
nodeReq,
|
|
17
|
-
reporter,
|
|
18
|
-
tpls: templates || {}
|
|
19
|
-
});
|
|
20
|
-
return res;
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
function getRenderHandler(options) {
|
|
24
|
-
const { routes, pwd, config } = options;
|
|
25
|
-
if (routes && routes.length > 0) {
|
|
26
|
-
var _config_server, _options_config_security;
|
|
27
|
-
const ssrConfig = (_config_server = config.server) === null || _config_server === void 0 ? void 0 : _config_server.ssr;
|
|
28
|
-
const forceCSR = typeof ssrConfig === "object" ? ssrConfig.forceCSR : false;
|
|
29
|
-
const render = createRender({
|
|
30
|
-
routes,
|
|
31
|
-
pwd,
|
|
32
|
-
staticGenerate: options.staticGenerate,
|
|
33
|
-
metaName: options.metaName || "modern-js",
|
|
34
|
-
forceCSR,
|
|
35
|
-
nonce: (_options_config_security = options.config.security) === null || _options_config_security === void 0 ? void 0 : _options_config_security.nonce
|
|
36
|
-
});
|
|
37
|
-
return render;
|
|
38
|
-
}
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
async function bindRenderHandler(server, options) {
|
|
42
|
-
const { routes, pwd } = options;
|
|
43
|
-
const path = await getPathModule();
|
|
44
|
-
const { runner } = server;
|
|
45
|
-
if (routes && routes.length > 0) {
|
|
46
|
-
const customServer = new CustomServer(runner, server, pwd);
|
|
47
|
-
const ssrBundles = routes.filter((route) => route.isSSR && route.bundle).map((route) => path.join(pwd, route.bundle));
|
|
48
|
-
warmup(ssrBundles);
|
|
49
|
-
await ssrCache.loadCacheMod(checkIsProd() ? pwd : void 0);
|
|
50
|
-
const pageRoutes = routes.filter((route) => !route.isApi).sort(sortRoutes);
|
|
51
|
-
for (const route of pageRoutes) {
|
|
52
|
-
const { urlPath: originUrlPath, entryName } = route;
|
|
53
|
-
const urlPath = originUrlPath.endsWith("/") ? `${originUrlPath}*` : `${originUrlPath}/*`;
|
|
54
|
-
const customServerHookMiddleware = customServer.getHookMiddleware(entryName || "main", routes);
|
|
55
|
-
server.use(urlPath, initReporter(entryName));
|
|
56
|
-
server.use(urlPath, customServerHookMiddleware);
|
|
57
|
-
const customServerMiddleware = customServer.getServerMiddleware();
|
|
58
|
-
server.use(urlPath, customServerMiddleware);
|
|
59
|
-
}
|
|
60
|
-
const render = getRenderHandler(options);
|
|
61
|
-
render && server.get("*", createRenderHandler(render));
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
export {
|
|
65
|
-
bindRenderHandler,
|
|
66
|
-
getRenderHandler
|
|
67
|
-
};
|