@jsenv/server 11.0.0 → 12.0.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/README.md
CHANGED
|
@@ -70,7 +70,10 @@ const notFoundService = (request) => {
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
const server = await startServer({
|
|
73
|
-
requestToResponse: composeServices(
|
|
73
|
+
requestToResponse: composeServices({
|
|
74
|
+
index: indexService,
|
|
75
|
+
otherwise: notFoundService,
|
|
76
|
+
}),
|
|
74
77
|
})
|
|
75
78
|
|
|
76
79
|
const fetch = await import("node-fetch")
|
package/main.js
CHANGED
|
@@ -5,10 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
export { startServer } from "./src/startServer.js"
|
|
8
|
-
export {
|
|
9
|
-
|
|
10
|
-
composeServicesWithTiming,
|
|
11
|
-
} from "./src/service_composition/service_composition.js"
|
|
8
|
+
export { composeServices } from "./src/service_composition/service_composition.js"
|
|
9
|
+
export { setupRoutes } from "./src/service_composition/routing.js"
|
|
12
10
|
export { jsenvServerInternalErrorToResponse } from "./src/jsenvServerInternalErrorToResponse.js"
|
|
13
11
|
export { readRequestBody } from "./src/readRequestBody.js"
|
|
14
12
|
export { fetchFileSystem } from "./src/fetch_filesystem.js"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jsenv/server",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "12.0.0",
|
|
4
4
|
"description": "Write your Node.js server using pure functions",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"url": "https://github.com/jsenv/server"
|
|
14
14
|
},
|
|
15
15
|
"engines": {
|
|
16
|
-
"node": ">=
|
|
16
|
+
"node": ">=16.12.0"
|
|
17
17
|
},
|
|
18
18
|
"publishConfig": {
|
|
19
19
|
"access": "public"
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
},
|
|
26
26
|
"./*": "./*"
|
|
27
27
|
},
|
|
28
|
+
"main": "./main.js",
|
|
28
29
|
"files": [
|
|
29
30
|
"/src/",
|
|
30
31
|
"/main.js"
|
|
@@ -48,28 +49,26 @@
|
|
|
48
49
|
"@jsenv/abort": "4.1.1",
|
|
49
50
|
"@jsenv/logger": "4.0.1",
|
|
50
51
|
"@jsenv/url-meta": "6.0.1",
|
|
51
|
-
"node-fetch": "2.6.2"
|
|
52
|
+
"node-fetch": "2.6.2",
|
|
53
|
+
"path-to-regexp": "6.2.0"
|
|
52
54
|
},
|
|
53
55
|
"devDependencies": {
|
|
54
|
-
"@babel/core": "7.16.0",
|
|
55
|
-
"@babel/eslint-parser": "7.16.0",
|
|
56
56
|
"@jsenv/assert": "2.3.2",
|
|
57
|
-
"@jsenv/
|
|
58
|
-
"@jsenv/
|
|
59
|
-
"@jsenv/eslint-config": "16.0.8",
|
|
57
|
+
"@jsenv/core": "23.10.0",
|
|
58
|
+
"@jsenv/eslint-config": "16.0.9",
|
|
60
59
|
"@jsenv/filesystem": "2.5.1",
|
|
61
60
|
"@jsenv/github-release-package": "1.2.3",
|
|
62
|
-
"@jsenv/https-local": "1.0.
|
|
61
|
+
"@jsenv/https-local": "1.0.3",
|
|
63
62
|
"@jsenv/importmap-eslint-resolver": "5.1.2",
|
|
64
|
-
"@jsenv/importmap-node-module": "2.
|
|
63
|
+
"@jsenv/importmap-node-module": "2.7.1",
|
|
65
64
|
"@jsenv/package-publish": "1.6.2",
|
|
66
65
|
"@jsenv/performance-impact": "2.2.1",
|
|
67
66
|
"@jsenv/prettier-check-project": "5.6.1",
|
|
68
|
-
"eslint": "
|
|
69
|
-
"eslint-plugin-import": "2.25.
|
|
67
|
+
"eslint": "8.2.0",
|
|
68
|
+
"eslint-plugin-import": "2.25.3",
|
|
70
69
|
"eventsource": "1.1.0",
|
|
71
|
-
"fastify": "3.
|
|
72
|
-
"fastify-static": "4.
|
|
70
|
+
"fastify": "3.24.0",
|
|
71
|
+
"fastify-static": "4.5.0",
|
|
73
72
|
"playwright": "1.16.3",
|
|
74
73
|
"prettier": "2.4.1"
|
|
75
74
|
}
|
|
@@ -16,8 +16,6 @@ export const pluginRequestWaitingCheck = ({
|
|
|
16
16
|
} = {}) => {
|
|
17
17
|
return {
|
|
18
18
|
plugin_request_waiting_check: {
|
|
19
|
-
init: () => {},
|
|
20
|
-
|
|
21
19
|
onRequest: (request, { logger }) => {
|
|
22
20
|
const timeout = setTimeout(
|
|
23
21
|
() => requestWaitingCallback({ request, logger, requestWaitingMs }),
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { createRequire } from "node:module"
|
|
2
|
+
|
|
3
|
+
const require = createRequire(import.meta.url)
|
|
4
|
+
|
|
5
|
+
export const setupRoutes = (routes) => {
|
|
6
|
+
const { match } = require("path-to-regexp")
|
|
7
|
+
|
|
8
|
+
const candidates = Object.keys(routes).map((pathPattern) => {
|
|
9
|
+
const applyPatternMatching = match(pathPattern, {
|
|
10
|
+
decode: decodeURIComponent,
|
|
11
|
+
})
|
|
12
|
+
return {
|
|
13
|
+
applyPatternMatching,
|
|
14
|
+
requestHandler: routes[pathPattern],
|
|
15
|
+
}
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
return (request, { pushResponse, redirectRequest }) => {
|
|
19
|
+
let result
|
|
20
|
+
const found = candidates.find((candidate) => {
|
|
21
|
+
result = candidate.applyPatternMatching(request.pathname)
|
|
22
|
+
return Boolean(result)
|
|
23
|
+
})
|
|
24
|
+
if (found) {
|
|
25
|
+
return found.requestHandler(
|
|
26
|
+
{
|
|
27
|
+
...request,
|
|
28
|
+
routeParams: result.params,
|
|
29
|
+
},
|
|
30
|
+
{ pushResponse, redirectRequest },
|
|
31
|
+
)
|
|
32
|
+
}
|
|
33
|
+
return null
|
|
34
|
+
}
|
|
35
|
+
}
|
|
@@ -2,27 +2,7 @@ import { timeFunction } from "@jsenv/server/src/server_timing/timing_measure.js"
|
|
|
2
2
|
import { composeTwoResponses } from "@jsenv/server/src/internal/response_composition.js"
|
|
3
3
|
import { applyRedirectionToRequest } from "@jsenv/server/src/internal/request_factory.js"
|
|
4
4
|
|
|
5
|
-
export const composeServices = (
|
|
6
|
-
return (request, { pushResponse }) => {
|
|
7
|
-
const redirectRequest = (requestRedirection) => {
|
|
8
|
-
request = applyRedirectionToRequest(request, requestRedirection)
|
|
9
|
-
return null
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
return firstOperationMatching({
|
|
13
|
-
array: callbacks,
|
|
14
|
-
start: (callback) => callback(request, { pushResponse, redirectRequest }),
|
|
15
|
-
predicate: (returnValue) => {
|
|
16
|
-
if (returnValue === null || typeof returnValue !== "object") {
|
|
17
|
-
return false
|
|
18
|
-
}
|
|
19
|
-
return true
|
|
20
|
-
},
|
|
21
|
-
})
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export const composeServicesWithTiming = (namedServices) => {
|
|
5
|
+
export const composeServices = (namedServices) => {
|
|
26
6
|
return async (request, { pushResponse }) => {
|
|
27
7
|
const redirectRequest = (requestRedirection) => {
|
|
28
8
|
request = applyRedirectionToRequest(request, requestRedirection)
|
package/src/startServer.js
CHANGED
|
@@ -483,6 +483,7 @@ export const startServer = async ({
|
|
|
483
483
|
if (onRequest) {
|
|
484
484
|
const returnValue = onRequest(request, {
|
|
485
485
|
warn,
|
|
486
|
+
logger,
|
|
486
487
|
shortcircuitResponse,
|
|
487
488
|
redirectRequest,
|
|
488
489
|
})
|
|
@@ -729,12 +730,10 @@ const generateResponseDescription = async ({
|
|
|
729
730
|
requestToResponse,
|
|
730
731
|
request,
|
|
731
732
|
pushResponse,
|
|
732
|
-
requestFactory,
|
|
733
733
|
}) => {
|
|
734
734
|
try {
|
|
735
735
|
const returnValue = await requestToResponse(request, {
|
|
736
736
|
pushResponse,
|
|
737
|
-
requestFactory,
|
|
738
737
|
})
|
|
739
738
|
return {
|
|
740
739
|
responseProperties: returnValue,
|