@bepalo/spine 2.8.21 → 3.10.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/dist/auth-middlewares.d.ts +6 -2
- package/dist/auth-middlewares.d.ts.map +1 -1
- package/dist/auth-middlewares.js +20 -7
- package/dist/auth-middlewares.js.map +1 -1
- package/dist/cjs/auth-middlewares.d.ts +6 -2
- package/dist/cjs/auth-middlewares.d.ts.map +1 -1
- package/dist/cjs/auth-middlewares.js +20 -7
- package/dist/cjs/auth-middlewares.js.map +1 -1
- package/dist/cjs/generator.js.map +1 -1
- package/dist/cjs/helpers.d.ts +14 -2
- package/dist/cjs/helpers.d.ts.map +1 -1
- package/dist/cjs/helpers.js +31 -3
- package/dist/cjs/helpers.js.map +1 -1
- package/dist/cjs/middlewares.d.ts +116 -6
- package/dist/cjs/middlewares.d.ts.map +1 -1
- package/dist/cjs/middlewares.js +291 -35
- package/dist/cjs/middlewares.js.map +1 -1
- package/dist/cjs/router.d.ts +51 -52
- package/dist/cjs/router.d.ts.map +1 -1
- package/dist/cjs/router.js +238 -127
- package/dist/cjs/router.js.map +1 -1
- package/dist/cjs/types.d.ts +100 -17
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/types.js +1 -0
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils.d.ts +2 -0
- package/dist/cjs/utils.d.ts.map +1 -1
- package/dist/cjs/utils.js +18 -1
- package/dist/cjs/utils.js.map +1 -1
- package/dist/generator.js.map +1 -1
- package/dist/helpers.d.ts +14 -2
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +31 -3
- package/dist/helpers.js.map +1 -1
- package/dist/middlewares.d.ts +116 -6
- package/dist/middlewares.d.ts.map +1 -1
- package/dist/middlewares.js +291 -35
- package/dist/middlewares.js.map +1 -1
- package/dist/router.d.ts +51 -52
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +238 -127
- package/dist/router.js.map +1 -1
- package/dist/types.d.ts +100 -17
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/dist/utils.d.ts +2 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +18 -1
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
package/dist/cjs/middlewares.js
CHANGED
|
@@ -10,11 +10,237 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
});
|
|
11
11
|
};
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.validate = exports.cors = exports.limitRate = exports.securityHeaders = exports.forceHttps = void 0;
|
|
13
|
+
exports.validate = exports.cors = exports.limitRate = exports.securityHeaders = exports.forceHttps = exports.logRequestsWithColor = exports.logRequests = exports.COLORS = void 0;
|
|
14
14
|
const helpers_ts_1 = require("./helpers.js");
|
|
15
15
|
const parsers_ts_1 = require("./parsers.js");
|
|
16
16
|
const status_ts_1 = require("./status.js");
|
|
17
17
|
const types_ts_1 = require("./types.js");
|
|
18
|
+
const utils_ts_1 = require("./utils.js");
|
|
19
|
+
exports.COLORS = {
|
|
20
|
+
reset: "\x1b[0m",
|
|
21
|
+
dim: "\x1b[2m",
|
|
22
|
+
bold: "\x1b[1m",
|
|
23
|
+
black: "\x1b[30m",
|
|
24
|
+
red: "\x1b[31m",
|
|
25
|
+
green: "\x1b[32m",
|
|
26
|
+
yellow: "\x1b[33m",
|
|
27
|
+
blue: "\x1b[34m",
|
|
28
|
+
magenta: "\x1b[35m",
|
|
29
|
+
cyan: "\x1b[36m",
|
|
30
|
+
white: "\x1b[37m",
|
|
31
|
+
method: {
|
|
32
|
+
HEAD: "\x1b[36m", // cyan
|
|
33
|
+
GET: "\x1b[36m",
|
|
34
|
+
QUERY: "\x1b[34m", // blue
|
|
35
|
+
POST: "\x1b[32m", // green
|
|
36
|
+
PUT: "\x1b[33m", // yellow
|
|
37
|
+
PATCH: "\x1b[33m",
|
|
38
|
+
DELETE: "\x1b[31m", // red
|
|
39
|
+
OPTIONS: "\x1b[35m", // magenta
|
|
40
|
+
TRACE: "\x1b[35m",
|
|
41
|
+
CONNECT: "\x1b[35m",
|
|
42
|
+
},
|
|
43
|
+
status: (status) => {
|
|
44
|
+
if (status >= 500)
|
|
45
|
+
return "\x1b[31m"; // red
|
|
46
|
+
if (status >= 400)
|
|
47
|
+
return "\x1b[33m"; // yellow
|
|
48
|
+
if (status >= 300)
|
|
49
|
+
return "\x1b[36m"; // cyan
|
|
50
|
+
return "\x1b[32m"; // green
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Log requests with no color
|
|
55
|
+
*
|
|
56
|
+
* @param options Log requests options
|
|
57
|
+
*/
|
|
58
|
+
const logRequests = (options) => {
|
|
59
|
+
const { logger = console.log, enable, enclosure, indent, pad, } = options !== null && options !== void 0 ? options : {};
|
|
60
|
+
const { requestTime: enReqTime = true, duration: enDur = true, status: enStatus = "status", search: enSearch = "multiline", } = enable !== null && enable !== void 0 ? enable : {};
|
|
61
|
+
const { requestTime: encReqTime = ["", " "], duration: encDur = ["[", "]"], status: encStatus = ["(", ")"], } = enclosure !== null && enclosure !== void 0 ? enclosure : {};
|
|
62
|
+
const [encReqTime0, encReqTime1] = encReqTime;
|
|
63
|
+
const [encDur0, encDur1] = encDur;
|
|
64
|
+
const [encStatus0, encStatus1] = encStatus;
|
|
65
|
+
const { search: indSearch = " " } = indent !== null && indent !== void 0 ? indent : {};
|
|
66
|
+
const { duration: padDur = -7, status: padStatus = 0, method: padMethod = 0, } = pad !== null && pad !== void 0 ? pad : {};
|
|
67
|
+
let statusType;
|
|
68
|
+
switch (enStatus) {
|
|
69
|
+
case "status":
|
|
70
|
+
statusType = 1;
|
|
71
|
+
break;
|
|
72
|
+
case "status-text":
|
|
73
|
+
statusType = 2;
|
|
74
|
+
break;
|
|
75
|
+
case "with-status-text":
|
|
76
|
+
statusType = 3;
|
|
77
|
+
break;
|
|
78
|
+
default:
|
|
79
|
+
statusType = 0;
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
const searchType = enSearch === "multiline" ? 2 : enSearch === "singleline" ? 1 : 0;
|
|
83
|
+
////////////////////////////////////////////////////////////////////////////
|
|
84
|
+
return ({ request, response, url, timestamps: { epoch, start, end } }) => {
|
|
85
|
+
// Status Str
|
|
86
|
+
let statusStr;
|
|
87
|
+
switch (statusType) {
|
|
88
|
+
case 1:
|
|
89
|
+
statusStr = response.status.toString();
|
|
90
|
+
break;
|
|
91
|
+
case 2:
|
|
92
|
+
statusStr = response.statusText;
|
|
93
|
+
break;
|
|
94
|
+
case 3:
|
|
95
|
+
statusStr = `${response.status} ${response.statusText}`;
|
|
96
|
+
break;
|
|
97
|
+
default:
|
|
98
|
+
statusStr = "";
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
// Search Str
|
|
102
|
+
let searchStr;
|
|
103
|
+
switch (searchType) {
|
|
104
|
+
case 2: {
|
|
105
|
+
const len = url.searchParams.size;
|
|
106
|
+
if (len > 0) {
|
|
107
|
+
searchStr = "?\n";
|
|
108
|
+
let i = 0;
|
|
109
|
+
for (const [key, value] of url.searchParams) {
|
|
110
|
+
searchStr += `${indSearch}${key}=${value}${++i < len ? " &\n" : ""}`;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
searchStr = "";
|
|
115
|
+
}
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
case 1:
|
|
119
|
+
searchStr = url.search;
|
|
120
|
+
break;
|
|
121
|
+
default:
|
|
122
|
+
searchStr = "";
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
logger(`${enReqTime ? `${encReqTime0}${epoch}${encReqTime1}` : ""}${enDur
|
|
126
|
+
? `${encDur0}${(0, utils_ts_1.padStr)((0, utils_ts_1.formatDuration)(end - start), padDur)}${encDur1}`
|
|
127
|
+
: ""}${!enStatus
|
|
128
|
+
? ""
|
|
129
|
+
: `${encStatus0}${(0, utils_ts_1.padStr)(statusStr, padStatus)}${encStatus1}`} ${(0, utils_ts_1.padStr)(request.method, padMethod)} ${url.pathname}${searchStr}`);
|
|
130
|
+
};
|
|
131
|
+
};
|
|
132
|
+
exports.logRequests = logRequests;
|
|
133
|
+
/**
|
|
134
|
+
* Log requests with color
|
|
135
|
+
*
|
|
136
|
+
* @param options Log requests options
|
|
137
|
+
*/
|
|
138
|
+
const logRequestsWithColor = (options) => {
|
|
139
|
+
const { logger = console.log, enable, enclosure, indent, pad, reqTime, duration, status, method, pathname, search, } = options !== null && options !== void 0 ? options : {};
|
|
140
|
+
const { requestTime: enReqTime = true, duration: enDur = true, status: enStatus = "status", search: enSearch = "multiline", } = enable !== null && enable !== void 0 ? enable : {};
|
|
141
|
+
const { requestTime: encReqTime = ["", " "], duration: encDur = ["[", "]"], status: encStatus = ["(", ")"], } = enclosure !== null && enclosure !== void 0 ? enclosure : {};
|
|
142
|
+
const [encReqTime0, encReqTime1] = encReqTime;
|
|
143
|
+
const [encDur0, encDur1] = encDur;
|
|
144
|
+
const [encStatus0, encStatus1] = encStatus;
|
|
145
|
+
const { search: indSearch = " " } = indent !== null && indent !== void 0 ? indent : {};
|
|
146
|
+
const { duration: padDur = -7, status: padStatus = 0, method: padMethod = 0, } = pad !== null && pad !== void 0 ? pad : {};
|
|
147
|
+
const { color: reqTimeColor = null, bold: reqTimeBold = false, dim: reqTimeDim = false, } = reqTime !== null && reqTime !== void 0 ? reqTime : {};
|
|
148
|
+
const { color: durColor = null, bold: durBold = false, dim: durDim = true, } = duration !== null && duration !== void 0 ? duration : {};
|
|
149
|
+
const { color: statusColor = "auto", bold: statusBold = true, dim: statusDim = false, } = status !== null && status !== void 0 ? status : {};
|
|
150
|
+
const { color: methodColor = "auto", bold: methodBold = false, dim: methodDim = false, } = method !== null && method !== void 0 ? method : {};
|
|
151
|
+
const { color: pathnameColor = null, bold: pathnameBold = false, dim: pathnameDim = false, } = pathname !== null && pathname !== void 0 ? pathname : {};
|
|
152
|
+
const { color: searchColor = null, bold: searchBold = false, dim: searchDim = true, } = search !== null && search !== void 0 ? search : {};
|
|
153
|
+
const reqTimeDimStr = reqTimeDim ? exports.COLORS.dim : "";
|
|
154
|
+
const reqTimeColorStr = reqTimeColor ? exports.COLORS[reqTimeColor] : "";
|
|
155
|
+
const reqTimeBoldStr = reqTimeBold ? exports.COLORS.bold : "";
|
|
156
|
+
const reqTimeColorReset = reqTimeDim || reqTimeColor || reqTimeBold ? exports.COLORS.reset : "";
|
|
157
|
+
const durDimStr = durDim ? exports.COLORS.dim : "";
|
|
158
|
+
const durColorStr = durColor ? exports.COLORS[durColor] : "";
|
|
159
|
+
const durBoldStr = durBold ? exports.COLORS.bold : "";
|
|
160
|
+
const durColorReset = durDim || durColor || durBold ? exports.COLORS.reset : "";
|
|
161
|
+
const statusDimStr = statusDim ? exports.COLORS.dim : "";
|
|
162
|
+
// const statusColorStr = (status: number) => statusColor === "auto" ? COLORS.status(status) : statusColor ? COLORS[statusColor] : "";
|
|
163
|
+
const statusBoldStr = statusBold ? exports.COLORS.bold : "";
|
|
164
|
+
const statusColorReset = statusDim || statusColor || statusBold ? exports.COLORS.reset : "";
|
|
165
|
+
const methodDimStr = methodDim ? exports.COLORS.dim : "";
|
|
166
|
+
// const methodColorStr = methodColor === "auto" ? COLORS.status(method) : methodColor ? COLORS[methodColor] : "";
|
|
167
|
+
const methodBoldStr = methodBold ? exports.COLORS.bold : "";
|
|
168
|
+
const methodColorReset = methodDim || methodColor || methodBold ? exports.COLORS.reset : "";
|
|
169
|
+
const pathnameDimStr = pathnameDim ? exports.COLORS.dim : "";
|
|
170
|
+
const pathnameColorStr = pathnameColor ? exports.COLORS[pathnameColor] : "";
|
|
171
|
+
const pathnameBoldStr = pathnameBold ? exports.COLORS.bold : "";
|
|
172
|
+
const pathnameColorReset = pathnameDim || pathnameColor || pathnameBold ? exports.COLORS.reset : "";
|
|
173
|
+
const searchDimStr = searchDim ? exports.COLORS.dim : "";
|
|
174
|
+
const searchColorStr = searchColor ? exports.COLORS[searchColor] : "";
|
|
175
|
+
const searchBoldStr = searchBold ? exports.COLORS.bold : "";
|
|
176
|
+
const searchColorReset = searchDim || searchColor || searchBold ? exports.COLORS.reset : "";
|
|
177
|
+
let statusType;
|
|
178
|
+
switch (enStatus) {
|
|
179
|
+
case "status":
|
|
180
|
+
statusType = 1;
|
|
181
|
+
break;
|
|
182
|
+
case "status-text":
|
|
183
|
+
statusType = 2;
|
|
184
|
+
break;
|
|
185
|
+
case "with-status-text":
|
|
186
|
+
statusType = 3;
|
|
187
|
+
break;
|
|
188
|
+
default:
|
|
189
|
+
statusType = 0;
|
|
190
|
+
break;
|
|
191
|
+
}
|
|
192
|
+
const searchType = enSearch === "multiline" ? 2 : enSearch === "singleline" ? 1 : 0;
|
|
193
|
+
////////////////////////////////////////////////////////////////////////////
|
|
194
|
+
return ({ request, response, url, timestamps: { epoch, start, end } }) => {
|
|
195
|
+
var _a;
|
|
196
|
+
// Status Str
|
|
197
|
+
let statusStr;
|
|
198
|
+
switch (statusType) {
|
|
199
|
+
case 1:
|
|
200
|
+
statusStr = response.status.toString();
|
|
201
|
+
break;
|
|
202
|
+
case 2:
|
|
203
|
+
statusStr = response.statusText;
|
|
204
|
+
break;
|
|
205
|
+
case 3:
|
|
206
|
+
statusStr = `${response.status} ${response.statusText}`;
|
|
207
|
+
break;
|
|
208
|
+
default:
|
|
209
|
+
statusStr = "";
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
// Search Str
|
|
213
|
+
let searchStr;
|
|
214
|
+
switch (searchType) {
|
|
215
|
+
case 2: {
|
|
216
|
+
const len = url.searchParams.size;
|
|
217
|
+
if (len > 0) {
|
|
218
|
+
searchStr = "?\n";
|
|
219
|
+
let i = 0;
|
|
220
|
+
for (const [key, value] of url.searchParams) {
|
|
221
|
+
searchStr += `${indSearch}${key}=${value}${++i < len ? " &\n" : ""}`;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
searchStr = "";
|
|
226
|
+
}
|
|
227
|
+
break;
|
|
228
|
+
}
|
|
229
|
+
case 1:
|
|
230
|
+
searchStr = url.search;
|
|
231
|
+
break;
|
|
232
|
+
default:
|
|
233
|
+
searchStr = "";
|
|
234
|
+
break;
|
|
235
|
+
}
|
|
236
|
+
logger(`${enReqTime ? `${reqTimeDimStr}${reqTimeColorStr}${reqTimeBoldStr}${encReqTime0}${epoch}${encReqTime1}${reqTimeColorReset}` : ""}${enDur
|
|
237
|
+
? `${durDimStr}${durColorStr}${durBoldStr}${encDur0}${(0, utils_ts_1.padStr)((0, utils_ts_1.formatDuration)(end - start), padDur)}${encDur1}${durColorReset}`
|
|
238
|
+
: ""}${!enStatus
|
|
239
|
+
? ""
|
|
240
|
+
: `${statusDimStr}${statusColor === "auto" ? exports.COLORS.status(response.status) : statusColor ? exports.COLORS[statusColor] : ""}${statusBoldStr}${encStatus0}${(0, utils_ts_1.padStr)(statusStr, padStatus)}${encStatus1}${statusColorReset}`} ${methodDimStr}${methodColor === "auto" ? ((_a = exports.COLORS.method[request.method]) !== null && _a !== void 0 ? _a : "\x1b[37m") : methodColor ? exports.COLORS[methodColor] : ""}${methodBoldStr}${(0, utils_ts_1.padStr)(request.method, padMethod)}${methodColorReset} ${pathnameDimStr}${pathnameColorStr}${pathnameBoldStr}${url.pathname}${pathnameColorReset}${searchDimStr}${searchColorStr}${searchBoldStr}${searchStr}${searchColorReset}`);
|
|
241
|
+
};
|
|
242
|
+
};
|
|
243
|
+
exports.logRequestsWithColor = logRequestsWithColor;
|
|
18
244
|
/**
|
|
19
245
|
* Force http into https
|
|
20
246
|
*
|
|
@@ -223,7 +449,7 @@ const limitRate = (config) => {
|
|
|
223
449
|
}
|
|
224
450
|
if (entry.tokens <= 0) {
|
|
225
451
|
ctx.headers.set("Retry-After", Math.ceil(refillInterval - timeElapsed).toFixed());
|
|
226
|
-
return respond(status_ts_1.Status._429_TooManyRequests, "
|
|
452
|
+
return respond(status_ts_1.Status._429_TooManyRequests, "Too Many Requests", "message", "rate-limit");
|
|
227
453
|
}
|
|
228
454
|
else {
|
|
229
455
|
entry.tokens--;
|
|
@@ -249,7 +475,7 @@ const limitRate = (config) => {
|
|
|
249
475
|
entry.lastRefill = now();
|
|
250
476
|
if (entry.tokens <= 0) {
|
|
251
477
|
ctx.headers.set("Retry-After", Math.ceil(1 / refillRate).toFixed());
|
|
252
|
-
return respond(status_ts_1.Status._429_TooManyRequests, "
|
|
478
|
+
return respond(status_ts_1.Status._429_TooManyRequests, "Too Many Requests", "message", "rate-limit");
|
|
253
479
|
}
|
|
254
480
|
else {
|
|
255
481
|
entry.tokens--;
|
|
@@ -352,7 +578,7 @@ const cors = (config) => {
|
|
|
352
578
|
const requestMethod = request.headers.get("Access-Control-Request-Method");
|
|
353
579
|
if (requestMethod &&
|
|
354
580
|
!methods.includes(requestMethod)) {
|
|
355
|
-
return respond(status_ts_1.Status._405_MethodNotAllowed,
|
|
581
|
+
return respond(status_ts_1.Status._405_MethodNotAllowed, "Method not allowed", "message", "CORS");
|
|
356
582
|
}
|
|
357
583
|
headers.set("Access-Control-Allow-Methods", methods.join(", "));
|
|
358
584
|
}
|
|
@@ -520,10 +746,8 @@ const validate = ({ responseType = "text", errors, paramsMutation = false, param
|
|
|
520
746
|
ctx.query = {};
|
|
521
747
|
}
|
|
522
748
|
const searchParams = ctx.url.searchParams;
|
|
523
|
-
for (const key of searchParams
|
|
524
|
-
|
|
525
|
-
ctx.query[key] =
|
|
526
|
-
values.length > 1 ? values[values.length - 1] : values[0];
|
|
749
|
+
for (const [key, value] of searchParams) {
|
|
750
|
+
ctx.query[key] = value;
|
|
527
751
|
}
|
|
528
752
|
})
|
|
529
753
|
: queryParse || undefined;
|
|
@@ -593,6 +817,7 @@ const validate = ({ responseType = "text", errors, paramsMutation = false, param
|
|
|
593
817
|
? bodyValidator
|
|
594
818
|
: [bodyValidator]
|
|
595
819
|
: undefined;
|
|
820
|
+
bodyParseOptions = Object.assign(Object.assign({}, bodyParseOptions), { responseType });
|
|
596
821
|
if (bodyValidators) {
|
|
597
822
|
if (!bodyValidatorIsFunction &&
|
|
598
823
|
!bodyValidatorIsObject &&
|
|
@@ -631,10 +856,12 @@ const validate = ({ responseType = "text", errors, paramsMutation = false, param
|
|
|
631
856
|
? paramsValidator.bind(ctx)(params)
|
|
632
857
|
: paramsValidator(params);
|
|
633
858
|
if (result instanceof Error) {
|
|
634
|
-
|
|
859
|
+
const status = result.status || status_ts_1.Status._400_BadRequest;
|
|
860
|
+
return respond(status, result.message, status >= 500 ? "error" : "message", "params-validator");
|
|
635
861
|
}
|
|
636
862
|
else if (paramsErrors && errorMatches(result, paramsErrors)) {
|
|
637
|
-
|
|
863
|
+
const status = result.status || status_ts_1.Status._400_BadRequest;
|
|
864
|
+
return respond(status, String(result), status >= 500 ? "error" : "message", "params-validator");
|
|
638
865
|
}
|
|
639
866
|
else if (result instanceof Response ||
|
|
640
867
|
result === types_ts_1.Break_Pipe ||
|
|
@@ -665,10 +892,12 @@ const validate = ({ responseType = "text", errors, paramsMutation = false, param
|
|
|
665
892
|
? validator.bind(ctx)(params[key])
|
|
666
893
|
: validator(params[key]);
|
|
667
894
|
if (result instanceof Error) {
|
|
668
|
-
|
|
895
|
+
const status = result.status || status_ts_1.Status._400_BadRequest;
|
|
896
|
+
return respond(status, result.message, status >= 500 ? "error" : "message", "params-validator");
|
|
669
897
|
}
|
|
670
898
|
else if (paramsErrors && errorMatches(result, paramsErrors)) {
|
|
671
|
-
|
|
899
|
+
const status = result.status || status_ts_1.Status._400_BadRequest;
|
|
900
|
+
return respond(status, String(result), status >= 500 ? "error" : "message", "params-validator");
|
|
672
901
|
}
|
|
673
902
|
else if (result instanceof Response ||
|
|
674
903
|
result === types_ts_1.Break_Pipe ||
|
|
@@ -682,7 +911,10 @@ const validate = ({ responseType = "text", errors, paramsMutation = false, param
|
|
|
682
911
|
}
|
|
683
912
|
// Parse query
|
|
684
913
|
if (queryParser) {
|
|
685
|
-
yield queryParser(ctx);
|
|
914
|
+
const response = yield queryParser(ctx);
|
|
915
|
+
if (response instanceof Response) {
|
|
916
|
+
return response;
|
|
917
|
+
}
|
|
686
918
|
}
|
|
687
919
|
const query = ctx.query;
|
|
688
920
|
// Validate Query
|
|
@@ -691,10 +923,12 @@ const validate = ({ responseType = "text", errors, paramsMutation = false, param
|
|
|
691
923
|
? queryValidator.bind(ctx)(query)
|
|
692
924
|
: queryValidator(query);
|
|
693
925
|
if (result instanceof Error) {
|
|
694
|
-
|
|
926
|
+
const status = result.status || status_ts_1.Status._400_BadRequest;
|
|
927
|
+
return respond(status, result.message, status >= 500 ? "error" : "message", "query-validator");
|
|
695
928
|
}
|
|
696
929
|
else if (queryErrors && errorMatches(result, queryErrors)) {
|
|
697
|
-
|
|
930
|
+
const status = result.status || status_ts_1.Status._400_BadRequest;
|
|
931
|
+
return respond(status, String(result), status >= 500 ? "error" : "message", "query-validator");
|
|
698
932
|
}
|
|
699
933
|
else if (result instanceof Response ||
|
|
700
934
|
result === types_ts_1.Break_Pipe ||
|
|
@@ -725,10 +959,12 @@ const validate = ({ responseType = "text", errors, paramsMutation = false, param
|
|
|
725
959
|
? validator.bind(ctx)(query[key])
|
|
726
960
|
: validator(query[key]);
|
|
727
961
|
if (result instanceof Error) {
|
|
728
|
-
|
|
962
|
+
const status = result.status || status_ts_1.Status._400_BadRequest;
|
|
963
|
+
return respond(status, result.message, status >= 500 ? "error" : "message", "query-validator");
|
|
729
964
|
}
|
|
730
965
|
else if (queryErrors && errorMatches(result, queryErrors)) {
|
|
731
|
-
|
|
966
|
+
const status = result.status || status_ts_1.Status._400_BadRequest;
|
|
967
|
+
return respond(status, String(result), status >= 500 ? "error" : "message", "query-validator");
|
|
732
968
|
}
|
|
733
969
|
else if (result instanceof Response ||
|
|
734
970
|
result === types_ts_1.Break_Pipe ||
|
|
@@ -742,7 +978,10 @@ const validate = ({ responseType = "text", errors, paramsMutation = false, param
|
|
|
742
978
|
}
|
|
743
979
|
// Parse cookie
|
|
744
980
|
if (cookieParser) {
|
|
745
|
-
yield cookieParser(ctx);
|
|
981
|
+
const response = yield cookieParser(ctx);
|
|
982
|
+
if (response instanceof Response) {
|
|
983
|
+
return response;
|
|
984
|
+
}
|
|
746
985
|
}
|
|
747
986
|
const cookie = ctx.cookie;
|
|
748
987
|
// Validate Cookie
|
|
@@ -751,10 +990,12 @@ const validate = ({ responseType = "text", errors, paramsMutation = false, param
|
|
|
751
990
|
? cookieValidator.bind(ctx)(cookie)
|
|
752
991
|
: cookieValidator(cookie);
|
|
753
992
|
if (result instanceof Error) {
|
|
754
|
-
|
|
993
|
+
const status = result.status || status_ts_1.Status._400_BadRequest;
|
|
994
|
+
return respond(status, result.message, status >= 500 ? "error" : "message", "cookie-validator");
|
|
755
995
|
}
|
|
756
996
|
else if (cookieErrors && errorMatches(result, cookieErrors)) {
|
|
757
|
-
|
|
997
|
+
const status = result.status || status_ts_1.Status._400_BadRequest;
|
|
998
|
+
return respond(status, String(result), status >= 500 ? "error" : "message", "cookie-validator");
|
|
758
999
|
}
|
|
759
1000
|
else if (result instanceof Response ||
|
|
760
1001
|
result === types_ts_1.Break_Pipe ||
|
|
@@ -785,10 +1026,12 @@ const validate = ({ responseType = "text", errors, paramsMutation = false, param
|
|
|
785
1026
|
? validator.bind(ctx)(cookie[key])
|
|
786
1027
|
: validator(cookie[key]);
|
|
787
1028
|
if (result instanceof Error) {
|
|
788
|
-
|
|
1029
|
+
const status = result.status || status_ts_1.Status._400_BadRequest;
|
|
1030
|
+
return respond(status, result.message, status >= 500 ? "error" : "message", "cookie-validator");
|
|
789
1031
|
}
|
|
790
1032
|
else if (cookieErrors && errorMatches(result, cookieErrors)) {
|
|
791
|
-
|
|
1033
|
+
const status = result.status || status_ts_1.Status._400_BadRequest;
|
|
1034
|
+
return respond(status, String(result), status >= 500 ? "error" : "message", "cookie-validator");
|
|
792
1035
|
}
|
|
793
1036
|
else if (result instanceof Response ||
|
|
794
1037
|
result === types_ts_1.Break_Pipe ||
|
|
@@ -802,17 +1045,22 @@ const validate = ({ responseType = "text", errors, paramsMutation = false, param
|
|
|
802
1045
|
}
|
|
803
1046
|
// Parse body
|
|
804
1047
|
if (bodyParser) {
|
|
805
|
-
yield bodyParser(ctx);
|
|
1048
|
+
const response = yield bodyParser(ctx);
|
|
1049
|
+
if (response instanceof Response) {
|
|
1050
|
+
return response;
|
|
1051
|
+
}
|
|
806
1052
|
}
|
|
807
1053
|
const body = ctx.body;
|
|
808
1054
|
// Validate Body
|
|
809
1055
|
if (bodyValidators) {
|
|
810
1056
|
const bodyIsArray = Array.isArray(body);
|
|
811
1057
|
if (bodyValidatorIsArray && !bodyIsArray) {
|
|
812
|
-
|
|
1058
|
+
const status = status_ts_1.Status._400_BadRequest;
|
|
1059
|
+
return respond(status, "array body type expected", status >= 500 ? "error" : "message", "body-validator");
|
|
813
1060
|
}
|
|
814
1061
|
else if (!bodyValidatorIsArray && bodyIsArray) {
|
|
815
|
-
|
|
1062
|
+
const status = status_ts_1.Status._400_BadRequest;
|
|
1063
|
+
return respond(status, "object body type expected", status >= 500 ? "error" : "message", "body-validator");
|
|
816
1064
|
}
|
|
817
1065
|
if (bodyIsArray) {
|
|
818
1066
|
for (let i = 0; i < body.length; i++) {
|
|
@@ -823,10 +1071,12 @@ const validate = ({ responseType = "text", errors, paramsMutation = false, param
|
|
|
823
1071
|
? validator.bind(ctx)(activeBody, i)
|
|
824
1072
|
: validator(activeBody, i);
|
|
825
1073
|
if (result instanceof Error) {
|
|
826
|
-
|
|
1074
|
+
const status = result.status || status_ts_1.Status._400_BadRequest;
|
|
1075
|
+
return respond(status, result.message, status >= 500 ? "error" : "message", "body-validator");
|
|
827
1076
|
}
|
|
828
1077
|
else if (bodyErrors && errorMatches(result, bodyErrors)) {
|
|
829
|
-
|
|
1078
|
+
const status = result.status || status_ts_1.Status._400_BadRequest;
|
|
1079
|
+
return respond(status, String(result), status >= 500 ? "error" : "message", "body-validator");
|
|
830
1080
|
}
|
|
831
1081
|
else if (result instanceof Response ||
|
|
832
1082
|
result === types_ts_1.Break_Pipe ||
|
|
@@ -863,10 +1113,12 @@ const validate = ({ responseType = "text", errors, paramsMutation = false, param
|
|
|
863
1113
|
? propValidator.bind(ctx)(activeBody[key], i)
|
|
864
1114
|
: propValidator(activeBody[key], i);
|
|
865
1115
|
if (result instanceof Error) {
|
|
866
|
-
|
|
1116
|
+
const status = result.status || status_ts_1.Status._400_BadRequest;
|
|
1117
|
+
return respond(status, result.message, status >= 500 ? "error" : "message", "body-validator");
|
|
867
1118
|
}
|
|
868
1119
|
else if (bodyErrors && errorMatches(result, bodyErrors)) {
|
|
869
|
-
|
|
1120
|
+
const status = result.status || status_ts_1.Status._400_BadRequest;
|
|
1121
|
+
return respond(status, String(result), status >= 500 ? "error" : "message", "body-validator");
|
|
870
1122
|
}
|
|
871
1123
|
else if (result instanceof Response ||
|
|
872
1124
|
result === types_ts_1.Break_Pipe ||
|
|
@@ -879,7 +1131,7 @@ const validate = ({ responseType = "text", errors, paramsMutation = false, param
|
|
|
879
1131
|
}
|
|
880
1132
|
}
|
|
881
1133
|
else {
|
|
882
|
-
return respond(status_ts_1.Status._400_BadRequest, `Invalid body type at index ${i}`, "
|
|
1134
|
+
return respond(status_ts_1.Status._400_BadRequest, `Invalid body type at index ${i}`, "message", "body-validator");
|
|
883
1135
|
}
|
|
884
1136
|
}
|
|
885
1137
|
}
|
|
@@ -891,10 +1143,12 @@ const validate = ({ responseType = "text", errors, paramsMutation = false, param
|
|
|
891
1143
|
? validator.bind(ctx)(body)
|
|
892
1144
|
: validator(body);
|
|
893
1145
|
if (result instanceof Error) {
|
|
894
|
-
|
|
1146
|
+
const status = result.status || status_ts_1.Status._400_BadRequest;
|
|
1147
|
+
return respond(status, result.message, status >= 500 ? "error" : "message", "body-validator");
|
|
895
1148
|
}
|
|
896
1149
|
else if (bodyErrors && errorMatches(result, bodyErrors)) {
|
|
897
|
-
|
|
1150
|
+
const status = result.status || status_ts_1.Status._400_BadRequest;
|
|
1151
|
+
return respond(status, String(result), status >= 500 ? "error" : "message", "body-validator");
|
|
898
1152
|
}
|
|
899
1153
|
else if (result instanceof Response ||
|
|
900
1154
|
result === types_ts_1.Break_Pipe ||
|
|
@@ -929,10 +1183,12 @@ const validate = ({ responseType = "text", errors, paramsMutation = false, param
|
|
|
929
1183
|
? propValidator.bind(ctx)(body[key])
|
|
930
1184
|
: propValidator(body[key]);
|
|
931
1185
|
if (result instanceof Error) {
|
|
932
|
-
|
|
1186
|
+
const status = result.status || status_ts_1.Status._400_BadRequest;
|
|
1187
|
+
return respond(status, result.message, status >= 500 ? "error" : "message", "body-validator");
|
|
933
1188
|
}
|
|
934
1189
|
else if (bodyErrors && errorMatches(result, bodyErrors)) {
|
|
935
|
-
|
|
1190
|
+
const status = result.status || status_ts_1.Status._400_BadRequest;
|
|
1191
|
+
return respond(status, String(result), status >= 500 ? "error" : "message", "body-validator");
|
|
936
1192
|
}
|
|
937
1193
|
else if (result instanceof Response ||
|
|
938
1194
|
result === types_ts_1.Break_Pipe ||
|
|
@@ -945,7 +1201,7 @@ const validate = ({ responseType = "text", errors, paramsMutation = false, param
|
|
|
945
1201
|
}
|
|
946
1202
|
}
|
|
947
1203
|
else {
|
|
948
|
-
return respond(status_ts_1.Status._400_BadRequest, "Invalid body type", "
|
|
1204
|
+
return respond(status_ts_1.Status._400_BadRequest, "Invalid body type", "message", "body-validator");
|
|
949
1205
|
}
|
|
950
1206
|
}
|
|
951
1207
|
}
|