@xrystal/core 3.24.3 → 3.24.4
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/package.json
CHANGED
|
@@ -10,6 +10,7 @@ export declare const controllerContextStorage: AsyncLocalStorage<{
|
|
|
10
10
|
metadata?: {
|
|
11
11
|
locals: Record<string, any>;
|
|
12
12
|
_code?: number;
|
|
13
|
+
_statusCode?: number;
|
|
13
14
|
_contentType?: string;
|
|
14
15
|
_isRaw?: boolean;
|
|
15
16
|
};
|
|
@@ -22,6 +23,7 @@ export declare const getControllerCtx: () => {
|
|
|
22
23
|
metadata?: {
|
|
23
24
|
locals: Record<string, any>;
|
|
24
25
|
_code?: number;
|
|
26
|
+
_statusCode?: number;
|
|
25
27
|
_contentType?: string;
|
|
26
28
|
_isRaw?: boolean;
|
|
27
29
|
};
|
|
@@ -39,6 +41,7 @@ export declare abstract class BaseController {
|
|
|
39
41
|
metadata?: {
|
|
40
42
|
locals: Record<string, any>;
|
|
41
43
|
_code?: number;
|
|
44
|
+
_statusCode?: number;
|
|
42
45
|
_contentType?: string;
|
|
43
46
|
_isRaw?: boolean;
|
|
44
47
|
};
|
|
@@ -26,15 +26,13 @@ export class BaseController {
|
|
|
26
26
|
if (Object.keys(query).length === 0 && typeof urlStr === 'string' && urlStr.includes('?')) {
|
|
27
27
|
query = qs.parse(urlStr.split('?')[1]);
|
|
28
28
|
}
|
|
29
|
-
const params = ctx.params || req.params || {};
|
|
30
|
-
const headers = ctx.headers || req.headers || ctx.request?.headers || {};
|
|
31
29
|
return {
|
|
32
30
|
url: urlStr,
|
|
33
31
|
method: ctx.method || req.method || ctx.request?.method || '',
|
|
34
|
-
headers,
|
|
32
|
+
headers: ctx.headers || req.headers || ctx.request?.headers || {},
|
|
35
33
|
body,
|
|
36
34
|
query,
|
|
37
|
-
params,
|
|
35
|
+
params: ctx.params || req.params || {},
|
|
38
36
|
lang: ctx.lang || req.lang || 'en',
|
|
39
37
|
t: ctx.t || req.t || identityT,
|
|
40
38
|
accounts: ctx.accounts || req.accounts || ctx.user
|
|
@@ -66,12 +64,14 @@ export class BaseController {
|
|
|
66
64
|
return data;
|
|
67
65
|
const isBinary = data instanceof Blob || data instanceof Uint8Array || data instanceof ArrayBuffer || (typeof data?.pipe === 'function');
|
|
68
66
|
const isRaw = store.metadata?._isRaw || isBinary;
|
|
69
|
-
let contentType = store.metadata?._contentType;
|
|
70
|
-
|
|
71
|
-
|
|
67
|
+
let contentType = store.metadata?._contentType || (isRaw ? 'application/octet-stream' : 'application/json');
|
|
68
|
+
let bizCode = store.metadata._code || 200;
|
|
69
|
+
let httpStatus = store.metadata._statusCode;
|
|
70
|
+
if (!httpStatus) {
|
|
71
|
+
httpStatus = (bizCode >= 100 && bizCode <= 101) || (bizCode >= 200 && bizCode <= 599)
|
|
72
|
+
? bizCode
|
|
73
|
+
: (bizCode === 0 || (bizCode >= 200 && bizCode <= 299) ? 200 : 400);
|
|
72
74
|
}
|
|
73
|
-
let rawCode = store.metadata._code || 200;
|
|
74
|
-
let httpStatus = (rawCode >= 100 && rawCode <= 101) || (rawCode >= 200 && rawCode <= 599) ? rawCode : (rawCode === 0 || (rawCode >= 200 && rawCode <= 299) ? 200 : 400);
|
|
75
75
|
const body = isRaw || typeof data === 'string'
|
|
76
76
|
? data
|
|
77
77
|
: JSON.stringify(data?.getResponse ? data.getResponse : data);
|
|
@@ -114,14 +114,13 @@ export default class Controller extends BaseController {
|
|
|
114
114
|
if (responseMessageHelper[method]) {
|
|
115
115
|
return responseMessageHelper[method](p1, p2, t);
|
|
116
116
|
}
|
|
117
|
-
return isError
|
|
118
|
-
? responseMessageHelper.unsuccessful(p1, p2, t)
|
|
119
|
-
: responseMessageHelper.successfully(p1, p2, t);
|
|
117
|
+
return isError ? responseMessageHelper.unsuccessful(p1, p2, t) : responseMessageHelper.successfully(p1, p2, t);
|
|
120
118
|
}
|
|
121
119
|
async schema({ checks, logic, response }) {
|
|
122
|
-
|
|
120
|
+
const currentReq = this.req;
|
|
121
|
+
const currentRes = this.res;
|
|
122
|
+
const store = this.currentStore;
|
|
123
123
|
try {
|
|
124
|
-
const currentRes = this.res;
|
|
125
124
|
const p = {
|
|
126
125
|
req: currentReq,
|
|
127
126
|
res: currentRes,
|
|
@@ -131,17 +130,27 @@ export default class Controller extends BaseController {
|
|
|
131
130
|
t: currentReq.t,
|
|
132
131
|
accounts: currentReq.accounts
|
|
133
132
|
};
|
|
133
|
+
const extractMeta = (obj) => {
|
|
134
|
+
if (!obj || typeof obj !== 'object')
|
|
135
|
+
return;
|
|
136
|
+
if (obj.code !== undefined && store?.metadata)
|
|
137
|
+
store.metadata._code = obj.code;
|
|
138
|
+
if (obj.statusCode !== undefined && store?.metadata)
|
|
139
|
+
store.metadata._statusCode = obj.statusCode;
|
|
140
|
+
};
|
|
134
141
|
if (checks) {
|
|
135
142
|
const checkResult = await checks(p);
|
|
136
143
|
if (checkResult !== true) {
|
|
137
|
-
|
|
144
|
+
extractMeta(checkResult);
|
|
145
|
+
const bizCode = store?.metadata?._code ?? 400;
|
|
138
146
|
const msg = checkResult?.message || checkResult;
|
|
139
147
|
let errorPayload = undefined;
|
|
140
148
|
if (checkResult?.payload) {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
149
|
+
const d = checkResult.payload.data ?? checkResult.payload;
|
|
150
|
+
const e = checkResult.payload.extraData;
|
|
151
|
+
errorPayload = { data: d };
|
|
152
|
+
if (e !== undefined)
|
|
153
|
+
errorPayload.extraData = e;
|
|
145
154
|
}
|
|
146
155
|
return currentRes.status(bizCode).send(new ResponseSchema({
|
|
147
156
|
status: false,
|
|
@@ -152,14 +161,15 @@ export default class Controller extends BaseController {
|
|
|
152
161
|
}
|
|
153
162
|
}
|
|
154
163
|
let logicResult = logic ? await logic(p) : {};
|
|
155
|
-
|
|
164
|
+
extractMeta(logicResult);
|
|
165
|
+
if (logicResult instanceof Response || logicResult?.constructor?.name === 'Response')
|
|
156
166
|
return logicResult;
|
|
157
|
-
}
|
|
158
167
|
if (logicResult && typeof logicResult === 'object' && typeof logicResult.response === 'function') {
|
|
159
168
|
logicResult = await logicResult.response();
|
|
169
|
+
extractMeta(logicResult);
|
|
160
170
|
}
|
|
161
171
|
if (logicResult?.status === false) {
|
|
162
|
-
const bizCode =
|
|
172
|
+
const bizCode = store?.metadata?._code ?? 400;
|
|
163
173
|
return currentRes.status(bizCode).send(new ResponseSchema({
|
|
164
174
|
status: false,
|
|
165
175
|
message: this.parseMessage(logicResult.message, currentReq.t, true),
|
|
@@ -167,14 +177,15 @@ export default class Controller extends BaseController {
|
|
|
167
177
|
}).getResponse);
|
|
168
178
|
}
|
|
169
179
|
const resResult = response ? await response({ ...p, logicResult }) : logicResult;
|
|
180
|
+
extractMeta(resResult);
|
|
170
181
|
if (resResult instanceof Response || resResult instanceof Blob || resResult instanceof Uint8Array || resResult instanceof ArrayBuffer) {
|
|
171
182
|
return currentRes.status(200).send(resResult);
|
|
172
183
|
}
|
|
173
184
|
let finalData = undefined;
|
|
174
185
|
let finalExtraData = undefined;
|
|
175
186
|
let messageSource = 'success_process';
|
|
176
|
-
let bizSuccessCode =
|
|
177
|
-
const
|
|
187
|
+
let bizSuccessCode = store?.metadata?._code || 200;
|
|
188
|
+
const extractData = (obj) => {
|
|
178
189
|
if (!obj || typeof obj !== 'object')
|
|
179
190
|
return;
|
|
180
191
|
if (obj.payload && typeof obj.payload === 'object') {
|
|
@@ -186,28 +197,27 @@ export default class Controller extends BaseController {
|
|
|
186
197
|
finalExtraData = obj.extraData;
|
|
187
198
|
}
|
|
188
199
|
else {
|
|
189
|
-
const hasMeta = obj.status !== undefined || obj.message !== undefined || obj.code !== undefined;
|
|
200
|
+
const hasMeta = obj.status !== undefined || obj.message !== undefined || obj.code !== undefined || obj.statusCode !== undefined;
|
|
190
201
|
if (!hasMeta && Object.keys(obj).length > 0)
|
|
191
202
|
finalData = obj;
|
|
192
203
|
}
|
|
193
204
|
if (obj.message)
|
|
194
205
|
messageSource = obj.message;
|
|
195
|
-
if (obj.code !== undefined)
|
|
196
|
-
bizSuccessCode = obj.code;
|
|
197
206
|
};
|
|
198
207
|
if (typeof resResult === 'string') {
|
|
199
208
|
messageSource = resResult;
|
|
200
|
-
|
|
209
|
+
extractData(logicResult);
|
|
201
210
|
}
|
|
202
211
|
else {
|
|
203
|
-
|
|
212
|
+
extractData(resResult !== undefined ? resResult : logicResult);
|
|
204
213
|
}
|
|
205
214
|
let payload = undefined;
|
|
206
215
|
if (finalData !== undefined || finalExtraData !== undefined) {
|
|
207
|
-
payload = {
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
216
|
+
payload = {};
|
|
217
|
+
if (finalData !== undefined)
|
|
218
|
+
payload.data = finalData;
|
|
219
|
+
if (finalExtraData !== undefined)
|
|
220
|
+
payload.extraData = finalExtraData;
|
|
211
221
|
}
|
|
212
222
|
return currentRes.status(bizSuccessCode).send(new ResponseSchema({
|
|
213
223
|
status: true,
|