1 | "use strict";
|
2 | var __importStar = (this && this.__importStar) || function (mod) {
|
3 | if (mod && mod.__esModule) return mod;
|
4 | var result = {};
|
5 | if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
6 | result["default"] = mod;
|
7 | return result;
|
8 | };
|
9 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
10 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
11 | };
|
12 | Object.defineProperty(exports, "__esModule", { value: true });
|
13 | const akala = __importStar(require("@akala/core"));
|
14 | const router = __importStar(require("./router"));
|
15 | const stream = __importStar(require("stream"));
|
16 | const send_1 = __importDefault(require("send"));
|
17 | var log = akala.log('akala:master');
|
18 | var httpRouter = router.HttpRouter;
|
19 | exports.Router = httpRouter;
|
20 | function serveStatic(path, options) {
|
21 | if (!options)
|
22 | options = {};
|
23 | if (typeof (options.fallthrough) == 'undefined')
|
24 | options.fallthrough = true;
|
25 | return function (req, res, ...next) {
|
26 | var sendstr = send_1.default(req, path || req.url, options);
|
27 | sendstr.on('error', function (error) {
|
28 | if (error && error.code == "ENOENT")
|
29 | if (options.fallthrough)
|
30 | next[next.length - 1]();
|
31 | else
|
32 | res.status(404).end();
|
33 | else
|
34 | next[next.length - 1](error);
|
35 | });
|
36 | sendstr.pipe(res);
|
37 | };
|
38 | }
|
39 | exports.serveStatic = serveStatic;
|
40 | function expressWrap(handler) {
|
41 | return function (req, response, ...rest) {
|
42 | handler(req, response, rest[rest.length - 1]);
|
43 | };
|
44 | }
|
45 | exports.expressWrap = expressWrap;
|
46 | function expressWrapError(handler) {
|
47 | return function (error, req, response, ...rest) {
|
48 | handler(error, req, response, rest[rest.length - 1]);
|
49 | };
|
50 | }
|
51 | exports.expressWrapError = expressWrapError;
|
52 | function translateRequest(req) {
|
53 | return {
|
54 | url: req.url,
|
55 | headers: req.headers,
|
56 | httpVersion: req.httpVersion,
|
57 | httpVersionMajor: req.httpVersionMajor,
|
58 | httpVersionMinor: req.httpVersionMinor,
|
59 | ip: req.ip,
|
60 | method: req.method,
|
61 | params: req.params,
|
62 | path: req.path,
|
63 | protocol: req.protocol,
|
64 | query: req.query,
|
65 | rawHeaders: req.rawHeaders,
|
66 | rawTrailers: req.rawTrailers,
|
67 | statusCode: req.statusCode,
|
68 | statusMessage: req.statusMessage,
|
69 | trailers: req.trailers,
|
70 | body: req['body'],
|
71 | user: req['user']
|
72 | };
|
73 | }
|
74 | exports.translateRequest = translateRequest;
|
75 | function handleResponse(res, locationReplacer, defaultStatus) {
|
76 | return function (response) {
|
77 | var status = response.statusCode || defaultStatus;
|
78 | if (response.headers)
|
79 | Object.keys(response.headers).forEach(function (header) {
|
80 | if (header.toLowerCase() == 'location' && locationReplacer != null)
|
81 | response.headers[header] = locationReplacer(response.headers[header]);
|
82 | res.setHeader(header, response.headers[header]);
|
83 | });
|
84 | res.writeHead(status, response.statusMessage, response.headers);
|
85 | if (response instanceof stream.Readable)
|
86 | response.pipe(res);
|
87 | else {
|
88 | if (Buffer.isBuffer(response.data)) {
|
89 | log('sending buffer');
|
90 | res.write(response.data);
|
91 | }
|
92 | else if (Array.isArray(response.data)) {
|
93 | log('sending array');
|
94 | response.data.forEach(function (chunk) {
|
95 | res.write(chunk);
|
96 | });
|
97 | }
|
98 | else {
|
99 | log('sending object');
|
100 | if (typeof (response.data) !== 'string' && typeof response.data != 'number' && typeof (response.data) !== 'undefined')
|
101 | res.write(JSON.stringify(response.data));
|
102 | else if (typeof (response.data) != 'undefined')
|
103 | res.write(response.data);
|
104 | }
|
105 | res.end();
|
106 | }
|
107 | };
|
108 | }
|
109 | exports.handleResponse = handleResponse;
|
110 |
|
\ | No newline at end of file |