react-native-nitro-fetch 1.3.1 → 1.3.2

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.
Files changed (38) hide show
  1. package/android/build.gradle +12 -0
  2. package/android/src/main/java/com/margelo/nitro/nitrofetch/AutoPrefetcher.kt +148 -55
  3. package/ios/NitroAutoPrefetcher.swift +149 -53
  4. package/lib/module/CurlGenerator.js.map +2 -1
  5. package/lib/module/HermesProfiler.js.map +1 -2
  6. package/lib/module/NetworkInspector.js +4 -0
  7. package/lib/module/NetworkInspector.js.map +1 -1
  8. package/lib/module/NitroFetch.nitro.js.map +1 -2
  9. package/lib/module/NitroInstances.js.map +1 -1
  10. package/lib/module/Request.js.map +2 -1
  11. package/lib/module/Response.js +3 -1
  12. package/lib/module/Response.js.map +2 -2
  13. package/lib/module/fetch.js +8 -10
  14. package/lib/module/fetch.js.map +1 -1
  15. package/lib/module/index.js.map +1 -2
  16. package/lib/module/index.web.js +1 -1
  17. package/lib/module/index.web.js.map +2 -1
  18. package/lib/module/tokenRefresh.js +1 -4
  19. package/lib/module/tokenRefresh.js.map +2 -1
  20. package/lib/module/utf8.js.map +2 -2
  21. package/lib/typescript/src/fetch.d.ts.map +1 -1
  22. package/lib/typescript/src/tokenRefresh.d.ts +14 -0
  23. package/lib/typescript/src/tokenRefresh.d.ts.map +1 -1
  24. package/package.json +1 -1
  25. package/src/CurlGenerator.js +23 -26
  26. package/src/Headers.js +108 -116
  27. package/src/HermesProfiler.js +16 -18
  28. package/src/NetworkInspector.js +171 -179
  29. package/src/NitroInstances.js +2 -1
  30. package/src/Request.js +167 -164
  31. package/src/Response.js +244 -242
  32. package/src/fetch.js +708 -693
  33. package/src/fetch.ts +15 -16
  34. package/src/index.js +17 -2
  35. package/src/index.web.js +69 -67
  36. package/src/tokenRefresh.js +75 -77
  37. package/src/tokenRefresh.ts +16 -0
  38. package/src/utf8.js +28 -27
