webhoster 0.3.3 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/data/CookieObject.js +1 -1
- package/{types/index.js → data/custom-types.js} +1 -1
- package/{types/typings.d.ts → data/middleware.d.ts} +1 -1
- package/helpers/RequestReader.js +1 -1
- package/helpers/ResponseHeaders.js +9 -10
- package/lib/HttpHandler.js +4 -4
- package/lib/HttpRequest.js +2 -2
- package/lib/HttpResponse.js +2 -2
- package/lib/HttpTransaction.js +2 -2
- package/middleware/AutoHeadersMiddleware.js +2 -2
- package/middleware/CORSMiddleware.js +3 -3
- package/middleware/CaseInsensitiveHeadersMiddleware.js +2 -2
- package/middleware/ContentDecoderMiddleware.js +1 -1
- package/middleware/ContentEncoderMiddleware.js +2 -2
- package/middleware/ContentLengthMiddleware.js +2 -2
- package/middleware/HashMiddleware.js +2 -2
- package/middleware/HeadMethodMiddleware.js +3 -3
- package/middleware/MethodMiddleware.js +3 -3
- package/middleware/PathMiddleware.js +4 -4
- package/middleware/ReadFormData.js +1 -1
- package/middleware/SendJsonMiddleware.js +4 -4
- package/middleware/SendStringMiddleware.js +3 -3
- package/package.json +21 -4
- package/templates/starter.js +2 -2
- package/types/data/CookieObject.d.ts +34 -0
- package/types/data/CookieObject.d.ts.map +1 -0
- package/types/data/custom-types.d.ts +111 -0
- package/types/data/custom-types.d.ts.map +1 -0
- package/types/errata/socketio.d.ts +11 -0
- package/types/errata/socketio.d.ts.map +1 -0
- package/types/examples/starter.d.ts +2 -0
- package/types/examples/starter.d.ts.map +1 -0
- package/types/helpers/HeadersParser.d.ts +27 -0
- package/types/helpers/HeadersParser.d.ts.map +1 -0
- package/types/helpers/HttpListener.d.ts +84 -0
- package/types/helpers/HttpListener.d.ts.map +1 -0
- package/types/helpers/RequestHeaders.d.ts +25 -0
- package/types/helpers/RequestHeaders.d.ts.map +1 -0
- package/types/helpers/RequestReader.d.ts +52 -0
- package/types/helpers/RequestReader.d.ts.map +1 -0
- package/types/helpers/ResponseHeaders.d.ts +126 -0
- package/types/helpers/ResponseHeaders.d.ts.map +1 -0
- package/types/helpers/index.d.ts +6 -0
- package/types/helpers/index.d.ts.map +1 -0
- package/types/lib/HttpHandler.d.ts +79 -0
- package/types/lib/HttpHandler.d.ts.map +1 -0
- package/types/lib/HttpRequest.d.ts +175 -0
- package/types/lib/HttpRequest.d.ts.map +1 -0
- package/types/lib/HttpResponse.d.ts +117 -0
- package/types/lib/HttpResponse.d.ts.map +1 -0
- package/types/lib/HttpTransaction.d.ts +114 -0
- package/types/lib/HttpTransaction.d.ts.map +1 -0
- package/types/middleware/AutoHeadersMiddleware.d.ts +27 -0
- package/types/middleware/AutoHeadersMiddleware.d.ts.map +1 -0
- package/types/middleware/CORSMiddleware.d.ts +65 -0
- package/types/middleware/CORSMiddleware.d.ts.map +1 -0
- package/types/middleware/CaseInsensitiveHeadersMiddleware.d.ts +27 -0
- package/types/middleware/CaseInsensitiveHeadersMiddleware.d.ts.map +1 -0
- package/types/middleware/ContentDecoderMiddleware.d.ts +17 -0
- package/types/middleware/ContentDecoderMiddleware.d.ts.map +1 -0
- package/types/middleware/ContentEncoderMiddleware.d.ts +48 -0
- package/types/middleware/ContentEncoderMiddleware.d.ts.map +1 -0
- package/types/middleware/ContentLengthMiddleware.d.ts +38 -0
- package/types/middleware/ContentLengthMiddleware.d.ts.map +1 -0
- package/types/middleware/HashMiddleware.d.ts +28 -0
- package/types/middleware/HashMiddleware.d.ts.map +1 -0
- package/types/middleware/HeadMethodMiddleware.d.ts +12 -0
- package/types/middleware/HeadMethodMiddleware.d.ts.map +1 -0
- package/types/middleware/MethodMiddleware.d.ts +40 -0
- package/types/middleware/MethodMiddleware.d.ts.map +1 -0
- package/types/middleware/PathMiddleware.d.ts +81 -0
- package/types/middleware/PathMiddleware.d.ts.map +1 -0
- package/types/middleware/ReadFormData.d.ts +7 -0
- package/types/middleware/ReadFormData.d.ts.map +1 -0
- package/types/middleware/SendJsonMiddleware.d.ts +51 -0
- package/types/middleware/SendJsonMiddleware.d.ts.map +1 -0
- package/types/middleware/SendStringMiddleware.d.ts +35 -0
- package/types/middleware/SendStringMiddleware.d.ts.map +1 -0
- package/types/templates/starter.d.ts +15 -0
- package/types/templates/starter.d.ts.map +1 -0
- package/types/utils/AsyncObject.d.ts +38 -0
- package/types/utils/AsyncObject.d.ts.map +1 -0
- package/types/utils/CaseInsensitiveObject.d.ts +9 -0
- package/types/utils/CaseInsensitiveObject.d.ts.map +1 -0
- package/types/utils/function.d.ts +2 -0
- package/types/utils/function.d.ts.map +1 -0
- package/types/utils/headers.d.ts +7 -0
- package/types/utils/headers.d.ts.map +1 -0
- package/types/utils/qualityValues.d.ts +12 -0
- package/types/utils/qualityValues.d.ts.map +1 -0
- package/types/utils/stream.d.ts +6 -0
- package/types/utils/stream.d.ts.map +1 -0
- package/utils/headers.js +1 -1
- package/.eslintrc.json +0 -96
- package/.github/FUNDING.yml +0 -4
- package/.github/copilot-instructions.md +0 -100
- package/.github/workflows/publish.yml +0 -29
- package/.github/workflows/test-matrix.yml +0 -37
- package/.test/benchmark.js +0 -28
- package/.test/constants.js +0 -4
- package/.test/cookietester.js +0 -19
- package/.test/http2server.js +0 -35
- package/.test/httpserver.js +0 -32
- package/.test/index.js +0 -498
- package/.test/multipromise.js +0 -32
- package/.test/tls.js +0 -75
- package/.test/urlencoded.js +0 -54
- package/.vscode/launch.json +0 -35
- package/.vscode/settings.json +0 -5
- package/CHANGELOG.md +0 -10
- package/CODE_OF_CONDUCT.md +0 -76
- package/errata/index.js +0 -1
- package/examples/starter.js +0 -11
- package/index.js +0 -4
- package/jsconfig.json +0 -12
- package/lib/index.js +0 -3
- package/middleware/ContentReaderMiddleware.js +0 -249
- package/middleware/ContentWriterMiddleware.js +0 -161
- package/middleware/SendHeadersMiddleware.js +0 -47
- package/middleware/index.js +0 -11
- package/polyfill/FormData.js +0 -164
- package/rollup.config.js +0 -8
- package/scripts/check-teapot.mjs +0 -40
- package/scripts/test-all-sync.sh +0 -6
- package/scripts/test-all.sh +0 -7
- package/test/fixtures/stream.js +0 -68
- package/test/helpers/HttpListener/construct.js +0 -18
- package/test/helpers/HttpListener/customOptions.js +0 -22
- package/test/helpers/HttpListener/doubleCreate.js +0 -40
- package/test/helpers/HttpListener/events.js +0 -77
- package/test/helpers/HttpListener/http.js +0 -31
- package/test/helpers/HttpListener/http2.js +0 -41
- package/test/helpers/HttpListener/https.js +0 -38
- package/test/helpers/HttpListener/startAll.js +0 -31
- package/test/helpers/HttpListener/stopNotStarted.js +0 -23
- package/test/lib/HttpHandler/class.js +0 -8
- package/test/lib/HttpHandler/handleRequest.js +0 -11
- package/test/lib/HttpHandler/middleware.js +0 -941
- package/test/lib/HttpHandler/parse.js +0 -41
- package/test/lib/HttpRequest/class.js +0 -8
- package/test/lib/HttpRequest/downstream.js +0 -171
- package/test/lib/HttpRequest/properties.js +0 -101
- package/test/lib/HttpRequest/read.js +0 -518
- package/test/lib/HttpResponse/async-iterable-middleware.js +0 -37
- package/test/lib/HttpResponse/async-iterable.js +0 -31
- package/test/lib/HttpResponse/class.js +0 -8
- package/test/lib/HttpResponse/properties.js +0 -59
- package/test/lib/HttpResponse/send.js +0 -275
- package/test/lib/HttpTransaction/class.js +0 -8
- package/test/lib/HttpTransaction/ping.js +0 -50
- package/test/lib/HttpTransaction/push.js +0 -89
- package/test/middleware/SendJsonMiddleware.js +0 -222
- package/test/sanity.js +0 -10
- package/test/templates/error-teapot.js +0 -47
- package/test/templates/starter.js +0 -93
- package/tsconfig.json +0 -30
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import test from 'ava';
|
|
2
|
-
import http from 'node:http';
|
|
3
|
-
import HttpListener from '../../helpers/HttpListener.js';
|
|
4
|
-
import HttpHandler from '../../lib/HttpHandler.js';
|
|
5
|
-
import * as starter from '../../templates/starter.js';
|
|
6
|
-
|
|
7
|
-
test.serial('custom error handler returns 418 I\'m a teapot', async (t) => {
|
|
8
|
-
const handler = HttpHandler.defaultInstance;
|
|
9
|
-
const listener = HttpListener.defaultInstance;
|
|
10
|
-
|
|
11
|
-
const mwLen = handler.middleware.length;
|
|
12
|
-
const ehLen = handler.errorHandlers.length;
|
|
13
|
-
|
|
14
|
-
const throwingMiddleware = [() => { throw new Error('brew failed'); }];
|
|
15
|
-
const teapotHandler = {
|
|
16
|
-
onError(transaction) {
|
|
17
|
-
// set custom status and body
|
|
18
|
-
transaction.response.status = 418;
|
|
19
|
-
return "I'm a teapot";
|
|
20
|
-
},
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
await starter.start({ middleware: throwingMiddleware, errorHandlers: [teapotHandler], host: '127.0.0.1', port: 0 });
|
|
24
|
-
|
|
25
|
-
t.truthy(listener.httpServer, 'server started');
|
|
26
|
-
const addr = listener.httpServer.address();
|
|
27
|
-
t.truthy(addr && addr.port, 'server bound');
|
|
28
|
-
|
|
29
|
-
const result = await new Promise((resolve, reject) => {
|
|
30
|
-
const req = http.get({ port: addr.port, path: '/' }, (res) => {
|
|
31
|
-
let data = '';
|
|
32
|
-
res.setEncoding('utf8');
|
|
33
|
-
res.on('data', (chunk) => { data += chunk; });
|
|
34
|
-
res.on('end', () => resolve({ status: res.statusCode, body: data }));
|
|
35
|
-
});
|
|
36
|
-
req.on('error', reject);
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
t.is(result.status, 418);
|
|
40
|
-
t.true(result.body.includes("teapot"));
|
|
41
|
-
|
|
42
|
-
await listener.stopHttpServer();
|
|
43
|
-
|
|
44
|
-
// restore global handler state
|
|
45
|
-
handler.middleware.splice(mwLen);
|
|
46
|
-
handler.errorHandlers.splice(ehLen);
|
|
47
|
-
});
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import test from 'ava';
|
|
2
|
-
import http from 'node:http';
|
|
3
|
-
import HttpListener from '../../helpers/HttpListener.js';
|
|
4
|
-
import HttpHandler from '../../lib/HttpHandler.js';
|
|
5
|
-
import * as starter from '../../templates/starter.js';
|
|
6
|
-
|
|
7
|
-
test.serial('examples/starter starts singleton listener and responds', async (t) => {
|
|
8
|
-
// Import the example. It applies middleware and starts the singleton listener.
|
|
9
|
-
await import('../../examples/starter.js');
|
|
10
|
-
|
|
11
|
-
const listener = HttpListener.defaultInstance;
|
|
12
|
-
const server = listener.httpServer;
|
|
13
|
-
t.truthy(server, 'singleton server started');
|
|
14
|
-
|
|
15
|
-
const addr = server.address();
|
|
16
|
-
t.truthy(addr && addr.port, 'server bound to a port');
|
|
17
|
-
|
|
18
|
-
const result = await new Promise((resolve, reject) => {
|
|
19
|
-
const request = http.get({ port: addr.port, path: '/' }, (res) => {
|
|
20
|
-
let data = '';
|
|
21
|
-
res.setEncoding('utf8');
|
|
22
|
-
res.on('data', (chunk) => { data += chunk; });
|
|
23
|
-
res.on('end', () => resolve({ status: res.statusCode, body: data }));
|
|
24
|
-
});
|
|
25
|
-
request.on('error', reject);
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
t.is(result.status, 200);
|
|
29
|
-
t.true(typeof result.body === 'string');
|
|
30
|
-
t.true(result.body.length > 0, 'response body present');
|
|
31
|
-
|
|
32
|
-
await listener.stopHttpServer();
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
test.serial('starter.start applies default error handler and middleware when none provided', async (t) => {
|
|
36
|
-
const handler = HttpHandler.defaultInstance;
|
|
37
|
-
const listener = HttpListener.defaultInstance;
|
|
38
|
-
|
|
39
|
-
const mwLength = handler.middleware.length;
|
|
40
|
-
const ehLength = handler.errorHandlers.length;
|
|
41
|
-
|
|
42
|
-
// Start with empty options to exercise the default-error-handler branch
|
|
43
|
-
// Use port 0 and loopback host to avoid port collisions in CI.
|
|
44
|
-
await starter.start({ host: '127.0.0.1', port: 0 });
|
|
45
|
-
|
|
46
|
-
t.truthy(listener.httpServer, 'httpServer started');
|
|
47
|
-
|
|
48
|
-
t.true(handler.middleware.length >= mwLength + 8, 'starter middleware applied');
|
|
49
|
-
t.true(handler.errorHandlers.length > ehLength, 'default error handler added');
|
|
50
|
-
|
|
51
|
-
const lastError = handler.errorHandlers.at(-1);
|
|
52
|
-
t.is(typeof lastError.onError, 'function');
|
|
53
|
-
|
|
54
|
-
// Invoke the default onError to exercise its code path (logging + 500).
|
|
55
|
-
const result = lastError.onError({ request: { url: '/x' }, error: new Error('boom') });
|
|
56
|
-
t.is(result, 500);
|
|
57
|
-
|
|
58
|
-
await listener.stopHttpServer();
|
|
59
|
-
|
|
60
|
-
// restore handler arrays to previous lengths
|
|
61
|
-
handler.middleware.splice(mwLength);
|
|
62
|
-
handler.errorHandlers.splice(ehLength);
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
test.serial('starter.start respects provided errorHandlers and pushes middleware by reference', async (t) => {
|
|
66
|
-
const handler = HttpHandler.defaultInstance;
|
|
67
|
-
const listener = HttpListener.defaultInstance;
|
|
68
|
-
|
|
69
|
-
const mwLength = handler.middleware.length;
|
|
70
|
-
const ehLength = handler.errorHandlers.length;
|
|
71
|
-
|
|
72
|
-
const customHandlers = [{ onError: () => 418 }];
|
|
73
|
-
const customMiddleware = [() => 'custom'];
|
|
74
|
-
|
|
75
|
-
await starter.start({
|
|
76
|
-
middleware: customMiddleware, errorHandlers: customHandlers, host: '127.0.0.1', port: 0,
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
t.truthy(listener.httpServer, 'httpServer started');
|
|
80
|
-
|
|
81
|
-
// The supplied middleware array should be pushed as a single entry (by reference)
|
|
82
|
-
const lastMw = handler.middleware.at(-1);
|
|
83
|
-
t.is(lastMw, customMiddleware);
|
|
84
|
-
|
|
85
|
-
// Provided errorHandlers are appended to the handler.
|
|
86
|
-
t.is(handler.errorHandlers.length, ehLength + customHandlers.length);
|
|
87
|
-
t.is(handler.errorHandlers.at(-1), customHandlers.at(-1));
|
|
88
|
-
|
|
89
|
-
await listener.stopHttpServer();
|
|
90
|
-
|
|
91
|
-
handler.middleware.splice(mwLength);
|
|
92
|
-
handler.errorHandlers.splice(ehLength);
|
|
93
|
-
});
|
package/tsconfig.json
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"allowJs": true,
|
|
4
|
-
"checkJs": true,
|
|
5
|
-
"noImplicitAny": true,
|
|
6
|
-
"declaration": true,
|
|
7
|
-
"declarationMap": true,
|
|
8
|
-
"declarationDir": "typings",
|
|
9
|
-
"outDir": "/dev/null",
|
|
10
|
-
"target": "es2022",
|
|
11
|
-
"module": "esnext",
|
|
12
|
-
"moduleResolution": "node"
|
|
13
|
-
},
|
|
14
|
-
"include": [
|
|
15
|
-
"./data/*",
|
|
16
|
-
"./errata/*",
|
|
17
|
-
"./examples/*",
|
|
18
|
-
"./helpers/*",
|
|
19
|
-
"./lib/*",
|
|
20
|
-
"./middlewares/*",
|
|
21
|
-
"./polyfills/*",
|
|
22
|
-
"./templates/*",
|
|
23
|
-
"./types/*",
|
|
24
|
-
"./utils/*"
|
|
25
|
-
],
|
|
26
|
-
"exclude": [
|
|
27
|
-
"**/node_modules/*",
|
|
28
|
-
"**/test/*"
|
|
29
|
-
]
|
|
30
|
-
}
|