1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.ExpressAdapter = void 0;
|
4 | const common_1 = require("@nestjs/common");
|
5 | const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
|
6 | const http_adapter_1 = require("@nestjs/core/adapters/http-adapter");
|
7 | const bodyParser = require("body-parser");
|
8 | const cors = require("cors");
|
9 | const express = require("express");
|
10 | const http = require("http");
|
11 | const https = require("https");
|
12 | class ExpressAdapter extends http_adapter_1.AbstractHttpAdapter {
|
13 | constructor(instance) {
|
14 | super(instance || express());
|
15 | }
|
16 | reply(response, body, statusCode) {
|
17 | if (statusCode) {
|
18 | response.status(statusCode);
|
19 | }
|
20 | if (shared_utils_1.isNil(body)) {
|
21 | return response.send();
|
22 | }
|
23 | if (body instanceof common_1.StreamableFile) {
|
24 | if (response.getHeader('Content-Type') === undefined) {
|
25 | response.setHeader('Content-Type', 'application/octet-stream');
|
26 | }
|
27 | return body.getStream().pipe(response);
|
28 | }
|
29 | return shared_utils_1.isObject(body) ? response.json(body) : response.send(String(body));
|
30 | }
|
31 | status(response, statusCode) {
|
32 | return response.status(statusCode);
|
33 | }
|
34 | render(response, view, options) {
|
35 | return response.render(view, options);
|
36 | }
|
37 | redirect(response, statusCode, url) {
|
38 | return response.redirect(statusCode, url);
|
39 | }
|
40 | setErrorHandler(handler, prefix) {
|
41 | return this.use(handler);
|
42 | }
|
43 | setNotFoundHandler(handler, prefix) {
|
44 | return this.use(handler);
|
45 | }
|
46 | setHeader(response, name, value) {
|
47 | return response.set(name, value);
|
48 | }
|
49 | listen(port, ...args) {
|
50 | return this.httpServer.listen(port, ...args);
|
51 | }
|
52 | close() {
|
53 | if (!this.httpServer) {
|
54 | return undefined;
|
55 | }
|
56 | return new Promise(resolve => this.httpServer.close(resolve));
|
57 | }
|
58 | set(...args) {
|
59 | return this.instance.set(...args);
|
60 | }
|
61 | enable(...args) {
|
62 | return this.instance.enable(...args);
|
63 | }
|
64 | disable(...args) {
|
65 | return this.instance.disable(...args);
|
66 | }
|
67 | engine(...args) {
|
68 | return this.instance.engine(...args);
|
69 | }
|
70 | useStaticAssets(path, options) {
|
71 | if (options && options.prefix) {
|
72 | return this.use(options.prefix, express.static(path, options));
|
73 | }
|
74 | return this.use(express.static(path, options));
|
75 | }
|
76 | setBaseViewsDir(path) {
|
77 | return this.set('views', path);
|
78 | }
|
79 | setViewEngine(engine) {
|
80 | return this.set('view engine', engine);
|
81 | }
|
82 | getRequestHostname(request) {
|
83 | return request.hostname;
|
84 | }
|
85 | getRequestMethod(request) {
|
86 | return request.method;
|
87 | }
|
88 | getRequestUrl(request) {
|
89 | return request.originalUrl;
|
90 | }
|
91 | enableCors(options) {
|
92 | return this.use(cors(options));
|
93 | }
|
94 | createMiddlewareFactory(requestMethod) {
|
95 | return this.instance.use.bind(this.instance);
|
96 | }
|
97 | initHttpServer(options) {
|
98 | const isHttpsEnabled = options && options.httpsOptions;
|
99 | if (isHttpsEnabled) {
|
100 | this.httpServer = https.createServer(options.httpsOptions, this.getInstance());
|
101 | return;
|
102 | }
|
103 | this.httpServer = http.createServer(this.getInstance());
|
104 | }
|
105 | registerParserMiddleware() {
|
106 | const parserMiddleware = {
|
107 | jsonParser: bodyParser.json(),
|
108 | urlencodedParser: bodyParser.urlencoded({ extended: true }),
|
109 | };
|
110 | Object.keys(parserMiddleware)
|
111 | .filter(parser => !this.isMiddlewareApplied(parser))
|
112 | .forEach(parserKey => this.use(parserMiddleware[parserKey]));
|
113 | }
|
114 | setLocal(key, value) {
|
115 | this.instance.locals[key] = value;
|
116 | return this;
|
117 | }
|
118 | getType() {
|
119 | return 'express';
|
120 | }
|
121 | isMiddlewareApplied(name) {
|
122 | const app = this.getInstance();
|
123 | return (!!app._router &&
|
124 | !!app._router.stack &&
|
125 | shared_utils_1.isFunction(app._router.stack.filter) &&
|
126 | app._router.stack.some((layer) => layer && layer.handle && layer.handle.name === name));
|
127 | }
|
128 | }
|
129 | exports.ExpressAdapter = ExpressAdapter;
|