@ureq/impl-fetch 0.0.3-alpha.0 → 0.0.3
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/README.md +96 -0
- package/dist/index.js +124 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +122 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/README.md
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# @ureq/impl-fetch
|
|
2
|
+
|
|
3
|
+
基于 Fetch API 的请求器实现。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @ureq/core @ureq/impl-fetch
|
|
9
|
+
# 或
|
|
10
|
+
pnpm add @ureq/core @ureq/impl-fetch
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## 使用
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import { Request } from '@ureq/core';
|
|
17
|
+
import { FetchRequestor } from '@ureq/impl-fetch';
|
|
18
|
+
|
|
19
|
+
const request = new Request(new FetchRequestor({
|
|
20
|
+
baseURL: 'https://api.example.com',
|
|
21
|
+
headers: {
|
|
22
|
+
'Content-Type': 'application/json'
|
|
23
|
+
},
|
|
24
|
+
timeout: 5000
|
|
25
|
+
}));
|
|
26
|
+
|
|
27
|
+
// 发起请求
|
|
28
|
+
const users = await request.get('/users');
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## 配置选项
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
interface FetchRequestorConfig {
|
|
35
|
+
baseURL?: string; // API 基础 URL
|
|
36
|
+
headers?: Record<string, string>; // 默认请求头
|
|
37
|
+
timeout?: number; // 超时时间(毫秒)
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## 特性
|
|
42
|
+
|
|
43
|
+
- ✅ 轻量级,无额外依赖
|
|
44
|
+
- ✅ 支持现代浏览器和 Node.js 18+
|
|
45
|
+
- ✅ 原生 Promise 支持
|
|
46
|
+
- ✅ 支持 AbortController
|
|
47
|
+
- ✅ 完整的 TypeScript 类型
|
|
48
|
+
|
|
49
|
+
## 浏览器兼容性
|
|
50
|
+
|
|
51
|
+
- Chrome 42+
|
|
52
|
+
- Firefox 39+
|
|
53
|
+
- Safari 10.1+
|
|
54
|
+
- Edge 14+
|
|
55
|
+
- Node.js 18+
|
|
56
|
+
|
|
57
|
+
## 示例
|
|
58
|
+
|
|
59
|
+
### 基础用法
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
const requestor = new FetchRequestor({
|
|
63
|
+
baseURL: 'https://api.example.com'
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
const request = new Request(requestor);
|
|
67
|
+
const data = await request.get('/users');
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### 带认证
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
const requestor = new FetchRequestor({
|
|
74
|
+
baseURL: 'https://api.example.com',
|
|
75
|
+
headers: {
|
|
76
|
+
'Authorization': 'Bearer your-token'
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### 超时控制
|
|
82
|
+
|
|
83
|
+
```typescript
|
|
84
|
+
const requestor = new FetchRequestor({
|
|
85
|
+
baseURL: 'https://api.example.com',
|
|
86
|
+
timeout: 10000 // 10 秒超时
|
|
87
|
+
});
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## 文档
|
|
91
|
+
|
|
92
|
+
查看完整文档:[https://sunny-117.github.io/ureq](https://sunny-117.github.io/ureq)
|
|
93
|
+
|
|
94
|
+
## License
|
|
95
|
+
|
|
96
|
+
MIT
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,125 @@
|
|
|
1
|
-
'use strict';
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var core = require('@ureq/core');
|
|
4
|
+
|
|
5
|
+
// src/index.ts
|
|
6
|
+
var FetchRequestor = class {
|
|
7
|
+
constructor(options) {
|
|
8
|
+
this.baseURL = options?.baseURL || "";
|
|
9
|
+
this.defaultHeaders = options?.defaultHeaders || {};
|
|
10
|
+
}
|
|
11
|
+
getFullURL(url) {
|
|
12
|
+
return this.baseURL ? new URL(url, this.baseURL).toString() : url;
|
|
13
|
+
}
|
|
14
|
+
async convertResponse(response) {
|
|
15
|
+
let data;
|
|
16
|
+
try {
|
|
17
|
+
data = await response.json();
|
|
18
|
+
} catch {
|
|
19
|
+
data = await response.text();
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
data,
|
|
23
|
+
status: response.status,
|
|
24
|
+
statusText: response.statusText,
|
|
25
|
+
headers: Object.fromEntries(response.headers.entries())
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
handleError(error, method, url) {
|
|
29
|
+
throw core.createRequestError(error, { method, url });
|
|
30
|
+
}
|
|
31
|
+
createRequestInit(method, data, options) {
|
|
32
|
+
return {
|
|
33
|
+
method,
|
|
34
|
+
headers: {
|
|
35
|
+
"Content-Type": "application/json",
|
|
36
|
+
...this.defaultHeaders,
|
|
37
|
+
...options?.headers
|
|
38
|
+
},
|
|
39
|
+
body: data ? JSON.stringify(data) : void 0,
|
|
40
|
+
signal: options?.signal,
|
|
41
|
+
credentials: "same-origin",
|
|
42
|
+
...options
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
async get(url, options) {
|
|
46
|
+
try {
|
|
47
|
+
const fullUrl = this.getFullURL(url);
|
|
48
|
+
const response = await fetch(
|
|
49
|
+
fullUrl,
|
|
50
|
+
this.createRequestInit("GET", void 0, options)
|
|
51
|
+
);
|
|
52
|
+
if (!response.ok) {
|
|
53
|
+
throw response;
|
|
54
|
+
}
|
|
55
|
+
return this.convertResponse(response);
|
|
56
|
+
} catch (error) {
|
|
57
|
+
this.handleError(error, "GET", url);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async post(url, data, options) {
|
|
61
|
+
try {
|
|
62
|
+
const fullUrl = this.getFullURL(url);
|
|
63
|
+
const response = await fetch(
|
|
64
|
+
fullUrl,
|
|
65
|
+
this.createRequestInit("POST", data, options)
|
|
66
|
+
);
|
|
67
|
+
if (!response.ok) {
|
|
68
|
+
throw response;
|
|
69
|
+
}
|
|
70
|
+
return this.convertResponse(response);
|
|
71
|
+
} catch (error) {
|
|
72
|
+
this.handleError(error, "POST", url);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async put(url, data, options) {
|
|
76
|
+
try {
|
|
77
|
+
const fullUrl = this.getFullURL(url);
|
|
78
|
+
const response = await fetch(
|
|
79
|
+
fullUrl,
|
|
80
|
+
this.createRequestInit("PUT", data, options)
|
|
81
|
+
);
|
|
82
|
+
if (!response.ok) {
|
|
83
|
+
throw response;
|
|
84
|
+
}
|
|
85
|
+
return this.convertResponse(response);
|
|
86
|
+
} catch (error) {
|
|
87
|
+
this.handleError(error, "PUT", url);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async delete(url, options) {
|
|
91
|
+
try {
|
|
92
|
+
const fullUrl = this.getFullURL(url);
|
|
93
|
+
const response = await fetch(
|
|
94
|
+
fullUrl,
|
|
95
|
+
this.createRequestInit("DELETE", void 0, options)
|
|
96
|
+
);
|
|
97
|
+
if (!response.ok) {
|
|
98
|
+
throw response;
|
|
99
|
+
}
|
|
100
|
+
return this.convertResponse(response);
|
|
101
|
+
} catch (error) {
|
|
102
|
+
this.handleError(error, "DELETE", url);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async patch(url, data, options) {
|
|
106
|
+
try {
|
|
107
|
+
const fullUrl = this.getFullURL(url);
|
|
108
|
+
const response = await fetch(
|
|
109
|
+
fullUrl,
|
|
110
|
+
this.createRequestInit("PATCH", data, options)
|
|
111
|
+
);
|
|
112
|
+
if (!response.ok) {
|
|
113
|
+
throw response;
|
|
114
|
+
}
|
|
115
|
+
return this.convertResponse(response);
|
|
116
|
+
} catch (error) {
|
|
117
|
+
this.handleError(error, "PATCH", url);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// 实现其他方法...
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
exports.FetchRequestor = FetchRequestor;
|
|
124
|
+
//# sourceMappingURL=index.js.map
|
|
2
125
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":["
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":["createRequestError"],"mappings":";;;;;AAOO,IAAM,iBAAN,MAA0C;AAAA,EAI/C,YAAY,OAAiC,EAAA;AAC3C,IAAK,IAAA,CAAA,OAAA,GAAU,SAAS,OAAW,IAAA,EAAA;AACnC,IAAK,IAAA,CAAA,cAAA,GAAiB,OAAS,EAAA,cAAA,IAAkB,EAAC;AAAA;AACpD,EAEQ,WAAW,GAAqB,EAAA;AACtC,IAAO,OAAA,IAAA,CAAK,UAAU,IAAI,GAAA,CAAI,KAAK,IAAK,CAAA,OAAO,CAAE,CAAA,QAAA,EAAa,GAAA,GAAA;AAAA;AAChE,EAEA,MAAc,gBAAmB,QAAqD,EAAA;AACpF,IAAI,IAAA,IAAA;AAEJ,IAAI,IAAA;AACF,MAAO,IAAA,GAAA,MAAM,SAAS,IAAK,EAAA;AAAA,KACrB,CAAA,MAAA;AACN,MAAO,IAAA,GAAA,MAAM,SAAS,IAAK,EAAA;AAAA;AAG7B,IAAO,OAAA;AAAA,MACL,IAAA;AAAA,MACA,QAAQ,QAAS,CAAA,MAAA;AAAA,MACjB,YAAY,QAAS,CAAA,UAAA;AAAA,MACrB,SAAS,MAAO,CAAA,WAAA,CAAY,QAAS,CAAA,OAAA,CAAQ,SAAS;AAAA,KACxD;AAAA;AACF,EAEQ,WAAA,CAAY,KAAY,EAAA,MAAA,EAAiB,GAAqB,EAAA;AACpE,IAAA,MAAMA,uBAAmB,CAAA,KAAA,EAAO,EAAE,MAAA,EAAQ,KAAK,CAAA;AAAA;AACjD,EAEQ,iBAAA,CACN,MACA,EAAA,IAAA,EACA,OACa,EAAA;AACb,IAAO,OAAA;AAAA,MACL,MAAA;AAAA,MACA,OAAS,EAAA;AAAA,QACP,cAAgB,EAAA,kBAAA;AAAA,QAChB,GAAG,IAAK,CAAA,cAAA;AAAA,QACR,GAAG,OAAS,EAAA;AAAA,OACd;AAAA,MACA,IAAM,EAAA,IAAA,GAAO,IAAK,CAAA,SAAA,CAAU,IAAI,CAAI,GAAA,MAAA;AAAA,MACpC,QAAQ,OAAS,EAAA,MAAA;AAAA,MACjB,WAAa,EAAA,aAAA;AAAA,MACb,GAAG;AAAA,KACL;AAAA;AACF,EAEA,MAAM,GAAO,CAAA,GAAA,EAAa,OAAgD,EAAA;AACxE,IAAI,IAAA;AACF,MAAM,MAAA,OAAA,GAAU,IAAK,CAAA,UAAA,CAAW,GAAG,CAAA;AACnC,MAAA,MAAM,WAAW,MAAM,KAAA;AAAA,QACrB,OAAA;AAAA,QACA,IAAK,CAAA,iBAAA,CAAkB,KAAO,EAAA,KAAA,CAAA,EAAW,OAAO;AAAA,OAClD;AAEA,MAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,QAAM,MAAA,QAAA;AAAA;AAGR,MAAO,OAAA,IAAA,CAAK,gBAAgB,QAAQ,CAAA;AAAA,aAC7B,KAAO,EAAA;AACd,MAAK,IAAA,CAAA,WAAA,CAAY,KAAO,EAAA,KAAA,EAAO,GAAG,CAAA;AAAA;AACpC;AACF,EAEA,MAAM,IAAA,CAAQ,GAAa,EAAA,IAAA,EAAY,OAAgD,EAAA;AACrF,IAAI,IAAA;AACF,MAAM,MAAA,OAAA,GAAU,IAAK,CAAA,UAAA,CAAW,GAAG,CAAA;AACnC,MAAA,MAAM,WAAW,MAAM,KAAA;AAAA,QACrB,OAAA;AAAA,QACA,IAAK,CAAA,iBAAA,CAAkB,MAAQ,EAAA,IAAA,EAAM,OAAO;AAAA,OAC9C;AAEA,MAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,QAAM,MAAA,QAAA;AAAA;AAGR,MAAO,OAAA,IAAA,CAAK,gBAAgB,QAAQ,CAAA;AAAA,aAC7B,KAAO,EAAA;AACd,MAAK,IAAA,CAAA,WAAA,CAAY,KAAO,EAAA,MAAA,EAAQ,GAAG,CAAA;AAAA;AACrC;AACF,EAEA,MAAM,GAAA,CAAO,GAAa,EAAA,IAAA,EAAY,OAAgD,EAAA;AACpF,IAAI,IAAA;AACF,MAAM,MAAA,OAAA,GAAU,IAAK,CAAA,UAAA,CAAW,GAAG,CAAA;AACnC,MAAA,MAAM,WAAW,MAAM,KAAA;AAAA,QACrB,OAAA;AAAA,QACA,IAAK,CAAA,iBAAA,CAAkB,KAAO,EAAA,IAAA,EAAM,OAAO;AAAA,OAC7C;AAEA,MAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,QAAM,MAAA,QAAA;AAAA;AAGR,MAAO,OAAA,IAAA,CAAK,gBAAgB,QAAQ,CAAA;AAAA,aAC7B,KAAO,EAAA;AACd,MAAK,IAAA,CAAA,WAAA,CAAY,KAAO,EAAA,KAAA,EAAO,GAAG,CAAA;AAAA;AACpC;AACF,EAEA,MAAM,MAAU,CAAA,GAAA,EAAa,OAAgD,EAAA;AAC3E,IAAI,IAAA;AACF,MAAM,MAAA,OAAA,GAAU,IAAK,CAAA,UAAA,CAAW,GAAG,CAAA;AACnC,MAAA,MAAM,WAAW,MAAM,KAAA;AAAA,QACrB,OAAA;AAAA,QACA,IAAK,CAAA,iBAAA,CAAkB,QAAU,EAAA,KAAA,CAAA,EAAW,OAAO;AAAA,OACrD;AAEA,MAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,QAAM,MAAA,QAAA;AAAA;AAGR,MAAO,OAAA,IAAA,CAAK,gBAAgB,QAAQ,CAAA;AAAA,aAC7B,KAAO,EAAA;AACd,MAAK,IAAA,CAAA,WAAA,CAAY,KAAO,EAAA,QAAA,EAAU,GAAG,CAAA;AAAA;AACvC;AACF,EAEA,MAAM,KAAA,CAAS,GAAa,EAAA,IAAA,EAAY,OAAgD,EAAA;AACtF,IAAI,IAAA;AACF,MAAM,MAAA,OAAA,GAAU,IAAK,CAAA,UAAA,CAAW,GAAG,CAAA;AACnC,MAAA,MAAM,WAAW,MAAM,KAAA;AAAA,QACrB,OAAA;AAAA,QACA,IAAK,CAAA,iBAAA,CAAkB,OAAS,EAAA,IAAA,EAAM,OAAO;AAAA,OAC/C;AAEA,MAAI,IAAA,CAAC,SAAS,EAAI,EAAA;AAChB,QAAM,MAAA,QAAA;AAAA;AAGR,MAAO,OAAA,IAAA,CAAK,gBAAgB,QAAQ,CAAA;AAAA,aAC7B,KAAO,EAAA;AACd,MAAK,IAAA,CAAA,WAAA,CAAY,KAAO,EAAA,OAAA,EAAS,GAAG,CAAA;AAAA;AACtC;AACF;AAGF","file":"index.js","sourcesContent":["import { Requestor, RequestOptions, Response, RequestError, createRequestError } from '@ureq/core';\n\nexport interface FetchRequestorOptions {\n baseURL?: string;\n defaultHeaders?: Record<string, string>;\n}\n\nexport class FetchRequestor implements Requestor {\n private baseURL: string;\n private defaultHeaders: Record<string, string>;\n\n constructor(options?: FetchRequestorOptions) {\n this.baseURL = options?.baseURL || '';\n this.defaultHeaders = options?.defaultHeaders || {};\n }\n\n private getFullURL(url: string): string {\n return this.baseURL ? new URL(url, this.baseURL).toString() : url;\n }\n\n private async convertResponse<T>(response: globalThis.Response): Promise<Response<T>> {\n let data: T;\n \n try {\n data = await response.json();\n } catch {\n data = await response.text() as any;\n }\n\n return {\n data,\n status: response.status,\n statusText: response.statusText,\n headers: Object.fromEntries(response.headers.entries()),\n };\n }\n\n private handleError(error: any, method?: string, url?: string): never {\n throw createRequestError(error, { method, url });\n }\n\n private createRequestInit(\n method: string,\n data?: any,\n options?: RequestOptions\n ): RequestInit {\n return {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...this.defaultHeaders,\n ...options?.headers,\n },\n body: data ? JSON.stringify(data) : undefined,\n signal: options?.signal,\n credentials: 'same-origin',\n ...options,\n };\n }\n\n async get<T>(url: string, options?: RequestOptions): Promise<Response<T>> {\n try {\n const fullUrl = this.getFullURL(url);\n const response = await fetch(\n fullUrl,\n this.createRequestInit('GET', undefined, options)\n );\n\n if (!response.ok) {\n throw response;\n }\n\n return this.convertResponse(response);\n } catch (error) {\n this.handleError(error, 'GET', url);\n }\n }\n\n async post<T>(url: string, data?: any, options?: RequestOptions): Promise<Response<T>> {\n try {\n const fullUrl = this.getFullURL(url);\n const response = await fetch(\n fullUrl,\n this.createRequestInit('POST', data, options)\n );\n\n if (!response.ok) {\n throw response;\n }\n\n return this.convertResponse(response);\n } catch (error) {\n this.handleError(error, 'POST', url);\n }\n }\n\n async put<T>(url: string, data?: any, options?: RequestOptions): Promise<Response<T>> {\n try {\n const fullUrl = this.getFullURL(url);\n const response = await fetch(\n fullUrl,\n this.createRequestInit('PUT', data, options)\n );\n\n if (!response.ok) {\n throw response;\n }\n\n return this.convertResponse(response);\n } catch (error) {\n this.handleError(error, 'PUT', url);\n }\n }\n\n async delete<T>(url: string, options?: RequestOptions): Promise<Response<T>> {\n try {\n const fullUrl = this.getFullURL(url);\n const response = await fetch(\n fullUrl,\n this.createRequestInit('DELETE', undefined, options)\n );\n\n if (!response.ok) {\n throw response;\n }\n\n return this.convertResponse(response);\n } catch (error) {\n this.handleError(error, 'DELETE', url);\n }\n }\n\n async patch<T>(url: string, data?: any, options?: RequestOptions): Promise<Response<T>> {\n try {\n const fullUrl = this.getFullURL(url);\n const response = await fetch(\n fullUrl,\n this.createRequestInit('PATCH', data, options)\n );\n\n if (!response.ok) {\n throw response;\n }\n\n return this.convertResponse(response);\n } catch (error) {\n this.handleError(error, 'PATCH', url);\n }\n }\n\n // 实现其他方法...\n} "]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,123 @@
|
|
|
1
|
-
import {createRequestError}from'@ureq/core';
|
|
1
|
+
import { createRequestError } from '@ureq/core';
|
|
2
|
+
|
|
3
|
+
// src/index.ts
|
|
4
|
+
var FetchRequestor = class {
|
|
5
|
+
constructor(options) {
|
|
6
|
+
this.baseURL = options?.baseURL || "";
|
|
7
|
+
this.defaultHeaders = options?.defaultHeaders || {};
|
|
8
|
+
}
|
|
9
|
+
getFullURL(url) {
|
|
10
|
+
return this.baseURL ? new URL(url, this.baseURL).toString() : url;
|
|
11
|
+
}
|
|
12
|
+
async convertResponse(response) {
|
|
13
|
+
let data;
|
|
14
|
+
try {
|
|
15
|
+
data = await response.json();
|
|
16
|
+
} catch {
|
|
17
|
+
data = await response.text();
|
|
18
|
+
}
|
|
19
|
+
return {
|
|
20
|
+
data,
|
|
21
|
+
status: response.status,
|
|
22
|
+
statusText: response.statusText,
|
|
23
|
+
headers: Object.fromEntries(response.headers.entries())
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
handleError(error, method, url) {
|
|
27
|
+
throw createRequestError(error, { method, url });
|
|
28
|
+
}
|
|
29
|
+
createRequestInit(method, data, options) {
|
|
30
|
+
return {
|
|
31
|
+
method,
|
|
32
|
+
headers: {
|
|
33
|
+
"Content-Type": "application/json",
|
|
34
|
+
...this.defaultHeaders,
|
|
35
|
+
...options?.headers
|
|
36
|
+
},
|
|
37
|
+
body: data ? JSON.stringify(data) : void 0,
|
|
38
|
+
signal: options?.signal,
|
|
39
|
+
credentials: "same-origin",
|
|
40
|
+
...options
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
async get(url, options) {
|
|
44
|
+
try {
|
|
45
|
+
const fullUrl = this.getFullURL(url);
|
|
46
|
+
const response = await fetch(
|
|
47
|
+
fullUrl,
|
|
48
|
+
this.createRequestInit("GET", void 0, options)
|
|
49
|
+
);
|
|
50
|
+
if (!response.ok) {
|
|
51
|
+
throw response;
|
|
52
|
+
}
|
|
53
|
+
return this.convertResponse(response);
|
|
54
|
+
} catch (error) {
|
|
55
|
+
this.handleError(error, "GET", url);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async post(url, data, options) {
|
|
59
|
+
try {
|
|
60
|
+
const fullUrl = this.getFullURL(url);
|
|
61
|
+
const response = await fetch(
|
|
62
|
+
fullUrl,
|
|
63
|
+
this.createRequestInit("POST", data, options)
|
|
64
|
+
);
|
|
65
|
+
if (!response.ok) {
|
|
66
|
+
throw response;
|
|
67
|
+
}
|
|
68
|
+
return this.convertResponse(response);
|
|
69
|
+
} catch (error) {
|
|
70
|
+
this.handleError(error, "POST", url);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
async put(url, data, options) {
|
|
74
|
+
try {
|
|
75
|
+
const fullUrl = this.getFullURL(url);
|
|
76
|
+
const response = await fetch(
|
|
77
|
+
fullUrl,
|
|
78
|
+
this.createRequestInit("PUT", data, options)
|
|
79
|
+
);
|
|
80
|
+
if (!response.ok) {
|
|
81
|
+
throw response;
|
|
82
|
+
}
|
|
83
|
+
return this.convertResponse(response);
|
|
84
|
+
} catch (error) {
|
|
85
|
+
this.handleError(error, "PUT", url);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async delete(url, options) {
|
|
89
|
+
try {
|
|
90
|
+
const fullUrl = this.getFullURL(url);
|
|
91
|
+
const response = await fetch(
|
|
92
|
+
fullUrl,
|
|
93
|
+
this.createRequestInit("DELETE", void 0, options)
|
|
94
|
+
);
|
|
95
|
+
if (!response.ok) {
|
|
96
|
+
throw response;
|
|
97
|
+
}
|
|
98
|
+
return this.convertResponse(response);
|
|
99
|
+
} catch (error) {
|
|
100
|
+
this.handleError(error, "DELETE", url);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async patch(url, data, options) {
|
|
104
|
+
try {
|
|
105
|
+
const fullUrl = this.getFullURL(url);
|
|
106
|
+
const response = await fetch(
|
|
107
|
+
fullUrl,
|
|
108
|
+
this.createRequestInit("PATCH", data, options)
|
|
109
|
+
);
|
|
110
|
+
if (!response.ok) {
|
|
111
|
+
throw response;
|
|
112
|
+
}
|
|
113
|
+
return this.convertResponse(response);
|
|
114
|
+
} catch (error) {
|
|
115
|
+
this.handleError(error, "PATCH", url);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// 实现其他方法...
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
export { FetchRequestor };
|
|
122
|
+
//# sourceMappingURL=index.mjs.map
|
|
2
123
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import { Requestor, RequestOptions, Response, RequestError, createRequestError } from '@ureq/core';\n\nexport interface FetchRequestorOptions {\n baseURL?: string;\n defaultHeaders?: Record<string, string>;\n}\n\nexport class FetchRequestor implements Requestor {\n private baseURL: string;\n private defaultHeaders: Record<string, string>;\n\n constructor(options?: FetchRequestorOptions) {\n this.baseURL = options?.baseURL || '';\n this.defaultHeaders = options?.defaultHeaders || {};\n }\n\n private getFullURL(url: string): string {\n return this.baseURL ? new URL(url, this.baseURL).toString() : url;\n }\n\n private async convertResponse<T>(response: globalThis.Response): Promise<Response<T>> {\n let data: T;\n \n try {\n data = await response.json();\n } catch {\n data = await response.text() as any;\n }\n\n return {\n data,\n status: response.status,\n statusText: response.statusText,\n headers: Object.fromEntries(response.headers.entries()),\n };\n }\n\n private handleError(error: any, method?: string, url?: string): never {\n throw createRequestError(error, { method, url });\n }\n\n private createRequestInit(\n method: string,\n data?: any,\n options?: RequestOptions\n ): RequestInit {\n return {\n method,\n headers: {\n 'Content-Type': 'application/json',\n ...this.defaultHeaders,\n ...options?.headers,\n },\n body: data ? JSON.stringify(data) : undefined,\n signal: options?.signal,\n credentials: 'same-origin',\n ...options,\n };\n }\n\n async get<T>(url: string, options?: RequestOptions): Promise<Response<T>> {\n try {\n const fullUrl = this.getFullURL(url);\n const response = await fetch(\n fullUrl,\n this.createRequestInit('GET', undefined, options)\n );\n\n if (!response.ok) {\n throw response;\n }\n\n return this.convertResponse(response);\n } catch (error) {\n this.handleError(error, 'GET', url);\n }\n }\n\n async post<T>(url: string, data?: any, options?: RequestOptions): Promise<Response<T>> {\n try {\n const fullUrl = this.getFullURL(url);\n const response = await fetch(\n fullUrl,\n this.createRequestInit('POST', data, options)\n );\n\n if (!response.ok) {\n throw response;\n }\n\n return this.convertResponse(response);\n } catch (error) {\n this.handleError(error, 'POST', url);\n }\n }\n\n async put<T>(url: string, data?: any, options?: RequestOptions): Promise<Response<T>> {\n try {\n const fullUrl = this.getFullURL(url);\n const response = await fetch(\n fullUrl,\n this.createRequestInit('PUT', data, options)\n );\n\n if (!response.ok) {\n throw response;\n }\n\n return this.convertResponse(response);\n } catch (error) {\n this.handleError(error, 'PUT', url);\n }\n }\n\n async delete<T>(url: string, options?: RequestOptions): Promise<Response<T>> {\n try {\n const fullUrl = this.getFullURL(url);\n const response = await fetch(\n fullUrl,\n this.createRequestInit('DELETE', undefined, options)\n );\n\n if (!response.ok) {\n throw response;\n }\n\n return this.convertResponse(response);\n } catch (error) {\n this.handleError(error, 'DELETE', url);\n }\n }\n\n async patch<T>(url: string, data?: any, options?: RequestOptions): Promise<Response<T>> {\n try {\n const fullUrl = this.getFullURL(url);\n const response = await fetch(\n fullUrl,\n this.createRequestInit('PATCH', data, options)\n );\n\n if (!response.ok) {\n throw response;\n }\n\n return this.convertResponse(response);\n } catch (error) {\n this.handleError(error, 'PATCH', url);\n }\n }\n\n // 实现其他方法...\n} "]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ureq/impl-fetch",
|
|
3
|
-
"version": "0.0.3
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"description": "Fetch implementation for universal request library",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"access": "public"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@ureq/core": "0.0.3
|
|
22
|
+
"@ureq/core": "0.0.3"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"tsup": "^8.3.6",
|