@deepkit/http 1.0.19 → 1.1.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/CHANGELOG.md +33 -0
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/src/decorator.js +11 -7
- package/dist/cjs/src/decorator.js.map +1 -1
- package/dist/cjs/src/filter.js +1 -1
- package/dist/cjs/src/filter.js.map +1 -1
- package/dist/cjs/src/http.d.ts +3 -0
- package/dist/cjs/src/http.js +90 -61
- package/dist/cjs/src/http.js.map +1 -1
- package/dist/cjs/src/logger.js +0 -7
- package/dist/cjs/src/logger.js.map +1 -1
- package/dist/cjs/src/middleware.d.ts +2 -2
- package/dist/cjs/src/middleware.js +2 -2
- package/dist/cjs/src/mime.d.ts +19 -0
- package/dist/cjs/src/mime.js +147 -0
- package/dist/cjs/src/mime.js.map +1 -0
- package/dist/cjs/src/model.d.ts +7 -0
- package/dist/cjs/src/model.js +16 -7
- package/dist/cjs/src/model.js.map +1 -1
- package/dist/cjs/src/module.js +9 -5
- package/dist/cjs/src/module.js.map +1 -1
- package/dist/cjs/src/query-string.d.ts +6 -0
- package/dist/cjs/src/query-string.js +229 -0
- package/dist/cjs/src/query-string.js.map +1 -0
- package/dist/cjs/src/request-parser.js +12 -10
- package/dist/cjs/src/request-parser.js.map +1 -1
- package/dist/cjs/src/router.js +14 -15
- package/dist/cjs/src/router.js.map +1 -1
- package/dist/cjs/src/static-serving.d.ts +6 -0
- package/dist/cjs/src/static-serving.js +232 -28
- package/dist/cjs/src/static-serving.js.map +1 -1
- package/dist/cjs/src/utils.js +1 -1
- package/dist/cjs/src/utils.js.map +1 -1
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/src/decorator.js +11 -7
- package/dist/esm/src/decorator.js.map +1 -1
- package/dist/esm/src/filter.js +1 -1
- package/dist/esm/src/filter.js.map +1 -1
- package/dist/esm/src/http.d.ts +3 -0
- package/dist/esm/src/http.js +55 -60
- package/dist/esm/src/http.js.map +1 -1
- package/dist/esm/src/logger.js +0 -7
- package/dist/esm/src/logger.js.map +1 -1
- package/dist/esm/src/middleware.d.ts +2 -2
- package/dist/esm/src/middleware.js +2 -2
- package/dist/esm/src/mime.d.ts +19 -0
- package/dist/esm/src/mime.js +142 -0
- package/dist/esm/src/mime.js.map +1 -0
- package/dist/esm/src/model.d.ts +7 -0
- package/dist/esm/src/model.js +16 -7
- package/dist/esm/src/model.js.map +1 -1
- package/dist/esm/src/module.js +9 -5
- package/dist/esm/src/module.js.map +1 -1
- package/dist/esm/src/query-string.d.ts +6 -0
- package/dist/esm/src/query-string.js +226 -0
- package/dist/esm/src/query-string.js.map +1 -0
- package/dist/esm/src/request-parser.js +12 -10
- package/dist/esm/src/request-parser.js.map +1 -1
- package/dist/esm/src/router.js +14 -12
- package/dist/esm/src/router.js.map +1 -1
- package/dist/esm/src/static-serving.d.ts +6 -0
- package/dist/esm/src/static-serving.js +234 -27
- package/dist/esm/src/static-serving.js.map +1 -1
- package/dist/esm/src/utils.js +1 -1
- package/dist/esm/src/utils.js.map +1 -1
- package/index.ts +2 -0
- package/package.json +22 -25
- package/src/http.ts +40 -6
- package/src/middleware.ts +2 -2
- package/src/mime.ts +141 -0
- package/src/model.ts +10 -2
- package/src/module.ts +4 -2
- package/src/query-string.ts +228 -0
- package/src/request-parser.ts +6 -4
- package/src/router.ts +3 -3
- package/src/static-serving.ts +221 -8
- package/tsconfig.json +3 -17
- package/tsconfig.spec.json +4 -1
- package/LICENSE +0 -21
- package/dist/cjs/tsconfig.tsbuildinfo +0 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +0 -1
|
@@ -4,13 +4,26 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
7
|
function __assignType(fn, args) {
|
|
11
8
|
fn.__type = args;
|
|
12
9
|
return fn;
|
|
13
10
|
}
|
|
11
|
+
escapeHtml.__type = ['value', 'escapeHtml', 'P&2!&/"'];
|
|
12
|
+
sendHtml.__type = [() => HttpResponse, 'response', 'status', 'title', 'body', 'headers', () => ({}), 'sendHtml', 'PP7!2"\'2#&2$&2%P&&LM2&>\'"/('];
|
|
13
|
+
sendError.__type = [() => HttpResponse, 'response', 'status', 'headers', () => ({}), 'sendError', 'PP7!2"\'2#P&&LM2$>%"/&'];
|
|
14
|
+
encodeUrl.__type = ['url', 'encodeUrl', 'P&2!&/"'];
|
|
15
|
+
parseHttpDate.__type = ['date', 'parseHttpDate', 'PP&\'&FJ2!8\'/"'];
|
|
16
|
+
parseTokenList.__type = ['value', 'parseTokenList', 'P&2!&F/"'];
|
|
17
|
+
matchesETag.__type = ['header', 'etag', 'matchesETag', 'P&2!&2")/#'];
|
|
18
|
+
parseRange.__type = ['size', 'header', 'start', 'end', -1, 'parseRange', 'P\'2!&2"PP\'4#\'4$MF.%-J/&'];
|
|
19
|
+
sendFile.__type = [() => HttpRequest, 'request', () => HttpResponse, 'response', 'path', 'stats', 'sendFile', 'PP7!2"P7#2$&2%!2&"/\''];
|
|
20
|
+
staticServe.__type = ['localPath', 'path', () => HttpRequest, 'request', () => HttpResponse, 'response', 'staticServe', 'P&2!&2"P7#2$P7%2&"/\''];
|
|
21
|
+
staticOnRoute.__type = [() => httpWorkflow.onRoute.event, 'event', 'path', 'localPath', 'staticOnRoute', 'Pi!2"&2#&2$"/%'];
|
|
22
|
+
serveStaticListener.__type = [() => AppModule, 'module', 'path', 'localPath', () => path, () => __ΩClassType, 'serveStaticListener', 'PP"7!2"&2#&2$>%n&/\''];
|
|
23
|
+
loadHtml.__type = ['localPath', 'path', 'loadHtml', 'P&2!&2"&/#'];
|
|
24
|
+
registerStaticHttpController.__type = [() => AppModule, 'module', () => __ΩStaticHttpOptions, 'options', 'registerStaticHttpController', 'PP"7!2"n#2$$/%'];
|
|
25
|
+
const Ωt0 = [() => HttpRouter, 'P7!'];
|
|
26
|
+
const Ωt1 = [() => HttpRouter, 'P7!'];
|
|
14
27
|
/*
|
|
15
28
|
* Deepkit Framework
|
|
16
29
|
* Copyright (C) 2021 Deepkit UG, Marc J. Schmidt
|
|
@@ -21,8 +34,9 @@ function __assignType(fn, args) {
|
|
|
21
34
|
* You should have received a copy of the MIT License along with this program.
|
|
22
35
|
*/
|
|
23
36
|
import { http } from './decorator.js';
|
|
24
|
-
import { join } from 'path';
|
|
25
|
-
import { readFileSync, stat } from 'fs';
|
|
37
|
+
import { join, normalize, resolve, sep } from 'path';
|
|
38
|
+
import { createReadStream, readFileSync, stat } from 'fs';
|
|
39
|
+
import { STATUS_CODES } from 'http';
|
|
26
40
|
import { HtmlResponse, httpWorkflow } from './http.js';
|
|
27
41
|
import { AppModule } from '@deepkit/app';
|
|
28
42
|
import { normalizeDirectory } from './utils.js';
|
|
@@ -30,17 +44,216 @@ import { normalizeDirectory } from './utils.js';
|
|
|
30
44
|
import { __ΩClassType } from '@deepkit/core';
|
|
31
45
|
import { urlJoin } from '@deepkit/core';
|
|
32
46
|
import { HttpRequest, HttpResponse } from './model.js';
|
|
33
|
-
import
|
|
47
|
+
import { getContentType } from './mime.js';
|
|
34
48
|
import { eventDispatcher } from '@deepkit/event';
|
|
35
49
|
import { HttpRouter, RouteConfig } from './router.js';
|
|
50
|
+
const upPathRegExp = /(?:^|[\\/])\.\.(?:[\\/]|$)/;
|
|
51
|
+
function escapeHtml(value) {
|
|
52
|
+
return value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''');
|
|
53
|
+
}
|
|
54
|
+
function sendHtml(response, status, title, body, headers = {}) {
|
|
55
|
+
const doc = `<!DOCTYPE html>\n<html lang="en">\n<head>\n<meta charset="utf-8">\n<title>${title}</title>\n</head>\n<body>\n<pre>${escapeHtml(body)}</pre>\n</body>\n</html>\n`;
|
|
56
|
+
for (const [name, value] of Object.entries(headers))
|
|
57
|
+
response.setHeader(name, value);
|
|
58
|
+
response.statusCode = status;
|
|
59
|
+
response.setHeader('Content-Type', 'text/html; charset=UTF-8');
|
|
60
|
+
response.setHeader('Content-Length', Buffer.byteLength(doc));
|
|
61
|
+
response.setHeader('Content-Security-Policy', "default-src 'none'");
|
|
62
|
+
response.setHeader('X-Content-Type-Options', 'nosniff');
|
|
63
|
+
response.end(doc);
|
|
64
|
+
}
|
|
65
|
+
function sendError(response, status, headers = {}) {
|
|
66
|
+
for (const name of response.getHeaderNames())
|
|
67
|
+
response.removeHeader(name);
|
|
68
|
+
sendHtml(response, status, 'Error', STATUS_CODES[status] || String(status), headers);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Encodes characters not allowed in a URL, but keeps already percent-encoded sequences.
|
|
72
|
+
*/
|
|
73
|
+
function encodeUrl(url) {
|
|
74
|
+
return url
|
|
75
|
+
.replace(/(^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF]([^\uDC00-\uDFFF]|$)/g, '$1\uFFFD$2')
|
|
76
|
+
.replace(/(?:[^\x21\x23-\x3B\x3D\x3F-\x5F\x61-\x7A\x7C\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g, encodeURI);
|
|
77
|
+
}
|
|
78
|
+
function parseHttpDate(date) {
|
|
79
|
+
const timestamp = 'string' === typeof date ? Date.parse(date) : NaN;
|
|
80
|
+
return 'number' === typeof timestamp ? timestamp : NaN;
|
|
81
|
+
}
|
|
82
|
+
function parseTokenList(value) {
|
|
83
|
+
return value.split(',').map(__assignType(v => v.trim(), ['v', '', 'P"2!"/"'])).filter(__assignType(v => v !== '', ['v', '', 'P"2!"/"']));
|
|
84
|
+
}
|
|
85
|
+
function matchesETag(header, etag) {
|
|
86
|
+
return parseTokenList(header).some(__assignType(match => match === etag || match === 'W/' + etag || 'W/' + match === etag, ['match', '', 'P"2!"/"']));
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Parses a `Range: bytes=...` header. Returns undefined for a syntactically invalid header, -1 if not satisfiable,
|
|
90
|
+
* and the ranges otherwise (overlapping and adjacent ranges are combined).
|
|
91
|
+
*/
|
|
92
|
+
function parseRange(size, header) {
|
|
93
|
+
const index = header.indexOf('=');
|
|
94
|
+
if (index === -1)
|
|
95
|
+
return;
|
|
96
|
+
const ranges = [];
|
|
97
|
+
for (const part of header.slice(index + 1).split(',')) {
|
|
98
|
+
const [startString, endString] = part.split('-');
|
|
99
|
+
let start = parseInt(startString, 10);
|
|
100
|
+
let end = parseInt(endString, 10);
|
|
101
|
+
if (isNaN(start)) {
|
|
102
|
+
// -nnn: the last nnn bytes
|
|
103
|
+
start = size - end;
|
|
104
|
+
end = size - 1;
|
|
105
|
+
}
|
|
106
|
+
else if (isNaN(end)) {
|
|
107
|
+
// nnn-: from nnn to the end
|
|
108
|
+
end = size - 1;
|
|
109
|
+
}
|
|
110
|
+
if (end > size - 1)
|
|
111
|
+
end = size - 1;
|
|
112
|
+
if (isNaN(start) || isNaN(end) || start > end || start < 0)
|
|
113
|
+
continue;
|
|
114
|
+
ranges.push({ start, end, index: ranges.length });
|
|
115
|
+
}
|
|
116
|
+
if (!ranges.length)
|
|
117
|
+
return -1;
|
|
118
|
+
const ordered = ranges.sort(__assignType((a, b) => a.start - b.start, ['a', 'b', '', 'P"2!"2""/#']));
|
|
119
|
+
let j = 0;
|
|
120
|
+
for (let i = 1; i < ordered.length; i++) {
|
|
121
|
+
const range = ordered[i];
|
|
122
|
+
const current = ordered[j];
|
|
123
|
+
if (range.start > current.end + 1) {
|
|
124
|
+
ordered[++j] = range;
|
|
125
|
+
}
|
|
126
|
+
else if (range.end > current.end) {
|
|
127
|
+
current.end = range.end;
|
|
128
|
+
current.index = Math.min(current.index, range.index);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
ordered.length = j + 1;
|
|
132
|
+
return ordered.sort(__assignType((a, b) => a.index - b.index, ['a', 'b', '', 'P"2!"2""/#'])).map(__assignType(v => ({ start: v.start, end: v.end }), ['v', '', 'P"2!"/"']));
|
|
133
|
+
}
|
|
134
|
+
function sendFile(request, response, path, stats) {
|
|
135
|
+
if (response.headersSent)
|
|
136
|
+
return sendError(response, 500);
|
|
137
|
+
if (!response.getHeader('Accept-Ranges'))
|
|
138
|
+
response.setHeader('Accept-Ranges', 'bytes');
|
|
139
|
+
if (!response.getHeader('Cache-Control'))
|
|
140
|
+
response.setHeader('Cache-Control', 'public, max-age=0');
|
|
141
|
+
if (!response.getHeader('Last-Modified'))
|
|
142
|
+
response.setHeader('Last-Modified', stats.mtime.toUTCString());
|
|
143
|
+
if (!response.getHeader('ETag'))
|
|
144
|
+
response.setHeader('ETag', `W/"${stats.size.toString(16)}-${stats.mtime.getTime().toString(16)}"`);
|
|
145
|
+
if (!response.getHeader('Content-Type'))
|
|
146
|
+
response.setHeader('Content-Type', getContentType(path) || 'application/octet-stream');
|
|
147
|
+
const etag = String(response.getHeader('ETag'));
|
|
148
|
+
const lastModified = parseHttpDate(response.getHeader('Last-Modified'));
|
|
149
|
+
const headers = request.headers;
|
|
150
|
+
// precondition failure
|
|
151
|
+
const ifMatch = headers['if-match'];
|
|
152
|
+
if (ifMatch ? ifMatch !== '*' && !matchesETag(ifMatch, etag) : lastModified > parseHttpDate(headers['if-unmodified-since'])) {
|
|
153
|
+
return sendError(response, 412);
|
|
154
|
+
}
|
|
155
|
+
// not modified
|
|
156
|
+
const ifNoneMatch = headers['if-none-match'];
|
|
157
|
+
const ifModifiedSince = headers['if-modified-since'];
|
|
158
|
+
const noCache = /(?:^|,)\s*?no-cache\s*?(?:,|$)/.test(headers['cache-control'] || '');
|
|
159
|
+
const isCachable = (response.statusCode >= 200 && response.statusCode < 300) || response.statusCode === 304;
|
|
160
|
+
if (isCachable && (ifNoneMatch || ifModifiedSince) && !noCache) {
|
|
161
|
+
const fresh = ifNoneMatch
|
|
162
|
+
? ifNoneMatch === '*' || matchesETag(ifNoneMatch, etag)
|
|
163
|
+
: lastModified <= parseHttpDate(ifModifiedSince);
|
|
164
|
+
if (fresh) {
|
|
165
|
+
for (const name of ['Content-Encoding', 'Content-Language', 'Content-Length', 'Content-Range', 'Content-Type']) {
|
|
166
|
+
response.removeHeader(name);
|
|
167
|
+
}
|
|
168
|
+
response.statusCode = 304;
|
|
169
|
+
response.end();
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
let start = 0;
|
|
174
|
+
let length = stats.size;
|
|
175
|
+
const rangeHeader = headers.range;
|
|
176
|
+
if (rangeHeader && /^ *bytes=/.test(rangeHeader)) {
|
|
177
|
+
let ranges = parseRange(length, rangeHeader);
|
|
178
|
+
// If-Range: only send the range if the representation is unchanged, otherwise the whole file
|
|
179
|
+
const ifRange = headers['if-range'];
|
|
180
|
+
if (ifRange && (ifRange.includes('"') ? !ifRange.includes(etag) : !(lastModified <= parseHttpDate(ifRange)))) {
|
|
181
|
+
ranges = undefined;
|
|
182
|
+
}
|
|
183
|
+
if (ranges === -1) {
|
|
184
|
+
return sendError(response, 416, { 'Content-Range': `bytes */${length}` });
|
|
185
|
+
}
|
|
186
|
+
// multiple ranges are answered with the whole file
|
|
187
|
+
if (ranges && ranges.length === 1) {
|
|
188
|
+
response.statusCode = 206;
|
|
189
|
+
response.setHeader('Content-Range', `bytes ${ranges[0].start}-${ranges[0].end}/${length}`);
|
|
190
|
+
start = ranges[0].start;
|
|
191
|
+
length = ranges[0].end - ranges[0].start + 1;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
response.setHeader('Content-Length', length);
|
|
195
|
+
if (request.method === 'HEAD') {
|
|
196
|
+
response.end();
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
const stream = createReadStream(path, { start, end: Math.max(start, start + length - 1) });
|
|
200
|
+
response.once('close', () => stream.destroy());
|
|
201
|
+
stream.once('error', () => {
|
|
202
|
+
stream.destroy();
|
|
203
|
+
if (response.headersSent) {
|
|
204
|
+
response.destroy();
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
sendError(response, 500);
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
stream.pipe(response);
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Sends the file at `path` (URL encoded, relative to `localPath`) as response.
|
|
214
|
+
*
|
|
215
|
+
* Supports HEAD, Range requests, and conditional requests (ETag, Last-Modified).
|
|
216
|
+
* Paths with `..` are rejected with 403, paths to dotfiles (or in dot-directories) with 404.
|
|
217
|
+
*/
|
|
36
218
|
export function staticServe(localPath, path, request, response) {
|
|
37
|
-
return new Promise(__assignType(
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
219
|
+
return new Promise(__assignType(resolvePromise => {
|
|
220
|
+
response.once('finish', resolvePromise);
|
|
221
|
+
response.once('close', resolvePromise);
|
|
222
|
+
let decodedPath;
|
|
223
|
+
try {
|
|
224
|
+
decodedPath = decodeURIComponent(path);
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
return sendError(response, 400);
|
|
228
|
+
}
|
|
229
|
+
if (decodedPath.includes('\0'))
|
|
230
|
+
return sendError(response, 400);
|
|
231
|
+
// normalize relative to root
|
|
232
|
+
if (decodedPath)
|
|
233
|
+
decodedPath = normalize('.' + sep + decodedPath);
|
|
234
|
+
if (upPathRegExp.test(decodedPath))
|
|
235
|
+
return sendError(response, 403);
|
|
236
|
+
// dotfiles are ignored
|
|
237
|
+
if (decodedPath.split(sep).some(__assignType(part => part.length > 1 && part[0] === '.', ['part', '', 'P"2!"/"'])))
|
|
238
|
+
return sendError(response, 404);
|
|
239
|
+
const filePath = normalize(join(resolve(localPath), decodedPath));
|
|
240
|
+
const hasTrailingSlash = path[path.length - 1] === '/';
|
|
241
|
+
stat(hasTrailingSlash ? join(filePath, 'index.html') : filePath, __assignType((error, stats) => {
|
|
242
|
+
if (error) {
|
|
243
|
+
const notFound = error.code === 'ENOENT' || error.code === 'ENOTDIR' || error.code === 'ENAMETOOLONG';
|
|
244
|
+
return sendError(response, notFound ? 404 : 500);
|
|
245
|
+
}
|
|
246
|
+
if (stats.isDirectory()) {
|
|
247
|
+
if (hasTrailingSlash)
|
|
248
|
+
return sendError(response, 404);
|
|
249
|
+
const location = encodeUrl((path + '/').replace(/^\/+/, '/'));
|
|
250
|
+
sendHtml(response, 301, 'Redirecting', 'Redirecting to ' + location, { Location: location });
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
sendFile(request, response, hasTrailingSlash ? join(filePath, 'index.html') : filePath, stats);
|
|
254
|
+
}, ['error', 'stats', '', 'P"2!"2""/#']));
|
|
255
|
+
}, ['resolvePromise', '', 'P"2!"/"']));
|
|
42
256
|
}
|
|
43
|
-
staticServe.__type = ['localPath', 'path', () => HttpRequest, 'request', () => HttpResponse, 'response', 'staticServe', 'P&2!&2"P7#2$P7%2&"/\''];
|
|
44
257
|
export async function staticOnRoute(event, path, localPath) {
|
|
45
258
|
if (event.sent)
|
|
46
259
|
return;
|
|
@@ -49,7 +262,12 @@ export async function staticOnRoute(event, path, localPath) {
|
|
|
49
262
|
if (!event.request.url?.startsWith(path))
|
|
50
263
|
return;
|
|
51
264
|
const relativePath = urlJoin('/', event.url.substr(path.length));
|
|
52
|
-
const
|
|
265
|
+
const root = resolve(localPath);
|
|
266
|
+
const finalLocalPath = join(root, relativePath);
|
|
267
|
+
// paths outside of the root (e.g. /../../etc/passwd) are not checked at all, otherwise 403 (exists) and
|
|
268
|
+
// 404 (doesn't exist) would tell whether a file exists anywhere on the server
|
|
269
|
+
if (finalLocalPath !== root && !finalLocalPath.startsWith(root + sep))
|
|
270
|
+
return;
|
|
53
271
|
return new Promise(__assignType(resolve => {
|
|
54
272
|
stat(finalLocalPath, __assignType((err, stat) => {
|
|
55
273
|
if (stat && stat.isFile()) {
|
|
@@ -59,7 +277,6 @@ export async function staticOnRoute(event, path, localPath) {
|
|
|
59
277
|
}, ['err', 'stat', '', 'P"2!"2""/#']));
|
|
60
278
|
}, ['resolve', '', 'P"2!"/"']));
|
|
61
279
|
}
|
|
62
|
-
staticOnRoute.__type = [() => httpWorkflow.onRoute.event, 'event', 'path', 'localPath', 'staticOnRoute', 'Pi!2"&2#&2$"/%'];
|
|
63
280
|
export function serveStaticListener(module, path, localPath = path) {
|
|
64
281
|
class HttpRequestStaticServingListener {
|
|
65
282
|
onRoute(event) {
|
|
@@ -69,14 +286,9 @@ export function serveStaticListener(module, path, localPath = path) {
|
|
|
69
286
|
HttpRequestStaticServingListener.__type = [() => httpWorkflow.onRoute.event, 'event', 'onRoute', 'HttpRequestStaticServingListener', 'Pi!2""0#5w$'];
|
|
70
287
|
__decorate([
|
|
71
288
|
eventDispatcher.listen(httpWorkflow.onRoute, 101) //after default route listener at 100
|
|
72
|
-
,
|
|
73
|
-
__metadata("design:type", Function),
|
|
74
|
-
__metadata("design:paramtypes", [Object]),
|
|
75
|
-
__metadata("design:returntype", void 0)
|
|
76
289
|
], HttpRequestStaticServingListener.prototype, "onRoute", null);
|
|
77
290
|
return HttpRequestStaticServingListener;
|
|
78
291
|
}
|
|
79
|
-
serveStaticListener.__type = [() => AppModule, 'module', 'path', 'localPath', () => path, () => __ΩClassType, 'serveStaticListener', 'PP"7!2"&2#&2$>%n&/\''];
|
|
80
292
|
function loadHtml(localPath, path) {
|
|
81
293
|
try {
|
|
82
294
|
let indexHtml = readFileSync(join(localPath, 'index.html')).toString('utf8');
|
|
@@ -87,7 +299,6 @@ function loadHtml(localPath, path) {
|
|
|
87
299
|
return '';
|
|
88
300
|
}
|
|
89
301
|
}
|
|
90
|
-
loadHtml.__type = ['localPath', 'path', 'loadHtml', 'P&2!&2"&/#'];
|
|
91
302
|
const __ΩStaticHttpOptions = ['path', 'localPath', 'groups', 'controllerName', 'indexReplace', 'StaticHttpOptions', 'P&4!&4"&F4#8&4$8P&&LM4%8Mw&y'];
|
|
92
303
|
export { __ΩStaticHttpOptions as __ΩStaticHttpOptions };
|
|
93
304
|
/**
|
|
@@ -114,10 +325,7 @@ export function registerStaticHttpController(module, options) {
|
|
|
114
325
|
}
|
|
115
326
|
StaticController.__type = [() => HttpRequest, 'request', () => HttpResponse, 'response', 'serveIndex', 'StaticController', 'PP7!2"P7#2$"0%5w&'];
|
|
116
327
|
__decorate([
|
|
117
|
-
(http.GET().group(...groups))
|
|
118
|
-
__metadata("design:type", Function),
|
|
119
|
-
__metadata("design:paramtypes", [HttpRequest, HttpResponse]),
|
|
120
|
-
__metadata("design:returntype", void 0)
|
|
328
|
+
(http.GET().group(...groups))
|
|
121
329
|
], StaticController.prototype, "serveIndex", null);
|
|
122
330
|
if (options.controllerName) {
|
|
123
331
|
Object.defineProperty(StaticController, 'name', { value: options.controllerName, writable: true });
|
|
@@ -130,7 +338,7 @@ export function registerStaticHttpController(module, options) {
|
|
|
130
338
|
methodName: 'serveIndex',
|
|
131
339
|
});
|
|
132
340
|
route1.groups = groups;
|
|
133
|
-
(module.configureProvider.Ω = [
|
|
341
|
+
(module.configureProvider.Ω = [Ωt0], module.configureProvider(__assignType(router => router.addRoute(route1), ['router', '', 'P"2!"/"']), { global: true }));
|
|
134
342
|
if (path !== '/') {
|
|
135
343
|
const route2 = new RouteConfig('static', ['GET'], path.slice(0, -1), {
|
|
136
344
|
type: 'controller',
|
|
@@ -139,10 +347,9 @@ export function registerStaticHttpController(module, options) {
|
|
|
139
347
|
methodName: 'serveIndex',
|
|
140
348
|
});
|
|
141
349
|
route2.groups = groups;
|
|
142
|
-
(module.configureProvider.Ω = [
|
|
350
|
+
(module.configureProvider.Ω = [Ωt1], module.configureProvider(__assignType(router => router.addRoute(route2), ['router', '', 'P"2!"/"']), { global: true }));
|
|
143
351
|
}
|
|
144
352
|
module.addProvider(StaticController);
|
|
145
353
|
module.addListener(serveStaticListener(module, normalizeDirectory(options.path), options.localPath));
|
|
146
354
|
}
|
|
147
|
-
registerStaticHttpController.__type = [() => AppModule, 'module', () => __ΩStaticHttpOptions, 'options', 'registerStaticHttpController', 'PP"7!2"n#2$$/%'];
|
|
148
355
|
//# sourceMappingURL=static-serving.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static-serving.js","sourceRoot":"","sources":["../../../src/static-serving.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"static-serving.js","sourceRoot":"","sources":["../../../src/static-serving.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/src/utils.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
normalizeDirectory.__type = ['path', 'normalizeDirectory', 'P&2!&/"'];
|
|
1
2
|
export function normalizeDirectory(path) {
|
|
2
3
|
if (path[0] !== '/')
|
|
3
4
|
path = '/' + path;
|
|
@@ -5,5 +6,4 @@ export function normalizeDirectory(path) {
|
|
|
5
6
|
path = path + '/';
|
|
6
7
|
return path;
|
|
7
8
|
}
|
|
8
|
-
normalizeDirectory.__type = ['path', 'normalizeDirectory', 'P&2!&/"'];
|
|
9
9
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC3C,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;IACvC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG;QAAE,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;IACrD,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/utils.ts"],"names":[],"mappings":";AAAA,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC3C,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;IACvC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG;QAAE,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;IACrD,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
package/index.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deepkit/http",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Deepkit HTTP server and router.",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "./dist/cjs/index.js",
|
|
@@ -23,34 +23,31 @@
|
|
|
23
23
|
"build": "echo '{\"type\": \"module\"}' > ./dist/esm/package.json"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
|
-
"@deepkit/app": "^1.0
|
|
27
|
-
"@deepkit/core": "^1.0
|
|
28
|
-
"@deepkit/event": "^1.0
|
|
29
|
-
"@deepkit/injector": "^1.0
|
|
30
|
-
"@deepkit/logger": "^1.0
|
|
31
|
-
"@deepkit/stopwatch": "^1.0
|
|
32
|
-
"@deepkit/template": "^1.0
|
|
33
|
-
"@deepkit/type": "^1.0
|
|
34
|
-
"@deepkit/workflow": "^1.0
|
|
26
|
+
"@deepkit/app": "^1.1.0",
|
|
27
|
+
"@deepkit/core": "^1.1.0",
|
|
28
|
+
"@deepkit/event": "^1.1.0",
|
|
29
|
+
"@deepkit/injector": "^1.1.0",
|
|
30
|
+
"@deepkit/logger": "^1.1.0",
|
|
31
|
+
"@deepkit/stopwatch": "^1.1.0",
|
|
32
|
+
"@deepkit/template": "^1.1.0",
|
|
33
|
+
"@deepkit/type": "^1.1.0",
|
|
34
|
+
"@deepkit/workflow": "^1.1.0"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"formidable": "^3.5.2"
|
|
38
|
-
"qs": "^6.14.0",
|
|
39
|
-
"send": "^1.1.0"
|
|
37
|
+
"formidable": "^3.5.2"
|
|
40
38
|
},
|
|
41
39
|
"devDependencies": {
|
|
42
|
-
"@deepkit/app": "^1.0
|
|
43
|
-
"@deepkit/core": "^1.0
|
|
44
|
-
"@deepkit/event": "^1.0
|
|
45
|
-
"@deepkit/injector": "^1.0
|
|
46
|
-
"@deepkit/logger": "^1.0
|
|
47
|
-
"@deepkit/stopwatch": "^1.0
|
|
48
|
-
"@deepkit/template": "^1.0
|
|
49
|
-
"@deepkit/type": "^1.0
|
|
50
|
-
"@deepkit/workflow": "^1.0
|
|
40
|
+
"@deepkit/app": "^1.1.0",
|
|
41
|
+
"@deepkit/core": "^1.1.0",
|
|
42
|
+
"@deepkit/event": "^1.1.0",
|
|
43
|
+
"@deepkit/injector": "^1.1.0",
|
|
44
|
+
"@deepkit/logger": "^1.1.0",
|
|
45
|
+
"@deepkit/stopwatch": "^1.1.0",
|
|
46
|
+
"@deepkit/template": "^1.1.0",
|
|
47
|
+
"@deepkit/type": "^1.1.0",
|
|
48
|
+
"@deepkit/workflow": "^1.1.0",
|
|
51
49
|
"@types/formidable": "^3.4.5",
|
|
52
|
-
"@types/node": "^22.13.1"
|
|
53
|
-
"@types/send": "^0.14.6"
|
|
50
|
+
"@types/node": "^22.13.1"
|
|
54
51
|
},
|
|
55
52
|
"jest": {
|
|
56
53
|
"testEnvironment": "node",
|
|
@@ -70,5 +67,5 @@
|
|
|
70
67
|
"**/tests/**/*.spec.ts"
|
|
71
68
|
]
|
|
72
69
|
},
|
|
73
|
-
"gitHead": "
|
|
70
|
+
"gitHead": "56081823b559bb68b77a8781957af5d9c2e019a7"
|
|
74
71
|
}
|
package/src/http.ts
CHANGED
|
@@ -27,9 +27,10 @@ export function isElementStruct(v: any): v is ElementStruct {
|
|
|
27
27
|
|
|
28
28
|
let templateRender: typeof render;
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
// @deepkit/template is optional, so it's only loaded when a controller returns a JSX element.
|
|
31
|
+
async function getTemplateRender(): Promise<typeof render> {
|
|
31
32
|
if (!templateRender) {
|
|
32
|
-
const template =
|
|
33
|
+
const template = await import('@deepkit/template');
|
|
33
34
|
templateRender = template.render;
|
|
34
35
|
}
|
|
35
36
|
|
|
@@ -110,6 +111,9 @@ export class HttpInternalServerError extends createHttpError(500, 'Internal serv
|
|
|
110
111
|
export class HttpNotImplementedError extends createHttpError(501, 'Not implemented') {
|
|
111
112
|
}
|
|
112
113
|
|
|
114
|
+
export class HttpGatewayTimeoutError extends createHttpError(504, 'Gateway timeout') {
|
|
115
|
+
}
|
|
116
|
+
|
|
113
117
|
export class HttpWorkflowEvent extends BaseEvent {
|
|
114
118
|
public nextState?: any;
|
|
115
119
|
public nextStateEvent?: any;
|
|
@@ -318,7 +322,7 @@ export const httpWorkflow = createWorkflow('http', {
|
|
|
318
322
|
}, {
|
|
319
323
|
start: 'request',
|
|
320
324
|
request: 'route',
|
|
321
|
-
route: ['auth', 'routeNotFound'],
|
|
325
|
+
route: ['auth', 'routeNotFound', 'response'],
|
|
322
326
|
auth: ['resolveParameters', 'accessDenied'],
|
|
323
327
|
resolveParameters: ['controller', 'parametersFailed'],
|
|
324
328
|
accessDenied: 'response',
|
|
@@ -543,7 +547,7 @@ export class HttpListener {
|
|
|
543
547
|
protected injector: Injector,
|
|
544
548
|
protected stopwatch: Stopwatch,
|
|
545
549
|
) {
|
|
546
|
-
this.setRouteConfig = injector.createSetter(RouteConfig,
|
|
550
|
+
this.setRouteConfig = injector.createSetter(RouteConfig, 'http');
|
|
547
551
|
}
|
|
548
552
|
|
|
549
553
|
@eventDispatcher.listen(httpWorkflow.onRequest, 100)
|
|
@@ -559,6 +563,7 @@ export class HttpListener {
|
|
|
559
563
|
if (event.sent) return;
|
|
560
564
|
if (event.hasNext()) return;
|
|
561
565
|
const logger = this.logger;
|
|
566
|
+
let inMiddleware = false;
|
|
562
567
|
|
|
563
568
|
try {
|
|
564
569
|
const resolved = this.router.resolveRequest(event.request);
|
|
@@ -570,6 +575,7 @@ export class HttpListener {
|
|
|
570
575
|
if (resolved.middlewares) {
|
|
571
576
|
const middlewares = resolved.middlewares(event.injectorContext);
|
|
572
577
|
if (middlewares.length) {
|
|
578
|
+
inMiddleware = true;
|
|
573
579
|
await asyncOperation(async (resolve, reject) => {
|
|
574
580
|
let lastTimer: any = undefined;
|
|
575
581
|
|
|
@@ -581,6 +587,7 @@ export class HttpListener {
|
|
|
581
587
|
|
|
582
588
|
event.response.once('finish', finish);
|
|
583
589
|
let i = -1;
|
|
590
|
+
let timedOut = false;
|
|
584
591
|
|
|
585
592
|
async function next() {
|
|
586
593
|
i++;
|
|
@@ -594,14 +601,18 @@ export class HttpListener {
|
|
|
594
601
|
const timeout = middlewares[i].timeout;
|
|
595
602
|
if (timeout !== undefined && timeout > 0) {
|
|
596
603
|
lastTimer = setTimeout(() => {
|
|
604
|
+
//a middleware that neither calls next() nor ends the response in time fails the request
|
|
605
|
+
timedOut = true;
|
|
597
606
|
logger.warn(`Middleware timed out. Increase the timeout or fix the middleware. (${middlewares[i].fn})`);
|
|
598
|
-
|
|
607
|
+
event.response.off('finish', finish);
|
|
608
|
+
reject(new HttpGatewayTimeoutError('Middleware timed out'));
|
|
599
609
|
}, timeout);
|
|
600
610
|
}
|
|
601
611
|
|
|
602
612
|
try {
|
|
603
613
|
await middlewares[i].fn(event.request, event.response, (error?: any) => {
|
|
604
614
|
if (lastTimer) clearTimeout(lastTimer);
|
|
615
|
+
if (timedOut) return;
|
|
605
616
|
if (error) {
|
|
606
617
|
event.response.off('finish', finish);
|
|
607
618
|
reject(error);
|
|
@@ -610,19 +621,42 @@ export class HttpListener {
|
|
|
610
621
|
}
|
|
611
622
|
});
|
|
612
623
|
} catch (error) {
|
|
624
|
+
event.response.off('finish', finish);
|
|
613
625
|
reject(error);
|
|
614
626
|
}
|
|
615
627
|
}
|
|
616
628
|
|
|
617
629
|
await next();
|
|
618
630
|
});
|
|
631
|
+
inMiddleware = false;
|
|
619
632
|
}
|
|
620
633
|
}
|
|
621
634
|
|
|
635
|
+
if (event.sent) {
|
|
636
|
+
//a middleware ended the request, so we skip the controller but still trigger onResponse (e.g. for logging)
|
|
637
|
+
event.next('response', new HttpResponseEvent(event.injectorContext, event.request, event.response, undefined, resolved.routeConfig));
|
|
638
|
+
return;
|
|
639
|
+
}
|
|
640
|
+
|
|
622
641
|
this.setRouteConfig(resolved.routeConfig, event.injectorContext.scope);
|
|
623
642
|
event.routeFound(resolved.routeConfig, resolved.parameters);
|
|
624
643
|
}
|
|
625
644
|
} catch (error) {
|
|
645
|
+
if (error instanceof HttpError) {
|
|
646
|
+
if (event.request.throwErrorOnNotFound && error.httpCode === 404) {
|
|
647
|
+
throw error;
|
|
648
|
+
}
|
|
649
|
+
event.send(new JSONResponse({
|
|
650
|
+
message: error.message
|
|
651
|
+
}, error.httpCode).disableAutoSerializing());
|
|
652
|
+
return;
|
|
653
|
+
}
|
|
654
|
+
if (inMiddleware) {
|
|
655
|
+
//like a failing controller, an error of a middleware is a server error (#439)
|
|
656
|
+
this.logger.error('Middleware error', error);
|
|
657
|
+
event.send(new HtmlResponse('Internal error', 500));
|
|
658
|
+
return;
|
|
659
|
+
}
|
|
626
660
|
this.logger.error('Could not resolve request', error);
|
|
627
661
|
event.notFound();
|
|
628
662
|
}
|
|
@@ -702,7 +736,7 @@ export class HttpListener {
|
|
|
702
736
|
}
|
|
703
737
|
|
|
704
738
|
if (isElementStruct(result)) {
|
|
705
|
-
const html = await getTemplateRender()(event.injectorContext.getRootInjector(), result, this.stopwatch ? this.stopwatch : undefined);
|
|
739
|
+
const html = await (await getTemplateRender())(event.injectorContext.getRootInjector(), result, this.stopwatch ? this.stopwatch : undefined);
|
|
706
740
|
result = new HtmlResponse(html, 200).header('Content-Type', 'text/html; charset=utf-8');
|
|
707
741
|
}
|
|
708
742
|
if (result instanceof stream.Readable) {
|
package/src/middleware.ts
CHANGED
|
@@ -79,8 +79,8 @@ export class HttpMiddlewareApi {
|
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
/**
|
|
82
|
-
* When the middleware
|
|
83
|
-
*
|
|
82
|
+
* When the middleware neither calls next() nor ends the response within <timeout> milliseconds,
|
|
83
|
+
* the request fails with HttpGatewayTimeoutError (504) and a warning is logged.
|
|
84
84
|
*/
|
|
85
85
|
timeout(timeout: number) {
|
|
86
86
|
this.t.timeout = timeout;
|