@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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "author": "Yusuf Yasir KAYGUSUZ",
3
3
  "name": "@xrystal/core",
4
- "version": "3.24.3",
4
+ "version": "3.24.4",
5
5
  "description": "Project core for xrystal",
6
6
  "publishConfig": {
7
7
  "access": "public",
@@ -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
- if (!contentType) {
71
- contentType = isRaw ? 'application/octet-stream' : 'application/json';
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
- let currentReq = this.req;
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
- const bizCode = checkResult?.code ?? 400;
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
- errorPayload = {
142
- data: checkResult.payload.data ?? checkResult.payload,
143
- extraData: checkResult.payload.extraData ?? {}
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
- if (logicResult instanceof Response || logicResult?.constructor?.name === 'Response') {
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 = logicResult.code ?? 400;
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 = this.currentStore?.metadata?._code || 200;
177
- const extract = (obj) => {
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
- extract(logicResult);
209
+ extractData(logicResult);
201
210
  }
202
211
  else {
203
- extract(resResult !== undefined ? resResult : logicResult);
212
+ extractData(resResult !== undefined ? resResult : logicResult);
204
213
  }
205
214
  let payload = undefined;
206
215
  if (finalData !== undefined || finalExtraData !== undefined) {
207
- payload = {
208
- data: finalData ?? {},
209
- extraData: finalExtraData ?? {}
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,