@kevisual/query 0.0.13 → 0.0.14

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.
@@ -1,8 +1,11 @@
1
+ declare const methods: readonly ["GET", "POST"];
2
+ type Method = (typeof methods)[number];
1
3
  type AdapterOpts = {
2
4
  url: string;
3
5
  headers?: Record<string, string>;
4
6
  body?: Record<string, any>;
5
7
  timeout?: number;
8
+ method?: Method;
6
9
  };
7
10
  /**
8
11
  *
@@ -16,4 +19,5 @@ declare const adapter: (opts: AdapterOpts, overloadOpts?: RequestInit) => Promis
16
19
  */
17
20
  declare const queryFetch: (opts: AdapterOpts, overloadOpts?: RequestInit) => Promise<any>;
18
21
 
19
- export { adapter, queryFetch };
22
+ export { adapter, methods, queryFetch };
23
+ export type { AdapterOpts, Method };
@@ -1,3 +1,4 @@
1
+ const methods = ['GET', 'POST'];
1
2
  /**
2
3
  *
3
4
  * @param opts
@@ -11,15 +12,21 @@ const adapter = async (opts, overloadOpts) => {
11
12
  const timer = setTimeout(() => {
12
13
  controller.abort();
13
14
  }, timeout);
14
- return fetch(opts.url, {
15
- method: 'POST',
15
+ let method = overloadOpts?.method || opts.method || 'POST';
16
+ let url = new URL(opts.url, window.location.origin);
17
+ const isGet = method === 'GET';
18
+ if (isGet) {
19
+ url.search = new URLSearchParams(opts.body).toString();
20
+ }
21
+ return fetch(url, {
22
+ method: method,
16
23
  headers: {
17
24
  'Content-Type': 'application/json',
18
25
  ...opts.headers,
19
26
  },
20
- body: JSON.stringify(opts.body),
21
27
  signal,
22
28
  ...overloadOpts,
29
+ body: isGet ? undefined : JSON.stringify(opts.body),
23
30
  })
24
31
  .then((response) => {
25
32
  // 获取 Content-Type 头部信息
@@ -50,4 +57,4 @@ const adapter = async (opts, overloadOpts) => {
50
57
  */
51
58
  const queryFetch = adapter;
52
59
 
53
- export { adapter, queryFetch };
60
+ export { adapter, methods, queryFetch };
@@ -1,10 +1,13 @@
1
1
  import { StoreApi } from 'zustand/vanilla';
2
2
 
3
+ declare const methods: readonly ["GET", "POST"];
4
+ type Method = (typeof methods)[number];
3
5
  type AdapterOpts = {
4
6
  url: string;
5
7
  headers?: Record<string, string>;
6
8
  body?: Record<string, any>;
7
9
  timeout?: number;
10
+ method?: Method;
8
11
  };
9
12
  /**
10
13
  *
@@ -67,6 +70,8 @@ type QueryOpts$1 = {
67
70
  adapter?: typeof adapter;
68
71
  headers?: Record<string, string>;
69
72
  timeout?: number;
73
+ method?: Method;
74
+ [key: string]: any;
70
75
  };
71
76
  type Data = {
72
77
  path?: string;
@@ -93,11 +98,11 @@ type Result<S = any> = {
93
98
  };
94
99
  type DataOpts = Partial<QueryOpts$1> & {
95
100
  beforeRequest?: Fn;
96
- afterResponse?: <S, U = S>(result: Result<S>, ctx?: {
101
+ afterResponse?: <S = any>(result: Result<S>, ctx?: {
97
102
  req?: any;
98
103
  res?: any;
99
104
  fetch?: any;
100
- }) => Promise<U>;
105
+ }) => Promise<S>;
101
106
  };
102
107
  /**
103
108
  * const query = new Query();
@@ -111,7 +116,7 @@ type DataOpts = Partial<QueryOpts$1> & {
111
116
  declare class Query {
112
117
  adapter: typeof adapter;
113
118
  url: string;
114
- beforeRequest?: Fn;
119
+ beforeRequest?: DataOpts['beforeRequest'];
115
120
  afterResponse?: DataOpts['afterResponse'];
116
121
  headers?: Record<string, string>;
117
122
  timeout?: number;
@@ -146,12 +151,12 @@ declare class Query {
146
151
  * 请求前处理,设置请求前处理函数
147
152
  * @param fn 处理函数
148
153
  */
