@jsenv/server 16.2.1 → 16.3.1
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/client/route_inspector/route_inspector.html +1 -0
- package/dist/jsenv_server.js +7 -3
- package/dist/ws/ws.js +14 -4
- package/package.json +7 -7
- package/src/interfacing_with_node/write_node_response.js +1 -1
- package/src/router/router.js +4 -1
- package/src/services/route_inspector/client/route_inspector.html +1 -0
- package/src/start_server.js +2 -0
package/dist/jsenv_server.js
CHANGED
|
@@ -2036,7 +2036,7 @@ const writeHead = (
|
|
|
2036
2036
|
if (statusText === undefined) {
|
|
2037
2037
|
statusText = statusTextFromStatus(status);
|
|
2038
2038
|
} else {
|
|
2039
|
-
statusText = statusText.replace(/\n/g, "");
|
|
2039
|
+
statusText = statusText.replace(/\n/g, "").replaceAll("✅", "");
|
|
2040
2040
|
}
|
|
2041
2041
|
if (responseIsServerHttp2Stream) {
|
|
2042
2042
|
nodeHeaders = {
|
|
@@ -4516,8 +4516,9 @@ const HTTP_METHODS = [
|
|
|
4516
4516
|
|
|
4517
4517
|
const createRouter = (
|
|
4518
4518
|
routeDescriptionArray,
|
|
4519
|
-
{ optionsFallback } = {},
|
|
4519
|
+
{ optionsFallback, logLevel } = {},
|
|
4520
4520
|
) => {
|
|
4521
|
+
const logger = createLogger({ logLevel });
|
|
4521
4522
|
const routeSet = new Set();
|
|
4522
4523
|
|
|
4523
4524
|
const constructAvailableEndpoints = () => {
|
|
@@ -4695,6 +4696,7 @@ const createRouter = (
|
|
|
4695
4696
|
}
|
|
4696
4697
|
};
|
|
4697
4698
|
const onRouteMatch = (route) => {
|
|
4699
|
+
logger.debug(`Matched route: ${route}`);
|
|
4698
4700
|
onRouteGroupEnd();
|
|
4699
4701
|
};
|
|
4700
4702
|
|
|
@@ -4906,7 +4908,7 @@ It should be should be one of route.${routePropertyName}: ${availableValues.join
|
|
|
4906
4908
|
if (fetchReturnValue === null || fetchReturnValue === undefined) {
|
|
4907
4909
|
continue;
|
|
4908
4910
|
}
|
|
4909
|
-
onRouteMatch();
|
|
4911
|
+
onRouteMatch(route);
|
|
4910
4912
|
if (fetchReturnValue instanceof Response) {
|
|
4911
4913
|
const headers = Object.fromEntries(fetchReturnValue.headers);
|
|
4912
4914
|
onResponseHeaders(request, route, headers);
|
|
@@ -6488,6 +6490,7 @@ const TIMING_NOOP = () => {
|
|
|
6488
6490
|
const startServer = async ({
|
|
6489
6491
|
signal = new AbortController().signal,
|
|
6490
6492
|
logLevel,
|
|
6493
|
+
routerLogLevel,
|
|
6491
6494
|
startLog = true,
|
|
6492
6495
|
serverName = "server",
|
|
6493
6496
|
|
|
@@ -6611,6 +6614,7 @@ const startServer = async ({
|
|
|
6611
6614
|
|
|
6612
6615
|
const router = createRouter(allRouteArray, {
|
|
6613
6616
|
optionsFallback: true,
|
|
6617
|
+
logLevel: routerLogLevel,
|
|
6614
6618
|
});
|
|
6615
6619
|
|
|
6616
6620
|
const server = {};
|
package/dist/ws/ws.js
CHANGED
|
@@ -4681,9 +4681,11 @@ function requireWebsocketServer () {
|
|
|
4681
4681
|
return;
|
|
4682
4682
|
}
|
|
4683
4683
|
|
|
4684
|
-
if (version !==
|
|
4684
|
+
if (version !== 13 && version !== 8) {
|
|
4685
4685
|
const message = 'Missing or invalid Sec-WebSocket-Version header';
|
|
4686
|
-
abortHandshakeOrEmitwsClientError(this, req, socket, 400, message
|
|
4686
|
+
abortHandshakeOrEmitwsClientError(this, req, socket, 400, message, {
|
|
4687
|
+
'Sec-WebSocket-Version': '13, 8'
|
|
4688
|
+
});
|
|
4687
4689
|
return;
|
|
4688
4690
|
}
|
|
4689
4691
|
|
|
@@ -4951,16 +4953,24 @@ function requireWebsocketServer () {
|
|
|
4951
4953
|
* @param {Duplex} socket The socket of the upgrade request
|
|
4952
4954
|
* @param {Number} code The HTTP response status code
|
|
4953
4955
|
* @param {String} message The HTTP response body
|
|
4956
|
+
* @param {Object} [headers] The HTTP response headers
|
|
4954
4957
|
* @private
|
|
4955
4958
|
*/
|
|
4956
|
-
function abortHandshakeOrEmitwsClientError(
|
|
4959
|
+
function abortHandshakeOrEmitwsClientError(
|
|
4960
|
+
server,
|
|
4961
|
+
req,
|
|
4962
|
+
socket,
|
|
4963
|
+
code,
|
|
4964
|
+
message,
|
|
4965
|
+
headers
|
|
4966
|
+
) {
|
|
4957
4967
|
if (server.listenerCount('wsClientError')) {
|
|
4958
4968
|
const err = new Error(message);
|
|
4959
4969
|
Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError);
|
|
4960
4970
|
|
|
4961
4971
|
server.emit('wsClientError', err, socket, req);
|
|
4962
4972
|
} else {
|
|
4963
|
-
abortHandshake(socket, code, message);
|
|
4973
|
+
abortHandshake(socket, code, message, headers);
|
|
4964
4974
|
}
|
|
4965
4975
|
}
|
|
4966
4976
|
return websocketServer$1;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jsenv/server",
|
|
3
|
-
"version": "16.
|
|
3
|
+
"version": "16.3.1",
|
|
4
4
|
"description": "A modern Node.js HTTP server with declarative routing, content negotiation, and WebSocket support",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"prepublishOnly": "npm run build"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"launch-editor": "2.
|
|
38
|
+
"launch-editor": "2.11.0"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@jsenv/abort": "../../tooling/abort",
|
|
@@ -45,19 +45,19 @@
|
|
|
45
45
|
"@jsenv/filesystem": "../../tooling/filesystem",
|
|
46
46
|
"@jsenv/https-local": "../../tooling/https-local",
|
|
47
47
|
"@jsenv/humanize": "../../tooling/humanize",
|
|
48
|
+
"@jsenv/navi": "../../frontend/navi",
|
|
48
49
|
"@jsenv/plugin-commonjs": "../../related/plugin-commonjs",
|
|
49
|
-
"@jsenv/router": "../../frontend/router",
|
|
50
50
|
"@jsenv/server": "./",
|
|
51
51
|
"@jsenv/snapshot": "../../tooling/snapshot",
|
|
52
52
|
"@jsenv/url-meta": "../../tooling/url_meta",
|
|
53
53
|
"@jsenv/url-pattern": "../../tooling/url-pattern",
|
|
54
54
|
"@jsenv/urls": "../../tooling/urls",
|
|
55
55
|
"@jsenv/utils": "../../tooling/utils",
|
|
56
|
-
"eventsource": "
|
|
56
|
+
"eventsource": "4.0.0",
|
|
57
57
|
"formidable": "3.5.4",
|
|
58
|
-
"playwright": "1.
|
|
59
|
-
"undici": "7.
|
|
60
|
-
"ws": "8.18.
|
|
58
|
+
"playwright": "1.54.1",
|
|
59
|
+
"undici": "7.12.0",
|
|
60
|
+
"ws": "8.18.3"
|
|
61
61
|
},
|
|
62
62
|
"engines": {
|
|
63
63
|
"node": ">=22.13.1"
|
|
@@ -186,7 +186,7 @@ const writeHead = (
|
|
|
186
186
|
if (statusText === undefined) {
|
|
187
187
|
statusText = statusTextFromStatus(status);
|
|
188
188
|
} else {
|
|
189
|
-
statusText = statusText.replace(/\n/g, "");
|
|
189
|
+
statusText = statusText.replace(/\n/g, "").replaceAll("✅", "");
|
|
190
190
|
}
|
|
191
191
|
if (responseIsServerHttp2Stream) {
|
|
192
192
|
nodeHeaders = {
|
package/src/router/router.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { parseFunction } from "@jsenv/assert/src/utils/function_parser.js";
|
|
2
2
|
import { lookupPackageDirectory } from "@jsenv/filesystem";
|
|
3
|
+
import { createLogger } from "@jsenv/humanize";
|
|
3
4
|
import {
|
|
4
5
|
createHeadersPattern,
|
|
5
6
|
createResourcePattern,
|
|
@@ -27,8 +28,9 @@ const HTTP_METHODS = [
|
|
|
27
28
|
|
|
28
29
|
export const createRouter = (
|
|
29
30
|
routeDescriptionArray,
|
|
30
|
-
{ optionsFallback } = {},
|
|
31
|
+
{ optionsFallback, logLevel } = {},
|
|
31
32
|
) => {
|
|
33
|
+
const logger = createLogger({ logLevel });
|
|
32
34
|
const routeSet = new Set();
|
|
33
35
|
|
|
34
36
|
const constructAvailableEndpoints = () => {
|
|
@@ -206,6 +208,7 @@ export const createRouter = (
|
|
|
206
208
|
}
|
|
207
209
|
};
|
|
208
210
|
const onRouteMatch = (route) => {
|
|
211
|
+
logger.debug(`Matched route: ${route}`);
|
|
209
212
|
onRouteGroupEnd(route);
|
|
210
213
|
};
|
|
211
214
|
|
package/src/start_server.js
CHANGED
|
@@ -56,6 +56,7 @@ const TIMING_NOOP = () => {
|
|
|
56
56
|
export const startServer = async ({
|
|
57
57
|
signal = new AbortController().signal,
|
|
58
58
|
logLevel,
|
|
59
|
+
routerLogLevel,
|
|
59
60
|
startLog = true,
|
|
60
61
|
serverName = "server",
|
|
61
62
|
|
|
@@ -179,6 +180,7 @@ export const startServer = async ({
|
|
|
179
180
|
|
|
180
181
|
const router = createRouter(allRouteArray, {
|
|
181
182
|
optionsFallback: true,
|
|
183
|
+
logLevel: routerLogLevel,
|
|
182
184
|
});
|
|
183
185
|
|
|
184
186
|
const server = {};
|