@jayfong/x-server 2.52.1 → 2.53.0

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.
@@ -38,4 +38,11 @@ defineHandler.XML = options => {
38
38
  requestMethod: 'XML'
39
39
  });
40
40
  return handler;
41
+ };
42
+ defineHandler.ANY = options => {
43
+ const handler = new _handler.Handler({
44
+ ...options,
45
+ requestMethod: 'ANY'
46
+ });
47
+ return handler;
41
48
  };
@@ -31,6 +31,10 @@ class Handler {
31
31
  return this.handleHttp(data, ctx);
32
32
  };
33
33
  this.handleHttp = async (data, ctx) => {
34
+ // 请求数据解析
35
+ if (this.options.parseRequestData) {
36
+ data = await this.options.parseRequestData(data, ctx);
37
+ }
34
38
  // 请求数据验证
35
39
  // vae
36
40
  if (this.requestDataSchemaVae) {
@@ -45,7 +49,6 @@ class Handler {
45
49
  data = res.data;
46
50
  } else {
47
51
  throw new _http_error.HttpError.BadRequest(
48
- // TODO: 暂时兼容编译bug
49
52
  // @ts-ignore
50
53
  res.issues[0].message);
51
54
  }
@@ -7,5 +7,6 @@ const HandlerMethodToHttpMethod = exports.HandlerMethodToHttpMethod = {
7
7
  POST: 'POST',
8
8
  FILE: 'POST',
9
9
  WS: 'GET',
10
- XML: 'POST'
10
+ XML: 'POST',
11
+ ANY: 'POST'
11
12
  };
@@ -104,7 +104,7 @@ class Server {
104
104
  return res;
105
105
  }, {});
106
106
  }
107
- const data = await item.handler.handle({
107
+ const data = await item.handler.handle(handlerMethod === 'ANY' ? {} : {
108
108
  // @ts-ignore
109
109
  ...req.params,
110
110
  // @ts-ignore
@@ -113,7 +113,7 @@ class Server {
113
113
  ...req.body,
114
114
  ...files
115
115
  }, {
116
- url: url,
116
+ url,
117
117
  headers: req.headers,
118
118
  setHeader: (k, v) => res.header(k, v),
119
119
  redirect: (url, permanently) => res.redirect(permanently ? 301 : 302, url),
@@ -129,7 +129,7 @@ class Server {
129
129
  const isWS = handlerMethod === 'WS';
130
130
  const serverMethod = isWS ? 'GET' : _http_method.HandlerMethodToHttpMethod[handlerMethod];
131
131
  fastify.route({
132
- method: serverMethod,
132
+ method: handlerMethod === 'ANY' ? ['GET', 'HEAD', 'TRACE', 'DELETE', 'OPTIONS', 'PATCH', 'PUT', 'POST'] : serverMethod,
133
133
  url: item.path,
134
134
  constraints: handlerOptions.requestHost ? {
135
135
  host: handlerOptions.requestHost
@@ -13,4 +13,5 @@ export declare namespace defineHandler {
13
13
  response: TReqData[K][1];
14
14
  }; }, void, "WS">;
15
15
  var XML: <TReqData extends unknown = void, TResData extends unknown = void>(options: XHandler.Options<TReqData, TResData, "XML">) => Handler<TReqData, TResData, "XML">;
16
+ var ANY: <TReqData extends unknown = void, TResData extends unknown = void>(options: XHandler.Options<TReqData, TResData, "ANY">) => Handler<TReqData, TResData, "ANY">;
16
17
  }
@@ -34,4 +34,11 @@ defineHandler.XML = options => {
34
34
  requestMethod: 'XML'
35
35
  });
36
36
  return handler;
37
+ };
38
+ defineHandler.ANY = options => {
39
+ const handler = new Handler({
40
+ ...options,
41
+ requestMethod: 'ANY'
42
+ });
43
+ return handler;
37
44
  };
@@ -25,6 +25,10 @@ export class Handler {
25
25
  return this.handleHttp(data, ctx);
26
26
  };
27
27
  this.handleHttp = async (data, ctx) => {
28
+ // 请求数据解析
29
+ if (this.options.parseRequestData) {
30
+ data = await this.options.parseRequestData(data, ctx);
31
+ }
28
32
  // 请求数据验证
29
33
  // vae
30
34
  if (this.requestDataSchemaVae) {
@@ -39,7 +43,6 @@ export class Handler {
39
43
  data = res.data;
40
44
  } else {
41
45
  throw new HttpError.BadRequest(
42
- // TODO: 暂时兼容编译bug
43
46
  // @ts-ignore
44
47
  res.issues[0].message);
45
48
  }
@@ -3,5 +3,6 @@ export const HandlerMethodToHttpMethod = {
3
3
  POST: 'POST',
4
4
  FILE: 'POST',
5
5
  WS: 'GET',
6
- XML: 'POST'
6
+ XML: 'POST',
7
+ ANY: 'POST'
7
8
  };
@@ -98,7 +98,7 @@ export class Server {
98
98
  return res;
99
99
  }, {});
100
100
  }
101
- const data = await item.handler.handle({
101
+ const data = await item.handler.handle(handlerMethod === 'ANY' ? {} : {
102
102
  // @ts-ignore
103
103
  ...req.params,
104
104
  // @ts-ignore
@@ -107,7 +107,7 @@ export class Server {
107
107
  ...req.body,
108
108
  ...files
109
109
  }, {
110
- url: url,
110
+ url,
111
111
  headers: req.headers,
112
112
  setHeader: (k, v) => res.header(k, v),
113
113
  redirect: (url, permanently) => res.redirect(permanently ? 301 : 302, url),
@@ -123,7 +123,7 @@ export class Server {
123
123
  const isWS = handlerMethod === 'WS';
124
124
  const serverMethod = isWS ? 'GET' : HandlerMethodToHttpMethod[handlerMethod];
125
125
  fastify.route({
126
- method: serverMethod,
126
+ method: handlerMethod === 'ANY' ? ['GET', 'HEAD', 'TRACE', 'DELETE', 'OPTIONS', 'PATCH', 'PUT', 'POST'] : serverMethod,
127
127
  url: item.path,
128
128
  constraints: handlerOptions.requestHost ? {
129
129
  host: handlerOptions.requestHost
@@ -59,7 +59,7 @@ export declare namespace XServer {
59
59
  }
60
60
  }
61
61
  export declare namespace XHandler {
62
- type Method = 'GET' | 'POST' | 'FILE' | 'WS' | 'XML';
62
+ type Method = 'GET' | 'POST' | 'FILE' | 'WS' | 'XML' | 'ANY';
63
63
  interface ExtraContext {
64
64
  }
65
65
  interface Context extends ExtraContext {
@@ -125,6 +125,10 @@ export declare namespace XHandler {
125
125
  * 请求路径
126
126
  */
127
127
  requestPath?: OneOrMore<string>;
128
+ /**
129
+ * 解析请求数据
130
+ */
131
+ parseRequestData?: (data: any, ctx: Context) => any;
128
132
  /**
129
133
  * 是否打包返回数据
130
134
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jayfong/x-server",
3
- "version": "2.52.1",
3
+ "version": "2.53.0",
4
4
  "license": "ISC",
5
5
  "sideEffects": false,
6
6
  "main": "lib/_cjs/index.js",