dx-server 0.0.1 → 0.0.3

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 +30 -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 +49 -0
  12. package/cjs/express.js +168 -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 +30 -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 +49 -0
  36. package/esm/express.js +156 -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 +32 -5
  50. package/index.js +0 -1
package/cjs/express.js ADDED
@@ -0,0 +1,168 @@
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.setStream = 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, disableEtag } = {}) => {
12
+ return {
13
+ jsonBeautify,
14
+ disableEtag,
15
+ };
16
+ }, async (ret, { type, data, charset, jsonBeautify, disableEtag }) => {
17
+ const res = context_js_1.responseContext.value;
18
+ const setContentType = (contentType) => {
19
+ if (res.headersSent || res.getHeader('content-type'))
20
+ return;
21
+ res.setHeader('content-type', `${contentType}${charset ? `; charset=${charset}` : ''}`);
22
+ };
23
+ let buffer;
24
+ switch (type) {
25
+ case 'text':
26
+ setContentType('text/plain');
27
+ case 'html':
28
+ setContentType('text/html');
29
+ // shared with text
30
+ buffer = Buffer.from(data, charset);
31
+ break;
32
+ case 'buffer':
33
+ setContentType('application/octet-stream');
34
+ buffer = data;
35
+ break;
36
+ case 'stream':
37
+ setContentType('application/octet-stream');
38
+ buffer = data;
39
+ break;
40
+ case 'json':
41
+ setContentType('application/json');
42
+ buffer = Buffer.from(jsonBeautify ? JSON.stringify(data, null, 2) : JSON.stringify(data), charset);
43
+ break;
44
+ case 'redirect':
45
+ buffer = Buffer.from(data, charset);
46
+ break;
47
+ case undefined:
48
+ // skip response. Some middleware may handle it outside the chain. For example, express middleware
49
+ return ret;
50
+ default:
51
+ if (!res.getHeader('content-type'))
52
+ res.setHeader('content-type', 'text/plain');
53
+ throw new Error(`unsupported response type ${type}`);
54
+ }
55
+ const req = context_js_1.requestContext.value;
56
+ if (res.headersSent) {
57
+ if (res.writableFinished) {
58
+ // skipped: response is already finished
59
+ }
60
+ else if (res.writableEnded) {
61
+ const defer = (0, jdefer_1.default)();
62
+ res.addListener('finish', defer.resolve);
63
+ await defer.promise;
64
+ // skipped: response is already ended
65
+ // chunk is not fully flushed yet
66
+ }
67
+ else
68
+ await (0, node_util_1.promisify)(res.end.bind(res))(undefined); // to be consistent, we end the response immediately
69
+ }
70
+ else {
71
+ // https://github.com/expressjs/express/blob/980d881e3b023db079de60477a2588a91f046ca5/lib/response.js#L210
72
+ if (res.statusCode === 204) { // No Content
73
+ res.removeHeader('content-type');
74
+ res.removeHeader('content-length');
75
+ res.removeHeader('transfer-encoding');
76
+ // write nothing
77
+ }
78
+ if (res.statusCode === 205) { // reset content. Tell client to clear the form, etc.
79
+ res.setHeader('content-length', 0);
80
+ res.removeHeader('transfer-encoding');
81
+ }
82
+ else if (req.method === 'HEAD') {
83
+ // write nothing
84
+ }
85
+ else {
86
+ if (Buffer.isBuffer(buffer)) {
87
+ // support: 304 (etag), zipping, file etag and last modified
88
+ res.setHeader('content-length', buffer.length);
89
+ if (!disableEtag) {
90
+ const etag = (0, etag_js_1.entityTag)(buffer);
91
+ const lastModified = res.getHeader('last-modified');
92
+ res.setHeader('ETag', etag);
93
+ if ((0, etag_js_1.isFreshETag)(req, etag)) {
94
+ res.removeHeader('content-type');
95
+ res.removeHeader('content-length');
96
+ res.removeHeader('transfer-encoding');
97
+ res.statusCode = 304;
98
+ // write nothing
99
+ }
100
+ else
101
+ res.write(buffer);
102
+ }
103
+ else
104
+ res.write(buffer);
105
+ }
106
+ else {
107
+ buffer.pipe(res);
108
+ }
109
+ // fixme: not support content-encoding (gzip, deflate, br) for now
110
+ }
111
+ await (0, node_util_1.promisify)(res.end.bind(res))(undefined); // some express middleware, such as express-session, requires explicitly passing chunk
112
+ }
113
+ return ret;
114
+ });
115
+ // todo: support setFile (with stream or with buffer)
116
+ function setText(text, { 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 = text;
122
+ express.type = 'text';
123
+ }
124
+ exports.setText = setText;
125
+ function setHtml(html, opts = {}) {
126
+ setText(html, opts);
127
+ const express = exports.expressContext.value;
128
+ express.type = 'html';
129
+ }
130
+ exports.setHtml = setHtml;
131
+ function setBuffer(buffer, { status } = {}) {
132
+ const response = context_js_1.responseContext.value;
133
+ const express = exports.expressContext.value;
134
+ if (status)
135
+ response.statusCode = status;
136
+ express.data = buffer;
137
+ express.type = 'buffer';
138
+ }
139
+ exports.setBuffer = setBuffer;
140
+ function setStream(stream, { status } = {}) {
141
+ const response = context_js_1.responseContext.value;
142
+ const express = exports.expressContext.value;
143
+ if (status)
144
+ response.statusCode = status;
145
+ express.data = stream;
146
+ express.type = 'stream';
147
+ }
148
+ exports.setStream = setStream;
149
+ function setJson(json, { status, beautify } = {}) {
150
+ const response = context_js_1.responseContext.value;
151
+ if (status)
152
+ response.statusCode = status;
153
+ const express = exports.expressContext.value;
154
+ express.data = json;
155
+ express.type = 'json';
156
+ if (beautify !== undefined)
157
+ express.jsonBeautify = beautify;
158
+ }
159
+ exports.setJson = setJson;
160
+ function setRedirect(url, status) {
161
+ const response = context_js_1.responseContext.value;
162
+ const express = exports.expressContext.value;
163
+ response.statusCode = status;
164
+ express.data = url;
165
+ express.type = 'redirect';
166
+ }
167
+ exports.setRedirect = setRedirect;
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9leHByZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE4QjtBQUM5Qix5Q0FBbUM7QUFDbkMsdUNBQWdEO0FBQ2hELDZDQUF5RTtBQUc1RCxRQUFBLGNBQWMsR0FBRyxJQUFBLHdCQUFXLEVBQUMsS0FBSyxFQUM5QyxFQUFDLFlBQVksRUFBRSxXQUFXLEtBR3RCLEVBQUUsRUFDTCxFQUFFO0lBQ0gsT0FBTztRQUNOLFlBQVk7UUFDWixXQUFXO0tBK0JWLENBQUE7QUFDSCxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUMsRUFBRSxFQUFFO0lBQ2xFLE1BQU0sR0FBRyxHQUFHLDRCQUFlLENBQUMsS0FBSyxDQUFBO0lBQ2pDLE1BQU0sY0FBYyxHQUFHLENBQUMsV0FBbUIsRUFBRSxFQUFFO1FBQzlDLElBQUksR0FBRyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztZQUFFLE9BQU07UUFDNUQsR0FBRyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsR0FBRyxXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxhQUFhLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ3hGLENBQUMsQ0FBQTtJQUNELElBQUksTUFBTSxDQUFBO0lBRVYsUUFBUSxJQUFJLEVBQUU7UUFDYixLQUFLLE1BQU07WUFDVixjQUFjLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDN0IsS0FBSyxNQUFNO1lBQ1YsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFBO1lBQzNCLG1CQUFtQjtZQUNuQixNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFDbkMsTUFBSztRQUNOLEtBQUssUUFBUTtZQUNaLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO1lBQzFDLE1BQU0sR0FBRyxJQUFJLENBQUE7WUFDYixNQUFLO1FBQ04sS0FBSyxRQUFRO1lBQ1osY0FBYyxDQUFDLDBCQUEwQixDQUFDLENBQUE7WUFDMUMsTUFBTSxHQUFHLElBQUksQ0FBQTtZQUNiLE1BQUs7UUFDTixLQUFLLE1BQU07WUFDVixjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtZQUNsQyxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUNsRyxNQUFLO1FBQ04sS0FBSyxVQUFVO1lBQ2QsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQ25DLE1BQUs7UUFDTixLQUFLLFNBQVM7WUFDYixrR0FBa0c7WUFDbEcsT0FBTyxHQUFHLENBQUE7UUFDWDtZQUNDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQztnQkFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxZQUFZLENBQUMsQ0FBQTtZQUMvRSxNQUFNLElBQUksS0FBSyxDQUFDLDZCQUE2QixJQUFJLEVBQUUsQ0FBQyxDQUFBO0tBQ3JEO0lBRUQsTUFBTSxHQUFHLEdBQUcsMkJBQWMsQ0FBQyxLQUFLLENBQUE7SUFFaEMsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFO1FBQ3BCLElBQUksR0FBRyxDQUFDLGdCQUFnQixFQUFFO1lBQ3pCLHdDQUF3QztTQUN4QzthQUFNLElBQUksR0FBRyxDQUFDLGFBQWEsRUFBRTtZQUM3QixNQUFNLEtBQUssR0FBRyxJQUFBLGdCQUFTLEdBQVEsQ0FBQTtZQUMvQixHQUFHLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7WUFDeEMsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFBO1lBQ25CLHFDQUFxQztZQUNyQyxpQ0FBaUM7U0FDakM7O1lBQU0sTUFBTSxJQUFBLHFCQUFTLEVBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQSxDQUFDLG9EQUFvRDtLQUN6RztTQUFNO1FBQ04sMEdBQTBHO1FBQzFHLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxHQUFHLEVBQUUsRUFBRSxhQUFhO1lBQzFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUE7WUFDaEMsR0FBRyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1lBQ2xDLEdBQUcsQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtZQUNyQyxnQkFBZ0I7U0FDaEI7UUFDRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFLEVBQUUscURBQXFEO1lBQ2xGLEdBQUcsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFDbEMsR0FBRyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFBO1NBQ3JDO2FBQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRTtZQUNqQyxnQkFBZ0I7U0FDaEI7YUFBTTtZQUNOLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDNUIsNERBQTREO2dCQUM1RCxHQUFHLENBQUMsU0FBUyxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFFOUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtvQkFDakIsTUFBTSxJQUFJLEdBQUcsSUFBQSxtQkFBUyxFQUFDLE1BQU0sQ0FBQyxDQUFBO29CQUM5QixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxDQUFBO29CQUVuRCxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQTtvQkFDM0IsSUFBSSxJQUFBLHFCQUFXLEVBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFO3dCQUMzQixHQUFHLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFBO3dCQUNoQyxHQUFHLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUE7d0JBQ2xDLEdBQUcsQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQTt3QkFDckMsR0FBRyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUE7d0JBQ3BCLGdCQUFnQjtxQkFDaEI7O3dCQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7aUJBQ3hCOztvQkFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO2FBQ3hCO2lCQUFNO2dCQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7YUFDaEI7WUFDRCxrRUFBa0U7U0FDbEU7UUFFRCxNQUFNLElBQUEscUJBQVMsRUFBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFBLENBQUMsc0ZBQXNGO0tBQ3BJO0lBQ0QsT0FBTyxHQUFHLENBQUE7QUFDWCxDQUFDLENBQUMsQ0FBQTtBQUVGLHFEQUFxRDtBQUVyRCxTQUFnQixPQUFPLENBQUMsSUFBWSxFQUFFLEVBQUMsTUFBTSxLQUF5QixFQUFFO0lBQ3ZFLE1BQU0sUUFBUSxHQUFHLDRCQUFlLENBQUMsS0FBSyxDQUFBO0lBQ3RDLE1BQU0sT0FBTyxHQUFHLHNCQUFjLENBQUMsS0FBSyxDQUFBO0lBQ3BDLElBQUksTUFBTTtRQUFFLFFBQVEsQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFBO0lBQ3hDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO0lBQ25CLE9BQU8sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFBO0FBQ3RCLENBQUM7QUFORCwwQkFNQztBQUVELFNBQWdCLE9BQU8sQ0FBQyxJQUFZLEVBQUUsT0FBNEIsRUFBRTtJQUNuRSxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO0lBQ25CLE1BQU0sT0FBTyxHQUFHLHNCQUFjLENBQUMsS0FBSyxDQUFBO0lBQ3BDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFBO0FBQ3RCLENBQUM7QUFKRCwwQkFJQztBQUVELFNBQWdCLFNBQVMsQ0FBQyxNQUFjLEVBQUUsRUFBQyxNQUFNLEtBQXlCLEVBQUU7SUFDM0UsTUFBTSxRQUFRLEdBQUcsNEJBQWUsQ0FBQyxLQUFLLENBQUE7SUFDdEMsTUFBTSxPQUFPLEdBQUcsc0JBQWMsQ0FBQyxLQUFLLENBQUE7SUFDcEMsSUFBSSxNQUFNO1FBQUUsUUFBUSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUE7SUFDeEMsT0FBTyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUE7SUFDckIsT0FBTyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUE7QUFDeEIsQ0FBQztBQU5ELDhCQU1DO0FBRUQsU0FBZ0IsU0FBUyxDQUFDLE1BQWdCLEVBQUUsRUFBQyxNQUFNLEtBQXlCLEVBQUU7SUFDN0UsTUFBTSxRQUFRLEdBQUcsNEJBQWUsQ0FBQyxLQUFLLENBQUE7SUFDdEMsTUFBTSxPQUFPLEdBQUcsc0JBQWMsQ0FBQyxLQUFLLENBQUE7SUFDcEMsSUFBSSxNQUFNO1FBQUUsUUFBUSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUE7SUFDeEMsT0FBTyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUE7SUFDckIsT0FBTyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUE7QUFDeEIsQ0FBQztBQU5ELDhCQU1DO0FBRUQsU0FBZ0IsT0FBTyxDQUFDLElBQVMsRUFBRSxFQUFDLE1BQU0sRUFBRSxRQUFRLEtBR2hELEVBQUU7SUFDTCxNQUFNLFFBQVEsR0FBRyw0QkFBZSxDQUFDLEtBQUssQ0FBQTtJQUN0QyxJQUFJLE1BQU07UUFBRSxRQUFRLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQTtJQUV4QyxNQUFNLE9BQU8sR0FBRyxzQkFBYyxDQUFDLEtBQUssQ0FBQTtJQUNwQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtJQUNuQixPQUFPLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQTtJQUNyQixJQUFJLFFBQVEsS0FBSyxTQUFTO1FBQUUsT0FBTyxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUE7QUFDNUQsQ0FBQztBQVhELDBCQVdDO0FBRUQsU0FBZ0IsV0FBVyxDQUFDLEdBQVcsRUFBRSxNQUFpQjtJQUN6RCxNQUFNLFFBQVEsR0FBRyw0QkFBZSxDQUFDLEtBQUssQ0FBQTtJQUN0QyxNQUFNLE9BQU8sR0FBRyxzQkFBYyxDQUFDLEtBQUssQ0FBQTtJQUNwQyxRQUFRLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQTtJQUM1QixPQUFPLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQTtJQUNsQixPQUFPLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQTtBQUMxQixDQUFDO0FBTkQsa0NBTUMifQ==
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbURBQTJDO0FBQzNDLDZDQUEyQztBQUUzQyxNQUFNLEtBQUssR0FBd0IsRUFBRSxDQUFBO0FBQ3JDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQTtBQUN4QixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUE7QUFjbEIsU0FBUyxXQUFXLENBQUMsSUFBWSxFQUFFLE9BQTRCO0lBQzlELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDeEMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFBO0lBQzNELElBQUksU0FBUyxDQUFDLElBQUksQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRTNDLE1BQU0sSUFBSSxHQUFVLEVBQUUsQ0FBQTtJQUN0QixNQUFNLE1BQU0sR0FBRyxJQUFBLDZCQUFZLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNoRCxNQUFNLE1BQU0sR0FBRztRQUNkLE1BQU07UUFDTixJQUFJO0tBQ0osQ0FBQTtJQUVELElBQUksVUFBVSxHQUFHLFVBQVUsRUFBRTtRQUM1QixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFBO1FBQ3hCLFVBQVUsRUFBRSxDQUFBO0tBQ1o7SUFDRCxPQUFPLE1BQU0sQ0FBQTtBQUNkLENBQUM7QUFFRCxTQUFnQixZQUFZLENBQzNCLFFBQWdCLEVBQ2hCLE9BQWUsRUFDZixPQUE2QjtJQUU3QixPQUFPLEdBQUcsRUFBQyxHQUFHLE9BQU8sRUFBQyxDQUFBO0lBQ3RCLE9BQU8sQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFBO0lBQ3BCLE9BQU8sQ0FBQyxNQUFN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
@@ -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,30 @@
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: import("qs").ParsedQs | undefined;
23
+ chain(params_0?: {
24
+ simplify?: boolean | undefined;
25
+ } | undefined): <V>(next: () => V) => Promise<any>;
26
+ };
27
+ export declare const queryContext: {
28
+ readonly value: import("qs").ParsedQs;
29
+ chain(): <V>(next: () => V) => Promise<any>;
30
+ };