@better-agnostic/handler-express 0.0.2
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/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +63 -0
- package/dist/index.js.map +1 -0
- package/package.json +40 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type DispatchableEngine } from "@better-agnostic/handler";
|
|
2
|
+
import type { Request, RequestHandler } from "express";
|
|
3
|
+
export interface ExpressHandlerOptions<TEngine, TAuth = unknown> {
|
|
4
|
+
basePath?: string;
|
|
5
|
+
getAuthContext?: (req: Request) => Promise<TAuth | null> | TAuth | null;
|
|
6
|
+
requireAuth?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function createExpressHandler<TEngine extends DispatchableEngine, TAuth = unknown>(engine: TEngine, options?: ExpressHandlerOptions<TEngine, TAuth>): RequestHandler;
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EAIxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAY,MAAM,SAAS,CAAC;AAEjE,MAAM,WAAW,qBAAqB,CAAC,OAAO,EAAE,KAAK,GAAG,OAAO;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IACxE,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AA+DD,wBAAgB,oBAAoB,CAAC,OAAO,SAAS,kBAAkB,EAAE,KAAK,GAAG,OAAO,EACtF,MAAM,EAAE,OAAO,EACf,OAAO,CAAC,EAAE,qBAAqB,CAAC,OAAO,EAAE,KAAK,CAAC,GAC9C,cAAc,CAehB"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { dispatch, parseJsonBody, queryToRecord, } from "@better-agnostic/handler";
|
|
2
|
+
async function toCoreRequest(req, options) {
|
|
3
|
+
const path = req.path;
|
|
4
|
+
const query = queryToRecord(req.query);
|
|
5
|
+
let body = null;
|
|
6
|
+
if (req.method === "POST" || req.method === "PATCH") {
|
|
7
|
+
body =
|
|
8
|
+
typeof req.body === "object" && req.body !== null
|
|
9
|
+
? req.body
|
|
10
|
+
: parseJsonBody(req.body != null ? String(req.body) : null);
|
|
11
|
+
}
|
|
12
|
+
const coreReq = {
|
|
13
|
+
method: req.method,
|
|
14
|
+
path,
|
|
15
|
+
params: {},
|
|
16
|
+
query,
|
|
17
|
+
body,
|
|
18
|
+
};
|
|
19
|
+
if (options?.getAuthContext) {
|
|
20
|
+
const auth = await Promise.resolve(options.getAuthContext(req));
|
|
21
|
+
if (auth != null) {
|
|
22
|
+
coreReq.auth = auth;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return coreReq;
|
|
26
|
+
}
|
|
27
|
+
async function sendResponse(res, status, body, options) {
|
|
28
|
+
if (options?.stream) {
|
|
29
|
+
res.writeHead(status, options.headers);
|
|
30
|
+
const reader = options.stream.getReader();
|
|
31
|
+
const pump = () => reader.read().then(({ done, value }) => {
|
|
32
|
+
if (done) {
|
|
33
|
+
res.end();
|
|
34
|
+
return Promise.resolve();
|
|
35
|
+
}
|
|
36
|
+
res.write(Buffer.from(value));
|
|
37
|
+
return pump();
|
|
38
|
+
});
|
|
39
|
+
await pump();
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (status === 204) {
|
|
43
|
+
res.sendStatus(204);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
res.status(status).json(body ?? null);
|
|
47
|
+
}
|
|
48
|
+
export function createExpressHandler(engine, options) {
|
|
49
|
+
const basePath = options?.basePath ?? "";
|
|
50
|
+
return async (req, res) => {
|
|
51
|
+
const coreReq = await toCoreRequest(req, options);
|
|
52
|
+
if (options?.requireAuth && options?.getAuthContext && coreReq.auth == null) {
|
|
53
|
+
res.status(401).end();
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const coreRes = await dispatch(engine, coreReq, basePath);
|
|
57
|
+
await sendResponse(res, coreRes.status, coreRes.body, {
|
|
58
|
+
stream: coreRes.stream,
|
|
59
|
+
headers: coreRes.headers,
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@better-agnostic/handler-express",
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "Express handler for better-agnostic libraries",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/elydelva/better-agnostic",
|
|
9
|
+
"directory": "packages/handler-express"
|
|
10
|
+
},
|
|
11
|
+
"keywords": ["express", "handler", "better-agnostic"],
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "public"
|
|
14
|
+
},
|
|
15
|
+
"type": "module",
|
|
16
|
+
"main": "./dist/index.js",
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"exports": {
|
|
19
|
+
".": {
|
|
20
|
+
"types": "./dist/index.d.ts",
|
|
21
|
+
"import": "./dist/index.js",
|
|
22
|
+
"default": "./dist/index.js"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"scripts": {
|
|
26
|
+
"build": "tsc"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@better-agnostic/handler": "workspace:*"
|
|
30
|
+
},
|
|
31
|
+
"peerDependencies": {
|
|
32
|
+
"express": ">=4.0.0"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@types/express": "^5.0.0",
|
|
36
|
+
"express": "^4.21.0",
|
|
37
|
+
"typescript": "^5.7.0"
|
|
38
|
+
},
|
|
39
|
+
"files": ["dist"]
|
|
40
|
+
}
|