@@ -1,31 +1,28 @@
1
1
  function shellEscape(str) {
2
- if (/^[a-zA-Z0-9._\-/:=@,+]+$/.test(str))
3
- return str;
4
- return "'" + str.replace(/'/g, "'\\''") + "'";
2
+ if (/^[a-zA-Z0-9._\-/:=@,+]+$/.test(str)) return str;
3
+ return "'" + str.replace(/'/g, "'\\''") + "'";
5
4
  }
6
5
  export function generateCurl(options) {
7
- const parts = ['curl'];
8
- if (options.method && options.method !== 'GET') {
9
- parts.push('-X', shellEscape(options.method));
6
+ const parts = ['curl'];
7
+ if (options.method && options.method !== 'GET') {
8
+ parts.push('-X', shellEscape(options.method));
9
+ }
10
+ if (options.headers) {
11
+ for (const h of options.headers) {
12
+ if (h.key.toLowerCase() === 'prefetchkey') continue;
13
+ parts.push('-H', shellEscape(`${h.key}: ${h.value}`));
10
14
  }
11
- if (options.headers) {
12
- for (const h of options.headers) {
13
- if (h.key.toLowerCase() === 'prefetchkey')
14
- continue;
15
- parts.push('-H', shellEscape(`${h.key}: ${h.value}`));
16
- }
17
- }
18
- if (options.body) {
19
- const maxLen = 10_000;
20
- const truncated = options.body.length > maxLen
21
- ? options.body.slice(0, maxLen) + '...[truncated]'
22
- : options.body;
23
- parts.push('-d', shellEscape(truncated));
24
- }
25
- if (options.verbose)
26
- parts.push('-v');
27
- if (options.compressed)
28
- parts.push('--compressed');
29
- parts.push(shellEscape(options.url));
30
- return parts.join(' ');
15
+ }
16
+ if (options.body) {
17
+ const maxLen = 10_000;
18
+ const truncated =
19
+ options.body.length > maxLen
20
+ ? options.body.slice(0, maxLen) + '...[truncated]'
21
+ : options.body;
22
+ parts.push('-d', shellEscape(truncated));
23
+ }
24
+ if (options.verbose) parts.push('-v');
25
+ if (options.compressed) parts.push('--compressed');
26
+ parts.push(shellEscape(options.url));
27
+ return parts.join(' ');
31
28
  }
package/src/Headers.js CHANGED
@@ -1,127 +1,119 @@
1
1
  function normalizeName(name) {
2
- return name.toLowerCase();
2
+ return name.toLowerCase();
3
3
  }
4
4
  export class NitroHeaders {
5
- _map;
6
- constructor(init) {
7
- this._map = new Map();
8
- if (!init)
9
- return;
10
- if (init instanceof NitroHeaders) {
11
- init._map.forEach((values, key) => {
12
- this._map.set(key, [...values]);
13
- });
5
+ _map;
6
+ constructor(init) {
7
+ this._map = new Map();
8
+ if (!init) return;
9
+ if (init instanceof NitroHeaders) {
10
+ init._map.forEach((values, key) => {
11
+ this._map.set(key, [...values]);
12
+ });
13
+ } else if (
14
+ typeof init === 'object' &&
15
+ !Array.isArray(init) &&
16
+ typeof init.forEach === 'function' &&
17
+ typeof init.get === 'function'
18
+ ) {
19
+ // Headers-like object (standard Headers or duck-typed)
20
+ init.forEach((value, key) => {
21
+ this._map.set(normalizeName(key), [value]);
22
+ });
23
+ } else if (Array.isArray(init)) {
24
+ for (const entry of init) {
25
+ if (Array.isArray(entry) && entry.length >= 2) {
26
+ // [string, string] tuple
27
+ const key = normalizeName(String(entry[0]));
28
+ const value = String(entry[1]);
29
+ const existing = this._map.get(key);
30
+ if (existing) existing.push(value);
31
+ else this._map.set(key, [value]);
32
+ } else if (
33
+ entry &&
34
+ typeof entry === 'object' &&
35
+ 'key' in entry &&
36
+ 'value' in entry
37
+ ) {
38
+ // NitroHeader object
39
+ const key = normalizeName(entry.key);
40
+ const value = entry.value;
41
+ const existing = this._map.get(key);
42
+ if (existing) existing.push(value);
43
+ else this._map.set(key, [value]);
14
44
  }
15
- else if (typeof init === 'object' &&
16
- !Array.isArray(init) &&
17
- typeof init.forEach === 'function' &&
18
- typeof init.get === 'function') {
19
- // Headers-like object (standard Headers or duck-typed)
20
- init.forEach((value, key) => {
21
- this._map.set(normalizeName(key), [value]);
22
- });
45
+ }
46
+ } else if (typeof init === 'object' && init !== null) {
47
+ const keys = Object.keys(init);
48
+ for (let i = 0; i < keys.length; i++) {
49
+ const k = keys[i];
50
+ const v = init[k];
51
+ if (v !== undefined) {
52
+ this._map.set(normalizeName(k), [String(v)]);
23
53
  }
24
- else if (Array.isArray(init)) {
25
- for (const entry of init) {
26
- if (Array.isArray(entry) && entry.length >= 2) {
27
- // [string, string] tuple
28
- const key = normalizeName(String(entry[0]));
29
- const value = String(entry[1]);
30
- const existing = this._map.get(key);
31
- if (existing)
32
- existing.push(value);
33
- else
34
- this._map.set(key, [value]);
35
- }
36
- else if (entry &&
37
- typeof entry === 'object' &&
38
- 'key' in entry &&
39
- 'value' in entry) {
40
- // NitroHeader object
41
- const key = normalizeName(entry.key);
42
- const value = entry.value;
43
- const existing = this._map.get(key);
44
- if (existing)
45
- existing.push(value);
46
- else
47
- this._map.set(key, [value]);
48
- }
49
- }
50
- }
51
- else if (typeof init === 'object' && init !== null) {
52
- const keys = Object.keys(init);
53
- for (let i = 0; i < keys.length; i++) {
54
- const k = keys[i];
55
- const v = init[k];
56
- if (v !== undefined) {
57
- this._map.set(normalizeName(k), [String(v)]);
58
- }
59
- }
60
- }
61
- }
62
- append(name, value) {
63
- const key = normalizeName(name);
64
- const existing = this._map.get(key);
65
- if (existing)
66
- existing.push(value);
67
- else
68
- this._map.set(key, [value]);
69
- }
70
- delete(name) {
71
- this._map.delete(normalizeName(name));
54
+ }
72
55
  }
73
- get(name) {
74
- const values = this._map.get(normalizeName(name));
75
- if (!values || values.length === 0)
76
- return null;
77
- return values.join(', ');
56
+ }
57
+ append(name, value) {
58
+ const key = normalizeName(name);
59
+ const existing = this._map.get(key);
60
+ if (existing) existing.push(value);
61
+ else this._map.set(key, [value]);
62
+ }
63
+ delete(name) {
64
+ this._map.delete(normalizeName(name));
65
+ }
66
+ get(name) {
67
+ const values = this._map.get(normalizeName(name));
68
+ if (!values || values.length === 0) return null;
69
+ return values.join(', ');
70
+ }
71
+ getSetCookie() {
72
+ return this._map.get('set-cookie') ?? [];
73
+ }
74
+ has(name) {
75
+ return this._map.has(normalizeName(name));
76
+ }
77
+ set(name, value) {
78
+ this._map.set(normalizeName(name), [value]);
79
+ }
80
+ forEach(callback, thisArg) {
81
+ const sortedKeys = Array.from(this._map.keys()).sort();
82
+ for (const key of sortedKeys) {
83
+ callback.call(thisArg, this._map.get(key).join(', '), key, this);
78
84
  }
79
- getSetCookie() {
80
- return this._map.get('set-cookie') ?? [];
85
+ }
86
+ entries() {
87
+ const map = this._map;
88
+ const sortedKeys = Array.from(map.keys()).sort();
89
+ function* gen() {
90
+ for (const key of sortedKeys) {
91
+ yield [key, map.get(key).join(', ')];
92
+ }
81
93
  }
82
- has(name) {
83
- return this._map.has(normalizeName(name));
84
- }
85
- set(name, value) {
86
- this._map.set(normalizeName(name), [value]);
87
- }
88
- forEach(callback, thisArg) {
89
- const sortedKeys = Array.from(this._map.keys()).sort();
90
- for (const key of sortedKeys) {
91
- callback.call(thisArg, this._map.get(key).join(', '), key, this);
92
- }
93
- }
94
- entries() {
95
- const map = this._map;
96
- const sortedKeys = Array.from(map.keys()).sort();
97
- function* gen() {
98
- for (const key of sortedKeys) {
99
- yield [key, map.get(key).join(', ')];
100
- }
101
- }
102
- return gen();
103
- }
104
- keys() {
105
- const map = this._map;
106
- const sortedKeys = Array.from(map.keys()).sort();
107
- function* gen() {
108
- for (const key of sortedKeys) {
109
- yield key;
110
- }
111
- }
112
- return gen();
113
- }
114
- values() {
115
- const map = this._map;
116
- const sortedKeys = Array.from(map.keys()).sort();
117
- function* gen() {
118
- for (const key of sortedKeys) {
119
- yield map.get(key).join(', ');
120
- }
121
- }
122
- return gen();
94
+ return gen();
95
+ }
96
+ keys() {
97
+ const map = this._map;
98
+ const sortedKeys = Array.from(map.keys()).sort();
99
+ function* gen() {
100
+ for (const key of sortedKeys) {
101
+ yield key;
102
+ }
123
103
  }
124
- [Symbol.iterator]() {
125
- return this.entries();
104
+ return gen();
105
+ }
106
+ values() {
107
+ const map = this._map;
108
+ const sortedKeys = Array.from(map.keys()).sort();
109
+ function* gen() {
110
+ for (const key of sortedKeys) {
111
+ yield map.get(key).join(', ');
112
+ }
126
113
  }
114
+ return gen();
115
+ }
116
+ [Symbol.iterator]() {
117
+ return this.entries();
118
+ }
127
119
  }
@@ -1,22 +1,20 @@
1
1
  export async function profileFetch(fn, outputPath) {
2
- const hermes = global.HermesInternal;
3
- if (!hermes) {
4
- const result = await fn();
5
- return { result };
6
- }
7
- const path = outputPath ?? `/tmp/nitrofetch-profile-${Date.now()}.cpuprofile`;
8
- hermes.enableSamplingProfiler();
2
+ const hermes = global.HermesInternal;
3
+ if (!hermes) {
4
+ const result = await fn();
5
+ return { result };
6
+ }
7
+ const path = outputPath ?? `/tmp/nitrofetch-profile-${Date.now()}.cpuprofile`;
8
+ hermes.enableSamplingProfiler();
9
+ try {
10
+ const result = await fn();
11
+ return { result, profilePath: path };
12
+ } finally {
13
+ hermes.disableSamplingProfiler();
9
14
  try {
10
- const result = await fn();
11
- return { result, profilePath: path };
12
- }
13
- finally {
14
- hermes.disableSamplingProfiler();
15
- try {
16
- hermes.dumpSamplingProfiler(path);
17
- }
18
- catch {
19
- // Profile dump may fail on some platforms
20
- }
15
+ hermes.dumpSamplingProfiler(path);
16
+ } catch {
17
+ // Profile dump may fail on some platforms
21
18
  }
19
+ }
22
20
  }