dx-server 0.0.1 → 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.
Files changed (50) hide show
  1. package/README.md +183 -0
  2. package/cjs/body.d.ts +32 -0
  3. package/cjs/body.js +91 -0
  4. package/cjs/contentType.d.ts +4 -0
  5. package/cjs/contentType.js +92 -0
  6. package/cjs/context.d.ts +15 -0
  7. package/cjs/context.js +27 -0
  8. package/cjs/error.js +42 -0
  9. package/cjs/etag.d.ts +7 -0
  10. package/cjs/etag.js +100 -0
  11. package/cjs/express.d.ts +39 -0
  12. package/cjs/express.js +144 -0
  13. package/cjs/expressApp.d.ts +4 -0
  14. package/cjs/expressApp.js +44 -0
  15. package/cjs/file.d.ts +3 -0
  16. package/cjs/file.js +12 -0
  17. package/cjs/index.d.ts +6 -0
  18. package/cjs/index.js +33 -0
  19. package/cjs/package.json +3 -0
  20. package/cjs/route.d.ts +38 -0
  21. package/cjs/route.js +86 -0
  22. package/cjs/static.d.ts +4 -0
  23. package/cjs/static.js +60 -0
  24. package/cjs/stream.d.ts +11 -0
  25. package/cjs/stream.js +100 -0
  26. package/esm/body.d.ts +32 -0
  27. package/esm/body.js +88 -0
  28. package/esm/contentType.d.ts +4 -0
  29. package/esm/contentType.js +88 -0
  30. package/esm/context.d.ts +15 -0
  31. package/esm/context.js +23 -0
  32. package/esm/error.js +37 -0
  33. package/esm/etag.d.ts +7 -0
  34. package/esm/etag.js +90 -0
  35. package/esm/express.d.ts +39 -0
  36. package/esm/express.js +133 -0
  37. package/esm/expressApp.d.ts +4 -0
  38. package/esm/expressApp.js +35 -0
  39. package/esm/file.d.ts +3 -0
  40. package/esm/file.js +8 -0
  41. package/esm/index.d.ts +6 -0
  42. package/esm/index.js +7 -0
  43. package/esm/route.d.ts +38 -0
  44. package/esm/route.js +82 -0
  45. package/esm/static.d.ts +4 -0
  46. package/esm/static.js +56 -0
  47. package/esm/stream.d.ts +11 -0
  48. package/esm/stream.js +92 -0
  49. package/package.json +31 -4
  50. package/index.js +0 -1
