slower 1.1.21 → 1.1.23
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/lib/router.js +18 -20
- package/lib/utils.js +7 -1
- package/package.json +1 -1
package/lib/router.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const http = require('http');
|
|
2
2
|
const https = require('https');
|
|
3
3
|
const fs = require('fs');
|
|
4
|
-
const { clone, noop, slugify, isSparseEqual, last, renderDynamicHTML, setSocketLocals, setSocketSecurityHeaders, setResponseAssessors } = require('./utils');
|
|
4
|
+
const { clone, noop, slugify, isSparseEqual, last, renderDynamicHTML, setSocketLocals, setSocketSecurityHeaders, setResponseAssessors, isPromise } = require('./utils');
|
|
5
5
|
const mimetable = require('./mimetable.json');
|
|
6
6
|
|
|
7
7
|
class Route {
|
|
@@ -26,15 +26,6 @@ class SlowerRouter {
|
|
|
26
26
|
];
|
|
27
27
|
|
|
28
28
|
static mime_table = mimetable;
|
|
29
|
-
// {
|
|
30
|
-
// 'txt' : ['text/plain', 'utf-8'],
|
|
31
|
-
// 'html': ['text/html', 'utf-8'],
|
|
32
|
-
// 'js' : ['text/javascript', 'utf-8'],
|
|
33
|
-
// 'css' : ['text/css', 'utf-8'],
|
|
34
|
-
// 'ico' : ['image/png'],
|
|
35
|
-
// 'json': ['application/json'],
|
|
36
|
-
// 'default': ['application/octet-stream']
|
|
37
|
-
// }
|
|
38
29
|
|
|
39
30
|
constructor () {
|
|
40
31
|
this.strictHeaders = false;
|
|
@@ -44,6 +35,7 @@ class SlowerRouter {
|
|
|
44
35
|
this.allowedMethods = clone(SlowerRouter.http_methods);
|
|
45
36
|
this.blockedMethodCallback = noop;
|
|
46
37
|
this.tls = { use: false, key: null, cert: null };
|
|
38
|
+
this.server = null;
|
|
47
39
|
}
|
|
48
40
|
|
|
49
41
|
enableStrictHeaders () {
|
|
@@ -372,17 +364,15 @@ class SlowerRouter {
|
|
|
372
364
|
let fallback = this.fallback;
|
|
373
365
|
let allowedMethods = this.allowedMethods;
|
|
374
366
|
let blockedMethodCallback = this.blockedMethodCallback;
|
|
375
|
-
|
|
376
|
-
let server;
|
|
377
367
|
|
|
378
368
|
if (this.tls.use && this.tls.cert && this.tls.key) {
|
|
379
|
-
server = https.createServer({ key:this.tls.key, cert: this.tls.cert }, mainServerHandler);
|
|
369
|
+
this.server = https.createServer({ key:this.tls.key, cert: this.tls.cert }, mainServerHandler);
|
|
380
370
|
|
|
381
371
|
} else {
|
|
382
|
-
server = http.createServer({}, mainServerHandler);
|
|
372
|
+
this.server = http.createServer({}, mainServerHandler);
|
|
383
373
|
}
|
|
384
374
|
|
|
385
|
-
function mainServerHandler (req, res) {
|
|
375
|
+
async function mainServerHandler (req, res) {
|
|
386
376
|
try {
|
|
387
377
|
// Sets local req.session object
|
|
388
378
|
setSocketLocals(req);
|
|
@@ -393,7 +383,8 @@ class SlowerRouter {
|
|
|
393
383
|
if (!!this.strictHeaders) setSocketSecurityHeaders(req);
|
|
394
384
|
// Runs all middlewares
|
|
395
385
|
for (let i = 0; i < middle.length; i++) {
|
|
396
|
-
middle[i](req, res);
|
|
386
|
+
const rr = middle[i](req, res);
|
|
387
|
+
if (isPromise(rr)) await rr;
|
|
397
388
|
if (res.writableEnded) return; // if res.end() is caller early in a middleware
|
|
398
389
|
}
|
|
399
390
|
// Only respond to allowed methods with callbacks, else, use the default empty response.
|
|
@@ -408,13 +399,15 @@ class SlowerRouter {
|
|
|
408
399
|
)
|
|
409
400
|
) {
|
|
410
401
|
i = routes.length;
|
|
411
|
-
route.callback(req, res);
|
|
402
|
+
const rr = route.callback(req, res);
|
|
403
|
+
if (isPromise(rr)) await rr;
|
|
412
404
|
// if (res.writableEnded) return; // if res.end() was called
|
|
413
405
|
// else res.end(); // if res.end() was not called
|
|
414
406
|
return;
|
|
415
407
|
}
|
|
416
408
|
}
|
|
417
|
-
fallback(req,res);
|
|
409
|
+
const rr = fallback(req,res);
|
|
410
|
+
if (isPromise(rr)) await rr;
|
|
418
411
|
if (!res.writableEnded) res.end();
|
|
419
412
|
} else {
|
|
420
413
|
blockedMethodCallback(req, res);
|
|
@@ -425,11 +418,16 @@ class SlowerRouter {
|
|
|
425
418
|
}
|
|
426
419
|
}
|
|
427
420
|
|
|
428
|
-
|
|
421
|
+
this.port = port;
|
|
422
|
+
this.host = host;
|
|
429
423
|
if (!host) host = undefined; // Turn falsy values into undefined, for default behaviour
|
|
430
|
-
server.listen(port, host);
|
|
424
|
+
this.server.listen(port, host, callback);
|
|
431
425
|
return this;
|
|
432
426
|
}
|
|
427
|
+
|
|
428
|
+
close = function (callback) {
|
|
429
|
+
this.server.close(callback);
|
|
430
|
+
}
|
|
433
431
|
}
|
|
434
432
|
|
|
435
433
|
const Slower = function () { return new SlowerRouter(); }
|
package/lib/utils.js
CHANGED
|
@@ -161,4 +161,10 @@ const toBool = [() => true, () => false];
|
|
|
161
161
|
|
|
162
162
|
const clone = (object) => JSON.parse(JSON.stringify(object));
|
|
163
163
|
|
|
164
|
-
|
|
164
|
+
const isPromise = obj => {
|
|
165
|
+
return obj !== null &&
|
|
166
|
+
(typeof obj === 'object' || typeof obj === 'function') &&
|
|
167
|
+
typeof obj.then === 'function';
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
module.exports = { clone, noop, slugify, isSparseEqual, toBool, last, renderDynamicHTML, setSocketLocals, setSocketSecurityHeaders, setResponseAssessors, isPromise };
|