@spinajs/http 2.0.25 → 2.0.44
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/config/http.js +1 -1
- package/lib/config/http.js.map +1 -1
- package/lib/controllers.d.ts +5 -5
- package/lib/controllers.js +28 -12
- package/lib/controllers.js.map +1 -1
- package/lib/decorators.d.ts +2 -2
- package/lib/decorators.js.map +1 -1
- package/lib/interfaces.d.ts +41 -8
- package/lib/interfaces.js +10 -4
- package/lib/interfaces.js.map +1 -1
- package/lib/response-methods/badRequest.d.ts +1 -1
- package/lib/response-methods/badRequest.js +1 -1
- package/lib/response-methods/badRequest.js.map +1 -1
- package/lib/response-methods/conflict.d.ts +1 -1
- package/lib/response-methods/conflict.js +1 -1
- package/lib/response-methods/conflict.js.map +1 -1
- package/lib/response-methods/cookieResponse.d.ts +1 -2
- package/lib/response-methods/cookieResponse.js +1 -1
- package/lib/response-methods/cookieResponse.js.map +1 -1
- package/lib/response-methods/created.d.ts +1 -1
- package/lib/response-methods/created.js +1 -1
- package/lib/response-methods/created.js.map +1 -1
- package/lib/response-methods/file.d.ts +12 -8
- package/lib/response-methods/file.js +85 -35
- package/lib/response-methods/file.js.map +1 -1
- package/lib/response-methods/forbidden.d.ts +1 -1
- package/lib/response-methods/forbidden.js +1 -1
- package/lib/response-methods/forbidden.js.map +1 -1
- package/lib/response-methods/noContent.d.ts +1 -1
- package/lib/response-methods/noContent.js +1 -1
- package/lib/response-methods/noContent.js.map +1 -1
- package/lib/response-methods/notAllowed.d.ts +1 -1
- package/lib/response-methods/notAllowed.js +1 -1
- package/lib/response-methods/notAllowed.js.map +1 -1
- package/lib/response-methods/notFound.d.ts +1 -1
- package/lib/response-methods/notFound.js +1 -1
- package/lib/response-methods/notFound.js.map +1 -1
- package/lib/response-methods/ok.d.ts +1 -1
- package/lib/response-methods/ok.js +1 -1
- package/lib/response-methods/ok.js.map +1 -1
- package/lib/response-methods/pug.d.ts +2 -3
- package/lib/response-methods/pug.js +4 -4
- package/lib/response-methods/pug.js.map +1 -1
- package/lib/response-methods/redirect.d.ts +1 -1
- package/lib/response-methods/redirect.js +2 -2
- package/lib/response-methods/redirect.js.map +1 -1
- package/lib/response-methods/serverError.d.ts +1 -1
- package/lib/response-methods/serverError.js +1 -1
- package/lib/response-methods/serverError.js.map +1 -1
- package/lib/response-methods/unauthorized.d.ts +1 -1
- package/lib/response-methods/unauthorized.js +1 -1
- package/lib/response-methods/unauthorized.js.map +1 -1
- package/lib/responses.d.ts +1 -7
- package/lib/responses.js +22 -88
- package/lib/responses.js.map +1 -1
- package/lib/route-args/FromDi.d.ts +3 -3
- package/lib/route-args/FromDi.js +2 -2
- package/lib/route-args/FromDi.js.map +1 -1
- package/lib/route-args/FromForm.d.ts +8 -1
- package/lib/route-args/FromForm.js +54 -58
- package/lib/route-args/FromForm.js.map +1 -1
- package/lib/server.d.ts +4 -3
- package/lib/server.js +5 -2
- package/lib/server.js.map +1 -1
- package/package.json +15 -12
|
@@ -22,67 +22,117 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
-
};
|
|
28
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.JsonFileResponse = exports.FileResponse = void 0;
|
|
26
|
+
exports.JsonFileResponse = exports.FileResponse = exports.ZipResponse = void 0;
|
|
27
|
+
const di_1 = require("@spinajs/di");
|
|
30
28
|
const exceptions_1 = require("@spinajs/exceptions");
|
|
31
|
-
const fs = __importStar(require("fs"));
|
|
32
29
|
const _ = __importStar(require("lodash"));
|
|
33
30
|
const mime_1 = require("mime");
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
class FileResponse extends responses_1.Response {
|
|
31
|
+
const interfaces_1 = require("./../interfaces");
|
|
32
|
+
class ZipResponse extends interfaces_1.Response {
|
|
37
33
|
/**
|
|
38
|
-
* Sends
|
|
34
|
+
* Sends zipped to client at given path & filename. If file exists
|
|
39
35
|
* it will send file with 200 OK, if not exists 404 NOT FOUND
|
|
40
|
-
* @param path - server full path to file
|
|
41
|
-
* @param filename - real filename send to client
|
|
42
|
-
* @param mimeType - optional mimetype. If not set, server will try to guess.
|
|
43
36
|
*/
|
|
44
|
-
constructor(
|
|
37
|
+
constructor(Options) {
|
|
38
|
+
var _a;
|
|
45
39
|
super(null);
|
|
46
|
-
this.
|
|
47
|
-
this.
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
40
|
+
this.Options = Options;
|
|
41
|
+
this.Options.mimeType = (_a = Options.mimeType) !== null && _a !== void 0 ? _a : (0, mime_1.getType)(Options.filename);
|
|
42
|
+
}
|
|
43
|
+
async execute(_req, res) {
|
|
44
|
+
const provider = await di_1.DI.resolve('__file_provider__', [this.Options.provider]);
|
|
45
|
+
const exists = await provider.exists(this.Options.path);
|
|
46
|
+
if (!exists) {
|
|
47
|
+
throw new exceptions_1.ResourceNotFound(`File ${this.Options.path} not exists`);
|
|
51
48
|
}
|
|
49
|
+
const file = (await provider.zip(this.Options.path)).asFilePath();
|
|
50
|
+
return new Promise((resolve, reject) => {
|
|
51
|
+
res.download(file, this.Options.filename, (err) => {
|
|
52
|
+
provider
|
|
53
|
+
.unlink(this.Options.path, true)
|
|
54
|
+
.then(() => {
|
|
55
|
+
return provider.unlink(file);
|
|
56
|
+
})
|
|
57
|
+
.then(() => {
|
|
58
|
+
if (!_.isNil(err)) {
|
|
59
|
+
reject(err);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
resolve();
|
|
63
|
+
}
|
|
64
|
+
})
|
|
65
|
+
.catch((err) => {
|
|
66
|
+
reject(err);
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.ZipResponse = ZipResponse;
|
|
73
|
+
class FileResponse extends interfaces_1.Response {
|
|
74
|
+
/**
|
|
75
|
+
* Sends file to client at given path & filename. If file exists
|
|
76
|
+
* it will send file with 200 OK, if not exists 404 NOT FOUND
|
|
77
|
+
*/
|
|
78
|
+
constructor(Options) {
|
|
79
|
+
var _a;
|
|
80
|
+
super(null);
|
|
81
|
+
this.Options = Options;
|
|
82
|
+
this.Options.mimeType = (_a = Options.mimeType) !== null && _a !== void 0 ? _a : (0, mime_1.getType)(Options.filename);
|
|
52
83
|
}
|
|
53
84
|
async execute(_req, res) {
|
|
85
|
+
const provider = await di_1.DI.resolve('__file_provider__', [this.Options.provider]);
|
|
86
|
+
const exists = await provider.exists(this.Options.path);
|
|
87
|
+
if (!exists) {
|
|
88
|
+
throw new exceptions_1.ResourceNotFound(`File ${this.Options.path} not exists`);
|
|
89
|
+
}
|
|
90
|
+
const file = await provider.download(this.Options.path);
|
|
54
91
|
return new Promise((resolve, reject) => {
|
|
55
|
-
res.download(
|
|
56
|
-
|
|
92
|
+
res.download(file, this.Options.filename, (err) => {
|
|
93
|
+
provider
|
|
94
|
+
.unlink(this.Options.path, true)
|
|
95
|
+
.then(() => {
|
|
96
|
+
if (!_.isNil(err)) {
|
|
97
|
+
reject(err);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
resolve();
|
|
101
|
+
}
|
|
102
|
+
})
|
|
103
|
+
.catch((err) => {
|
|
57
104
|
reject(err);
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
resolve();
|
|
61
|
-
}
|
|
105
|
+
});
|
|
62
106
|
});
|
|
63
107
|
});
|
|
64
108
|
}
|
|
65
109
|
}
|
|
66
110
|
exports.FileResponse = FileResponse;
|
|
67
|
-
class JsonFileResponse extends
|
|
111
|
+
class JsonFileResponse extends interfaces_1.Response {
|
|
68
112
|
constructor(data, filename) {
|
|
69
113
|
super(null);
|
|
70
114
|
this.data = data;
|
|
71
115
|
this.filename = filename;
|
|
72
116
|
}
|
|
73
117
|
async execute(_req, res) {
|
|
74
|
-
const
|
|
75
|
-
const
|
|
76
|
-
|
|
118
|
+
const provider = await di_1.DI.resolve('__file_provider__', ['fs-temp']);
|
|
119
|
+
const tmpPath = provider.tmppath();
|
|
120
|
+
provider.write(tmpPath, JSON.stringify(this.data));
|
|
77
121
|
return new Promise((resolve, reject) => {
|
|
78
|
-
res.download(
|
|
79
|
-
|
|
122
|
+
res.download(tmpPath, this.filename, (err) => {
|
|
123
|
+
provider
|
|
124
|
+
.unlink(tmpPath)
|
|
125
|
+
.then(() => {
|
|
126
|
+
if (err) {
|
|
127
|
+
reject(err);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
resolve();
|
|
131
|
+
}
|
|
132
|
+
})
|
|
133
|
+
.catch((err) => {
|
|
80
134
|
reject(err);
|
|
81
|
-
}
|
|
82
|
-
else {
|
|
83
|
-
resolve();
|
|
84
|
-
}
|
|
85
|
-
fs.unlink(tempPath, null);
|
|
135
|
+
});
|
|
86
136
|
});
|
|
87
137
|
});
|
|
88
138
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/response-methods/file.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/response-methods/file.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forbidden.js","sourceRoot":"","sources":["../../src/response-methods/forbidden.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"forbidden.js","sourceRoot":"","sources":["../../src/response-methods/forbidden.ts"],"names":[],"mappings":";;;AACA,8CAA2D;AAC3D,4CAA4C;AAE5C;;;;GAIG;AAEH,MAAa,SAAU,SAAQ,qBAAQ;IACrC,YAAY,IAAS;QACnB,KAAK,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,IAAqB,EAAE,IAAsB;QAChE,OAAO,MAAM,IAAA,wBAAY,EAAC,IAAI,CAAC,YAAY,EAAE,6BAAgB,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;IAClG,CAAC;CACF;AARD,8BAQC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"noContent.js","sourceRoot":"","sources":["../../src/response-methods/noContent.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"noContent.js","sourceRoot":"","sources":["../../src/response-methods/noContent.ts"],"names":[],"mappings":";;;AACA,8CAA2D;AAC3D,4CAA4C;AAE5C;;;;GAIG;AACH,MAAa,SAAU,SAAQ,qBAAQ;IACrC,YAAY,IAAS;QACnB,KAAK,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,IAAqB,EAAE,IAAsB;QAChE,OAAO,MAAM,IAAA,wBAAY,EAAC,IAAI,CAAC,YAAY,EAAE,6BAAgB,CAAC,UAAU,EAAE,qBAAqB,CAAC,CAAC;IACnG,CAAC;CACF;AARD,8BAQC"}
|
|
@@ -8,7 +8,7 @@ const responses_1 = require("../responses");
|
|
|
8
8
|
* Returns HTTP 403 FORBIDDEN ERROR
|
|
9
9
|
* @param err - error to send
|
|
10
10
|
*/
|
|
11
|
-
class NotAllowed extends
|
|
11
|
+
class NotAllowed extends interfaces_1.Response {
|
|
12
12
|
constructor(data) {
|
|
13
13
|
super(data);
|
|
14
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notAllowed.js","sourceRoot":"","sources":["../../src/response-methods/notAllowed.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"notAllowed.js","sourceRoot":"","sources":["../../src/response-methods/notAllowed.ts"],"names":[],"mappings":";;;AACA,8CAA2D;AAC3D,4CAA4C;AAE5C;;;;GAIG;AAEH,MAAa,UAAW,SAAQ,qBAAQ;IACtC,YAAY,IAAS;QACnB,KAAK,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,IAAqB,EAAE,IAAsB;QAChE,OAAO,MAAM,IAAA,wBAAY,EAAC,IAAI,CAAC,YAAY,EAAE,6BAAgB,CAAC,WAAW,EAAE,uBAAuB,CAAC,CAAC;IACtG,CAAC;CACF;AARD,gCAQC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notFound.js","sourceRoot":"","sources":["../../src/response-methods/notFound.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"notFound.js","sourceRoot":"","sources":["../../src/response-methods/notFound.ts"],"names":[],"mappings":";;;AACA,8CAA2D;AAC3D,4CAA4C;AAE5C;;;;GAIG;AACH,MAAa,QAAS,SAAQ,qBAAQ;IACpC,YAAY,IAAU;QACpB,KAAK,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,IAAqB,EAAE,IAAsB;QAChE,OAAO,MAAM,IAAA,wBAAY,EAAC,IAAI,CAAC,YAAY,EAAE,6BAAgB,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;IACjG,CAAC;CACF;AARD,4BAQC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ok.js","sourceRoot":"","sources":["../../src/response-methods/ok.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"ok.js","sourceRoot":"","sources":["../../src/response-methods/ok.ts"],"names":[],"mappings":";;;AACA,8CAA2D;AAC3D,4CAA4C;AAE5C;;;;GAIG;AACH,MAAa,EAAG,SAAQ,qBAAQ;IAC9B,YAAY,IAAU;QACpB,KAAK,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,IAAqB,EAAE,IAAsB;QAChE,OAAO,MAAM,IAAA,wBAAY,EAAC,IAAI,CAAC,YAAY,EAAE,6BAAgB,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;IACpF,CAAC;CACF;AARD,gBAQC"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import * as express from 'express';
|
|
2
|
-
import { HTTP_STATUS_CODE } from '../interfaces';
|
|
3
|
-
import { Response } from '../responses';
|
|
2
|
+
import { HTTP_STATUS_CODE, Response } from '../interfaces';
|
|
4
3
|
/**
|
|
5
4
|
* HTML resposne with HTML from pug file
|
|
6
5
|
*/
|
|
7
|
-
export declare class
|
|
6
|
+
export declare class TemplateResponse extends Response {
|
|
8
7
|
protected file: string;
|
|
9
8
|
protected status: HTTP_STATUS_CODE;
|
|
10
9
|
constructor(file: string, model: any, status?: HTTP_STATUS_CODE);
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.TemplateResponse = void 0;
|
|
4
4
|
const interfaces_1 = require("../interfaces");
|
|
5
5
|
const responses_1 = require("../responses");
|
|
6
6
|
/**
|
|
7
7
|
* HTML resposne with HTML from pug file
|
|
8
8
|
*/
|
|
9
|
-
class
|
|
9
|
+
class TemplateResponse extends interfaces_1.Response {
|
|
10
10
|
constructor(file, model, status) {
|
|
11
11
|
super(model);
|
|
12
12
|
this.status = null;
|
|
@@ -14,8 +14,8 @@ class PugResponse extends responses_1.Response {
|
|
|
14
14
|
this.status = status;
|
|
15
15
|
}
|
|
16
16
|
async execute(_req, _res) {
|
|
17
|
-
return await (0, responses_1.
|
|
17
|
+
return await (0, responses_1.htmlResponse)(this.file, this.responseData, this.status ? this.status : interfaces_1.HTTP_STATUS_CODE.OK);
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
-
exports.
|
|
20
|
+
exports.TemplateResponse = TemplateResponse;
|
|
21
21
|
//# sourceMappingURL=pug.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pug.js","sourceRoot":"","sources":["../../src/response-methods/pug.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"pug.js","sourceRoot":"","sources":["../../src/response-methods/pug.ts"],"names":[],"mappings":";;;AACA,8CAA2D;AAC3D,4CAA4C;AAE5C;;GAEG;AACH,MAAa,gBAAiB,SAAQ,qBAAQ;IAI5C,YAAY,IAAY,EAAE,KAAU,EAAE,MAAyB;QAC7D,KAAK,CAAC,KAAK,CAAC,CAAC;QAHL,WAAM,GAAqB,IAAI,CAAC;QAKxC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,IAAqB,EAAE,IAAsB;QAChE,OAAO,MAAM,IAAA,wBAAY,EAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,6BAAgB,CAAC,EAAE,CAAC,CAAC;IAC3G,CAAC;CACF;AAdD,4CAcC"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Redirect = void 0;
|
|
4
|
-
const
|
|
4
|
+
const interfaces_1 = require("../interfaces");
|
|
5
5
|
/**
|
|
6
6
|
* Redirects to another route ( simple alias for request.redirect for api consistency)
|
|
7
7
|
*
|
|
8
8
|
* @param url - url path to another location
|
|
9
9
|
*/
|
|
10
|
-
class Redirect extends
|
|
10
|
+
class Redirect extends interfaces_1.Response {
|
|
11
11
|
constructor(url) {
|
|
12
12
|
super(null);
|
|
13
13
|
this.url = url;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redirect.js","sourceRoot":"","sources":["../../src/response-methods/redirect.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"redirect.js","sourceRoot":"","sources":["../../src/response-methods/redirect.ts"],"names":[],"mappings":";;;AACA,8CAAyC;AAEzC;;;;GAIG;AACH,MAAa,QAAS,SAAQ,qBAAQ;IAGpC,YAAY,GAAQ;QAClB,KAAK,CAAC,IAAI,CAAC,CAAC;QAEZ,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,IAAqB,EAAE,GAAqB;QAC/D,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;CACF;AAZD,4BAYC"}
|
|
@@ -8,7 +8,7 @@ const responses_1 = require("../responses");
|
|
|
8
8
|
* Returns HTTP 500 INTERNAL SERVER ERROR
|
|
9
9
|
* @param err - error to send
|
|
10
10
|
*/
|
|
11
|
-
class ServerError extends
|
|
11
|
+
class ServerError extends interfaces_1.Response {
|
|
12
12
|
constructor(data) {
|
|
13
13
|
super(data);
|
|
14
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serverError.js","sourceRoot":"","sources":["../../src/response-methods/serverError.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"serverError.js","sourceRoot":"","sources":["../../src/response-methods/serverError.ts"],"names":[],"mappings":";;;AACA,8CAA2D;AAC3D,4CAA4C;AAE5C;;;;GAIG;AAEH,MAAa,WAAY,SAAQ,qBAAQ;IACvC,YAAY,IAAS;QACnB,KAAK,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,IAAqB,EAAE,IAAsB;QAChE,OAAO,MAAM,IAAA,wBAAY,EAAC,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,EAAE,6BAAgB,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAC;IACpH,CAAC;CACF;AARD,kCAQC"}
|
|
@@ -8,7 +8,7 @@ const responses_1 = require("../responses");
|
|
|
8
8
|
* Returns HTTP 401 UNAHTORIZED response with json content
|
|
9
9
|
* @param data - data to send
|
|
10
10
|
*/
|
|
11
|
-
class Unauthorized extends
|
|
11
|
+
class Unauthorized extends interfaces_1.Response {
|
|
12
12
|
constructor(data) {
|
|
13
13
|
super(data);
|
|
14
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unauthorized.js","sourceRoot":"","sources":["../../src/response-methods/unauthorized.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"unauthorized.js","sourceRoot":"","sources":["../../src/response-methods/unauthorized.ts"],"names":[],"mappings":";;;AACA,8CAA2D;AAC3D,4CAA4C;AAE5C;;;;GAIG;AAEH,MAAa,YAAa,SAAQ,qBAAQ;IACxC,YAAY,IAAS;QACnB,KAAK,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,IAAqB,EAAE,IAAsB;QAChE,OAAO,MAAM,IAAA,wBAAY,EAAC,IAAI,CAAC,YAAY,EAAE,6BAAgB,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;IACxG,CAAC;CACF;AARD,oCAQC"}
|
package/lib/responses.d.ts
CHANGED
|
@@ -1,11 +1,5 @@
|
|
|
1
1
|
import * as express from 'express';
|
|
2
2
|
import { HTTP_STATUS_CODE } from './interfaces';
|
|
3
|
-
export declare type ResponseFunction = (req: express.Request, res: express.Response) => void;
|
|
4
|
-
export declare abstract class Response {
|
|
5
|
-
protected responseData: any;
|
|
6
|
-
constructor(responseData: any);
|
|
7
|
-
abstract execute(req: express.Request, res: express.Response, next?: express.NextFunction): Promise<ResponseFunction | void>;
|
|
8
|
-
}
|
|
9
3
|
/**
|
|
10
4
|
* Sends data & sets proper header as json
|
|
11
5
|
*
|
|
@@ -27,7 +21,7 @@ export declare function textResponse(model: any, status?: HTTP_STATUS_CODE): (_r
|
|
|
27
21
|
* @param model - data passed to template
|
|
28
22
|
* @param status - optional status code
|
|
29
23
|
*/
|
|
30
|
-
export declare function
|
|
24
|
+
export declare function htmlResponse(file: string, model: any, status?: HTTP_STATUS_CODE): (req: express.Request, res: express.Response) => void;
|
|
31
25
|
/**
|
|
32
26
|
* Default response handling. Checks `Accept` header & matches proper response
|
|
33
27
|
* For now its supports html & json responses
|
package/lib/responses.js
CHANGED
|
@@ -23,24 +23,13 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.httpResponse = exports.
|
|
26
|
+
exports.httpResponse = exports.htmlResponse = exports.textResponse = exports.jsonResponse = void 0;
|
|
27
27
|
const interfaces_1 = require("./interfaces");
|
|
28
28
|
const configuration_1 = require("@spinajs/configuration");
|
|
29
29
|
const di_1 = require("@spinajs/di");
|
|
30
30
|
const log_1 = require("@spinajs/log");
|
|
31
|
-
const pugTemplate = __importStar(require("pug"));
|
|
32
|
-
const path_1 = require("path");
|
|
33
|
-
const fs = __importStar(require("fs"));
|
|
34
|
-
const _ = __importStar(require("lodash"));
|
|
35
|
-
const exceptions_1 = require("@spinajs/exceptions");
|
|
36
31
|
const randomstring = __importStar(require("randomstring"));
|
|
37
|
-
const
|
|
38
|
-
class Response {
|
|
39
|
-
constructor(responseData) {
|
|
40
|
-
this.responseData = responseData;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
exports.Response = Response;
|
|
32
|
+
const templates_1 = require("@spinajs/templates");
|
|
44
33
|
/**
|
|
45
34
|
* Sends data & sets proper header as json
|
|
46
35
|
*
|
|
@@ -75,38 +64,6 @@ function textResponse(model, status) {
|
|
|
75
64
|
};
|
|
76
65
|
}
|
|
77
66
|
exports.textResponse = textResponse;
|
|
78
|
-
const __translate = (lang) => {
|
|
79
|
-
return (text, ...args) => {
|
|
80
|
-
const intl = di_1.DI.get(intl_1.Intl);
|
|
81
|
-
if (typeof text === 'string') {
|
|
82
|
-
return intl.__({
|
|
83
|
-
phrase: text,
|
|
84
|
-
locale: lang,
|
|
85
|
-
}, ...args);
|
|
86
|
-
}
|
|
87
|
-
return intl.__(text, ...args);
|
|
88
|
-
};
|
|
89
|
-
};
|
|
90
|
-
const __translateNumber = (lang) => {
|
|
91
|
-
return (text, count) => {
|
|
92
|
-
const intl = di_1.DI.get(intl_1.Intl);
|
|
93
|
-
if (typeof text === 'string') {
|
|
94
|
-
return intl.__n({
|
|
95
|
-
phrase: text,
|
|
96
|
-
locale: lang,
|
|
97
|
-
}, count);
|
|
98
|
-
}
|
|
99
|
-
return intl.__n(text, count);
|
|
100
|
-
};
|
|
101
|
-
};
|
|
102
|
-
const __translateL = (text) => {
|
|
103
|
-
const intl = di_1.DI.get(intl_1.Intl);
|
|
104
|
-
return intl.__l(text);
|
|
105
|
-
};
|
|
106
|
-
const __translateH = (text) => {
|
|
107
|
-
const intl = di_1.DI.get(intl_1.Intl);
|
|
108
|
-
return intl.__h(text);
|
|
109
|
-
};
|
|
110
67
|
/**
|
|
111
68
|
* Sends html response & sets proper header. If template is not avaible, handles proper error rendering.
|
|
112
69
|
*
|
|
@@ -114,7 +71,7 @@ const __translateH = (text) => {
|
|
|
114
71
|
* @param model - data passed to template
|
|
115
72
|
* @param status - optional status code
|
|
116
73
|
*/
|
|
117
|
-
function
|
|
74
|
+
function htmlResponse(file, model, status) {
|
|
118
75
|
const cfg = di_1.DI.get(configuration_1.Configuration);
|
|
119
76
|
return (req, res) => {
|
|
120
77
|
if (!req.accepts('html')) {
|
|
@@ -127,52 +84,29 @@ function pugResponse(file, model, status) {
|
|
|
127
84
|
return;
|
|
128
85
|
}
|
|
129
86
|
res.set('Content-Type', 'text/html');
|
|
130
|
-
|
|
131
|
-
try {
|
|
132
|
-
_render(file, model, status);
|
|
133
|
-
}
|
|
134
|
-
catch (err) {
|
|
135
|
-
const log = di_1.DI.resolve(log_1.Log, ['http']);
|
|
136
|
-
log.warn(`Cannot render pug file ${file}, error: ${err.message}:${err.stack}`, err);
|
|
137
|
-
// try to render server error response
|
|
138
|
-
_render('responses/serverError.pug', { error: err }, interfaces_1.HTTP_STATUS_CODE.INTERNAL_ERROR);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
catch (err) {
|
|
87
|
+
_render(file, model, status).catch((err) => {
|
|
142
88
|
const log = di_1.DI.resolve(log_1.Log, ['http']);
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
89
|
+
log.warn(`Cannot render html file ${file}, error: ${err.message}:${err.stack}`, err);
|
|
90
|
+
// try to render server error response
|
|
91
|
+
_render('responses/serverError.pug', { error: err }, interfaces_1.HTTP_STATUS_CODE.INTERNAL_ERROR).catch((err2) => {
|
|
92
|
+
const log = di_1.DI.resolve(log_1.Log, ['http']);
|
|
93
|
+
// final fallback rendering error fails, we render embedded html error page
|
|
94
|
+
const ticketNo = randomstring.generate(7);
|
|
95
|
+
log.warn(`Cannot render pug file error: ${err2.message}, ticket: ${ticketNo}`, err);
|
|
96
|
+
res.status(interfaces_1.HTTP_STATUS_CODE.INTERNAL_ERROR);
|
|
97
|
+
res.send(cfg.get('http.FatalTemplate').replace('{ticket}', ticketNo));
|
|
98
|
+
});
|
|
99
|
+
});
|
|
149
100
|
function _render(f, m, c) {
|
|
150
|
-
const
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
__n: __translateNumber(language),
|
|
156
|
-
__l: __translateL,
|
|
157
|
-
__h: __translateH,
|
|
158
|
-
}));
|
|
159
|
-
res.status(c ? c : interfaces_1.HTTP_STATUS_CODE.OK);
|
|
160
|
-
res.send(content);
|
|
161
|
-
}
|
|
162
|
-
function getView(viewFile) {
|
|
163
|
-
const views = cfg
|
|
164
|
-
.get('system.dirs.views')
|
|
165
|
-
.map((p) => (0, path_1.normalize)((0, path_1.join)(p, viewFile)))
|
|
166
|
-
.filter((f) => fs.existsSync(f));
|
|
167
|
-
if (_.isEmpty(views)) {
|
|
168
|
-
throw new exceptions_1.IOFail(`View file ${viewFile} not exists.`);
|
|
169
|
-
}
|
|
170
|
-
// return last merged path, eg. if application have own view files (override standard views)
|
|
171
|
-
return views[views.length - 1];
|
|
101
|
+
const templateEngine = di_1.DI.get(templates_1.Templates);
|
|
102
|
+
return templateEngine.render(f, m).then((content) => {
|
|
103
|
+
res.status(c ? c : interfaces_1.HTTP_STATUS_CODE.OK);
|
|
104
|
+
res.send(content);
|
|
105
|
+
});
|
|
172
106
|
}
|
|
173
107
|
};
|
|
174
108
|
}
|
|
175
|
-
exports.
|
|
109
|
+
exports.htmlResponse = htmlResponse;
|
|
176
110
|
/**
|
|
177
111
|
* Default response handling. Checks `Accept` header & matches proper response
|
|
178
112
|
* For now its supports html & json responses
|
|
@@ -188,7 +122,7 @@ function httpResponse(model, code, template) {
|
|
|
188
122
|
const transformers = di_1.DI.resolve(Array.ofType(interfaces_1.DataTransformer));
|
|
189
123
|
return (req, res) => {
|
|
190
124
|
if (req.accepts('html') && (acceptedHeaders & interfaces_1.HttpAcceptHeaders.HTML) === interfaces_1.HttpAcceptHeaders.HTML) {
|
|
191
|
-
|
|
125
|
+
htmlResponse(`${template}.pug`, model, code)(req, res);
|
|
192
126
|
}
|
|
193
127
|
else if (req.accepts('json') && (acceptedHeaders & interfaces_1.HttpAcceptHeaders.JSON) === interfaces_1.HttpAcceptHeaders.JSON) {
|
|
194
128
|
if (req.headers['x-data-transform']) {
|
package/lib/responses.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"responses.js","sourceRoot":"","sources":["../src/responses.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,6CAAoF;AACpF,0DAAuD;AACvD,oCAAiC;AACjC,sCAAyC;
|
|
1
|
+
{"version":3,"file":"responses.js","sourceRoot":"","sources":["../src/responses.ts"],"names":[],"mappings":"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"}
|