package/cjs/express.js ADDED
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.setRedirect = exports.setJson = exports.setBuffer = exports.setHtml = exports.setText = exports.expressContext = void 0;
7
+ const jdefer_1 = __importDefault(require("jdefer"));
8
+ const node_util_1 = require("node:util");
9
+ const etag_js_1 = require("./etag.js");
10
+ const context_js_1 = require("./context.js");
11
+ exports.expressContext = (0, context_js_1.makeContext)(async ({ jsonBeautify } = {}) => {
12
+ return {
13
+ beautify: jsonBeautify,
14
+ };
15
+ }, async (ret, { type, data, charset, beautify }) => {
16
+ const res = context_js_1.responseContext.value;
17
+ const setContentType = (contentType) => {
18
+ if (res.headersSent || res.getHeader('content-type'))
19
+ return;
20
+ res.setHeader('content-type', `${contentType}${charset ? `; charset=${charset}` : ''}`);
21
+ };
22
+ let buffer;
23
+ switch (type) {
24
+ case 'text':
25
+ setContentType('text/plain');
26
+ case 'html':
27
+ setContentType('text/html');
28
+ // shared with text
29
+ buffer = Buffer.from(data, charset);
30
+ break;
31
+ case 'buffer':
32
+ setContentType('application/octet-stream');
33
+ buffer = data;
34
+ break;
35
+ case 'json':
36
+ setContentType('application/json');
37
+ buffer = Buffer.from(beautify ? JSON.stringify(data, null, 2) : JSON.stringify(data), charset);
38
+ break;
39
+ case 'redirect':
40
+ buffer = Buffer.from(data, charset);
41
+ break;
42
+ case undefined:
43
+ // skip response. Some middleware may handle it outside the chain. For example, express middleware
44
+ return ret;
45
+ default:
46
+ if (!res.getHeader('content-type'))
47
+ res.setHeader('content-type', 'text/plain');
48
+ throw new Error(`unsupported response type ${type}`);
49
+ }
50
+ const req = context_js_1.requestContext.value;
51
+ if (res.headersSent) {
52
+ if (res.writableFinished) {
53
+ // skipped: response is already finished
54
+ }
55
+ else if (res.writableEnded) {
56
+ const defer = (0, jdefer_1.default)();
57
+ res.addListener('finish', defer.resolve);
58
+ await defer.promise;
59
+ // skipped: response is already ended
60
+ // chunk is not fully flushed yet
61
+ }
62
+ else
63
+ await (0, node_util_1.promisify)(res.end.bind(res))(undefined); // to be consistent, we end the response immediately
64
+ }
65
+ else {
66
+ // https://github.com/expressjs/express/blob/980d881e3b023db079de60477a2588a91f046ca5/lib/response.js#L210
67
+ if (res.statusCode === 204) { // No Content
68
+ res.removeHeader('content-type');
69
+ res.removeHeader('content-length');
70
+ res.removeHeader('transfer-encoding');
71
+ // write nothing
72
+ }
73
+ if (res.statusCode === 205) { // reset content. Tell client to clear the form, etc.
74
+ res.setHeader('content-length', 0);
75
+ res.removeHeader('transfer-encoding');
76
+ }
77
+ else if (req.method === 'HEAD') {
78
+ // write nothing
79
+ }
80
+ else {
81
+ // support: 304 (etag), zipping, file etag and last modified
82
+ res.setHeader('content-length', buffer.length);
83
+ const etag = (0, etag_js_1.entityTag)(buffer);
84
+ const lastModified = res.getHeader('last-modified');
85
+ res.setHeader('ETag', etag);
86
+ if ((0, etag_js_1.isFreshETag)(req, etag)) {
87
+ res.removeHeader('content-type');
88
+ res.removeHeader('content-length');
89
+ res.removeHeader('transfer-encoding');
90
+ res.statusCode = 304;
91
+ // write nothing
92
+ }
93
+ else
94
+ res.write(buffer);
95
+ // fixme: not support content-encoding (gzip, deflate, br) for now
96
+ }
97
+ await (0, node_util_1.promisify)(res.end.bind(res))(undefined); // some express middleware, such as express-session, requires explicitly passing chunk
98
+ }
99
+ return ret;
100
+ });
101
+ function setText(text, { status } = {}) {
102
+ const response = context_js_1.responseContext.value;
103
+ const express = exports.expressContext.value;
104
+ if (status)
105
+ response.statusCode = status;
106
+ express.data = text;
107
+ express.type = 'text';
108
+ }
109
+ exports.setText = setText;
110
+ function setHtml(html, opts = {}) {
111
+ setText(html, opts);
112
+ const express = exports.expressContext.value;
113
+ express.type = 'html';
114
+ }
115
+ exports.setHtml = setHtml;
116
+ function setBuffer(buffer, { status } = {}) {
117
+ const response = context_js_1.responseContext.value;
118
+ const express = exports.expressContext.value;
119
+ if (status)
120
+ response.statusCode = status;
121
+ express.data = buffer;
122
+ express.type = 'buffer';
123
+ }
124
+ exports.setBuffer = setBuffer;
125
+ function setJson(json, { status, beautify } = {}) {
126
+ const response = context_js_1.responseContext.value;
127
+ if (status)
128
+ response.statusCode = status;
129
+ const express = exports.expressContext.value;
130
+ express.data = json;
131
+ express.type = 'json';
132
+ if (beautify !== undefined)
133
+ express.beautify = beautify;
134
+ }
135
+ exports.setJson = setJson;
136
+ function setRedirect(url, status) {
137
+ const response = context_js_1.responseContext.value;
138
+ const express = exports.expressContext.value;
139
+ response.statusCode = status;
140
+ express.data = url;
141
+ express.type = 'redirect';
142
+ }
143
+ exports.setRedirect = setRedirect;
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9leHByZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE4QjtBQUM5Qix5Q0FBbUM7QUFDbkMsdUNBQWdEO0FBQ2hELDZDQUF5RTtBQUU1RCxRQUFBLGNBQWMsR0FBRyxJQUFBLHdCQUFXLEVBQUMsS0FBSyxFQUM5QyxFQUFDLFlBQVksS0FFVCxFQUFFLEVBQ0wsRUFBRTtJQUNILE9BQU87UUFDTixRQUFRLEVBQUUsWUFBWTtLQTBCckIsQ0FBQTtBQUNILENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFDLEVBQUUsRUFBRTtJQUNqRCxNQUFNLEdBQUcsR0FBRyw0QkFBZSxDQUFDLEtBQUssQ0FBQTtJQUNqQyxNQUFNLGNBQWMsR0FBRyxDQUFDLFdBQW1CLEVBQUUsRUFBRTtRQUM5QyxJQUFJLEdBQUcsQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUM7WUFBRSxPQUFNO1FBQzVELEdBQUcsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLEdBQUcsV0FBVyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsYUFBYSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUN4RixDQUFDLENBQUE7SUFDRCxJQUFJLE1BQU0sQ0FBQTtJQUVWLFFBQVEsSUFBSSxFQUFFO1FBQ2IsS0FBSyxNQUFNO1lBQ1YsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQzdCLEtBQUssTUFBTTtZQUNWLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtZQUMzQixtQkFBbUI7WUFDbkIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQ25DLE1BQUs7UUFDTixLQUFLLFFBQVE7WUFDWixj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
@@ -0,0 +1,4 @@
1
+ import { type Express, type Request, type Response, type Router } from 'express';
2
+ export declare const expressApp: (setup: (app: Express) => any) => Promise<(next: any) => Promise<void>>;
3
+ export declare const expressRouter: (setup: (router: Router) => any) => Promise<(next: any) => Promise<void>>;
4
+ export declare const chainExpressMiddlewares: (...middlewares: ((req: Request, res: Response, next: () => any) => any)[]) => Promise<(next: any) => Promise<void>>;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.chainExpressMiddlewares = exports.expressRouter = exports.expressApp = void 0;
7
+ const express_1 = __importDefault(require("express"));
8
+ const context_js_1 = require("./context.js");
9
+ const jdefer_1 = __importDefault(require("jdefer"));
10
+ const expressApp = async (setup) => {
11
+ const symbol = Symbol('expressApp');
12
+ const app = (0, express_1.default)();
13
+ await setup(app);
14
+ app.use((req, _res, _next) => req[symbol].resolve());
15
+ app.use((err, req, _res, _next) => req[symbol].reject(err));
16
+ return async (next) => {
17
+ const req = context_js_1.requestContext.value;
18
+ const defer = (0, jdefer_1.default)();
19
+ req[symbol] = defer;
20
+ app(req, context_js_1.responseContext.value);
21
+ await defer.promise;
22
+ await next();
23
+ };
24
+ };
25
+ exports.expressApp = expressApp;
26
+ const expressRouter = async (setup) => {
27
+ const symbol = Symbol('expressRouter');
28
+ const router = express_1.default.Router();
29
+ await setup(router);
30
+ router.use((req, _res, _next) => req[symbol].resolve());
31
+ router.use((err, req, _res, _next) => req[symbol].reject(err));
32
+ return async (next) => {
33
+ const req = context_js_1.requestContext.value;
34
+ const defer = (0, jdefer_1.default)();
35
+ req[symbol] = defer;
36
+ router(req, context_js_1.responseContext.value);
37
+ await defer.promise;
38
+ await next();
39
+ };
40
+ };
41
+ exports.expressRouter = expressRouter;
42
+ const chainExpressMiddlewares = (...middlewares) => (0, exports.expressRouter)(router => router.use(...middlewares));
43
+ exports.chainExpressMiddlewares = chainExpressMiddlewares;
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc0FwcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9leHByZXNzQXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHNEQUF1RjtBQUN2Riw2Q0FBNEQ7QUFDNUQsb0RBQThCO0FBRXZCLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxLQUE0QixFQUFFLEVBQUU7SUFDaEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFBO0lBRW5DLE1BQU0sR0FBRyxHQUFHLElBQUEsaUJBQU8sR0FBRSxDQUFBO0lBQ3JCLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2hCLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFDcEQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQzNELE9BQU8sS0FBSyxFQUFDLElBQUksRUFBQyxFQUFFO1FBQ25CLE1BQU0sR0FBRyxHQUFHLDJCQUFjLENBQUMsS0FBSyxDQUFBO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUEsZ0JBQVMsR0FBRSxDQUFBO1FBQ3pCLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUE7UUFDbkIsR0FBRyxDQUFDLEdBQUcsRUFBRSw0QkFBZSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQy9CLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQTtRQUNuQixNQUFNLElBQUksRUFBRSxDQUFBO0lBQ2IsQ0FBQyxDQUFBO0FBQ0YsQ0FBQyxDQUFBO0FBZlksUUFBQSxVQUFVLGNBZXRCO0FBRU0sTUFBTSxhQUFhLEdBQUcsS0FBSyxFQUFFLEtBQThCLEVBQUUsRUFBRTtJQUNyRSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUE7SUFFdEMsTUFBTSxNQUFNLEdBQUcsaUJBQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUMvQixNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUNuQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBQ3ZELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUM5RCxPQUFPLEtBQUssRUFBQyxJQUFJLEVBQUMsRUFBRTtRQUNuQixNQUFNLEdBQUcsR0FBRywyQkFBYyxDQUFDLEtBQUssQ0FBQTtRQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFBLGdCQUFTLEdBQUUsQ0FBQTtRQUN6QixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFBO1FBQ25CLE1BQU0sQ0FBQyxHQUFHLEVBQUUsNEJBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNsQyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUE7UUFDbkIsTUFBTSxJQUFJLEVBQUUsQ0FBQTtJQUNiLENBQUMsQ0FBQTtBQUNGLENBQUMsQ0FBQTtBQWZZLFFBQUEsYUFBYSxpQkFlekI7QUFFTSxNQUFNLHVCQUF1QixHQUFHLENBQ3RDLEdBQUcsV0FBeUUsRUFDM0UsRUFBRSxDQUFDLElBQUEscUJBQWEsRUFBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFBO0FBRjNDLFFBQUEsdUJBQXVCLDJCQUVvQiJ9
package/cjs/file.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export declare const serveFile: ({ prefix }: {
2
+ prefix?: string | undefined;
3
+ }) => IChainable;
package/cjs/file.js ADDED
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.serveFile = void 0;
4
+ const context_js_1 = require("./context.js");
5
+ const serveFile = ({ prefix = '' }) => next => {
6
+ const req = context_js_1.requestContext.value;
7
+ const res = context_js_1.responseContext.value;
8
+ if (req.method !== 'GET' && req.method !== 'HEAD')
9
+ return next();
10
+ };
11
+ exports.serveFile = serveFile;
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9maWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUE0RDtBQUdyRCxNQUFNLFNBQVMsR0FBRyxDQUN4QixFQUFDLE1BQU0sR0FBRyxFQUFFLEVBRVgsRUFDWSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7SUFDdkIsTUFBTSxHQUFHLEdBQUcsMkJBQWMsQ0FBQyxLQUFLLENBQUE7SUFDaEMsTUFBTSxHQUFHLEdBQUcsNEJBQWUsQ0FBQyxLQUFLLENBQUE7SUFDakMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLEtBQUssSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU07UUFBRSxPQUFPLElBQUksRUFBRSxDQUFBO0FBQ2pFLENBQUMsQ0FBQTtBQVJZLFFBQUEsU0FBUyxhQVFyQiJ9
package/cjs/index.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export { makeContext, requestContext, responseContext } from './context.js';
2
+ export { expressContext, setHtml, setJson, setBuffer, setRedirect, setText } from './express.js';
3
+ export { bufferBodyContext, jsonBodyContext, queryContext, rawBodyContext, textBodyContext, urlencodedBodyContext } from './body.js';
4
+ export { router } from './route.js';
5
+ export { catchApiError, catchError, notFound, notFoundApi } from './error.js';
6
+ export { expressApp, expressRouter, chainExpressMiddlewares } from './expressApp.js';
package/cjs/index.js ADDED
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.chainExpressMiddlewares = exports.expressRouter = exports.expressApp = exports.notFoundApi = exports.notFound = exports.catchError = exports.catchApiError = exports.router = exports.urlencodedBodyContext = exports.textBodyContext = exports.rawBodyContext = exports.queryContext = exports.jsonBodyContext = exports.bufferBodyContext = exports.setText = exports.setRedirect = exports.setBuffer = exports.setJson = exports.setHtml = exports.expressContext = exports.responseContext = exports.requestContext = exports.makeContext = void 0;
4
+ var context_js_1 = require("./context.js");
5
+ Object.defineProperty(exports, "makeContext", { enumerable: true, get: function () { return context_js_1.makeContext; } });
6
+ Object.defineProperty(exports, "requestContext", { enumerable: true, get: function () { return context_js_1.requestContext; } });
7
+ Object.defineProperty(exports, "responseContext", { enumerable: true, get: function () { return context_js_1.responseContext; } });
8
+ var express_js_1 = require("./express.js");
9
+ Object.defineProperty(exports, "expressContext", { enumerable: true, get: function () { return express_js_1.expressContext; } });
10
+ Object.defineProperty(exports, "setHtml", { enumerable: true, get: function () { return express_js_1.setHtml; } });
11
+ Object.defineProperty(exports, "setJson", { enumerable: true, get: function () { return express_js_1.setJson; } });
12
+ Object.defineProperty(exports, "setBuffer", { enumerable: true, get: function () { return express_js_1.setBuffer; } });
13
+ Object.defineProperty(exports, "setRedirect", { enumerable: true, get: function () { return express_js_1.setRedirect; } });
14
+ Object.defineProperty(exports, "setText", { enumerable: true, get: function () { return express_js_1.setText; } });
15
+ var body_js_1 = require("./body.js");
16
+ Object.defineProperty(exports, "bufferBodyContext", { enumerable: true, get: function () { return body_js_1.bufferBodyContext; } });
17
+ Object.defineProperty(exports, "jsonBodyContext", { enumerable: true, get: function () { return body_js_1.jsonBodyContext; } });
18
+ Object.defineProperty(exports, "queryContext", { enumerable: true, get: function () { return body_js_1.queryContext; } });
19
+ Object.defineProperty(exports, "rawBodyContext", { enumerable: true, get: function () { return body_js_1.rawBodyContext; } });
20
+ Object.defineProperty(exports, "textBodyContext", { enumerable: true, get: function () { return body_js_1.textBodyContext; } });
21
+ Object.defineProperty(exports, "urlencodedBodyContext", { enumerable: true, get: function () { return body_js_1.urlencodedBodyContext; } });
22
+ var route_js_1 = require("./route.js");
23
+ Object.defineProperty(exports, "router", { enumerable: true, get: function () { return route_js_1.router; } });
24
+ var error_js_1 = require("./error.js");
25
+ Object.defineProperty(exports, "catchApiError", { enumerable: true, get: function () { return error_js_1.catchApiError; } });
26
+ Object.defineProperty(exports, "catchError", { enumerable: true, get: function () { return error_js_1.catchError; } });
27
+ Object.defineProperty(exports, "notFound", { enumerable: true, get: function () { return error_js_1.notFound; } });
28
+ Object.defineProperty(exports, "notFoundApi", { enumerable: true, get: function () { return error_js_1.notFoundApi; } });
29
+ var expressApp_js_1 = require("./expressApp.js");
30
+ Object.defineProperty(exports, "expressApp", { enumerable: true, get: function () { return expressApp_js_1.expressApp; } });
31
+ Object.defineProperty(exports, "expressRouter", { enumerable: true, get: function () { return expressApp_js_1.expressRouter; } });
32
+ Object.defineProperty(exports, "chainExpressMiddlewares", { enumerable: true, get: function () { return expressApp_js_1.chainExpressMiddlewares; } });
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXlFO0FBQWpFLHlHQUFBLFdBQVcsT0FBQTtBQUFFLDRHQUFBLGNBQWMsT0FBQTtBQUFFLDZHQUFBLGVBQWUsT0FBQTtBQUNwRCwyQ0FPcUI7QUFOcEIsNEdBQUEsY0FBYyxPQUFBO0FBQ2QscUdBQUEsT0FBTyxPQUFBO0FBQ1AscUdBQUEsT0FBTyxPQUFBO0FBQ1AsdUdBQUEsU0FBUyxPQUFBO0FBQ1QseUdBQUEsV0FBVyxPQUFBO0FBQ1gscUdBQUEsT0FBTyxPQUFBO0FBRVIscUNBT2tCO0FBTmpCLDRHQUFBLGlCQUFpQixPQUFBO0FBQ2pCLDBHQUFBLGVBQWUsT0FBQTtBQUNmLHVHQUFBLFlBQVksT0FBQTtBQUNaLHlHQUFBLGNBQWMsT0FBQTtBQUNkLDBHQUFBLGVBQWUsT0FBQTtBQUNmLGdIQUFBLHFCQUFxQixPQUFBO0FBRXRCLHVDQUFpQztBQUF6QixrR0FBQSxNQUFNLE9BQUE7QUFDZCx1Q0FBMkU7QUFBbkUseUdBQUEsYUFBYSxPQUFBO0FBQUUsc0dBQUEsVUFBVSxPQUFBO0FBQUUsb0dBQUEsUUFBUSxPQUFBO0FBQUUsdUdBQUEsV0FBVyxPQUFBO0FBQ3hELGlEQUFrRjtBQUExRSwyR0FBQSxVQUFVLE9BQUE7QUFBRSw4R0FBQSxhQUFhLE9BQUE7QUFBRSx3SEFBQSx1QkFBdUIsT0FBQSJ9
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "commonjs"
3
+ }
package/cjs/route.d.ts ADDED
@@ -0,0 +1,38 @@
1
+ import type { Key } from 'path-to-regexp';
2
+ interface RegexpToPathOptions {
3
+ end?: boolean;
4
+ strict?: boolean;
5
+ sensitive?: boolean;
6
+ start?: boolean;
7
+ delimiter?: string;
8
+ endsWith?: string;
9
+ encode?(value: string): string;
10
+ prefixes?: string;
11
+ }
12
+ export declare function matchPattern<Params extends Record<Key['name'], string>>(pathname: string, pattern: string, options?: RegexpToPathOptions): {
13
+ matched: any;
14
+ params: any;
15
+ } | undefined;
16
+ interface Chainable<P extends any[] = any[], R = any, Next = (...np: any[]) => any> {
17
+ (next: Next, ...p: P): R;
18
+ }
19
+ interface RouteContext {
20
+ matched: string;
21
+ next(): any;
22
+ params: Record<Key['name'], string>;
23
+ }
24
+ interface RouteDefinition {
25
+ [k: string]: (p: RouteContext) => any;
26
+ }
27
+ interface RouterOptions extends RegexpToPathOptions {
28
+ prefix?: string;
29
+ }
30
+ declare const allMethods: readonly ["get", "head", "post", "put", "delete", "connect", "options", "trace", "patch"];
31
+ type IRouter = {
32
+ [K in typeof allMethods[number]]: (definition: RouteDefinition, options?: RouterOptions) => Chainable;
33
+ } & {
34
+ all(definition: RouteDefinition, options?: RouterOptions): Chainable;
35
+ method(method: string, definition: RouteDefinition, options?: RouterOptions): Chainable;
36
+ };
37
+ export declare const router: IRouter;
38
+ export {};
package/cjs/route.js ADDED
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.router = exports.matchPattern = void 0;
4
+ const path_to_regexp_1 = require("path-to-regexp");
5
+ const context_js_1 = require("./context.js");
6
+ const cache = {};
7
+ const cacheLimit = 10000;
8
+ let cacheCount = 0;
9
+ function compilePath(path, options) {
10
+ const cacheKey = JSON.stringify(options);
11
+ const pathCache = cache[cacheKey] || (cache[cacheKey] = {});
12
+ if (pathCache[path])
13
+ return pathCache[path];
14
+ const keys = [];
15
+ const regexp = (0, path_to_regexp_1.pathToRegexp)(path, keys, options);
16
+ const result = {
17
+ regexp,
18
+ keys
19
+ };
20
+ if (cacheCount < cacheLimit) {
21
+ pathCache[path] = result;
22
+ cacheCount++;
23
+ }
24
+ return result;
25
+ }
26
+ function matchPattern(pathname, pattern, options) {
27
+ options = { ...options };
28
+ options.end ??= true;
29
+ options.strict ??= false;
30
+ options.sensitive ??= false;
31
+ options.start ??= true;
32
+ if (!pattern && pattern !== '')
33
+ return;
34
+ const { regexp, keys } = compilePath(pattern, options);
35
+ const match = regexp.exec(pathname);
36
+ if (!match)
37
+ return;
38
+ const [matched, ...values] = match;
39
+ return {
40
+ matched,
41
+ params: keys.reduce((acc, key, index) => {
42
+ acc[key.name] = values[index];
43
+ return acc;
44
+ }, {})
45
+ };
46
+ }
47
+ exports.matchPattern = matchPattern;
48
+ // https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods
49
+ const allMethods = [
50
+ 'get', 'head', 'post', 'put', 'delete', 'connect', 'options', 'trace', 'patch'
51
+ ];
52
+ exports.router = {
53
+ method(method, router, { prefix = '', ...options } = {}) {
54
+ return next => {
55
+ const req = context_js_1.requestContext.value;
56
+ if (req.method !== method.toUpperCase())
57
+ return next();
58
+ for (const [pattern, handler] of Object.entries(router)) {
59
+ const match = matchPattern(req.url ?? '', `${prefix}${pattern}`, options);
60
+ if (match)
61
+ return handler({
62
+ ...match,
63
+ next,
64
+ });
65
+ }
66
+ return next();
67
+ };
68
+ },
69
+ all(router, { prefix = '', ...options } = {}) {
70
+ return next => {
71
+ const req = context_js_1.requestContext.value;
72
+ for (const [pattern, handler] of Object.entries(router)) {
73
+ const match = matchPattern(req.url ?? '', `${prefix}${pattern}`, options);
74
+ if (match)
75
+ return handler({
76
+ ...match,
77
+ next,
78
+ });
79
+ }
80
+ return next();
81
+ };
82
+ }
83
+ };
84
+ for (const method of allMethods)
85
+ exports.router[method] = exports.router.method.bind(exports.router, method);
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbURBQTJDO0FBQzNDLDZDQUEyQztBQUUzQyxNQUFNLEtBQUssR0FBd0IsRUFBRSxDQUFBO0FBQ3JDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQTtBQUN4QixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUE7QUFjbEIsU0FBUyxXQUFXLENBQUMsSUFBWSxFQUFFLE9BQTRCO0lBQzlELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDeEMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFBO0lBQzNELElBQUksU0FBUyxDQUFDLElBQUksQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRTNDLE1BQU0sSUFBSSxHQUFVLEVBQUUsQ0FBQTtJQUN0QixNQUFNLE1BQU0sR0FBRyxJQUFBLDZCQUFZLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNoRCxNQUFNLE1BQU0sR0FBRztRQUNkLE1BQU07UUFDTixJQUFJO0tBQ0osQ0FBQTtJQUVELElBQUksVUFBVSxHQUFHLFVBQVUsRUFBRTtRQUM1QixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFBO1FBQ3hCLFVBQVUsRUFBRSxDQUFBO0tBQ1o7SUFDRCxPQUFPLE1BQU0sQ0FBQTtBQUNkLENBQUM7QUFFRCxTQUFnQixZQUFZLENBQzNCLFFBQWdCLEVBQ2hCLE9BQWUsRUFDZixPQUE2QjtJQUU3QixPQUFPLEdBQUcsRUFBQyxHQUFHLE9BQU8sRUFBQyxDQUFBO0lBQ3RCLE9BQU8sQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFBO0lBQ3BCLE9BQU8sQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFBO0lBQ3hCLE9BQU8sQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFBO0lBQzNCLE9BQU8sQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFBO0lBRXRCLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxLQUFLLEVBQUU7UUFBRSxPQUFNO0lBRXRDLE1BQU0sRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDLEdBQUcsV0FBVyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNwRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ25DLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTTtJQUVsQixNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFBO0lBRWxDLE9BQU87UUFDTixPQUFPO1FBQ1AsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFnQyxFQUFFLEdBQVEsRUFBRSxLQUFhLEVBQUUsRUFBRTtZQUNqRixHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUM3QixPQUFPLEdBQUcsQ0FBQTtRQUNYLENBQUMsRUFBRSxFQUFZLENBQUM7S0FDaEIsQ0FBQTtBQUNGLENBQUM7QUExQkQsb0NBMEJDO0FBdUJELDREQUE0RDtBQUM1RCxNQUFNLFVBQVUsR0FBRztJQUNsQixLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU87Q0FDckUsQ0FBQTtBQVFHLFFBQUEsTUFBTSxHQUFZO0lBQzlCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sS0FBbUIsRUFBRTtRQUNuRSxPQUFPLElBQUksQ0FBQyxFQUFFO1lBQ2IsTUFBTSxHQUFHLEdBQUcsMkJBQWMsQ0FBQyxLQUFLLENBQUE7WUFDaEMsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxXQUFXLEVBQUU7Z0JBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQTtZQUN0RCxLQUFLLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDeEQsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsTUFBTSxHQUFHLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO2dCQUN6RSxJQUFJLEtBQUs7b0JBQUUsT0FBTyxPQUFPLENBQUM7d0JBQ3pCLEdBQUcsS0FBSzt3QkFDUixJQUFJO3FCQUNKLENBQUMsQ0FBQTthQUNGO1lBQ0QsT0FBTyxJQUFJLEVBQUUsQ0FBQTtRQUNkLENBQUMsQ0FBQTtJQUNGLENBQUM7SUFDRCxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sS0FBbUIsRUFBRTtRQUN4RCxPQUFPLElBQUksQ0FBQyxFQUFFO1lBQ2IsTUFBTSxHQUFHLEdBQUcsMkJBQWMsQ0FBQyxLQUFLLENBQUE7WUFDaEMsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3hELE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLE1BQU0sR0FBRyxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtnQkFDekUsSUFBSSxLQUFLO29CQUFFLE9BQU8sT0FBTyxDQUFDO3dCQUN6QixHQUFHLEtBQUs7d0JBQ1IsSUFBSTtxQkFDSixDQUFDLENBQUE7YUFDRjtZQUNELE9BQU8sSUFBSSxFQUFFLENBQUE7UUFDZCxDQUFDLENBQUE7SUFDRixDQUFDO0NBQ0QsQ0FBQTtBQUVELEtBQUssTUFBTSxNQUFNLElBQUksVUFBVTtJQUFFLGNBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxjQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFNLEVBQUUsTUFBTSxDQUFDLENBQUEifQ==
@@ -0,0 +1,4 @@
1
+ export declare function staticMiddleware({ root }: {
2
+ root: string;
3
+ maxAge?: number;
4
+ }): (next: () => any) => Promise<any>;
package/cjs/static.js ADDED
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.staticMiddleware = void 0;
4
+ // @ts-nocheck
5
+ const context_js_1 = require("./context.js");
6
+ function staticMiddleware({ root }) {
7
+ return async (next) => {
8
+ const req = context_js_1.requestContext.value;
9
+ if (req.method !== 'GET' && req.method !== 'HEAD')
10
+ return next();
11
+ var forwardError = !fallthrough;
12
+ var originalUrl = parseUrl.original(req);
13
+ var path = parseUrl(req).pathname;
14
+ // make sure redirect occurs at mount
15
+ if (path === '/' && originalUrl.pathname.substr(-1) !== '/') {
16
+ path = '';
17
+ }
18
+ // create send stream
19
+ var stream = send(req, path, opts);
20
+ // add directory handler
21
+ stream.on('directory', onDirectory);
22
+ // add headers listener
23
+ if (setHeaders) {
24
+ stream.on('headers', setHeaders);
25
+ }
26
+ // add file listener for fallthrough
27
+ if (fallthrough) {
28
+ stream.on('file', function onFile() {
29
+ // once file is determined, always forward error
30
+ forwardError = true;
31
+ });
32
+ }
33
+ // forward errors
34
+ stream.on('error', function error(err) {
35
+ if (forwardError || !(err.statusCode < 500)) {
36
+ next(err);
37
+ return;
38
+ }
39
+ next();
40
+ });
41
+ // pipe
42
+ stream.pipe(res);
43
+ };
44
+ }
45
+ exports.staticMiddleware = staticMiddleware;
46
+ /**
47
+ * Collapse all leading slashes into a single slash
48
+ * @private
49
+ */
50
+ function collapseLeadingSlashes(str) {
51
+ for (let i = 0; i < str.length; i++) {
52
+ if (str.charCodeAt(i) !== 0x2f /* / */) {
53
+ break;
54
+ }
55
+ }
56
+ return i > 1
57
+ ? '/' + str.slice(i)
58
+ : str;
59
+ }
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0YXRpYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxjQUFjO0FBQ2QsNkNBQTJDO0FBRTNDLFNBQWdCLGdCQUFnQixDQUMvQixFQUFDLElBQUksRUFHSjtJQUVELE9BQU8sS0FBSyxFQUFFLElBQWUsRUFBRSxFQUFFO1FBQ2hDLE1BQU0sR0FBRyxHQUFHLDJCQUFjLENBQUMsS0FBSyxDQUFBO1FBQ2hDLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxLQUFLLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNO1lBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQTtRQUVoRSxJQUFJLFlBQVksR0FBRyxDQUFDLFdBQVcsQ0FBQTtRQUMvQixJQUFJLFdBQVcsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3hDLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUE7UUFFakMscUNBQXFDO1FBQ3JDLElBQUksSUFBSSxLQUFLLEdBQUcsSUFBSSxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtZQUM1RCxJQUFJLEdBQUcsRUFBRSxDQUFBO1NBQ1Q7UUFFRCxxQkFBcUI7UUFDckIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFFbEMsd0JBQXdCO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFBO1FBRW5DLHVCQUF1QjtRQUN2QixJQUFJLFVBQVUsRUFBRTtZQUNmLE1BQU0sQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFBO1NBQ2hDO1FBRUQsb0NBQW9DO1FBQ3BDLElBQUksV0FBVyxFQUFFO1lBQ2hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsTUFBTTtnQkFDaEMsZ0RBQWdEO2dCQUNoRCxZQUFZLEdBQUcsSUFBSSxDQUFBO1lBQ3BCLENBQUMsQ0FBQyxDQUFBO1NBQ0Y7UUFFRCxpQkFBaUI7UUFDakIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxLQUFLLENBQUMsR0FBRztZQUNwQyxJQUFJLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsRUFBRTtnQkFDNUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUNULE9BQU07YUFDTjtZQUVELElBQUksRUFBRSxDQUFBO1FBQ1AsQ0FBQyxDQUFDLENBQUE7UUFFRixPQUFPO1FBQ1AsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUNqQixDQUFDLENBQUE7QUFDRixDQUFDO0FBbkRELDRDQW1EQztBQUVEOzs7R0FHRztBQUNILFNBQVMsc0JBQXNCLENBQUUsR0FBVztJQUMzQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNwQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUN2QyxNQUFLO1NBQ0w7S0FDRDtJQUVELE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDWCxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxHQUFHLENBQUE7QUFDUCxDQUFDIn0=
@@ -0,0 +1,11 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ /// <reference types="node" resolution-mode="require"/>
3
+ /// <reference types="node" resolution-mode="require"/>
4
+ /// <reference types="node" resolution-mode="require"/>
5
+ import type { IncomingMessage } from 'node:http';
6
+ import type { Readable } from 'node:stream';
7
+ export declare function getContentStream(req: IncomingMessage, encoding: string, disableInflate?: boolean): IncomingMessage | import("zlib").Gunzip;
8
+ export declare function readStream(stream: Readable, { length, limit }: {
9
+ length?: number;
10
+ limit?: number;
11
+ }): Promise<Buffer>;
package/cjs/stream.js ADDED
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.readStream = exports.getContentStream = void 0;
7
+ const node_zlib_1 = require("node:zlib");
8
+ const jdefer_1 = __importDefault(require("jdefer"));
9
+ // note: there might be multiple encodings applied to the stream
10
+ // we only support one encoding
11
+ function getContentStream(req, encoding, disableInflate) {
12
+ if (disableInflate && encoding !== 'identity')
13
+ throw new Error(`content-encoding ${encoding} is not supported`);
14
+ switch (encoding) {
15
+ case 'deflate': {
16
+ const stream = (0, node_zlib_1.createInflate)();
17
+ req.pipe(stream);
18
+ return stream;
19
+ }
20
+ case 'gzip': {
21
+ const stream = (0, node_zlib_1.createGunzip)();
22
+ req.pipe(stream);
23
+ return stream;
24
+ }
25
+ case 'br': {
26
+ const stream = (0, node_zlib_1.createBrotliDecompress)();
27
+ req.pipe(stream);
28
+ return stream;
29
+ }
30
+ case 'identity':
31
+ return req;
32
+ default:
33
+ throw new Error(`unsupported content-encoding ${encoding}`);
34
+ }
35
+ }
36
+ exports.getContentStream = getContentStream;
37
+ // https://github.com/stream-utils/raw-body/blob/191e4b6506dcf77198eed01c8feb4b6817008342/index.js#L155
38
+ async function readStream(stream, { length, limit }) {
39
+ let completed = false;
40
+ // check the length and limit options.
41
+ // note: we intentionally leave the stream paused,
42
+ // so users should handle the stream themselves.
43
+ if (limit !== undefined && length !== undefined && length > limit)
44
+ throw new Error('request entity too large');
45
+ let received = 0;
46
+ const buffers = [];
47
+ const defer = (0, jdefer_1.default)();
48
+ // attach listeners
49
+ stream.on('aborted', onAborted);
50
+ stream.on('close', onClose);
51
+ stream.on('data', onData);
52
+ stream.on('end', onEnd);
53
+ stream.on('error', onError);
54
+ function done(err, result) {
55
+ if (completed)
56
+ return;
57
+ completed = true;
58
+ onClose();
59
+ if (err) {
60
+ stream.unpipe?.();
61
+ stream.pause?.();
62
+ defer.reject(err);
63
+ }
64
+ else
65
+ defer.resolve(result);
66
+ }
67
+ function onData(chunk) {
68
+ if (completed)
69
+ return;
70
+ received += chunk.length;
71
+ if (limit !== undefined && received > limit) {
72
+ done(new Error('request entity too large'));
73
+ }
74
+ else
75
+ buffers.push(chunk);
76
+ }
77
+ function onError(err) {
78
+ done(err);
79
+ }
80
+ function onEnd() {
81
+ if (length !== undefined && received !== length)
82
+ done(new Error('request size did not match content length'));
83
+ else
84
+ done(undefined, Buffer.concat(buffers));
85
+ }
86
+ function onAborted() {
87
+ done(new Error('request aborted'));
88
+ }
89
+ function onClose() {
90
+ buffers.splice(0, buffers.length);
91
+ stream.off('aborted', onAborted);
92
+ stream.off('data', onData);
93
+ stream.off('end', onEnd);
94
+ stream.off('error', onEnd);
95
+ stream.off('close', onClose);
96
+ }
97
+ return await defer.promise;
98
+ }
99
+ exports.readStream = readStream;
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3N0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFHQSx5Q0FBNkU7QUFDN0Usb0RBQThCO0FBRTlCLGdFQUFnRTtBQUNoRSwrQkFBK0I7QUFDL0IsU0FBZ0IsZ0JBQWdCLENBQUMsR0FBb0IsRUFBRSxRQUFnQixFQUFFLGNBQXdCO0lBQ2hHLElBQUksY0FBYyxJQUFJLFFBQVEsS0FBSyxVQUFVO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsUUFBUSxtQkFBbUIsQ0FBQyxDQUFBO0lBRS9HLFFBQVEsUUFBUSxFQUFFO1FBQ2pCLEtBQUssU0FBUyxDQUFDLENBQUM7WUFDZixNQUFNLE1BQU0sR0FBRyxJQUFBLHlCQUFhLEdBQUUsQ0FBQTtZQUM5QixHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ2hCLE9BQU8sTUFBTSxDQUFBO1NBQ2I7UUFDRCxLQUFLLE1BQU0sQ0FBQyxDQUFDO1lBQ1osTUFBTSxNQUFNLEdBQUcsSUFBQSx3QkFBWSxHQUFFLENBQUE7WUFDN0IsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtZQUNoQixPQUFPLE1BQU0sQ0FBQTtTQUNiO1FBQ0QsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUNWLE1BQU0sTUFBTSxHQUFHLElBQUEsa0NBQXNCLEdBQUUsQ0FBQTtZQUN2QyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ2hCLE9BQU8sTUFBTSxDQUFBO1NBQ2I7UUFDRCxLQUFLLFVBQVU7WUFDZCxPQUFPLEdBQUcsQ0FBQTtRQUNYO1lBQ0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsUUFBUSxFQUFFLENBQUMsQ0FBQTtLQUM1RDtBQUNGLENBQUM7QUF4QkQsNENBd0JDO0FBRUQsdUdBQXVHO0FBQ2hHLEtBQUssVUFBVSxVQUFVLENBQy9CLE1BQWdCLEVBQ2hCLEVBQUMs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
package/esm/body.d.ts ADDED
@@ -0,0 +1,32 @@
1
+ /// <reference types="node" resolution-mode="require"/>
2
+ /// <reference types="qs" />
3
+ export declare const bufferBodyContext: {
4
+ readonly value: Buffer | undefined;
5
+ chain(params_0?: {
6
+ limit?: number | undefined;
7
+ } | undefined): <V>(next: () => V) => Promise<any>;
8
+ };
9
+ export declare const jsonBodyContext: {
10
+ readonly value: any;
11
+ chain(): <V>(next: () => V) => Promise<any>;
12
+ };
13
+ export declare const rawBodyContext: {
14
+ readonly value: Buffer | undefined;
15
+ chain(): <V>(next: () => V) => Promise<any>;
16
+ };
17
+ export declare const textBodyContext: {
18
+ readonly value: string | undefined;
19
+ chain(): <V>(next: () => V) => Promise<any>;
20
+ };
21
+ export declare const urlencodedBodyContext: {
22
+ readonly value: {
23
+ [x: string]: any;
24
+ } | undefined;
25
+ chain(params_0?: {
26
+ simplify?: boolean | undefined;
27
+ } | undefined): <V>(next: () => V) => Promise<any>;
28
+ };
29
+ export declare const queryContext: {
30
+ readonly value: import("qs").ParsedQs;
31
+ chain(): <V>(next: () => V) => Promise<any>;
32
+ };