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.
Files changed (157) hide show
  1. package/README.md +4 -4
  2. package/data/CookieObject.js +1 -1
  3. package/{types/index.js → data/custom-types.js} +1 -1
  4. package/{types/typings.d.ts → data/middleware.d.ts} +1 -1
  5. package/helpers/RequestReader.js +1 -1
  6. package/helpers/ResponseHeaders.js +9 -10
  7. package/lib/HttpHandler.js +4 -4
  8. package/lib/HttpRequest.js +2 -2
  9. package/lib/HttpResponse.js +2 -2
  10. package/lib/HttpTransaction.js +2 -2
  11. package/middleware/AutoHeadersMiddleware.js +2 -2
  12. package/middleware/CORSMiddleware.js +3 -3
  13. package/middleware/CaseInsensitiveHeadersMiddleware.js +2 -2
  14. package/middleware/ContentDecoderMiddleware.js +1 -1
  15. package/middleware/ContentEncoderMiddleware.js +2 -2
  16. package/middleware/ContentLengthMiddleware.js +2 -2
  17. package/middleware/HashMiddleware.js +2 -2
  18. package/middleware/HeadMethodMiddleware.js +3 -3
  19. package/middleware/MethodMiddleware.js +3 -3
  20. package/middleware/PathMiddleware.js +4 -4
  21. package/middleware/ReadFormData.js +1 -1
  22. package/middleware/SendJsonMiddleware.js +4 -4
  23. package/middleware/SendStringMiddleware.js +3 -3
  24. package/package.json +21 -4
  25. package/templates/starter.js +2 -2
  26. package/types/data/CookieObject.d.ts +34 -0
  27. package/types/data/CookieObject.d.ts.map +1 -0
  28. package/types/data/custom-types.d.ts +111 -0
  29. package/types/data/custom-types.d.ts.map +1 -0
  30. package/types/errata/socketio.d.ts +11 -0
  31. package/types/errata/socketio.d.ts.map +1 -0
  32. package/types/examples/starter.d.ts +2 -0
  33. package/types/examples/starter.d.ts.map +1 -0
  34. package/types/helpers/HeadersParser.d.ts +27 -0
  35. package/types/helpers/HeadersParser.d.ts.map +1 -0
  36. package/types/helpers/HttpListener.d.ts +84 -0
  37. package/types/helpers/HttpListener.d.ts.map +1 -0
  38. package/types/helpers/RequestHeaders.d.ts +25 -0
  39. package/types/helpers/RequestHeaders.d.ts.map +1 -0
  40. package/types/helpers/RequestReader.d.ts +52 -0
  41. package/types/helpers/RequestReader.d.ts.map +1 -0
  42. package/types/helpers/ResponseHeaders.d.ts +126 -0
  43. package/types/helpers/ResponseHeaders.d.ts.map +1 -0
  44. package/types/helpers/index.d.ts +6 -0
  45. package/types/helpers/index.d.ts.map +1 -0
  46. package/types/lib/HttpHandler.d.ts +79 -0
  47. package/types/lib/HttpHandler.d.ts.map +1 -0
  48. package/types/lib/HttpRequest.d.ts +175 -0
  49. package/types/lib/HttpRequest.d.ts.map +1 -0
  50. package/types/lib/HttpResponse.d.ts +117 -0
  51. package/types/lib/HttpResponse.d.ts.map +1 -0
  52. package/types/lib/HttpTransaction.d.ts +114 -0
  53. package/types/lib/HttpTransaction.d.ts.map +1 -0
  54. package/types/middleware/AutoHeadersMiddleware.d.ts +27 -0
  55. package/types/middleware/AutoHeadersMiddleware.d.ts.map +1 -0
  56. package/types/middleware/CORSMiddleware.d.ts +65 -0
  57. package/types/middleware/CORSMiddleware.d.ts.map +1 -0
  58. package/types/middleware/CaseInsensitiveHeadersMiddleware.d.ts +27 -0
  59. package/types/middleware/CaseInsensitiveHeadersMiddleware.d.ts.map +1 -0
  60. package/types/middleware/ContentDecoderMiddleware.d.ts +17 -0
  61. package/types/middleware/ContentDecoderMiddleware.d.ts.map +1 -0
  62. package/types/middleware/ContentEncoderMiddleware.d.ts +48 -0
  63. package/types/middleware/ContentEncoderMiddleware.d.ts.map +1 -0
  64. package/types/middleware/ContentLengthMiddleware.d.ts +38 -0
  65. package/types/middleware/ContentLengthMiddleware.d.ts.map +1 -0
  66. package/types/middleware/HashMiddleware.d.ts +28 -0
  67. package/types/middleware/HashMiddleware.d.ts.map +1 -0
  68. package/types/middleware/HeadMethodMiddleware.d.ts +12 -0
  69. package/types/middleware/HeadMethodMiddleware.d.ts.map +1 -0
  70. package/types/middleware/MethodMiddleware.d.ts +40 -0
  71. package/types/middleware/MethodMiddleware.d.ts.map +1 -0
  72. package/types/middleware/PathMiddleware.d.ts +81 -0
  73. package/types/middleware/PathMiddleware.d.ts.map +1 -0
  74. package/types/middleware/ReadFormData.d.ts +7 -0
  75. package/types/middleware/ReadFormData.d.ts.map +1 -0
  76. package/types/middleware/SendJsonMiddleware.d.ts +51 -0
  77. package/types/middleware/SendJsonMiddleware.d.ts.map +1 -0
  78. package/types/middleware/SendStringMiddleware.d.ts +35 -0
  79. package/types/middleware/SendStringMiddleware.d.ts.map +1 -0
  80. package/types/templates/starter.d.ts +15 -0
  81. package/types/templates/starter.d.ts.map +1 -0
  82. package/types/utils/AsyncObject.d.ts +38 -0
  83. package/types/utils/AsyncObject.d.ts.map +1 -0
  84. package/types/utils/CaseInsensitiveObject.d.ts +9 -0
  85. package/types/utils/CaseInsensitiveObject.d.ts.map +1 -0
  86. package/types/utils/function.d.ts +2 -0
  87. package/types/utils/function.d.ts.map +1 -0
  88. package/types/utils/headers.d.ts +7 -0
  89. package/types/utils/headers.d.ts.map +1 -0
  90. package/types/utils/qualityValues.d.ts +12 -0
  91. package/types/utils/qualityValues.d.ts.map +1 -0
  92. package/types/utils/stream.d.ts +6 -0
  93. package/types/utils/stream.d.ts.map +1 -0
  94. package/utils/headers.js +1 -1
  95. package/.eslintrc.json +0 -96
  96. package/.github/FUNDING.yml +0 -4
  97. package/.github/copilot-instructions.md +0 -100
  98. package/.github/workflows/publish.yml +0 -29
  99. package/.github/workflows/test-matrix.yml +0 -37
  100. package/.test/benchmark.js +0 -28
  101. package/.test/constants.js +0 -4
  102. package/.test/cookietester.js +0 -19
  103. package/.test/http2server.js +0 -35
  104. package/.test/httpserver.js +0 -32
  105. package/.test/index.js +0 -498
  106. package/.test/multipromise.js +0 -32
  107. package/.test/tls.js +0 -75
  108. package/.test/urlencoded.js +0 -54
  109. package/.vscode/launch.json +0 -35
  110. package/.vscode/settings.json +0 -5
  111. package/CHANGELOG.md +0 -10
  112. package/CODE_OF_CONDUCT.md +0 -76
  113. package/errata/index.js +0 -1
  114. package/examples/starter.js +0 -11
  115. package/index.js +0 -4
  116. package/jsconfig.json +0 -12
  117. package/lib/index.js +0 -3
  118. package/middleware/ContentReaderMiddleware.js +0 -249
  119. package/middleware/ContentWriterMiddleware.js +0 -161
  120. package/middleware/SendHeadersMiddleware.js +0 -47
  121. package/middleware/index.js +0 -11
  122. package/polyfill/FormData.js +0 -164
  123. package/rollup.config.js +0 -8
  124. package/scripts/check-teapot.mjs +0 -40
  125. package/scripts/test-all-sync.sh +0 -6
  126. package/scripts/test-all.sh +0 -7
  127. package/test/fixtures/stream.js +0 -68
  128. package/test/helpers/HttpListener/construct.js +0 -18
  129. package/test/helpers/HttpListener/customOptions.js +0 -22
  130. package/test/helpers/HttpListener/doubleCreate.js +0 -40
  131. package/test/helpers/HttpListener/events.js +0 -77
  132. package/test/helpers/HttpListener/http.js +0 -31
  133. package/test/helpers/HttpListener/http2.js +0 -41
  134. package/test/helpers/HttpListener/https.js +0 -38
  135. package/test/helpers/HttpListener/startAll.js +0 -31
  136. package/test/helpers/HttpListener/stopNotStarted.js +0 -23
  137. package/test/lib/HttpHandler/class.js +0 -8
  138. package/test/lib/HttpHandler/handleRequest.js +0 -11
  139. package/test/lib/HttpHandler/middleware.js +0 -941
  140. package/test/lib/HttpHandler/parse.js +0 -41
  141. package/test/lib/HttpRequest/class.js +0 -8
  142. package/test/lib/HttpRequest/downstream.js +0 -171
  143. package/test/lib/HttpRequest/properties.js +0 -101
  144. package/test/lib/HttpRequest/read.js +0 -518
  145. package/test/lib/HttpResponse/async-iterable-middleware.js +0 -37
  146. package/test/lib/HttpResponse/async-iterable.js +0 -31
  147. package/test/lib/HttpResponse/class.js +0 -8
  148. package/test/lib/HttpResponse/properties.js +0 -59
  149. package/test/lib/HttpResponse/send.js +0 -275
  150. package/test/lib/HttpTransaction/class.js +0 -8
  151. package/test/lib/HttpTransaction/ping.js +0 -50
  152. package/test/lib/HttpTransaction/push.js +0 -89
  153. package/test/middleware/SendJsonMiddleware.js +0 -222
  154. package/test/sanity.js +0 -10
  155. package/test/templates/error-teapot.js +0 -47
  156. package/test/templates/starter.js +0 -93
  157. 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
- }