@yh-ui/request 0.1.21
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/LICENSE +21 -0
- package/README.md +274 -0
- package/dist/adapters/fetch.cjs +157 -0
- package/dist/adapters/fetch.d.ts +25 -0
- package/dist/adapters/fetch.mjs +148 -0
- package/dist/adapters/index.cjs +27 -0
- package/dist/adapters/index.d.ts +5 -0
- package/dist/adapters/index.mjs +2 -0
- package/dist/adapters/platform.cjs +394 -0
- package/dist/adapters/platform.d.ts +72 -0
- package/dist/adapters/platform.mjs +369 -0
- package/dist/cache/index.cjs +56 -0
- package/dist/cache/index.d.ts +21 -0
- package/dist/cache/index.mjs +14 -0
- package/dist/cache/indexedDB.cjs +188 -0
- package/dist/cache/indexedDB.d.ts +58 -0
- package/dist/cache/indexedDB.mjs +176 -0
- package/dist/cache/localStorage.cjs +158 -0
- package/dist/cache/localStorage.d.ts +58 -0
- package/dist/cache/localStorage.mjs +153 -0
- package/dist/cache/memory.cjs +112 -0
- package/dist/cache/memory.d.ts +71 -0
- package/dist/cache/memory.mjs +103 -0
- package/dist/graphql.cjs +255 -0
- package/dist/graphql.d.ts +192 -0
- package/dist/graphql.mjs +235 -0
- package/dist/http-cache.cjs +248 -0
- package/dist/http-cache.d.ts +156 -0
- package/dist/http-cache.mjs +233 -0
- package/dist/index.cjs +181 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.mjs +16 -0
- package/dist/interceptors/debug.cjs +139 -0
- package/dist/interceptors/debug.d.ts +92 -0
- package/dist/interceptors/debug.mjs +130 -0
- package/dist/interceptors/index.cjs +38 -0
- package/dist/interceptors/index.d.ts +6 -0
- package/dist/interceptors/index.mjs +3 -0
- package/dist/interceptors/progress.cjs +185 -0
- package/dist/interceptors/progress.d.ts +97 -0
- package/dist/interceptors/progress.mjs +177 -0
- package/dist/interceptors/security.cjs +154 -0
- package/dist/interceptors/security.d.ts +83 -0
- package/dist/interceptors/security.mjs +134 -0
- package/dist/plugin.cjs +166 -0
- package/dist/plugin.d.ts +106 -0
- package/dist/plugin.mjs +163 -0
- package/dist/request.cjs +396 -0
- package/dist/request.d.ts +111 -0
- package/dist/request.mjs +339 -0
- package/dist/types.cjs +13 -0
- package/dist/types.d.ts +157 -0
- package/dist/types.mjs +7 -0
- package/dist/useAIStream.cjs +125 -0
- package/dist/useAIStream.d.ts +89 -0
- package/dist/useAIStream.mjs +108 -0
- package/dist/useLoadMore.cjs +136 -0
- package/dist/useLoadMore.d.ts +84 -0
- package/dist/useLoadMore.mjs +134 -0
- package/dist/usePagination.cjs +141 -0
- package/dist/usePagination.d.ts +89 -0
- package/dist/usePagination.mjs +132 -0
- package/dist/useQueue.cjs +243 -0
- package/dist/useQueue.d.ts +118 -0
- package/dist/useQueue.mjs +239 -0
- package/dist/useRequest.cjs +325 -0
- package/dist/useRequest.d.ts +126 -0
- package/dist/useRequest.mjs +329 -0
- package/dist/useRequestQueue.cjs +36 -0
- package/dist/useRequestQueue.d.ts +52 -0
- package/dist/useRequestQueue.mjs +27 -0
- package/dist/useSSE.cjs +241 -0
- package/dist/useSSE.d.ts +74 -0
- package/dist/useSSE.mjs +226 -0
- package/dist/websocket.cjs +325 -0
- package/dist/websocket.d.ts +163 -0
- package/dist/websocket.mjs +316 -0
- package/package.json +61 -0
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.NodeHttpAdapter = exports.EdgeAdapter = exports.DenoAdapter = exports.BunAdapter = void 0;
|
|
7
|
+
exports.detectPlatform = detectPlatform;
|
|
8
|
+
exports.getAdapter = getAdapter;
|
|
9
|
+
exports.getBestAdapter = getBestAdapter;
|
|
10
|
+
exports.platform = void 0;
|
|
11
|
+
function detectPlatform() {
|
|
12
|
+
const globalObj = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : {};
|
|
13
|
+
if (typeof Deno !== "undefined") {
|
|
14
|
+
return {
|
|
15
|
+
environment: "deno",
|
|
16
|
+
supportsFetch: true,
|
|
17
|
+
supportsFormData: true,
|
|
18
|
+
supportsAbortController: true
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
if (typeof Bun !== "undefined") {
|
|
22
|
+
return {
|
|
23
|
+
environment: "bun",
|
|
24
|
+
supportsFetch: true,
|
|
25
|
+
supportsFormData: true,
|
|
26
|
+
supportsAbortController: true
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
if (globalObj.edgeRuntime !== void 0 || typeof navigator !== "undefined" && navigator.userAgent.includes("Cloudflare") || globalObj.caches !== void 0) {
|
|
30
|
+
return {
|
|
31
|
+
environment: "edge",
|
|
32
|
+
supportsFetch: true,
|
|
33
|
+
supportsFormData: true,
|
|
34
|
+
supportsAbortController: true
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
if (typeof process !== "undefined" && process.versions?.node) {
|
|
38
|
+
return {
|
|
39
|
+
environment: "node",
|
|
40
|
+
supportsFetch: typeof fetch !== "undefined",
|
|
41
|
+
supportsFormData: typeof FormData !== "undefined",
|
|
42
|
+
supportsAbortController: typeof AbortController !== "undefined"
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
environment: "browser",
|
|
47
|
+
supportsFetch: typeof fetch !== "undefined",
|
|
48
|
+
supportsFormData: typeof FormData !== "undefined",
|
|
49
|
+
supportsAbortController: typeof AbortController !== "undefined"
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
const platform = exports.platform = detectPlatform();
|
|
53
|
+
class NodeHttpAdapter {
|
|
54
|
+
name = "node-http";
|
|
55
|
+
http = NodeHttpAdapter.getHttpModule();
|
|
56
|
+
static getHttpModule() {
|
|
57
|
+
try {
|
|
58
|
+
return require("http");
|
|
59
|
+
} catch {
|
|
60
|
+
throw new Error("Node.js http module is not available");
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
isSupported() {
|
|
64
|
+
return typeof process !== "undefined" && !!process.versions?.node;
|
|
65
|
+
}
|
|
66
|
+
async request(config) {
|
|
67
|
+
const {
|
|
68
|
+
fullPath,
|
|
69
|
+
method = "GET",
|
|
70
|
+
headers = {},
|
|
71
|
+
data,
|
|
72
|
+
signal,
|
|
73
|
+
credentials
|
|
74
|
+
} = config;
|
|
75
|
+
return new Promise((resolve, reject) => {
|
|
76
|
+
const urlObj = new URL(fullPath);
|
|
77
|
+
const isHttps = urlObj.protocol === "https:";
|
|
78
|
+
const httpModule = isHttps ? require("https") : this.http;
|
|
79
|
+
const options = {
|
|
80
|
+
hostname: urlObj.hostname,
|
|
81
|
+
port: urlObj.port || (isHttps ? 443 : 80),
|
|
82
|
+
path: urlObj.pathname + urlObj.search,
|
|
83
|
+
method,
|
|
84
|
+
headers: {
|
|
85
|
+
...headers,
|
|
86
|
+
// 处理凭证
|
|
87
|
+
...(credentials === "include" ? {
|
|
88
|
+
Cookie: ""
|
|
89
|
+
} : {})
|
|
90
|
+
},
|
|
91
|
+
timeout: config.timeout || 3e4
|
|
92
|
+
};
|
|
93
|
+
if (isHttps) {
|
|
94
|
+
Object.assign(options, {
|
|
95
|
+
rejectUnauthorized: false
|
|
96
|
+
// 允许自签名证书(可选配置)
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
const req = httpModule.request(options, res => {
|
|
100
|
+
const chunks = [];
|
|
101
|
+
res.on("data", chunk => {
|
|
102
|
+
chunks.push(chunk);
|
|
103
|
+
});
|
|
104
|
+
res.on("end", () => {
|
|
105
|
+
const body = Buffer.concat(chunks).toString("utf-8");
|
|
106
|
+
let responseData;
|
|
107
|
+
if (config.responseType === "text") {
|
|
108
|
+
responseData = body;
|
|
109
|
+
} else if (config.responseType === "arraybuffer") {
|
|
110
|
+
responseData = Buffer.from(body).buffer;
|
|
111
|
+
} else if (config.responseType === "blob") {
|
|
112
|
+
responseData = Buffer.from(body);
|
|
113
|
+
} else {
|
|
114
|
+
try {
|
|
115
|
+
responseData = body ? JSON.parse(body) : null;
|
|
116
|
+
} catch {
|
|
117
|
+
responseData = body;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const mockResponse = {
|
|
121
|
+
ok: (res.statusCode || 200) >= 200 && (res.statusCode || 200) < 300,
|
|
122
|
+
status: res.statusCode || 200,
|
|
123
|
+
statusText: res.statusMessage || "",
|
|
124
|
+
headers: res.headers,
|
|
125
|
+
text: () => Promise.resolve(body),
|
|
126
|
+
json: () => Promise.resolve(responseData),
|
|
127
|
+
blob: () => Promise.resolve(Buffer.from(body)),
|
|
128
|
+
arrayBuffer: () => Promise.resolve(Buffer.from(body).buffer),
|
|
129
|
+
formData: () => Promise.resolve(new URLSearchParams(body))
|
|
130
|
+
};
|
|
131
|
+
resolve({
|
|
132
|
+
data: responseData,
|
|
133
|
+
response: mockResponse,
|
|
134
|
+
config,
|
|
135
|
+
requestId: config.requestId
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
req.on("timeout", () => {
|
|
140
|
+
req.destroy();
|
|
141
|
+
reject(new Error("Request timeout"));
|
|
142
|
+
});
|
|
143
|
+
req.on("error", error => {
|
|
144
|
+
reject(error);
|
|
145
|
+
});
|
|
146
|
+
if (signal) {
|
|
147
|
+
signal.addEventListener("abort", () => {
|
|
148
|
+
req.destroy();
|
|
149
|
+
reject(new DOMException("Aborted", "AbortError"));
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
if (data && method !== "GET") {
|
|
153
|
+
const body = typeof data === "string" ? data : JSON.stringify(data);
|
|
154
|
+
req.write(body);
|
|
155
|
+
}
|
|
156
|
+
req.end();
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
exports.NodeHttpAdapter = NodeHttpAdapter;
|
|
161
|
+
class DenoAdapter {
|
|
162
|
+
name = "deno";
|
|
163
|
+
isSupported() {
|
|
164
|
+
return typeof globalThis.Deno !== "undefined";
|
|
165
|
+
}
|
|
166
|
+
async request(config) {
|
|
167
|
+
const {
|
|
168
|
+
fullPath,
|
|
169
|
+
method = "GET",
|
|
170
|
+
headers = {},
|
|
171
|
+
data,
|
|
172
|
+
signal,
|
|
173
|
+
credentials,
|
|
174
|
+
responseType,
|
|
175
|
+
timeout
|
|
176
|
+
} = config;
|
|
177
|
+
const fetchOptions = {
|
|
178
|
+
method,
|
|
179
|
+
headers,
|
|
180
|
+
credentials
|
|
181
|
+
};
|
|
182
|
+
if (data && method !== "GET") {
|
|
183
|
+
if (data instanceof FormData) {
|
|
184
|
+
fetchOptions.body = data;
|
|
185
|
+
} else {
|
|
186
|
+
fetchOptions.body = JSON.stringify(data);
|
|
187
|
+
if (!headers["Content-Type"]) {
|
|
188
|
+
;
|
|
189
|
+
fetchOptions.headers["Content-Type"] = "application/json";
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
const controller = new AbortController();
|
|
194
|
+
fetchOptions.signal = controller.signal;
|
|
195
|
+
if (timeout) {
|
|
196
|
+
setTimeout(() => controller.abort(), timeout).unref?.();
|
|
197
|
+
}
|
|
198
|
+
if (signal) {
|
|
199
|
+
signal.addEventListener("abort", () => controller.abort());
|
|
200
|
+
}
|
|
201
|
+
const response = await fetch(fullPath, fetchOptions);
|
|
202
|
+
let responseData;
|
|
203
|
+
switch (responseType) {
|
|
204
|
+
case "text":
|
|
205
|
+
responseData = await response.text();
|
|
206
|
+
break;
|
|
207
|
+
case "blob":
|
|
208
|
+
responseData = await response.blob();
|
|
209
|
+
break;
|
|
210
|
+
case "arraybuffer":
|
|
211
|
+
responseData = await response.arrayBuffer();
|
|
212
|
+
break;
|
|
213
|
+
case "formdata":
|
|
214
|
+
responseData = await response.formData();
|
|
215
|
+
break;
|
|
216
|
+
default:
|
|
217
|
+
const text = await response.text();
|
|
218
|
+
responseData = text ? JSON.parse(text) : null;
|
|
219
|
+
}
|
|
220
|
+
return {
|
|
221
|
+
data: responseData,
|
|
222
|
+
response,
|
|
223
|
+
config,
|
|
224
|
+
requestId: config.requestId
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
exports.DenoAdapter = DenoAdapter;
|
|
229
|
+
class BunAdapter {
|
|
230
|
+
name = "bun";
|
|
231
|
+
isSupported() {
|
|
232
|
+
return typeof globalThis.Bun !== "undefined";
|
|
233
|
+
}
|
|
234
|
+
// Bun 直接使用 fetch,与 FetchAdapter 相同
|
|
235
|
+
// 但保留此类以便未来可能的 Bun 特定优化
|
|
236
|
+
async request(config) {
|
|
237
|
+
const {
|
|
238
|
+
fullPath,
|
|
239
|
+
method = "GET",
|
|
240
|
+
headers = {},
|
|
241
|
+
data,
|
|
242
|
+
signal,
|
|
243
|
+
credentials,
|
|
244
|
+
responseType,
|
|
245
|
+
timeout
|
|
246
|
+
} = config;
|
|
247
|
+
const fetchOptions = {
|
|
248
|
+
method,
|
|
249
|
+
headers,
|
|
250
|
+
credentials
|
|
251
|
+
};
|
|
252
|
+
if (data && method !== "GET") {
|
|
253
|
+
if (data instanceof FormData) {
|
|
254
|
+
fetchOptions.body = data;
|
|
255
|
+
} else {
|
|
256
|
+
fetchOptions.body = JSON.stringify(data);
|
|
257
|
+
if (!headers["Content-Type"]) {
|
|
258
|
+
;
|
|
259
|
+
fetchOptions.headers["Content-Type"] = "application/json";
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
if (timeout) {
|
|
264
|
+
const controller = new AbortController();
|
|
265
|
+
fetchOptions.signal = controller.signal;
|
|
266
|
+
setTimeout(() => controller.abort(), timeout);
|
|
267
|
+
} else if (signal) {
|
|
268
|
+
fetchOptions.signal = signal;
|
|
269
|
+
}
|
|
270
|
+
const response = await fetch(fullPath, fetchOptions);
|
|
271
|
+
let responseData;
|
|
272
|
+
switch (responseType) {
|
|
273
|
+
case "text":
|
|
274
|
+
responseData = await response.text();
|
|
275
|
+
break;
|
|
276
|
+
case "blob":
|
|
277
|
+
responseData = await response.blob();
|
|
278
|
+
break;
|
|
279
|
+
case "arraybuffer":
|
|
280
|
+
responseData = await response.arrayBuffer();
|
|
281
|
+
break;
|
|
282
|
+
case "formdata":
|
|
283
|
+
responseData = await response.formData();
|
|
284
|
+
break;
|
|
285
|
+
default:
|
|
286
|
+
const text = await response.text();
|
|
287
|
+
responseData = text ? JSON.parse(text) : null;
|
|
288
|
+
}
|
|
289
|
+
return {
|
|
290
|
+
data: responseData,
|
|
291
|
+
response,
|
|
292
|
+
config,
|
|
293
|
+
requestId: config.requestId
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
exports.BunAdapter = BunAdapter;
|
|
298
|
+
class EdgeAdapter {
|
|
299
|
+
name = "edge";
|
|
300
|
+
isSupported() {
|
|
301
|
+
return platform.environment === "edge";
|
|
302
|
+
}
|
|
303
|
+
async request(config) {
|
|
304
|
+
const {
|
|
305
|
+
fullPath,
|
|
306
|
+
method = "GET",
|
|
307
|
+
headers = {},
|
|
308
|
+
data,
|
|
309
|
+
signal,
|
|
310
|
+
credentials,
|
|
311
|
+
responseType,
|
|
312
|
+
timeout
|
|
313
|
+
} = config;
|
|
314
|
+
const fetchOptions = {
|
|
315
|
+
method,
|
|
316
|
+
headers,
|
|
317
|
+
credentials
|
|
318
|
+
};
|
|
319
|
+
if (data && method !== "GET") {
|
|
320
|
+
if (data instanceof URLSearchParams) {
|
|
321
|
+
fetchOptions.body = data;
|
|
322
|
+
} else {
|
|
323
|
+
fetchOptions.body = JSON.stringify(data);
|
|
324
|
+
if (!headers["Content-Type"]) {
|
|
325
|
+
;
|
|
326
|
+
fetchOptions.headers["Content-Type"] = "application/json";
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
if (timeout) {
|
|
331
|
+
const controller = new AbortController();
|
|
332
|
+
fetchOptions.signal = controller.signal;
|
|
333
|
+
setTimeout(() => controller.abort(), timeout);
|
|
334
|
+
} else if (signal) {
|
|
335
|
+
fetchOptions.signal = signal;
|
|
336
|
+
}
|
|
337
|
+
const response = await fetch(fullPath, fetchOptions);
|
|
338
|
+
let responseData;
|
|
339
|
+
switch (responseType) {
|
|
340
|
+
case "text":
|
|
341
|
+
responseData = await response.text();
|
|
342
|
+
break;
|
|
343
|
+
case "blob":
|
|
344
|
+
responseData = await response.blob();
|
|
345
|
+
break;
|
|
346
|
+
case "arraybuffer":
|
|
347
|
+
responseData = await response.arrayBuffer();
|
|
348
|
+
break;
|
|
349
|
+
default:
|
|
350
|
+
const text = await response.text();
|
|
351
|
+
responseData = text ? JSON.parse(text) : null;
|
|
352
|
+
}
|
|
353
|
+
return {
|
|
354
|
+
data: responseData,
|
|
355
|
+
response,
|
|
356
|
+
config,
|
|
357
|
+
requestId: config.requestId
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
exports.EdgeAdapter = EdgeAdapter;
|
|
362
|
+
function getBestAdapter() {
|
|
363
|
+
const {
|
|
364
|
+
environment
|
|
365
|
+
} = platform;
|
|
366
|
+
switch (environment) {
|
|
367
|
+
case "deno":
|
|
368
|
+
return new DenoAdapter();
|
|
369
|
+
case "bun":
|
|
370
|
+
return new BunAdapter();
|
|
371
|
+
case "edge":
|
|
372
|
+
return new EdgeAdapter();
|
|
373
|
+
case "node":
|
|
374
|
+
return new NodeHttpAdapter();
|
|
375
|
+
case "browser":
|
|
376
|
+
default:
|
|
377
|
+
return new (require("./fetch.cjs").FetchAdapter)();
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
function getAdapter(environment) {
|
|
381
|
+
switch (environment) {
|
|
382
|
+
case "deno":
|
|
383
|
+
return new DenoAdapter();
|
|
384
|
+
case "bun":
|
|
385
|
+
return new BunAdapter();
|
|
386
|
+
case "edge":
|
|
387
|
+
return new EdgeAdapter();
|
|
388
|
+
case "node":
|
|
389
|
+
return new NodeHttpAdapter();
|
|
390
|
+
case "browser":
|
|
391
|
+
default:
|
|
392
|
+
return new (require("./fetch.cjs").FetchAdapter)();
|
|
393
|
+
}
|
|
394
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 跨平台适配器
|
|
3
|
+
* 支持 Node.js、Deno、Bun、边缘计算环境
|
|
4
|
+
*/
|
|
5
|
+
import type { InternalRequestOptions, RequestResponse, HttpAdapter } from '../types';
|
|
6
|
+
/** 环境类型 */
|
|
7
|
+
export type RuntimeEnvironment = 'browser' | 'node' | 'deno' | 'bun' | 'edge';
|
|
8
|
+
/** 平台检测结果 */
|
|
9
|
+
export interface PlatformInfo {
|
|
10
|
+
/** 当前环境 */
|
|
11
|
+
environment: RuntimeEnvironment;
|
|
12
|
+
/** 是否支持 fetch */
|
|
13
|
+
supportsFetch: boolean;
|
|
14
|
+
/** 是否支持 FormData */
|
|
15
|
+
supportsFormData: boolean;
|
|
16
|
+
/** 是否支持 AbortController */
|
|
17
|
+
supportsAbortController: boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 检测当前运行环境
|
|
21
|
+
*/
|
|
22
|
+
export declare function detectPlatform(): PlatformInfo;
|
|
23
|
+
/**
|
|
24
|
+
* 获取当前平台信息
|
|
25
|
+
*/
|
|
26
|
+
export declare const platform: PlatformInfo;
|
|
27
|
+
/**
|
|
28
|
+
* Node.js HTTP 适配器
|
|
29
|
+
* 使用原生 http/https 模块,无需额外依赖
|
|
30
|
+
*/
|
|
31
|
+
export declare class NodeHttpAdapter implements HttpAdapter {
|
|
32
|
+
name: string;
|
|
33
|
+
private http;
|
|
34
|
+
private static getHttpModule;
|
|
35
|
+
isSupported(): boolean;
|
|
36
|
+
request<T>(config: InternalRequestOptions): Promise<RequestResponse<T>>;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Deno 适配器
|
|
40
|
+
* 使用 Deno 标准库 fetch
|
|
41
|
+
*/
|
|
42
|
+
export declare class DenoAdapter implements HttpAdapter {
|
|
43
|
+
name: string;
|
|
44
|
+
isSupported(): boolean;
|
|
45
|
+
request<T>(config: InternalRequestOptions): Promise<RequestResponse<T>>;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Bun 适配器
|
|
49
|
+
* 使用 Bun 原生 fetch 和 FormData
|
|
50
|
+
*/
|
|
51
|
+
export declare class BunAdapter implements HttpAdapter {
|
|
52
|
+
name: string;
|
|
53
|
+
isSupported(): boolean;
|
|
54
|
+
request<T>(config: InternalRequestOptions): Promise<RequestResponse<T>>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* 边缘计算适配器
|
|
58
|
+
* 针对 Cloudflare Workers、Vercel Edge 等环境优化
|
|
59
|
+
*/
|
|
60
|
+
export declare class EdgeAdapter implements HttpAdapter {
|
|
61
|
+
name: string;
|
|
62
|
+
isSupported(): boolean;
|
|
63
|
+
request<T>(config: InternalRequestOptions): Promise<RequestResponse<T>>;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 自动选择最佳适配器
|
|
67
|
+
*/
|
|
68
|
+
export declare function getBestAdapter(): HttpAdapter;
|
|
69
|
+
/**
|
|
70
|
+
* 根据环境名称获取适配器
|
|
71
|
+
*/
|
|
72
|
+
export declare function getAdapter(environment: RuntimeEnvironment): HttpAdapter;
|