149
- before(fn: Fn): void;
154
+ before(fn: DataOpts['beforeRequest']): void;
150
155
  /**
151
156
  * 请求后处理,设置请求后处理函数
152
157
  * @param fn 处理函数
153
158
  */
154
- after(fn: (result: Result, req?: any) => Promise<any>): void;
159
+ after(fn: DataOpts['afterResponse']): void;
155
160
  }
156
161
 
157
162
  type QueryOpts = {
@@ -11,15 +11,21 @@ const adapter = async (opts, overloadOpts) => {
11
11
  const timer = setTimeout(() => {
12
12
  controller.abort();
13
13
  }, timeout);
14
- return fetch(opts.url, {
15
- method: 'POST',
14
+ let method = overloadOpts?.method || opts.method || 'POST';
15
+ let url = new URL(opts.url, window.location.origin);
16
+ const isGet = method === 'GET';
17
+ if (isGet) {
18
+ url.search = new URLSearchParams(opts.body).toString();
19
+ }
20
+ return fetch(url, {
21
+ method: method,
16
22
  headers: {
17
23
  'Content-Type': 'application/json',
18
24
  ...opts.headers,
19
25
  },
20
- body: JSON.stringify(opts.body),
21
26
  signal,
22
27
  ...overloadOpts,
28
+ body: isGet ? undefined : JSON.stringify(opts.body),
23
29
  })
24
30
  .then((response) => {
25
31
  // 获取 Content-Type 头部信息
@@ -294,20 +300,22 @@ class Query {
294
300
  */
295
301
  async post(body, options) {
296
302
  const url = options?.url || this.url;
297
- const headers = { ...this.headers, ...options?.headers };
298
- const adapter = options?.adapter || this.adapter;
299
- const beforeRequest = options?.beforeRequest || this.beforeRequest;
300
- const afterResponse = options?.afterResponse || this.afterResponse;
301
- const timeout = options?.timeout || this.timeout;
303
+ const { headers, adapter, beforeRequest, afterResponse, timeout, ...rest } = options || {};
304
+ const _headers = { ...this.headers, ...headers };
305
+ const _adapter = adapter || this.adapter;
306
+ const _beforeRequest = beforeRequest || this.beforeRequest;
307
+ const _afterResponse = afterResponse || this.afterResponse;
308
+ const _timeout = timeout || this.timeout;
302
309
  const req = {
303
310
  url: url,
304
- headers: headers,
311
+ headers: _headers,
305
312
  body,
306
- timeout,
313
+ timeout: _timeout,
314
+ ...rest,
307
315
  };
308
316
  try {
309
- if (beforeRequest) {
310
- await beforeRequest(req);
317
+ if (_beforeRequest) {
318
+ await _beforeRequest(req);
311
319
  }
312
320
  }
313
321
  catch (e) {
@@ -335,11 +343,11 @@ class Query {
335
343
  }, 1000);
336
344
  });
337
345
  }
338
- return adapter(req).then(async (res) => {
346
+ return _adapter(req).then(async (res) => {
339
347
  try {
340
348
  setBaseResponse(res);
341
- if (afterResponse) {
342
- return await afterResponse(res, {
349
+ if (_afterResponse) {
350
+ return await _afterResponse(res, {
343
351
  req,
344
352
  res,
345
353
  fetch: adapter,
package/dist/query.d.ts CHANGED
@@ -1,8 +1,11 @@
1
+ declare const methods: readonly ["GET", "POST"];
2
+ type Method = (typeof methods)[number];
1
3
  type AdapterOpts = {
2
4
  url: string;
3
5
  headers?: Record<string, string>;
4
6
  body?: Record<string, any>;
5
7
  timeout?: number;
8
+ method?: Method;
6
9
  };
7
10
  /**
8
11
  *
@@ -29,6 +32,8 @@ type QueryOpts = {
29
32
  adapter?: typeof adapter;
30
33
  headers?: Record<string, string>;
31
34
  timeout?: number;
35
+ method?: Method;
36
+ [key: string]: any;
32
37
  };
33
38
  type Data = {
34
39
  path?: string;
@@ -55,11 +60,11 @@ type Result<S = any> = {
55
60
  };
56
61
  type DataOpts = Partial<QueryOpts> & {
57
62
  beforeRequest?: Fn;
58
- afterResponse?: <S, U = S>(result: Result<S>, ctx?: {
63
+ afterResponse?: <S = any>(result: Result<S>, ctx?: {
59
64
  req?: any;
60
65
  res?: any;
61
66
  fetch?: any;
62
- }) => Promise<U>;
67
+ }) => Promise<S>;
63
68
  };
64
69
  /**
65
70
  * 设置基础响应, 设置 success 和 showError,
@@ -80,7 +85,7 @@ declare const setBaseResponse: (res: Result) => void;
80
85
  declare class Query {
81
86
  adapter: typeof adapter;
82
87
  url: string;
83
- beforeRequest?: Fn;
88
+ beforeRequest?: DataOpts['beforeRequest'];
84
89
  afterResponse?: DataOpts['afterResponse'];
85
90
  headers?: Record<string, string>;
86
91
  timeout?: number;
@@ -115,12 +120,12 @@ declare class Query {
115
120
  * 请求前处理,设置请求前处理函数
116
121
  * @param fn 处理函数
117
122
  */
118
- before(fn: Fn): void;
123
+ before(fn: DataOpts['beforeRequest']): void;
119
124
  /**
120
125
  * 请求后处理,设置请求后处理函数
121
126
  * @param fn 处理函数
122
127
  */
123
- after(fn: (result: Result, req?: any) => Promise<any>): void;
128
+ after(fn: DataOpts['afterResponse']): void;
124
129
  }
125
130
 
126
131
  export { Query, adapter, setBaseResponse };
package/dist/query.js CHANGED
@@ -11,15 +11,21 @@ const adapter = async (opts, overloadOpts) => {
11
11
  const timer = setTimeout(() => {
12
12
  controller.abort();
13
13
  }, timeout);
14
- return fetch(opts.url, {
15
- method: 'POST',
14
+ let method = overloadOpts?.method || opts.method || 'POST';
15
+ let url = new URL(opts.url, window.location.origin);
16
+ const isGet = method === 'GET';
17
+ if (isGet) {
18
+ url.search = new URLSearchParams(opts.body).toString();
19
+ }
20
+ return fetch(url, {
21
+ method: method,
16
22
  headers: {
17
23
  'Content-Type': 'application/json',
18
24
  ...opts.headers,
19
25
  },
20
- body: JSON.stringify(opts.body),
21
26
  signal,
22
27
  ...overloadOpts,
28
+ body: isGet ? undefined : JSON.stringify(opts.body),
23
29
  })
24
30
  .then((response) => {
25
31
  // 获取 Content-Type 头部信息
@@ -119,20 +125,22 @@ class Query {
119
125
  */
120
126
  async post(body, options) {
121
127
  const url = options?.url || this.url;
122
- const headers = { ...this.headers, ...options?.headers };
123
- const adapter = options?.adapter || this.adapter;
124
- const beforeRequest = options?.beforeRequest || this.beforeRequest;
125
- const afterResponse = options?.afterResponse || this.afterResponse;
126
- const timeout = options?.timeout || this.timeout;
128
+ const { headers, adapter, beforeRequest, afterResponse, timeout, ...rest } = options || {};
129
+ const _headers = { ...this.headers, ...headers };
130
+ const _adapter = adapter || this.adapter;
131
+ const _beforeRequest = beforeRequest || this.beforeRequest;
132
+ const _afterResponse = afterResponse || this.afterResponse;
133
+ const _timeout = timeout || this.timeout;
127
134
  const req = {
128
135
  url: url,
129
- headers: headers,
136
+ headers: _headers,
130
137
  body,
131
- timeout,
138
+ timeout: _timeout,
139
+ ...rest,
132
140
  };
133
141
  try {
134
- if (beforeRequest) {
135
- await beforeRequest(req);
142
+ if (_beforeRequest) {
143
+ await _beforeRequest(req);
136
144
  }
137
145
  }
138
146
  catch (e) {
@@ -160,11 +168,11 @@ class Query {
160
168
  }, 1000);
161
169
  });
162
170
  }
163
- return adapter(req).then(async (res) => {
171
+ return _adapter(req).then(async (res) => {
164
172
  try {
165
173
  setBaseResponse(res);
166
- if (afterResponse) {
167
- return await afterResponse(res, {
174
+ if (_afterResponse) {
175
+ return await _afterResponse(res, {
168
176
  req,
169
177
  res,
170
178
  fetch: adapter,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kevisual/query",
3
- "version": "0.0.13",
3
+ "version": "0.0.14",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/index.js",
6
6
  "types": "dist/index.d.ts",