react-native-nitro-fetch 0.3.0-beta.0 → 0.3.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.
- package/NitroFetch.podspec +8 -0
- package/android/build.gradle +3 -0
- package/android/src/main/java/com/margelo/nitro/nitrofetch/NitroFetchClient.kt +46 -2
- package/android/src/main/java/com/margelo/nitro/nitrofetch/NitroFetchPackage.kt +2 -2
- package/ios/NitroFetchClient.swift +36 -1
- package/lib/module/CurlGenerator.js +28 -0
- package/lib/module/CurlGenerator.js.map +1 -0
- package/lib/module/Headers.js +95 -0
- package/lib/module/Headers.js.map +1 -0
- package/lib/module/HermesProfiler.js +28 -0
- package/lib/module/HermesProfiler.js.map +1 -0
- package/lib/module/NetworkInspector.js +184 -0
- package/lib/module/NetworkInspector.js.map +1 -0
- package/lib/module/Request.js +120 -0
- package/lib/module/Request.js.map +1 -0
- package/lib/module/Response.js +236 -0
- package/lib/module/Response.js.map +1 -0
- package/lib/module/fetch.js +143 -56
- package/lib/module/fetch.js.map +1 -1
- package/lib/module/index.js +6 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/utf8.js +29 -0
- package/lib/module/utf8.js.map +1 -0
- package/lib/typescript/src/CurlGenerator.d.ts +13 -0
- package/lib/typescript/src/CurlGenerator.d.ts.map +1 -0
- package/lib/typescript/src/Headers.d.ts +19 -0
- package/lib/typescript/src/Headers.d.ts.map +1 -0
- package/lib/typescript/src/HermesProfiler.d.ts +6 -0
- package/lib/typescript/src/HermesProfiler.d.ts.map +1 -0
- package/lib/typescript/src/NetworkInspector.d.ts +96 -0
- package/lib/typescript/src/NetworkInspector.d.ts.map +1 -0
- package/lib/typescript/src/Request.d.ts +48 -0
- package/lib/typescript/src/Request.d.ts.map +1 -0
- package/lib/typescript/src/Response.d.ts +56 -0
- package/lib/typescript/src/Response.d.ts.map +1 -0
- package/lib/typescript/src/fetch.d.ts +11 -3
- package/lib/typescript/src/fetch.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +13 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/utf8.d.ts +3 -0
- package/lib/typescript/src/utf8.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/CurlGenerator.ts +44 -0
- package/src/Headers.ts +127 -0
- package/src/HermesProfiler.ts +37 -0
- package/src/NetworkInspector.ts +278 -0
- package/src/Request.ts +187 -0
- package/src/Response.ts +335 -0
- package/src/fetch.ts +186 -75
- package/src/index.tsx +22 -1
- package/src/utf8.ts +40 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
export interface NetworkEntry {
|
|
2
|
+
id: string;
|
|
3
|
+
type: 'http';
|
|
4
|
+
url: string;
|
|
5
|
+
method: string;
|
|
6
|
+
requestHeaders: Array<{
|
|
7
|
+
key: string;
|
|
8
|
+
value: string;
|
|
9
|
+
}>;
|
|
10
|
+
requestBody: string | undefined;
|
|
11
|
+
requestBodySize: number;
|
|
12
|
+
status: number;
|
|
13
|
+
statusText: string;
|
|
14
|
+
responseHeaders: Array<{
|
|
15
|
+
key: string;
|
|
16
|
+
value: string;
|
|
17
|
+
}>;
|
|
18
|
+
responseBody?: string;
|
|
19
|
+
responseBodySize: number;
|
|
20
|
+
startTime: number;
|
|
21
|
+
endTime: number;
|
|
22
|
+
duration: number;
|
|
23
|
+
curl: string;
|
|
24
|
+
error?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface WebSocketMessage {
|
|
27
|
+
direction: 'sent' | 'received';
|
|
28
|
+
data: string;
|
|
29
|
+
size: number;
|
|
30
|
+
isBinary: boolean;
|
|
31
|
+
timestamp: number;
|
|
32
|
+
}
|
|
33
|
+
export interface WebSocketEntry {
|
|
34
|
+
id: string;
|
|
35
|
+
type: 'websocket';
|
|
36
|
+
url: string;
|
|
37
|
+
protocols: string[];
|
|
38
|
+
requestHeaders: Array<{
|
|
39
|
+
key: string;
|
|
40
|
+
value: string;
|
|
41
|
+
}>;
|
|
42
|
+
startTime: number;
|
|
43
|
+
endTime: number;
|
|
44
|
+
duration: number;
|
|
45
|
+
readyState: string;
|
|
46
|
+
messages: WebSocketMessage[];
|
|
47
|
+
messagesSent: number;
|
|
48
|
+
messagesReceived: number;
|
|
49
|
+
bytesSent: number;
|
|
50
|
+
bytesReceived: number;
|
|
51
|
+
closeCode?: number;
|
|
52
|
+
closeReason?: string;
|
|
53
|
+
error?: string;
|
|
54
|
+
}
|
|
55
|
+
export type InspectorEntry = NetworkEntry | WebSocketEntry;
|
|
56
|
+
export type NetworkEntryCallback = (entry: InspectorEntry) => void;
|
|
57
|
+
declare class NetworkInspectorImpl {
|
|
58
|
+
private _enabled;
|
|
59
|
+
private _entries;
|
|
60
|
+
private _maxEntries;
|
|
61
|
+
private _maxBodyCapture;
|
|
62
|
+
private _listeners;
|
|
63
|
+
enable(options?: {
|
|
64
|
+
maxEntries?: number;
|
|
65
|
+
maxBodyCapture?: number;
|
|
66
|
+
}): void;
|
|
67
|
+
disable(): void;
|
|
68
|
+
isEnabled(): boolean;
|
|
69
|
+
getEntries(): ReadonlyArray<InspectorEntry>;
|
|
70
|
+
getHttpEntries(): ReadonlyArray<NetworkEntry>;
|
|
71
|
+
getWebSocketEntries(): ReadonlyArray<WebSocketEntry>;
|
|
72
|
+
getEntry(id: string): InspectorEntry | undefined;
|
|
73
|
+
clear(): void;
|
|
74
|
+
onEntry(callback: NetworkEntryCallback): () => void;
|
|
75
|
+
private _notify;
|
|
76
|
+
private _trimEntries;
|
|
77
|
+
_recordStart(id: string, url: string, method: string, headers: Array<{
|
|
78
|
+
key: string;
|
|
79
|
+
value: string;
|
|
80
|
+
}>, body?: string): void;
|
|
81
|
+
_recordEnd(id: string, status: number, statusText: string, headers: Array<{
|
|
82
|
+
key: string;
|
|
83
|
+
value: string;
|
|
84
|
+
}>, bodySize: number, error?: string, responseBody?: string): void;
|
|
85
|
+
_recordWsOpen(id: string, url: string, protocols: string[], headers: Array<{
|
|
86
|
+
key: string;
|
|
87
|
+
value: string;
|
|
88
|
+
}>): void;
|
|
89
|
+
_recordWsConnected(id: string): void;
|
|
90
|
+
_recordWsMessage(id: string, direction: 'sent' | 'received', data: string, size: number, isBinary: boolean): void;
|
|
91
|
+
_recordWsClose(id: string, code: number, reason: string): void;
|
|
92
|
+
_recordWsError(id: string, error: string): void;
|
|
93
|
+
}
|
|
94
|
+
export declare const NetworkInspector: NetworkInspectorImpl;
|
|
95
|
+
export {};
|
|
96
|
+
//# sourceMappingURL=NetworkInspector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkInspector.d.ts","sourceRoot":"","sources":["../../../src/NetworkInspector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { NitroHeaders } from './Headers';
|
|
2
|
+
export type RequestRedirect = 'follow' | 'error' | 'manual';
|
|
3
|
+
export type RequestCache = 'default' | 'no-store' | 'no-cache' | 'reload' | 'force-cache' | 'only-if-cached';
|
|
4
|
+
export interface NitroRequestInit {
|
|
5
|
+
method?: string;
|
|
6
|
+
headers?: HeadersInit | NitroHeaders;
|
|
7
|
+
body?: BodyInit | null;
|
|
8
|
+
redirect?: RequestRedirect;
|
|
9
|
+
signal?: AbortSignal | null;
|
|
10
|
+
cache?: RequestCache;
|
|
11
|
+
credentials?: RequestCredentials;
|
|
12
|
+
mode?: RequestMode;
|
|
13
|
+
referrer?: string;
|
|
14
|
+
referrerPolicy?: ReferrerPolicy;
|
|
15
|
+
integrity?: string;
|
|
16
|
+
keepalive?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare class NitroRequest {
|
|
19
|
+
readonly url: string;
|
|
20
|
+
readonly method: string;
|
|
21
|
+
readonly headers: NitroHeaders;
|
|
22
|
+
readonly redirect: RequestRedirect;
|
|
23
|
+
readonly signal: AbortSignal;
|
|
24
|
+
readonly cache: RequestCache;
|
|
25
|
+
readonly credentials: RequestCredentials;
|
|
26
|
+
readonly mode: RequestMode;
|
|
27
|
+
readonly referrer: string;
|
|
28
|
+
readonly referrerPolicy: ReferrerPolicy;
|
|
29
|
+
readonly integrity: string;
|
|
30
|
+
readonly keepalive: boolean;
|
|
31
|
+
readonly destination: string;
|
|
32
|
+
private _body;
|
|
33
|
+
private _bodyUsed;
|
|
34
|
+
constructor(input: string | URL | NitroRequest, init?: NitroRequestInit);
|
|
35
|
+
get bodyUsed(): boolean;
|
|
36
|
+
get body(): ReadableStream<Uint8Array> | null;
|
|
37
|
+
private _throwIfBodyUsed;
|
|
38
|
+
private _getBodyBytes;
|
|
39
|
+
private _getBodyString;
|
|
40
|
+
text(): Promise<string>;
|
|
41
|
+
json(): Promise<any>;
|
|
42
|
+
arrayBuffer(): Promise<ArrayBuffer>;
|
|
43
|
+
blob(): Promise<Blob>;
|
|
44
|
+
bytes(): Promise<Uint8Array>;
|
|
45
|
+
clone(): NitroRequest;
|
|
46
|
+
formData(): Promise<never>;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=Request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Request.d.ts","sourceRoot":"","sources":["../../../src/Request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAC5D,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,UAAU,GACV,UAAU,GACV,QAAQ,GACR,aAAa,GACb,gBAAgB,CAAC;AAErB,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC;IACrC,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,YAAY;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,SAAS,CAAkB;gBAEvB,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,YAAY,EAAE,IAAI,CAAC,EAAE,gBAAgB;IA+CvE,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,IAAI,IAAI,cAAc,CAAC,UAAU,CAAC,GAAG,IAAI,CAU5C;IAED,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,aAAa;IAoBrB,OAAO,CAAC,cAAc;IAQhB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAMvB,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC;IAOpB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IAMnC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQrB,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC;IAOlC,KAAK,IAAI,YAAY;IAOf,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC;CAGjC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { NitroHeaders } from './Headers';
|
|
2
|
+
import type { NitroHeader } from './NitroFetch.nitro';
|
|
3
|
+
export type ResponseType = 'basic' | 'cors' | 'default' | 'error' | 'opaque' | 'opaqueredirect';
|
|
4
|
+
export interface NitroResponseInit {
|
|
5
|
+
url: string;
|
|
6
|
+
status: number;
|
|
7
|
+
statusText: string;
|
|
8
|
+
ok: boolean;
|
|
9
|
+
redirected: boolean;
|
|
10
|
+
headers: NitroHeader[] | NitroHeaders;
|
|
11
|
+
bodyBytes?: ArrayBuffer;
|
|
12
|
+
bodyString?: string;
|
|
13
|
+
body?: ReadableStream<Uint8Array>;
|
|
14
|
+
type?: ResponseType;
|
|
15
|
+
}
|
|
16
|
+
export type BodyInit = string | Blob | ArrayBuffer | ArrayBufferView | ReadableStream<Uint8Array> | URLSearchParams | null;
|
|
17
|
+
export interface ResponseInit {
|
|
18
|
+
status?: number;
|
|
19
|
+
statusText?: string;
|
|
20
|
+
headers?: HeadersInit;
|
|
21
|
+
}
|
|
22
|
+
export declare class NitroResponse {
|
|
23
|
+
readonly url: string;
|
|
24
|
+
readonly ok: boolean;
|
|
25
|
+
readonly status: number;
|
|
26
|
+
readonly statusText: string;
|
|
27
|
+
readonly redirected: boolean;
|
|
28
|
+
readonly headers: NitroHeaders;
|
|
29
|
+
readonly type: ResponseType;
|
|
30
|
+
private _bodyBytes;
|
|
31
|
+
private _bodyString;
|
|
32
|
+
private _bodyStream;
|
|
33
|
+
private _bodyUsed;
|
|
34
|
+
constructor(body?: BodyInit | null, init?: ResponseInit);
|
|
35
|
+
constructor(init: NitroResponseInit);
|
|
36
|
+
get bodyUsed(): boolean;
|
|
37
|
+
get body(): ReadableStream<Uint8Array> | null;
|
|
38
|
+
private _throwIfBodyUsed;
|
|
39
|
+
private _getBodyBytes;
|
|
40
|
+
private _getBodyString;
|
|
41
|
+
text(): Promise<string>;
|
|
42
|
+
json(): Promise<any>;
|
|
43
|
+
arrayBuffer(): Promise<ArrayBuffer>;
|
|
44
|
+
blob(): Promise<Blob>;
|
|
45
|
+
bytes(): Promise<Uint8Array>;
|
|
46
|
+
clone(): NitroResponse;
|
|
47
|
+
formData(): Promise<never>;
|
|
48
|
+
static error(): NitroResponse;
|
|
49
|
+
static json(data: unknown, init?: {
|
|
50
|
+
status?: number;
|
|
51
|
+
statusText?: string;
|
|
52
|
+
headers?: Record<string, string> | [string, string][];
|
|
53
|
+
}): NitroResponse;
|
|
54
|
+
static redirect(url: string, status?: number): NitroResponse;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=Response.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Response.d.ts","sourceRoot":"","sources":["../../../src/Response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,MAAM,YAAY,GACpB,OAAO,GACP,MAAM,GACN,SAAS,GACT,OAAO,GACP,QAAQ,GACR,gBAAgB,CAAC;AAErB,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC;IACtC,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IAClC,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED,MAAM,MAAM,QAAQ,GAChB,MAAM,GACN,IAAI,GACJ,WAAW,GACX,eAAe,GACf,cAAc,CAAC,UAAU,CAAC,GAC1B,eAAe,GACf,IAAI,CAAC;AAET,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAYD,qBAAa,aAAa;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAE5B,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,WAAW,CAAyC;IAC5D,OAAO,CAAC,SAAS,CAAkB;gBAEvB,IAAI,CAAC,EAAE,QAAQ,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,YAAY;gBAC3C,IAAI,EAAE,iBAAiB;IAyEnC,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,IAAI,IAAI,cAAc,CAAC,UAAU,CAAC,GAAG,IAAI,CAU5C;IAED,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,cAAc;IAQhB,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IA0BvB,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC;IAOpB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IA4BnC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IASrB,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC;IAOlC,KAAK,IAAI,aAAa;IAiBhB,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC;IAMhC,MAAM,CAAC,KAAK,IAAI,aAAa;IAY7B,MAAM,CAAC,IAAI,CACT,IAAI,EAAE,OAAO,EACb,IAAI,CAAC,EAAE;QACL,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;KACvD,GACA,aAAa;IAiBhB,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,MAAY,GAAG,aAAa;CAkBlE"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import 'web-streams-polyfill/polyfill';
|
|
2
|
-
import type { NitroHeader, NitroRequest } from './NitroFetch.nitro';
|
|
3
|
-
|
|
2
|
+
import type { NitroHeader, NitroRequest as NitroRequestNative } from './NitroFetch.nitro';
|
|
3
|
+
import type { RequestRedirect, RequestCache } from './Request';
|
|
4
|
+
export declare function buildNitroRequestPure(input: RequestInfo | URL, init?: RequestInit): NitroRequestNative;
|
|
4
5
|
export declare function nitroFetch(input: RequestInfo | URL, init?: RequestInit & {
|
|
5
6
|
stream?: boolean;
|
|
7
|
+
redirect?: RequestRedirect;
|
|
8
|
+
cache?: RequestCache;
|
|
6
9
|
}): Promise<Response>;
|
|
7
10
|
export declare function prefetch(input: RequestInfo | URL, init?: RequestInit): Promise<void>;
|
|
8
11
|
export declare function prefetchOnAppStart(input: RequestInfo | URL, init?: RequestInit & {
|
|
@@ -24,5 +27,10 @@ export declare function nitroFetchOnWorklet<T>(input: RequestInfo | URL, init: R
|
|
|
24
27
|
preferBytes?: boolean;
|
|
25
28
|
runtimeName?: string;
|
|
26
29
|
}): Promise<T>;
|
|
27
|
-
export type { NitroFormDataPart
|
|
30
|
+
export type { NitroFormDataPart } from './NitroFetch.nitro';
|
|
31
|
+
export type { NitroRequest as NitroRequestNativeType, NitroResponse as NitroResponseNativeType, } from './NitroFetch.nitro';
|
|
32
|
+
export { NitroHeaders } from './Headers';
|
|
33
|
+
export { NitroResponse } from './Response';
|
|
34
|
+
export { NitroRequest as NitroRequestClass } from './Request';
|
|
35
|
+
export type { RequestRedirect, RequestCache } from './Request';
|
|
28
36
|
//# sourceMappingURL=fetch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAGV,WAAW,EACX,YAAY,
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAGV,WAAW,EACX,YAAY,IAAI,kBAAkB,EAEnC,MAAM,oBAAoB,CAAC;AAU5B,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAoT/D,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,GACjB,kBAAkB,CAwCpB;AAiRD,wBAAsB,UAAU,CAC9B,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,GAAG;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB,GACA,OAAO,CAAC,QAAQ,CAAC,CAqCnB;AAGD,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAGD,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5C,OAAO,CAAC,IAAI,CAAC,CAkDf;AAGD,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAsBf;AAGD,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAG/D;AAGD,MAAM,MAAM,kBAAkB,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,KAAK,CAAC,CAAC;AAcR,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC,EACjC,OAAO,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACxD,OAAO,CAAC,CAAC,CAAC,CA8CZ;AAED,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,YAAY,EACV,YAAY,IAAI,sBAAsB,EACtC,aAAa,IAAI,uBAAuB,GACzC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,YAAY,IAAI,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9D,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
export { nitroFetch as fetch, nitroFetchOnWorklet, prefetch, prefetchOnAppStart, removeFromAutoPrefetch, removeAllFromAutoprefetch, } from './fetch';
|
|
2
|
-
export type { NitroFormDataPart
|
|
2
|
+
export type { NitroFormDataPart } from './fetch';
|
|
3
|
+
export type { NitroRequestNativeType as NitroRequest, NitroResponseNativeType as NitroResponse, } from './fetch';
|
|
4
|
+
export type { RequestRedirect, RequestCache } from './fetch';
|
|
5
|
+
export type { BodyInit, ResponseInit } from './Response';
|
|
6
|
+
export { NitroHeaders as Headers } from './Headers';
|
|
7
|
+
export { NitroResponse as Response } from './Response';
|
|
8
|
+
export { NitroRequest as Request } from './Request';
|
|
3
9
|
export { NitroFetch } from './NitroInstances';
|
|
4
10
|
export { registerTokenRefresh, clearTokenRefresh, callRefreshEndpoint, getStoredTokenRefreshConfig, getNestedField, applyTemplate, } from './tokenRefresh';
|
|
5
11
|
export type { TokenRefreshConfig } from './tokenRefresh';
|
|
12
|
+
export { NetworkInspector } from './NetworkInspector';
|
|
13
|
+
export type { NetworkEntry, NetworkEntryCallback, WebSocketEntry, WebSocketMessage, InspectorEntry, } from './NetworkInspector';
|
|
14
|
+
export { generateCurl } from './CurlGenerator';
|
|
15
|
+
export type { CurlOptions } from './CurlGenerator';
|
|
16
|
+
export { profileFetch } from './HermesProfiler';
|
|
17
|
+
export type { ProfileResult } from './HermesProfiler';
|
|
6
18
|
import './fetch';
|
|
7
19
|
export declare function multiply(a: number, b: number): number;
|
|
8
20
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,IAAI,KAAK,EACnB,mBAAmB,EACnB,QAAQ,EACR,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,iBAAiB,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,IAAI,KAAK,EACnB,mBAAmB,EACnB,QAAQ,EACR,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACjD,YAAY,EACV,sBAAsB,IAAI,YAAY,EACtC,uBAAuB,IAAI,aAAa,GACzC,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7D,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,aAAa,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,YAAY,IAAI,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,2BAA2B,EAC3B,cAAc,EACd,aAAa,GACd,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EACV,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,SAAS,CAAC;AAIjB,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAErD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utf8.d.ts","sourceRoot":"","sources":["../../../src/utf8.ts"],"names":[],"mappings":"AAqBA,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAQpD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAQtD"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export interface CurlOptions {
|
|
2
|
+
url: string;
|
|
3
|
+
method: string;
|
|
4
|
+
headers?: Array<{ key: string; value: string }>;
|
|
5
|
+
body?: string;
|
|
6
|
+
verbose?: boolean;
|
|
7
|
+
compressed?: boolean;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
function shellEscape(str: string): string {
|
|
11
|
+
if (/^[a-zA-Z0-9._\-/:=@,+]+$/.test(str)) return str;
|
|
12
|
+
return "'" + str.replace(/'/g, "'\\''") + "'";
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function generateCurl(options: CurlOptions): string {
|
|
16
|
+
const parts: string[] = ['curl'];
|
|
17
|
+
|
|
18
|
+
if (options.method && options.method !== 'GET') {
|
|
19
|
+
parts.push('-X', shellEscape(options.method));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (options.headers) {
|
|
23
|
+
for (const h of options.headers) {
|
|
24
|
+
if (h.key.toLowerCase() === 'prefetchkey') continue;
|
|
25
|
+
parts.push('-H', shellEscape(`${h.key}: ${h.value}`));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (options.body) {
|
|
30
|
+
const maxLen = 10_000;
|
|
31
|
+
const truncated =
|
|
32
|
+
options.body.length > maxLen
|
|
33
|
+
? options.body.slice(0, maxLen) + '...[truncated]'
|
|
34
|
+
: options.body;
|
|
35
|
+
parts.push('-d', shellEscape(truncated));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
if (options.verbose) parts.push('-v');
|
|
39
|
+
if (options.compressed) parts.push('--compressed');
|
|
40
|
+
|
|
41
|
+
parts.push(shellEscape(options.url));
|
|
42
|
+
|
|
43
|
+
return parts.join(' ');
|
|
44
|
+
}
|
package/src/Headers.ts
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import type { NitroHeader } from './NitroFetch.nitro';
|
|
2
|
+
|
|
3
|
+
type HeadersInitInput =
|
|
4
|
+
| NitroHeaders
|
|
5
|
+
| NitroHeader[]
|
|
6
|
+
| [string, string][]
|
|
7
|
+
| Record<string, string>
|
|
8
|
+
| Headers
|
|
9
|
+
| undefined;
|
|
10
|
+
|
|
11
|
+
function normalizeName(name: string): string {
|
|
12
|
+
return name.toLowerCase();
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export class NitroHeaders {
|
|
16
|
+
private _map: Map<string, string[]>;
|
|
17
|
+
|
|
18
|
+
constructor(init?: HeadersInitInput) {
|
|
19
|
+
this._map = new Map();
|
|
20
|
+
if (!init) return;
|
|
21
|
+
|
|
22
|
+
if (init instanceof NitroHeaders) {
|
|
23
|
+
init._map.forEach((values, key) => {
|
|
24
|
+
this._map.set(key, [...values]);
|
|
25
|
+
});
|
|
26
|
+
} else if (typeof Headers !== 'undefined' && init instanceof Headers) {
|
|
27
|
+
init.forEach((value, key) => {
|
|
28
|
+
this._map.set(normalizeName(key), [value]);
|
|
29
|
+
});
|
|
30
|
+
} else if (Array.isArray(init)) {
|
|
31
|
+
for (const entry of init) {
|
|
32
|
+
if (Array.isArray(entry) && entry.length >= 2) {
|
|
33
|
+
// [string, string] tuple
|
|
34
|
+
const key = normalizeName(String(entry[0]));
|
|
35
|
+
const value = String(entry[1]);
|
|
36
|
+
const existing = this._map.get(key);
|
|
37
|
+
if (existing) existing.push(value);
|
|
38
|
+
else this._map.set(key, [value]);
|
|
39
|
+
} else if (
|
|
40
|
+
entry &&
|
|
41
|
+
typeof entry === 'object' &&
|
|
42
|
+
'key' in entry &&
|
|
43
|
+
'value' in entry
|
|
44
|
+
) {
|
|
45
|
+
// NitroHeader object
|
|
46
|
+
const key = normalizeName((entry as NitroHeader).key);
|
|
47
|
+
const value = (entry as NitroHeader).value;
|
|
48
|
+
const existing = this._map.get(key);
|
|
49
|
+
if (existing) existing.push(value);
|
|
50
|
+
else this._map.set(key, [value]);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
} else if (typeof init === 'object' && init !== null) {
|
|
54
|
+
const keys = Object.keys(init as Record<string, string>);
|
|
55
|
+
for (let i = 0; i < keys.length; i++) {
|
|
56
|
+
const k = keys[i]!;
|
|
57
|
+
const v = (init as Record<string, string>)[k];
|
|
58
|
+
if (v !== undefined) {
|
|
59
|
+
this._map.set(normalizeName(k), [String(v)]);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
append(name: string, value: string): void {
|
|
66
|
+
const key = normalizeName(name);
|
|
67
|
+
const existing = this._map.get(key);
|
|
68
|
+
if (existing) existing.push(value);
|
|
69
|
+
else this._map.set(key, [value]);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
delete(name: string): void {
|
|
73
|
+
this._map.delete(normalizeName(name));
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
get(name: string): string | null {
|
|
77
|
+
const values = this._map.get(normalizeName(name));
|
|
78
|
+
if (!values || values.length === 0) return null;
|
|
79
|
+
return values.join(', ');
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
getSetCookie(): string[] {
|
|
83
|
+
return this._map.get('set-cookie') ?? [];
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
has(name: string): boolean {
|
|
87
|
+
return this._map.has(normalizeName(name));
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
set(name: string, value: string): void {
|
|
91
|
+
this._map.set(normalizeName(name), [value]);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
forEach(
|
|
95
|
+
callback: (value: string, key: string, headers: NitroHeaders) => void
|
|
96
|
+
): void {
|
|
97
|
+
const sortedKeys = Array.from(this._map.keys()).sort();
|
|
98
|
+
for (const key of sortedKeys) {
|
|
99
|
+
callback(this._map.get(key)!.join(', '), key, this);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
*entries(): IterableIterator<[string, string]> {
|
|
104
|
+
const sortedKeys = Array.from(this._map.keys()).sort();
|
|
105
|
+
for (const key of sortedKeys) {
|
|
106
|
+
yield [key, this._map.get(key)!.join(', ')];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
*keys(): IterableIterator<string> {
|
|
111
|
+
const sortedKeys = Array.from(this._map.keys()).sort();
|
|
112
|
+
for (const key of sortedKeys) {
|
|
113
|
+
yield key;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
*values(): IterableIterator<string> {
|
|
118
|
+
const sortedKeys = Array.from(this._map.keys()).sort();
|
|
119
|
+
for (const key of sortedKeys) {
|
|
120
|
+
yield this._map.get(key)!.join(', ');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
[Symbol.iterator](): IterableIterator<[string, string]> {
|
|
125
|
+
return this.entries();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
declare const global: {
|
|
2
|
+
HermesInternal?: {
|
|
3
|
+
enableSamplingProfiler(): void;
|
|
4
|
+
disableSamplingProfiler(): void;
|
|
5
|
+
dumpSamplingProfiler(filename: string): void;
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export interface ProfileResult<T> {
|
|
10
|
+
result: T;
|
|
11
|
+
profilePath?: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export async function profileFetch<T>(
|
|
15
|
+
fn: () => Promise<T>,
|
|
16
|
+
outputPath?: string
|
|
17
|
+
): Promise<ProfileResult<T>> {
|
|
18
|
+
const hermes = global.HermesInternal;
|
|
19
|
+
if (!hermes) {
|
|
20
|
+
const result = await fn();
|
|
21
|
+
return { result };
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const path = outputPath ?? `/tmp/nitrofetch-profile-${Date.now()}.cpuprofile`;
|
|
25
|
+
hermes.enableSamplingProfiler();
|
|
26
|
+
try {
|
|
27
|
+
const result = await fn();
|
|
28
|
+
return { result, profilePath: path };
|
|
29
|
+
} finally {
|
|
30
|
+
hermes.disableSamplingProfiler();
|
|
31
|
+
try {
|
|
32
|
+
hermes.dumpSamplingProfiler(path);
|
|
33
|
+
} catch {
|
|
34
|
+
// Profile dump may fail on some platforms
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|