@modern-js/server-core 2.49.4-alpha.2 → 2.49.4
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/base/adapters/node/node.js +19 -2
- package/dist/cjs/base/adapters/node/polyfills/stream.js +18 -11
- package/dist/cjs/base/middlewares/customServer/base.js +14 -4
- package/dist/cjs/base/middlewares/customServer/context.js +2 -2
- package/dist/cjs/base/middlewares/customServer/index.js +15 -1
- package/dist/cjs/base/middlewares/renderHandler/index.js +6 -1
- package/dist/esm/base/adapters/node/node.js +50 -11
- package/dist/esm/base/adapters/node/polyfills/stream.js +56 -32
- package/dist/esm/base/middlewares/customServer/base.js +14 -4
- package/dist/esm/base/middlewares/customServer/context.js +2 -2
- package/dist/esm/base/middlewares/customServer/index.js +19 -2
- package/dist/esm/base/middlewares/renderHandler/index.js +7 -2
- package/dist/esm-node/base/adapters/node/node.js +10 -3
- package/dist/esm-node/base/adapters/node/polyfills/stream.js +18 -11
- package/dist/esm-node/base/middlewares/customServer/base.js +14 -4
- package/dist/esm-node/base/middlewares/customServer/context.js +2 -2
- package/dist/esm-node/base/middlewares/customServer/index.js +15 -1
- package/dist/esm-node/base/middlewares/renderHandler/index.js +6 -1
- package/dist/types/base/adapters/node/node.d.ts +4 -2
- package/dist/types/base/middlewares/customServer/base.d.ts +5 -1
- package/dist/types/base/middlewares/customServer/context.d.ts +2 -1
- package/package.json +7 -7
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
3
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
5
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
8
|
var __export = (target, all) => {
|
|
7
9
|
for (var name in all)
|
|
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
15
17
|
}
|
|
16
18
|
return to;
|
|
17
19
|
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
18
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
29
|
var node_exports = {};
|
|
20
30
|
__export(node_exports, {
|
|
@@ -112,9 +122,16 @@ const getRequestListener = (handler) => {
|
|
|
112
122
|
}
|
|
113
123
|
};
|
|
114
124
|
};
|
|
115
|
-
const createNodeServer = (requestHandler) => {
|
|
125
|
+
const createNodeServer = async (requestHandler, httpsOptions) => {
|
|
116
126
|
const requestListener = getRequestListener(requestHandler);
|
|
117
|
-
|
|
127
|
+
let nodeServer;
|
|
128
|
+
if (httpsOptions) {
|
|
129
|
+
const { createServer } = await Promise.resolve().then(() => __toESM(require("node:https")));
|
|
130
|
+
nodeServer = createServer(httpsOptions, requestListener);
|
|
131
|
+
} else {
|
|
132
|
+
const { createServer } = await Promise.resolve().then(() => __toESM(require("node:http")));
|
|
133
|
+
nodeServer = createServer(requestListener);
|
|
134
|
+
}
|
|
118
135
|
nodeServer.getRequestListener = () => requestListener;
|
|
119
136
|
nodeServer.getRequestHandler = () => requestHandler;
|
|
120
137
|
return nodeServer;
|
|
@@ -29,17 +29,24 @@ async function writeReadableStreamToWritable(stream, writable) {
|
|
|
29
29
|
const reader = stream.getReader();
|
|
30
30
|
const flushable = writable;
|
|
31
31
|
try {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
32
|
+
await new Promise((resolve, reject) => {
|
|
33
|
+
writable.on("finish", resolve);
|
|
34
|
+
writable.on("error", reject);
|
|
35
|
+
const writeAndFlush = async () => {
|
|
36
|
+
while (true) {
|
|
37
|
+
const { done, value } = await reader.read();
|
|
38
|
+
if (done) {
|
|
39
|
+
writable.end();
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
writable.write(value);
|
|
43
|
+
if (typeof flushable.flush === "function") {
|
|
44
|
+
flushable.flush();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
writeAndFlush().catch(reject);
|
|
49
|
+
});
|
|
43
50
|
} catch (error) {
|
|
44
51
|
writable.destroy(error);
|
|
45
52
|
throw error;
|
|
@@ -26,12 +26,12 @@ var import_class_private_field_init = require("@swc/helpers/_/_class_private_fie
|
|
|
26
26
|
var import_class_private_field_set = require("@swc/helpers/_/_class_private_field_set");
|
|
27
27
|
var import_cookie = require("hono/cookie");
|
|
28
28
|
var import_utils = require("../../utils");
|
|
29
|
-
function createBaseHookContext(c) {
|
|
29
|
+
function createBaseHookContext(c, resParams) {
|
|
30
30
|
const logger = c.get("logger");
|
|
31
31
|
const metrics = c.get("metrics");
|
|
32
32
|
return {
|
|
33
33
|
request: new BaseHookRequest(c),
|
|
34
|
-
response: new BaseHookResponse(c),
|
|
34
|
+
response: new BaseHookResponse(c, resParams),
|
|
35
35
|
logger,
|
|
36
36
|
metrics
|
|
37
37
|
};
|
|
@@ -118,7 +118,7 @@ class BaseHookRequest {
|
|
|
118
118
|
}));
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
|
-
var _c1 = /* @__PURE__ */ new WeakMap();
|
|
121
|
+
var _c1 = /* @__PURE__ */ new WeakMap(), _resArgs = /* @__PURE__ */ new WeakMap();
|
|
122
122
|
class BaseHookResponse {
|
|
123
123
|
get(key) {
|
|
124
124
|
return (0, import_class_private_field_get._)(this, _c1).res.headers.get(key);
|
|
@@ -128,15 +128,20 @@ class BaseHookResponse {
|
|
|
128
128
|
"set-cookie",
|
|
129
129
|
"Set-Cookie"
|
|
130
130
|
].includes(key)) {
|
|
131
|
+
var _class_private_field_get1;
|
|
131
132
|
(0, import_class_private_field_get._)(this, _c1).header(key, value.toString(), {
|
|
132
133
|
append: true
|
|
133
134
|
});
|
|
135
|
+
(_class_private_field_get1 = (0, import_class_private_field_get._)(this, _resArgs)) === null || _class_private_field_get1 === void 0 ? void 0 : _class_private_field_get1.headers.append(key, value.toString());
|
|
134
136
|
} else {
|
|
137
|
+
var _class_private_field_get2;
|
|
135
138
|
(0, import_class_private_field_get._)(this, _c1).header(key, value.toString());
|
|
139
|
+
(_class_private_field_get2 = (0, import_class_private_field_get._)(this, _resArgs)) === null || _class_private_field_get2 === void 0 ? void 0 : _class_private_field_get2.headers.set(key, value.toString());
|
|
136
140
|
}
|
|
137
141
|
}
|
|
138
142
|
status(code) {
|
|
139
143
|
(0, import_class_private_field_get._)(this, _c1).status(code);
|
|
144
|
+
(0, import_class_private_field_get._)(this, _resArgs) && ((0, import_class_private_field_get._)(this, _resArgs).status = code);
|
|
140
145
|
}
|
|
141
146
|
get cookies() {
|
|
142
147
|
const setCookie = (key, value) => {
|
|
@@ -156,13 +161,18 @@ class BaseHookResponse {
|
|
|
156
161
|
(0, import_class_private_field_get._)(this, _c1).res = (0, import_class_private_field_get._)(this, _c1).newResponse(body, options);
|
|
157
162
|
this.private_overrided = true;
|
|
158
163
|
}
|
|
159
|
-
constructor(c) {
|
|
164
|
+
constructor(c, resArgs) {
|
|
160
165
|
(0, import_class_private_field_init._)(this, _c1, {
|
|
161
166
|
writable: true,
|
|
162
167
|
value: void 0
|
|
163
168
|
});
|
|
169
|
+
(0, import_class_private_field_init._)(this, _resArgs, {
|
|
170
|
+
writable: true,
|
|
171
|
+
value: void 0
|
|
172
|
+
});
|
|
164
173
|
this.private_overrided = false;
|
|
165
174
|
(0, import_class_private_field_set._)(this, _c1, c);
|
|
175
|
+
(0, import_class_private_field_set._)(this, _resArgs, resArgs);
|
|
166
176
|
}
|
|
167
177
|
}
|
|
168
178
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -39,9 +39,9 @@ async function getAfterRenderCtx(c, baseHookCtx, route) {
|
|
|
39
39
|
afterRenderCtx.route = route;
|
|
40
40
|
return afterRenderCtx;
|
|
41
41
|
}
|
|
42
|
-
function createCustomMiddlewaresCtx(c, locals) {
|
|
42
|
+
function createCustomMiddlewaresCtx(c, locals, resArgs) {
|
|
43
43
|
var _c_env_node, _c_env_node1;
|
|
44
|
-
const baseContext = (0, import_base.createBaseHookContext)(c);
|
|
44
|
+
const baseContext = (0, import_base.createBaseHookContext)(c, resArgs);
|
|
45
45
|
const reporter = c.get("reporter");
|
|
46
46
|
const response = baseContext.response;
|
|
47
47
|
response.locals = locals;
|
|
@@ -102,12 +102,18 @@ class CustomServer {
|
|
|
102
102
|
}
|
|
103
103
|
const reporter = c.get("reporter");
|
|
104
104
|
const locals = {};
|
|
105
|
-
const
|
|
105
|
+
const resArgs = {
|
|
106
|
+
headers: new Headers()
|
|
107
|
+
};
|
|
108
|
+
const customMiddlewareCtx = (0, import_context.createCustomMiddlewaresCtx)(c, locals, resArgs);
|
|
106
109
|
const getCost = (0, import_time.time)();
|
|
107
110
|
await serverMiddleware(customMiddlewareCtx);
|
|
108
111
|
const cost = getCost();
|
|
109
112
|
cost && (reporter === null || reporter === void 0 ? void 0 : reporter.reportTiming(import_constants.ServerReportTimings.SERVER_MIDDLEWARE, cost));
|
|
110
113
|
c.set("locals", locals);
|
|
114
|
+
if (isRedirect(resArgs.headers, resArgs.status)) {
|
|
115
|
+
return c.redirect(resArgs.headers.get("Location") || "", resArgs.status || 302);
|
|
116
|
+
}
|
|
111
117
|
if ((_c_env = c.env) === null || _c_env === void 0 ? void 0 : _c_env.node.res.headersSent) {
|
|
112
118
|
return void 0;
|
|
113
119
|
}
|
|
@@ -130,6 +136,14 @@ class CustomServer {
|
|
|
130
136
|
});
|
|
131
137
|
}
|
|
132
138
|
}
|
|
139
|
+
function isRedirect(headers, code) {
|
|
140
|
+
return [
|
|
141
|
+
301,
|
|
142
|
+
302,
|
|
143
|
+
307,
|
|
144
|
+
308
|
|
145
|
+
].includes(code || 0) || headers.get("Location");
|
|
146
|
+
}
|
|
133
147
|
// Annotate the CommonJS export names for ESM import in node:
|
|
134
148
|
0 && (module.exports = {
|
|
135
149
|
CustomServer
|
|
@@ -56,7 +56,12 @@ function createRenderHandler(render) {
|
|
|
56
56
|
serverManifest,
|
|
57
57
|
locals
|
|
58
58
|
});
|
|
59
|
-
|
|
59
|
+
const { body, status, headers } = res;
|
|
60
|
+
const headersData = {};
|
|
61
|
+
headers.forEach((v, k) => {
|
|
62
|
+
headersData[k] = v;
|
|
63
|
+
});
|
|
64
|
+
return c.body(body, status, headersData);
|
|
60
65
|
};
|
|
61
66
|
}
|
|
62
67
|
async function getRenderHandler(options, serverBase) {
|
|
@@ -2,7 +2,7 @@ import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
|
|
|
2
2
|
import { _ as _instanceof } from "@swc/helpers/_/_instanceof";
|
|
3
3
|
import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
|
|
4
4
|
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
|
5
|
-
import {
|
|
5
|
+
import { ServerResponse } from "node:http";
|
|
6
6
|
import { createReadableStreamFromReadable, writeReadableStreamToWritable } from "./polyfills/stream";
|
|
7
7
|
import { installGlobals } from "./polyfills/install";
|
|
8
8
|
installGlobals();
|
|
@@ -179,17 +179,56 @@ var getRequestListener = function(handler) {
|
|
|
179
179
|
};
|
|
180
180
|
}();
|
|
181
181
|
};
|
|
182
|
-
var createNodeServer = function(
|
|
183
|
-
var
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
182
|
+
var createNodeServer = function() {
|
|
183
|
+
var _ref = _async_to_generator(function(requestHandler, httpsOptions) {
|
|
184
|
+
var requestListener, nodeServer, createServer, createServer1;
|
|
185
|
+
return _ts_generator(this, function(_state) {
|
|
186
|
+
switch (_state.label) {
|
|
187
|
+
case 0:
|
|
188
|
+
requestListener = getRequestListener(requestHandler);
|
|
189
|
+
if (!httpsOptions)
|
|
190
|
+
return [
|
|
191
|
+
3,
|
|
192
|
+
2
|
|
193
|
+
];
|
|
194
|
+
return [
|
|
195
|
+
4,
|
|
196
|
+
import("node:https")
|
|
197
|
+
];
|
|
198
|
+
case 1:
|
|
199
|
+
createServer = _state.sent().createServer;
|
|
200
|
+
nodeServer = createServer(httpsOptions, requestListener);
|
|
201
|
+
return [
|
|
202
|
+
3,
|
|
203
|
+
4
|
|
204
|
+
];
|
|
205
|
+
case 2:
|
|
206
|
+
return [
|
|
207
|
+
4,
|
|
208
|
+
import("node:http")
|
|
209
|
+
];
|
|
210
|
+
case 3:
|
|
211
|
+
createServer1 = _state.sent().createServer;
|
|
212
|
+
nodeServer = createServer1(requestListener);
|
|
213
|
+
_state.label = 4;
|
|
214
|
+
case 4:
|
|
215
|
+
nodeServer.getRequestListener = function() {
|
|
216
|
+
return requestListener;
|
|
217
|
+
};
|
|
218
|
+
nodeServer.getRequestHandler = function() {
|
|
219
|
+
return requestHandler;
|
|
220
|
+
};
|
|
221
|
+
return [
|
|
222
|
+
2,
|
|
223
|
+
nodeServer
|
|
224
|
+
];
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
});
|
|
228
|
+
return function createNodeServer2(requestHandler, httpsOptions) {
|
|
229
|
+
return _ref.apply(this, arguments);
|
|
190
230
|
};
|
|
191
|
-
|
|
192
|
-
};
|
|
231
|
+
}();
|
|
193
232
|
export {
|
|
194
233
|
createNodeServer,
|
|
195
234
|
createWebRequest,
|
|
@@ -9,7 +9,7 @@ function writeReadableStreamToWritable(stream, writable) {
|
|
|
9
9
|
}
|
|
10
10
|
function _writeReadableStreamToWritable() {
|
|
11
11
|
_writeReadableStreamToWritable = _async_to_generator(function(stream, writable) {
|
|
12
|
-
var reader, flushable,
|
|
12
|
+
var reader, flushable, error;
|
|
13
13
|
return _ts_generator(this, function(_state) {
|
|
14
14
|
switch (_state.label) {
|
|
15
15
|
case 0:
|
|
@@ -19,48 +19,72 @@ function _writeReadableStreamToWritable() {
|
|
|
19
19
|
case 1:
|
|
20
20
|
_state.trys.push([
|
|
21
21
|
1,
|
|
22
|
-
|
|
22
|
+
3,
|
|
23
23
|
,
|
|
24
|
-
|
|
24
|
+
4
|
|
25
25
|
]);
|
|
26
|
-
_state.label = 2;
|
|
27
|
-
case 2:
|
|
28
|
-
if (false)
|
|
29
|
-
return [
|
|
30
|
-
3,
|
|
31
|
-
4
|
|
32
|
-
];
|
|
33
26
|
return [
|
|
34
27
|
4,
|
|
35
|
-
|
|
28
|
+
new Promise(function(resolve, reject) {
|
|
29
|
+
writable.on("finish", resolve);
|
|
30
|
+
writable.on("error", reject);
|
|
31
|
+
var writeAndFlush = function() {
|
|
32
|
+
var _ref = _async_to_generator(function() {
|
|
33
|
+
var _ref2, done, value;
|
|
34
|
+
return _ts_generator(this, function(_state2) {
|
|
35
|
+
switch (_state2.label) {
|
|
36
|
+
case 0:
|
|
37
|
+
if (false)
|
|
38
|
+
return [
|
|
39
|
+
3,
|
|
40
|
+
2
|
|
41
|
+
];
|
|
42
|
+
return [
|
|
43
|
+
4,
|
|
44
|
+
reader.read()
|
|
45
|
+
];
|
|
46
|
+
case 1:
|
|
47
|
+
_ref2 = _state2.sent(), done = _ref2.done, value = _ref2.value;
|
|
48
|
+
if (done) {
|
|
49
|
+
writable.end();
|
|
50
|
+
return [
|
|
51
|
+
3,
|
|
52
|
+
2
|
|
53
|
+
];
|
|
54
|
+
}
|
|
55
|
+
writable.write(value);
|
|
56
|
+
if (typeof flushable.flush === "function") {
|
|
57
|
+
flushable.flush();
|
|
58
|
+
}
|
|
59
|
+
return [
|
|
60
|
+
3,
|
|
61
|
+
0
|
|
62
|
+
];
|
|
63
|
+
case 2:
|
|
64
|
+
return [
|
|
65
|
+
2
|
|
66
|
+
];
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
return function writeAndFlush2() {
|
|
71
|
+
return _ref.apply(this, arguments);
|
|
72
|
+
};
|
|
73
|
+
}();
|
|
74
|
+
writeAndFlush().catch(reject);
|
|
75
|
+
})
|
|
36
76
|
];
|
|
37
|
-
case
|
|
38
|
-
|
|
39
|
-
if (done) {
|
|
40
|
-
writable.end();
|
|
41
|
-
return [
|
|
42
|
-
3,
|
|
43
|
-
4
|
|
44
|
-
];
|
|
45
|
-
}
|
|
46
|
-
writable.write(value);
|
|
47
|
-
if (typeof flushable.flush === "function") {
|
|
48
|
-
flushable.flush();
|
|
49
|
-
}
|
|
50
|
-
return [
|
|
51
|
-
3,
|
|
52
|
-
2
|
|
53
|
-
];
|
|
54
|
-
case 4:
|
|
77
|
+
case 2:
|
|
78
|
+
_state.sent();
|
|
55
79
|
return [
|
|
56
80
|
3,
|
|
57
|
-
|
|
81
|
+
4
|
|
58
82
|
];
|
|
59
|
-
case
|
|
83
|
+
case 3:
|
|
60
84
|
error = _state.sent();
|
|
61
85
|
writable.destroy(error);
|
|
62
86
|
throw error;
|
|
63
|
-
case
|
|
87
|
+
case 4:
|
|
64
88
|
return [
|
|
65
89
|
2
|
|
66
90
|
];
|
|
@@ -5,12 +5,12 @@ import { _ as _class_private_field_set } from "@swc/helpers/_/_class_private_fie
|
|
|
5
5
|
import { _ as _create_class } from "@swc/helpers/_/_create_class";
|
|
6
6
|
import { getCookie } from "hono/cookie";
|
|
7
7
|
import { getHost } from "../../utils";
|
|
8
|
-
function createBaseHookContext(c) {
|
|
8
|
+
function createBaseHookContext(c, resParams) {
|
|
9
9
|
var logger = c.get("logger");
|
|
10
10
|
var metrics = c.get("metrics");
|
|
11
11
|
return {
|
|
12
12
|
request: new BaseHookRequest(c),
|
|
13
|
-
response: new BaseHookResponse(c),
|
|
13
|
+
response: new BaseHookResponse(c, resParams),
|
|
14
14
|
logger,
|
|
15
15
|
metrics
|
|
16
16
|
};
|
|
@@ -137,17 +137,22 @@ var BaseHookRequest = /* @__PURE__ */ function() {
|
|
|
137
137
|
]);
|
|
138
138
|
return BaseHookRequest2;
|
|
139
139
|
}();
|
|
140
|
-
var _c1 = /* @__PURE__ */ new WeakMap();
|
|
140
|
+
var _c1 = /* @__PURE__ */ new WeakMap(), _resArgs = /* @__PURE__ */ new WeakMap();
|
|
141
141
|
var BaseHookResponse = /* @__PURE__ */ function() {
|
|
142
142
|
"use strict";
|
|
143
|
-
function BaseHookResponse2(c) {
|
|
143
|
+
function BaseHookResponse2(c, resArgs) {
|
|
144
144
|
_class_call_check(this, BaseHookResponse2);
|
|
145
145
|
_class_private_field_init(this, _c1, {
|
|
146
146
|
writable: true,
|
|
147
147
|
value: void 0
|
|
148
148
|
});
|
|
149
|
+
_class_private_field_init(this, _resArgs, {
|
|
150
|
+
writable: true,
|
|
151
|
+
value: void 0
|
|
152
|
+
});
|
|
149
153
|
this.private_overrided = false;
|
|
150
154
|
_class_private_field_set(this, _c1, c);
|
|
155
|
+
_class_private_field_set(this, _resArgs, resArgs);
|
|
151
156
|
}
|
|
152
157
|
var _proto = BaseHookResponse2.prototype;
|
|
153
158
|
_proto.get = function get(key) {
|
|
@@ -158,15 +163,20 @@ var BaseHookResponse = /* @__PURE__ */ function() {
|
|
|
158
163
|
"set-cookie",
|
|
159
164
|
"Set-Cookie"
|
|
160
165
|
].includes(key)) {
|
|
166
|
+
var _$_class_private_field_get;
|
|
161
167
|
_class_private_field_get(this, _c1).header(key, value.toString(), {
|
|
162
168
|
append: true
|
|
163
169
|
});
|
|
170
|
+
(_$_class_private_field_get = _class_private_field_get(this, _resArgs)) === null || _$_class_private_field_get === void 0 ? void 0 : _$_class_private_field_get.headers.append(key, value.toString());
|
|
164
171
|
} else {
|
|
172
|
+
var _$_class_private_field_get1;
|
|
165
173
|
_class_private_field_get(this, _c1).header(key, value.toString());
|
|
174
|
+
(_$_class_private_field_get1 = _class_private_field_get(this, _resArgs)) === null || _$_class_private_field_get1 === void 0 ? void 0 : _$_class_private_field_get1.headers.set(key, value.toString());
|
|
166
175
|
}
|
|
167
176
|
};
|
|
168
177
|
_proto.status = function status(code) {
|
|
169
178
|
_class_private_field_get(this, _c1).status(code);
|
|
179
|
+
_class_private_field_get(this, _resArgs) && (_class_private_field_get(this, _resArgs).status = code);
|
|
170
180
|
};
|
|
171
181
|
_proto.raw = function raw(body, options) {
|
|
172
182
|
_class_private_field_get(this, _c1).res = _class_private_field_get(this, _c1).newResponse(body, options);
|
|
@@ -37,9 +37,9 @@ function _getAfterRenderCtx() {
|
|
|
37
37
|
});
|
|
38
38
|
return _getAfterRenderCtx.apply(this, arguments);
|
|
39
39
|
}
|
|
40
|
-
function createCustomMiddlewaresCtx(c, locals) {
|
|
40
|
+
function createCustomMiddlewaresCtx(c, locals, resArgs) {
|
|
41
41
|
var _c_env_node, _c_env_node1;
|
|
42
|
-
var baseContext = createBaseHookContext(c);
|
|
42
|
+
var baseContext = createBaseHookContext(c, resArgs);
|
|
43
43
|
var reporter = c.get("reporter");
|
|
44
44
|
var response = baseContext.response;
|
|
45
45
|
response.locals = locals;
|
|
@@ -161,7 +161,7 @@ var CustomServer = /* @__PURE__ */ function() {
|
|
|
161
161
|
var _this = this;
|
|
162
162
|
return function() {
|
|
163
163
|
var _ref = _async_to_generator(function(c, next) {
|
|
164
|
-
var _c_env, serverMiddleware, reporter, locals, customMiddlewareCtx, getCost, cost;
|
|
164
|
+
var _c_env, serverMiddleware, reporter, locals, resArgs, customMiddlewareCtx, getCost, cost;
|
|
165
165
|
return _ts_generator(this, function(_state) {
|
|
166
166
|
switch (_state.label) {
|
|
167
167
|
case 0:
|
|
@@ -179,7 +179,10 @@ var CustomServer = /* @__PURE__ */ function() {
|
|
|
179
179
|
}
|
|
180
180
|
reporter = c.get("reporter");
|
|
181
181
|
locals = {};
|
|
182
|
-
|
|
182
|
+
resArgs = {
|
|
183
|
+
headers: new Headers()
|
|
184
|
+
};
|
|
185
|
+
customMiddlewareCtx = createCustomMiddlewaresCtx(c, locals, resArgs);
|
|
183
186
|
getCost = time();
|
|
184
187
|
return [
|
|
185
188
|
4,
|
|
@@ -190,6 +193,12 @@ var CustomServer = /* @__PURE__ */ function() {
|
|
|
190
193
|
cost = getCost();
|
|
191
194
|
cost && (reporter === null || reporter === void 0 ? void 0 : reporter.reportTiming(ServerReportTimings.SERVER_MIDDLEWARE, cost));
|
|
192
195
|
c.set("locals", locals);
|
|
196
|
+
if (isRedirect(resArgs.headers, resArgs.status)) {
|
|
197
|
+
return [
|
|
198
|
+
2,
|
|
199
|
+
c.redirect(resArgs.headers.get("Location") || "", resArgs.status || 302)
|
|
200
|
+
];
|
|
201
|
+
}
|
|
193
202
|
if ((_c_env = c.env) === null || _c_env === void 0 ? void 0 : _c_env.node.res.headersSent) {
|
|
194
203
|
return [
|
|
195
204
|
2,
|
|
@@ -215,6 +224,14 @@ var CustomServer = /* @__PURE__ */ function() {
|
|
|
215
224
|
};
|
|
216
225
|
return CustomServer2;
|
|
217
226
|
}();
|
|
227
|
+
function isRedirect(headers, code) {
|
|
228
|
+
return [
|
|
229
|
+
301,
|
|
230
|
+
302,
|
|
231
|
+
307,
|
|
232
|
+
308
|
|
233
|
+
].includes(code || 0) || headers.get("Location");
|
|
234
|
+
}
|
|
218
235
|
export {
|
|
219
236
|
CustomServer
|
|
220
237
|
};
|
|
@@ -8,7 +8,7 @@ import { createRender } from "./render";
|
|
|
8
8
|
function createRenderHandler(render) {
|
|
9
9
|
return function() {
|
|
10
10
|
var _ref = _async_to_generator(function(c, _) {
|
|
11
|
-
var _c_env_node, logger, reporter, templates, serverManifest, locals, metrics, request, nodeReq, res;
|
|
11
|
+
var _c_env_node, logger, reporter, templates, serverManifest, locals, metrics, request, nodeReq, res, body, status, headers, headersData;
|
|
12
12
|
return _ts_generator(this, function(_state) {
|
|
13
13
|
switch (_state.label) {
|
|
14
14
|
case 0:
|
|
@@ -34,9 +34,14 @@ function createRenderHandler(render) {
|
|
|
34
34
|
];
|
|
35
35
|
case 1:
|
|
36
36
|
res = _state.sent();
|
|
37
|
+
body = res.body, status = res.status, headers = res.headers;
|
|
38
|
+
headersData = {};
|
|
39
|
+
headers.forEach(function(v, k) {
|
|
40
|
+
headersData[k] = v;
|
|
41
|
+
});
|
|
37
42
|
return [
|
|
38
43
|
2,
|
|
39
|
-
|
|
44
|
+
c.body(body, status, headersData)
|
|
40
45
|
];
|
|
41
46
|
}
|
|
42
47
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ServerResponse } from "node:http";
|
|
2
2
|
import { createReadableStreamFromReadable, writeReadableStreamToWritable } from "./polyfills/stream";
|
|
3
3
|
import { installGlobals } from "./polyfills/install";
|
|
4
4
|
installGlobals();
|
|
@@ -87,9 +87,16 @@ const getRequestListener = (handler) => {
|
|
|
87
87
|
}
|
|
88
88
|
};
|
|
89
89
|
};
|
|
90
|
-
const createNodeServer = (requestHandler) => {
|
|
90
|
+
const createNodeServer = async (requestHandler, httpsOptions) => {
|
|
91
91
|
const requestListener = getRequestListener(requestHandler);
|
|
92
|
-
|
|
92
|
+
let nodeServer;
|
|
93
|
+
if (httpsOptions) {
|
|
94
|
+
const { createServer } = await import("node:https");
|
|
95
|
+
nodeServer = createServer(httpsOptions, requestListener);
|
|
96
|
+
} else {
|
|
97
|
+
const { createServer } = await import("node:http");
|
|
98
|
+
nodeServer = createServer(requestListener);
|
|
99
|
+
}
|
|
93
100
|
nodeServer.getRequestListener = () => requestListener;
|
|
94
101
|
nodeServer.getRequestHandler = () => requestHandler;
|
|
95
102
|
return nodeServer;
|
|
@@ -3,17 +3,24 @@ async function writeReadableStreamToWritable(stream, writable) {
|
|
|
3
3
|
const reader = stream.getReader();
|
|
4
4
|
const flushable = writable;
|
|
5
5
|
try {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
6
|
+
await new Promise((resolve, reject) => {
|
|
7
|
+
writable.on("finish", resolve);
|
|
8
|
+
writable.on("error", reject);
|
|
9
|
+
const writeAndFlush = async () => {
|
|
10
|
+
while (true) {
|
|
11
|
+
const { done, value } = await reader.read();
|
|
12
|
+
if (done) {
|
|
13
|
+
writable.end();
|
|
14
|
+
break;
|
|
15
|
+
}
|
|
16
|
+
writable.write(value);
|
|
17
|
+
if (typeof flushable.flush === "function") {
|
|
18
|
+
flushable.flush();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
writeAndFlush().catch(reject);
|
|
23
|
+
});
|
|
17
24
|
} catch (error) {
|
|
18
25
|
writable.destroy(error);
|
|
19
26
|
throw error;
|
|
@@ -3,12 +3,12 @@ import { _ as _class_private_field_init } from "@swc/helpers/_/_class_private_fi
|
|
|
3
3
|
import { _ as _class_private_field_set } from "@swc/helpers/_/_class_private_field_set";
|
|
4
4
|
import { getCookie } from "hono/cookie";
|
|
5
5
|
import { getHost } from "../../utils";
|
|
6
|
-
function createBaseHookContext(c) {
|
|
6
|
+
function createBaseHookContext(c, resParams) {
|
|
7
7
|
const logger = c.get("logger");
|
|
8
8
|
const metrics = c.get("metrics");
|
|
9
9
|
return {
|
|
10
10
|
request: new BaseHookRequest(c),
|
|
11
|
-
response: new BaseHookResponse(c),
|
|
11
|
+
response: new BaseHookResponse(c, resParams),
|
|
12
12
|
logger,
|
|
13
13
|
metrics
|
|
14
14
|
};
|
|
@@ -95,7 +95,7 @@ class BaseHookRequest {
|
|
|
95
95
|
}));
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
|
-
var _c1 = /* @__PURE__ */ new WeakMap();
|
|
98
|
+
var _c1 = /* @__PURE__ */ new WeakMap(), _resArgs = /* @__PURE__ */ new WeakMap();
|
|
99
99
|
class BaseHookResponse {
|
|
100
100
|
get(key) {
|
|
101
101
|
return _class_private_field_get(this, _c1).res.headers.get(key);
|
|
@@ -105,15 +105,20 @@ class BaseHookResponse {
|
|
|
105
105
|
"set-cookie",
|
|
106
106
|
"Set-Cookie"
|
|
107
107
|
].includes(key)) {
|
|
108
|
+
var _class_private_field_get1;
|
|
108
109
|
_class_private_field_get(this, _c1).header(key, value.toString(), {
|
|
109
110
|
append: true
|
|
110
111
|
});
|
|
112
|
+
(_class_private_field_get1 = _class_private_field_get(this, _resArgs)) === null || _class_private_field_get1 === void 0 ? void 0 : _class_private_field_get1.headers.append(key, value.toString());
|
|
111
113
|
} else {
|
|
114
|
+
var _class_private_field_get2;
|
|
112
115
|
_class_private_field_get(this, _c1).header(key, value.toString());
|
|
116
|
+
(_class_private_field_get2 = _class_private_field_get(this, _resArgs)) === null || _class_private_field_get2 === void 0 ? void 0 : _class_private_field_get2.headers.set(key, value.toString());
|
|
113
117
|
}
|
|
114
118
|
}
|
|
115
119
|
status(code) {
|
|
116
120
|
_class_private_field_get(this, _c1).status(code);
|
|
121
|
+
_class_private_field_get(this, _resArgs) && (_class_private_field_get(this, _resArgs).status = code);
|
|
117
122
|
}
|
|
118
123
|
get cookies() {
|
|
119
124
|
const setCookie = (key, value) => {
|
|
@@ -133,13 +138,18 @@ class BaseHookResponse {
|
|
|
133
138
|
_class_private_field_get(this, _c1).res = _class_private_field_get(this, _c1).newResponse(body, options);
|
|
134
139
|
this.private_overrided = true;
|
|
135
140
|
}
|
|
136
|
-
constructor(c) {
|
|
141
|
+
constructor(c, resArgs) {
|
|
137
142
|
_class_private_field_init(this, _c1, {
|
|
138
143
|
writable: true,
|
|
139
144
|
value: void 0
|
|
140
145
|
});
|
|
146
|
+
_class_private_field_init(this, _resArgs, {
|
|
147
|
+
writable: true,
|
|
148
|
+
value: void 0
|
|
149
|
+
});
|
|
141
150
|
this.private_overrided = false;
|
|
142
151
|
_class_private_field_set(this, _c1, c);
|
|
152
|
+
_class_private_field_set(this, _resArgs, resArgs);
|
|
143
153
|
}
|
|
144
154
|
}
|
|
145
155
|
export {
|
|
@@ -13,9 +13,9 @@ async function getAfterRenderCtx(c, baseHookCtx, route) {
|
|
|
13
13
|
afterRenderCtx.route = route;
|
|
14
14
|
return afterRenderCtx;
|
|
15
15
|
}
|
|
16
|
-
function createCustomMiddlewaresCtx(c, locals) {
|
|
16
|
+
function createCustomMiddlewaresCtx(c, locals, resArgs) {
|
|
17
17
|
var _c_env_node, _c_env_node1;
|
|
18
|
-
const baseContext = createBaseHookContext(c);
|
|
18
|
+
const baseContext = createBaseHookContext(c, resArgs);
|
|
19
19
|
const reporter = c.get("reporter");
|
|
20
20
|
const response = baseContext.response;
|
|
21
21
|
response.locals = locals;
|
|
@@ -79,12 +79,18 @@ class CustomServer {
|
|
|
79
79
|
}
|
|
80
80
|
const reporter = c.get("reporter");
|
|
81
81
|
const locals = {};
|
|
82
|
-
const
|
|
82
|
+
const resArgs = {
|
|
83
|
+
headers: new Headers()
|
|
84
|
+
};
|
|
85
|
+
const customMiddlewareCtx = createCustomMiddlewaresCtx(c, locals, resArgs);
|
|
83
86
|
const getCost = time();
|
|
84
87
|
await serverMiddleware(customMiddlewareCtx);
|
|
85
88
|
const cost = getCost();
|
|
86
89
|
cost && (reporter === null || reporter === void 0 ? void 0 : reporter.reportTiming(ServerReportTimings.SERVER_MIDDLEWARE, cost));
|
|
87
90
|
c.set("locals", locals);
|
|
91
|
+
if (isRedirect(resArgs.headers, resArgs.status)) {
|
|
92
|
+
return c.redirect(resArgs.headers.get("Location") || "", resArgs.status || 302);
|
|
93
|
+
}
|
|
88
94
|
if ((_c_env = c.env) === null || _c_env === void 0 ? void 0 : _c_env.node.res.headersSent) {
|
|
89
95
|
return void 0;
|
|
90
96
|
}
|
|
@@ -107,6 +113,14 @@ class CustomServer {
|
|
|
107
113
|
});
|
|
108
114
|
}
|
|
109
115
|
}
|
|
116
|
+
function isRedirect(headers, code) {
|
|
117
|
+
return [
|
|
118
|
+
301,
|
|
119
|
+
302,
|
|
120
|
+
307,
|
|
121
|
+
308
|
|
122
|
+
].includes(code || 0) || headers.get("Location");
|
|
123
|
+
}
|
|
110
124
|
export {
|
|
111
125
|
CustomServer
|
|
112
126
|
};
|
|
@@ -22,7 +22,12 @@ function createRenderHandler(render) {
|
|
|
22
22
|
serverManifest,
|
|
23
23
|
locals
|
|
24
24
|
});
|
|
25
|
-
|
|
25
|
+
const { body, status, headers } = res;
|
|
26
|
+
const headersData = {};
|
|
27
|
+
headers.forEach((v, k) => {
|
|
28
|
+
headersData[k] = v;
|
|
29
|
+
});
|
|
30
|
+
return c.body(body, status, headersData);
|
|
26
31
|
};
|
|
27
32
|
}
|
|
28
33
|
async function getRenderHandler(options, serverBase) {
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
2
3
|
import { Server as NodeServer } from 'node:http';
|
|
4
|
+
import type { Server as NodeHttpsServer } from 'node:https';
|
|
3
5
|
import { NodeRequest, NodeResponse } from '../../../core/plugin';
|
|
4
6
|
import { RequestHandler } from '../../../core/server';
|
|
5
7
|
export declare const createWebRequest: (req: NodeRequest, res: NodeResponse) => Request;
|
|
6
8
|
export declare const sendResponse: (response: Response, res: NodeResponse) => Promise<void>;
|
|
7
9
|
declare const getRequestListener: (handler: RequestHandler) => (req: NodeRequest, res: NodeResponse) => Promise<void>;
|
|
8
|
-
type NodeServerWrapper = NodeServer & {
|
|
10
|
+
type NodeServerWrapper = (NodeServer | NodeHttpsServer) & {
|
|
9
11
|
getRequestListener: () => ReturnType<typeof getRequestListener>;
|
|
10
12
|
getRequestHandler: () => RequestHandler;
|
|
11
13
|
};
|
|
12
|
-
export declare const createNodeServer: (requestHandler: RequestHandler) => NodeServerWrapper
|
|
14
|
+
export declare const createNodeServer: (requestHandler: RequestHandler, httpsOptions?: Record<string, unknown>) => Promise<NodeServerWrapper>;
|
|
13
15
|
export {};
|
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import { HookContext } from '@modern-js/types';
|
|
2
2
|
import type { Context, ServerEnv } from '../../../core/server';
|
|
3
|
-
export
|
|
3
|
+
export type ResArgs = {
|
|
4
|
+
status?: number;
|
|
5
|
+
headers: Headers;
|
|
6
|
+
};
|
|
7
|
+
export declare function createBaseHookContext(c: Context<ServerEnv>, resParams?: ResArgs): HookContext;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { AfterMatchContext, AfterRenderContext, MiddlewareContext, AfterStreamingRenderContext, ServerRoute, HookContext } from '@modern-js/types';
|
|
2
2
|
import { Context, ServerEnv } from '../../../core/server';
|
|
3
3
|
import type { ServerNodeEnv } from '../../adapters/node/hono';
|
|
4
|
+
import { ResArgs } from './base';
|
|
4
5
|
export declare function getAfterMatchCtx(entryName: string, baseHookCtx: HookContext): AfterMatchContext;
|
|
5
6
|
export declare function getAfterRenderCtx(c: Context, baseHookCtx: HookContext, route: Partial<ServerRoute>): Promise<AfterRenderContext>;
|
|
6
|
-
export declare function createCustomMiddlewaresCtx(c: Context<ServerNodeEnv & ServerEnv>, locals: Record<string, any
|
|
7
|
+
export declare function createCustomMiddlewaresCtx(c: Context<ServerNodeEnv & ServerEnv>, locals: Record<string, any>, resArgs?: ResArgs): MiddlewareContext;
|
|
7
8
|
export declare function createAfterStreamingRenderContext(baseHookCtx: HookContext, route: Partial<ServerRoute>): (chunk: string) => AfterStreamingRenderContext;
|
package/package.json
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"modern",
|
|
16
16
|
"modern.js"
|
|
17
17
|
],
|
|
18
|
-
"version": "2.49.4
|
|
18
|
+
"version": "2.49.4",
|
|
19
19
|
"jsnext:source": "./src/index.ts",
|
|
20
20
|
"types": "./dist/types/index.d.ts",
|
|
21
21
|
"main": "./dist/cjs/index.js",
|
|
@@ -69,9 +69,9 @@
|
|
|
69
69
|
"hono": "^3.12.2",
|
|
70
70
|
"isbot": "3.8.0",
|
|
71
71
|
"merge-deep": "^3.0.3",
|
|
72
|
-
"@modern-js/
|
|
73
|
-
"@modern-js/
|
|
74
|
-
"@modern-js/utils": "2.49.
|
|
72
|
+
"@modern-js/plugin": "2.49.4",
|
|
73
|
+
"@modern-js/runtime-utils": "2.49.4",
|
|
74
|
+
"@modern-js/utils": "2.49.4"
|
|
75
75
|
},
|
|
76
76
|
"devDependencies": {
|
|
77
77
|
"@types/jest": "^29",
|
|
@@ -81,9 +81,9 @@
|
|
|
81
81
|
"jest": "^29",
|
|
82
82
|
"ts-jest": "^29.1.0",
|
|
83
83
|
"typescript": "^5",
|
|
84
|
-
"@modern-js/types": "2.49.
|
|
85
|
-
"@scripts/
|
|
86
|
-
"@scripts/
|
|
84
|
+
"@modern-js/types": "2.49.4",
|
|
85
|
+
"@scripts/jest-config": "2.49.4",
|
|
86
|
+
"@scripts/build": "2.49.4"
|
|
87
87
|
},
|
|
88
88
|
"sideEffects": false,
|
|
89
89
|
"publishConfig": {
|