react-native-nitro-fetch 0.1.2 → 0.1.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 CHANGED
@@ -1,127 +1,136 @@
1
- <p align="center">
2
- <img src="./assets/logo.png" alt="Nitro Fetch Logo" width="200" />
3
- </p>
1
+ <a href="https://margelo.com">
2
+ <picture>
3
+ <source media="(prefers-color-scheme: dark)" srcset="./docs/static/img/banner-nitro-modules-dark.png" />
4
+ <source media="(prefers-color-scheme: light)" srcset="./docs/static/img/banner-nitro-modules-light.png" />
5
+ <img alt="Nitro Modules" src="./docs/static/img/banner-nitro-modules-light.png" />
6
+ </picture>
7
+ </a>
4
8
 
5
- # react-native-nitro-fetch
9
+ <br />
6
10
 
7
- Nitro-powered fetch for React Native. Android uses Chromium Cronet (via `org.chromium.net:cronet-embedded`); iOS currently falls back to the built-in fetch. Includes helpers for background prefetching and off-thread parsing with worklets.
11
+ **react-native-nitro-fetch** is a general purpose network fetching library for React Native. It can be used as a drop-in replacement for the built-in `fetch(...)` method, as well as provide additional features like prefetching and workletized mappers.
8
12
 
9
- ## Project Status
13
+ ## Features
10
14
 
11
- This library is currently in alpha. You can adopt it in production, but you may face counter-intuitive api, poor docs or bugs.
15
+ - 🔧 Drop-in replacement for the built-in `fetch(...)` method
16
+ - ⚡️ Fast HTTP stack using [Cronet](https://chromium.googlesource.com/chromium/src/+/lkgr/components/cronet/README.md) on Android, and [URLSession](https://developer.apple.com/documentation/Foundation/URLSession) on iOS
17
+ - 💪 Supports [HTTP/2](https://en.wikipedia.org/wiki/HTTP/2), [QUIC](https://www.chromium.org/quic/), [Brotli](https://github.com/google/brotli), and disk cache
18
+ - ⏰ Prefetching on app-startup for even faster initialization
19
+ - 🧵 Worklet support for parallel data mapping without blocking the JS Thread
20
+ - 🔥 Powered by [Nitro Modules](https://github.com/mrousavy/nitro)
12
21
 
13
22
  ## Installation
14
23
 
15
24
  ```sh
16
- npm install react-native-nitro-fetch react-native-nitro-modules
25
+ npm i react-native-nitro-fetch react-native-nitro-modules
17
26
  ```
18
27
 
19
- - `react-native-nitro-modules` is required as this library relies on Nitro Modules. Rebuild your app after installing.
28
+ > [Nitro Modules](https://github.com/mrousavy/nitro) requires react-native 0.75+ or higher
20
29
 
21
- ## Quick Start
30
+ ## Usage
31
+
32
+ To simply fetch data, import the `fetch(...)` method from `react-native-nitro-fetch`:
22
33
 
23
34
  ```ts
24
- import { fetch } from 'react-native-nitro-fetch';
35
+ import { fetch } from 'react-native-nitro-fetch'
25
36
 
26
- const res = await fetch('https://httpbin.org/get');
27
- const json = await res.json();
37
+ const res = await fetch('https://httpbin.org/get')
38
+ const json = await res.json()
28
39
  ```
29
40
 
30
- ## Features
31
-
32
- - Nitro-backed `fetch`: drop-in replacement for global fetch.
33
- - Android Cronet: fast HTTP stack via `org.chromium.net:cronet-embedded` (already wired in `android/build.gradle`).
34
- - Prefetch: start a background request tied to a `prefetchKey` and serve it later.
35
- - Android auto-prefetch: enqueue requests to MMKV so they warm up on next app start.
36
- - Worklets helper: run mapping/parsing off the JS thread with `react-native-worklets-core`.
41
+ This can be used as a drop-in-replacement for the built-in `fetch(...)` method.
37
42
 
38
- ## Why Prefetch
43
+ ### Prefetching in JS
39
44
 
40
- - Faster first paint of data: Prefetching lets you move network I/O earlier on the critical path so the screen can render with data sooner.
41
- - App start wins: With auto‑prefetch + MMKV, we can begin fetching immediately at process start. In our measurements on mid‑range Android devices (e.g., Samsung A16), this starts at least ~220 ms earlier than initiating the same request from JS after React is up.
42
- - UX hooks: Kick off prefetch on navigation intent (button press) and serve the result when the destination screen mounts.
45
+ You can prefetch a URL in JS, which keeps the result cached for the next actual `fetch(...)` call - this can be used shortly before navigating to a new screen to have results hot & ready:
43
46
 
44
- See `docs/prefetch.md` for patterns and examples.
47
+ ```ts
48
+ import { prefetch } from 'react-native-nitro-fetch'
45
49
 
46
- ## Why Cronet
50
+ await prefetch('https://httpbin.org/uuid', {
51
+ headers: { prefetchKey: 'uuid' }
52
+ })
53
+ ```
47
54
 
48
- - Performance: Enables HTTP/2 multiplexing and QUIC/HTTP/3, reducing latency and avoiding head‑of‑line blocking.
49
- - Efficiency: Advanced connection management, TLS/ALPN, Brotli, and robust on‑disk caching.
50
- - Battle‑tested: Built on Chromium’s networking stack (the same tech behind Chrome) and widely adopted across the ecosystem, including the Flutter community.
55
+ Then, on the new screen that was navigated to:
51
56
 
52
- ## Philosophy
57
+ ```ts
58
+ import { fetch } from 'react-native-nitro-fetch'
53
59
 
54
- - Nitro Fetch often outperforms built‑in fetch thanks to Cronet’s optimizations, but raw speed is not the primary goal.
55
- - The main goals are:
56
- - High‑quality prefetching (including auto‑prefetch on app start)
57
- - Enabling a multi‑threaded React Native architecture (e.g., off‑thread mapping with worklets)
58
- - Performance is a nice side‑effect.
60
+ const res = await fetch('https://httpbin.org/uuid', {
61
+ headers: { prefetchKey: 'uuid' }
62
+ })
63
+ console.log('prefetched header:', res.headers.get('nitroPrefetched'))
64
+ ```
59
65
 
60
- ## Usage Examples
66
+ ### Prefetching for the next app launch
61
67
 
62
- - Basic fetch (drop-in replacement):
68
+ Prefetching data on app launch (or _process start_) will make it hot & ready once your JS code actually runs. Call `prefetchOnAppStart(...)` to enqueue a prefetch for the **next** app start:
63
69
 
64
70
  ```ts
65
- import { fetch } from 'react-native-nitro-fetch';
66
- const res = await fetch('https://jsonplaceholder.typicode.com/todos/1');
67
- console.log(await res.json());
71
+ import { prefetchOnAppStart } from 'react-native-nitro-fetch'
72
+
73
+ await prefetchOnAppStart('https://httpbin.org/uuid', {
74
+ prefetchKey: 'uuid'
75
+ })
68
76
  ```
69
77
 
70
- - Prefetch and consume (Android or JS fallback):
78
+ Then, once the app opens the next time, a call to `fetch(...)` might resolve faster since it will contain already cached results:
71
79
 
72
80
  ```ts
73
- import { fetch, prefetch } from 'react-native-nitro-fetch';
81
+ import { fetch } from 'react-native-nitro-fetch'
74
82
 
75
- await prefetch('https://httpbin.org/uuid', { headers: { prefetchKey: 'uuid' } });
76
- const res = await fetch('https://httpbin.org/uuid', { headers: { prefetchKey: 'uuid' } });
77
- console.log('prefetched header:', res.headers.get('nitroPrefetched'));
83
+ const res = await fetch('https://httpbin.org/uuid', {
84
+ headers: { prefetchKey: 'uuid' }
85
+ })
86
+ console.log('prefetched header:', res.headers.get('nitroPrefetched'))
78
87
  ```
79
88
 
80
- - Schedule auto-prefetch on Android (requires `react-native-mmkv` in your app):
89
+ In our tests, prefetching alone yielded a **~220 ms** faster TTI (time-to-interactive) time! 🤯
81
90
 
82
- ```ts
83
- import { prefetchOnAppStart } from 'react-native-nitro-fetch';
84
- await prefetchOnAppStart('https://httpbin.org/uuid', { prefetchKey: 'uuid' });
85
- ```
91
+ ### Worklet Mapping
86
92
 
87
- - Off-thread parsing with worklets:
93
+ Since Nitro Fetch is a [Nitro Module](https://nitro.margelo.com), it can be used from Worklets.
94
+ This can be useful to parse data without blocking the main JS-Thread:
88
95
 
89
96
  ```ts
90
- import { nitroFetchOnWorklet } from 'react-native-nitro-fetch';
91
-
92
- const map = (payload: { bodyString?: string }) => {
93
- 'worklet';
94
- return JSON.parse(payload.bodyString ?? '{}');
95
- };
96
-
97
- const data = await nitroFetchOnWorklet('https://httpbin.org/get', undefined, map);
97
+ import { nitroFetchOnWorklet } from 'react-native-nitro-fetch'
98
+
99
+ const data = await nitroFetchOnWorklet(
100
+ 'https://httpbin.org/get',
101
+ undefined,
102
+ (payload) => {
103
+ 'worklet'
104
+ return JSON.parse(payload.bodyString ?? '{}')
105
+ }
106
+ )
98
107
  ```
99
108
 
100
- ## Platform Notes
109
+ ## Project Status
101
110
 
102
- - Android: Uses Cronet Java API; no extra setup needed beyond install and rebuild. Cronet engine is initialized once and enables HTTP/2, QUIC, Brotli, and disk cache.
103
- - iOS: Uses a native `URLSession` client for requests and prefetch (in‑memory cache). Cronet integration is still planned for future releases.
111
+ Nitro Fetch is currently in an alpha stage. You can adopt it in production, but keep in mind that the library and it's API is subject to change.
104
112
 
105
113
  ## Limitations & Alternatives
106
114
 
107
- - HTTP streaming: Not supported yet. For streaming responses today, use Expos `expo-fetch`. Streaming is on the roadmap.
108
- - WebSockets: Not supported. For high‑performance sockets and binary streams, consider `react-native-fast-io`.
115
+ - [HTTP streaming](https://developer.mozilla.org/en-US/docs/Web/API/Streams_API) is not yet supported. As an alternative, use Expo's [expo-fetch](https://docs.expo.dev/versions/latest/sdk/expo/). Streaming is on the roadmap.
116
+ - [WebSockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) are not supported. For high‑performance sockets and binary streams, consider using [react-native-fast-io](https://github.com/callstackincubator/react-native-fast-io) by our friends at Callstack.
109
117
 
110
118
  ## Documentation
111
119
 
112
- - Getting Started: `docs/getting-started.md`
113
- - API Reference: `docs/api.md`
114
- - Android Details: `docs/android.md`
115
- - iOS Details: `docs/ios.md`
116
- - Prefetch & Auto-Prefetch: `docs/prefetch.md`
117
- - Worklets: `docs/worklets.md`
118
- - Troubleshooting: `docs/troubleshooting.md`
119
- - Cronet (Android) notes: `docs/cronet-android.md`
120
- - Cronet (iOS) notes: `docs/cronet-ios.md`
120
+ - [Getting Started](docs/getting-started.md)
121
+ - [API Reference](docs/api.md)
122
+ - [Android Details](docs/android.md)
123
+ - [iOS Details](docs/ios.md)
124
+ - [Prefetch & Auto-Prefetch](docs/prefetch.md)
125
+ - [Worklets](docs/worklets.md)
126
+ - [Troubleshooting](docs/troubleshooting.md)
127
+ - [Cronet (Android) notes](docs/cronet-android.md)
128
+ - [Cronet (iOS) notes](docs/cronet-ios.md)
121
129
 
122
- ## Work With Margelo
130
+ ## Margelo
123
131
 
124
- Need top‑notch React Native help or custom networking solutions? Reach out to Margelo: hello@margelo.com
132
+ Nitro Fetch is built with ❤️ by Margelo.
133
+ We build fast and beautiful apps. Contact us at [margelo.com](https://margelo.com) for high-end consultancy services.
125
134
 
126
135
  ## Contributing
127
136
 
@@ -131,14 +140,12 @@ Need top‑notch React Native help or custom networking solutions? Reach out to
131
140
 
132
141
  ## Authors
133
142
 
134
- - [Szymon Kapala](https://x.com/Turbo_Szymon)
135
- - [Alex Shumihin](https://x.com/pioner_dev)
136
- - [Ronald Goedeke](https://x.com/BubbleTroubl_rg)
143
+ - [Szymon Kapala](https://github.com/Szymon20000)
144
+ - [Alex Shumihin](https://github.com/pioner92)
145
+ - [Ronald Goedeke](https://github.com/ronickg)
146
+ - [Marc Rousavy](https://github.com/mrousavy)
137
147
 
138
148
  ## License
139
149
 
140
150
  MIT
141
151
 
142
- ---
143
-
144
- Made with [create-react-native-library](https://github.com/callstack/react-native-builder-bob)
@@ -117,6 +117,7 @@ dependencies {
117
117
  implementation "com.facebook.react:react-android"
118
118
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
119
119
  implementation project(":react-native-nitro-modules")
120
+ implementation("com.tencent:mmkv:1.3.14")// or latest
120
121
  // Provide org.chromium.net Java API for CronetEngine in Kotlin
121
122
  // Cronet
122
123
  api "org.chromium.net:cronet-embedded:${cronetVersion}"
@@ -4,6 +4,8 @@ import android.app.Application
4
4
  import org.json.JSONArray
5
5
  import org.json.JSONObject
6
6
  import java.util.concurrent.CompletableFuture
7
+ import com.tencent.mmkv.MMKV;
8
+
7
9
 
8
10
  object AutoPrefetcher {
9
11
  @Volatile private var initialized = false
@@ -74,12 +76,12 @@ object AutoPrefetcher {
74
76
 
75
77
  private fun getMMKV(app: Application): Any? {
76
78
  return try {
77
- val cls = Class.forName("com.tencent.mmkv.MMKV")
78
- // Initialize if available
79
- try { cls.getMethod("initialize", Application::class.java).invoke(null, app) } catch (_: Throwable) {}
80
- // Get default instance
81
- cls.getMethod("defaultMMKV").invoke(null)
82
- } catch (_: Throwable) { null }
79
+ MMKV.initialize(app);
80
+
81
+ return MMKV.defaultMMKV()
82
+ } catch (_: Throwable) {
83
+ null
84
+ }
83
85
  }
84
86
 
85
87
  private fun invokeMMKVDecodeString(mmkv: Any, key: String): String? {
@@ -129,7 +129,7 @@ class NitroFetchClient(private val engine: CronetEngine, private val executor: E
129
129
  val bodyStr = req.bodyString
130
130
  if ((bodyBytes != null) || !bodyStr.isNullOrEmpty()) {
131
131
  val body: ByteArray = when {
132
- bodyBytes != null -> bodyBytes.getBuffer(true).toByteArray()
132
+ bodyBytes != null -> ByteArray(1);//bodyBytes.getBuffer(true).toByteArray()
133
133
  !bodyStr.isNullOrEmpty() -> bodyStr!!.toByteArray(Charsets.UTF_8)
134
134
  else -> ByteArray(0)
135
135
  }
@@ -255,6 +255,9 @@ export async function prefetchOnAppStart(input, init) {
255
255
  } catch {
256
256
  arr = [];
257
257
  }
258
+ if (arr.some(e => e && e.prefetchKey === prefetchKey)) {
259
+ arr = arr.filter(e => e && e.prefetchKey !== prefetchKey);
260
+ }
258
261
  arr.push(entry);
259
262
  storage.set(KEY, JSON.stringify(arr));
260
263
  } catch (e) {
@@ -1 +1 @@
1
- {"version":3,"names":["NitroFetch","NitroFetchSingleton","headersToPairs","headers","undefined","pairs","Headers","forEach","v","k","push","key","value","Array","isArray","entry","length","String","Object","entries","normalizeBody","body","bodyString","URLSearchParams","toString","ArrayBuffer","bodyBytes","isView","view","buffer","slice","byteOffset","byteLength","Error","pairsToHeaders","h","append","NitroFetchHybrid","client","ensureClient","createClient","err","console","error","buildNitroRequest","input","init","url","method","headersInit","URL","normalized","toUpperCase","followRedirects","nitroFetchRaw","hasNative","res","fetch","bytes","arrayBuffer","status","statusText","ok","redirected","req","request","nitroFetch","headersObj","reduce","acc","light","text","json","JSON","parse","prefetch","hasKey","some","toLowerCase","fromInit","prefetchKey","concat","finalHasKey","prefetchOnAppStart","fromHeader","find","MMKV","require","storage","KEY","arr","raw","getString","set","stringify","e","warn","removeFromAutoPrefetch","next","filter","delete","removeAllFromAutoprefetch","nitroRuntime","WorkletsRef","ensureWorkletRuntime","name","log","Worklets","createRuntime","getWorklets","nitroFetchOnWorklet","mapWorklet","options","preferBytes","rt","runtimeName","run","payload","Promise","resolve","reject","map","headersPairs","out","runOnJS","x","y"],"sourceRoot":"../../src","sources":["fetch.ts"],"mappings":";;AAMA,SAASA,UAAU,IAAIC,mBAAmB,QAAQ,qBAAkB;;AAEpE;;AAEA,SAASC,cAAcA,CAACC,OAAqB,EAA6B;EACxE,SAAS;;EACT,IAAI,CAACA,OAAO,EAAE,OAAOC,SAAS;EAC9B,MAAMC,KAAoB,GAAG,EAAE;EAC/B,IAAIF,OAAO,YAAYG,OAAO,EAAE;IAC9BH,OAAO,CAACI,OAAO,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKJ,KAAK,CAACK,IAAI,CAAC;MAAEC,GAAG,EAAEF,CAAC;MAAEG,KAAK,EAAEJ;IAAE,CAAC,CAAC,CAAC;IAC3D,OAAOH,KAAK;EACd;EACA,IAAIQ,KAAK,CAACC,OAAO,CAACX,OAAO,CAAC,EAAE;IAC1B;IACA,KAAK,MAAMY,KAAK,IAAIZ,OAAO,EAAW;MACpC,IAAIU,KAAK,CAACC,OAAO,CAACC,KAAK,CAAC,IAAIA,KAAK,CAACC,MAAM,IAAI,CAAC,EAAE;QAC7CX,KAAK,CAACK,IAAI,CAAC;UAAEC,GAAG,EAAEM,MAAM,CAACF,KAAK,CAAC,CAAC,CAAC,CAAC;UAAEH,KAAK,EAAEK,MAAM,CAACF,KAAK,CAAC,CAAC,CAAC;QAAE,CAAC,CAAC;MAChE,CAAC,MAAM,IAAIA,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAIA,KAAK,IAAI,OAAO,IAAIA,KAAK,EAAE;QACnFV,KAAK,CAACK,IAAI,CAACK,KAAoB,CAAC;MAClC;IACF;IACA,OAAOV,KAAK;EACd;EACA;EACA,KAAK,MAAM,CAACI,CAAC,EAAED,CAAC,CAAC,IAAIU,MAAM,CAACC,OAAO,CAAChB,OAAO,CAAC,EAAE;IAC5CE,KAAK,CAACK,IAAI,CAAC;MAAEC,GAAG,EAAEF,CAAC;MAAEG,KAAK,EAAEK,MAAM,CAACT,CAAC;IAAE,CAAC,CAAC;EAC1C;EACA,OAAOH,KAAK;AACd;AAEA,SAASe,aAAaA,CAACC,IAAiC,EAAgE;EACtH,SAAS;;EACT,IAAIA,IAAI,IAAI,IAAI,EAAE,OAAOjB,SAAS;EAClC,IAAI,OAAOiB,IAAI,KAAK,QAAQ,EAAE,OAAO;IAAEC,UAAU,EAAED;EAAK,CAAC;EACzD,IAAIA,IAAI,YAAYE,eAAe,EAAE,OAAO;IAAED,UAAU,EAAED,IAAI,CAACG,QAAQ,CAAC;EAAE,CAAC;EAC3E,IAAI,OAAOC,WAAW,KAAK,WAAW,IAAIJ,IAAI,YAAYI,WAAW,EAAE,OAAO;IAAEC,SAAS,EAAEL;EAAK,CAAC;EACjG,IAAII,WAAW,CAACE,MAAM,CAACN,IAAI,CAAC,EAAE;IAC5B,MAAMO,IAAI,GAAGP,IAAuB;IACpC;IACA;IACA,OAAO;MAAEK,SAAS,EAAEE,IAAI,CAACC,MAAM,CAACC,KAAK,CAACF,IAAI,CAACG,UAAU,EAAEH,IAAI,CAACG,UAAU,GAAGH,IAAI,CAACI,UAAU;IAAE,CAAC;EAC7F;EACA;EACA,MAAM,IAAIC,KAAK,CAAC,uCAAuC,CAAC;AAC1D;;AAEA;AACA,SAASC,cAAcA,CAAC7B,KAAoB,EAAW;EACrD,SAAS;;EACT,MAAM8B,CAAC,GAAG,IAAI7B,OAAO,CAAC,CAAC;EACvB,KAAK,MAAM;IAAEK,GAAG;IAAEC;EAAM,CAAC,IAAIP,KAAK,EAAE8B,CAAC,CAACC,MAAM,CAACzB,GAAG,EAAEC,KAAK,CAAC;EACxD,OAAOuB,CAAC;AACV;AAEA,MAAME,gBAAkC,GAAGpC,mBAAmB;AAE9D,IAAIqC,MAAgE;AAEpE,SAASC,YAAYA,CAAA,EAAG;EACtB,IAAID,MAAM,EAAE,OAAOA,MAAM;EACzB,IAAI;IACFA,MAAM,GAAGD,gBAAgB,CAACG,YAAY,CAAC,CAAC;EAC1C,CAAC,CAAC,OAAOC,GAAG,EAAE;IACZC,OAAO,CAACC,KAAK,CAAC,oCAAoC,EAAEF,GAAG,CAAC;IACxD;EACF;EACA,OAAOH,MAAM;AACf;AAEA,SAASM,iBAAiBA,CAACC,KAAwB,EAAEC,IAAkB,EAAgB;EACrF,SAAS;;EACT,IAAIC,GAAW;EACf,IAAIC,MAA0B;EAC9B,IAAIC,WAAoC;EACxC,IAAI5B,IAAiC;EAErC,IAAI,OAAOwB,KAAK,KAAK,QAAQ,IAAIA,KAAK,YAAYK,GAAG,EAAE;IACrDH,GAAG,GAAG9B,MAAM,CAAC4B,KAAK,CAAC;IACnBG,MAAM,GAAGF,IAAI,EAAEE,MAAM;IACrBC,WAAW,GAAGH,IAAI,EAAE3C,OAAO;IAC3BkB,IAAI,GAAGyB,IAAI,EAAEzB,IAAI,IAAI,IAAI;EAC3B,CAAC,MAAM;IACL;IACA0B,GAAG,GAAGF,KAAK,CAACE,GAAG;IACfC,MAAM,GAAGH,KAAK,CAACG,MAAM;IACrBC,WAAW,GAAGJ,KAAK,CAAC1C,OAAc;IAClC;IACAkB,IAAI,GAAGyB,IAAI,EAAEzB,IAAI,IAAI,IAAI;EAC3B;EAEA,MAAMlB,OAAO,GAAGD,cAAc,CAAC+C,WAAW,CAAC;EAC3C,MAAME,UAAU,GAAG/B,aAAa,CAACC,IAAI,CAAC;EAEtC,OAAO;IACL0B,GAAG;IACHC,MAAM,EAAGA,MAAM,EAAEI,WAAW,CAAC,CAAC,IAAY,KAAK;IAC/CjD,OAAO;IACPmB,UAAU,EAAE6B,UAAU,EAAE7B,UAAU;IAClCI,SAAS,EAAE,EAAE;IAAC;IACd2B,eAAe,EAAE;EACnB,CAAC;AACH;AAEA,eAAeC,aAAaA,CAACT,KAAwB,EAAEC,IAAkB,EAA0B;EACjG,SAAS;;EACT,MAAMS,SAAS,GAAG,OAAQlB,gBAAgB,EAAUG,YAAY,KAAK,UAAU;EAC/E,IAAI,CAACe,SAAS,EAAE;IACd;IACA;IACA,MAAMC,GAAG,GAAG,MAAMC,KAAK,CAACZ,KAAK,EAASC,IAAI,CAAC;IAC3C,MAAMC,GAAG,GAAIS,GAAG,CAAST,GAAG,IAAI9B,MAAM,CAAC4B,KAAK,CAAC;IAC7C,MAAMa,KAAK,GAAG,MAAMF,GAAG,CAACG,WAAW,CAAC,CAAC;IACrC,MAAMxD,OAAsB,GAAG,EAAE;IACjCqD,GAAG,CAACrD,OAAO,CAACI,OAAO,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKN,OAAO,CAACO,IAAI,CAAC;MAAEC,GAAG,EAAEF,CAAC;MAAEG,KAAK,EAAEJ;IAAE,CAAC,CAAC,CAAC;IACjE,OAAO;MACLuC,GAAG;MACHa,MAAM,EAAEJ,GAAG,CAACI,MAAM;MAClBC,UAAU,EAAEL,GAAG,CAACK,UAAU;MAC1BC,EAAE,EAAEN,GAAG,CAACM,EAAE;MACVC,UAAU,EAAGP,GAAG,CAASO,UAAU,IAAI,KAAK;MAC5C5D,OAAO;MACPuB,SAAS,EAAEgC,KAAK;MAChBpC,UAAU,EAAElB;IACd,CAAC,CAAyB,CAAC;EAC7B;EAEA,MAAM4D,GAAG,GAAGpB,iBAAiB,CAACC,KAAK,EAAEC,IAAI,CAAC;EAC1CP,YAAY,CAAC,CAAC;EACd,IAAI,CAACD,MAAM,IAAI,OAAQA,MAAM,CAAS2B,OAAO,KAAK,UAAU,EAAE,MAAM,IAAIhC,KAAK,CAAC,iCAAiC,CAAC;EAChH,MAAMuB,GAAkB,GAAG,MAAMlB,MAAM,CAAC2B,OAAO,CAACD,GAAG,CAAC;EACpD,OAAOR,GAAG;AACZ;AAEA,OAAO,eAAeU,UAAUA,CAACrB,KAAwB,EAAEC,IAAkB,EAAqB;EAChG,SAAS;;EACT;EACA,MAAMS,SAAS,GAAG,OAAQlB,gBAAgB,EAAUG,YAAY,KAAK,UAAU;EAC/E,IAAI,CAACe,SAAS,EAAE;IACd;IACA,OAAOE,KAAK,CAACZ,KAAK,EAASC,IAAI,CAAC;EAClC;EAEA,MAAMU,GAAG,GAAG,MAAMF,aAAa,CAACT,KAAK,EAAEC,IAAI,CAAC;;EAE5C;EACA,MAAMqB,UAAU,GAAGX,GAAG,CAACrD,OAAO,CAACiE,MAAM,CAAC,CAACC,GAAG,EAAE;IAAE1D,GAAG;IAAEC;EAAM,CAAC,KAAK;IACzDyD,GAAG,CAAC1D,GAAG,CAAC,GAAGC,KAAK;IAChB,OAAOyD,GAAG;EACZ,CAAC,EAAE,CAAC,CAA2B,CAAC;EAEpC,MAAMC,KAAU,GAAG;IACjBvB,GAAG,EAAES,GAAG,CAACT,GAAG;IACZe,EAAE,EAAEN,GAAG,CAACM,EAAE;IACVF,MAAM,EAAEJ,GAAG,CAACI,MAAM;IAClBC,UAAU,EAAEL,GAAG,CAACK,UAAU;IAC1BE,UAAU,EAAEP,GAAG,CAACO,UAAU;IAC1B5D,OAAO,EAAEgE,UAAU;IACnBR,WAAW,EAAE,MAAAA,CAAA,KAAYH,GAAG,CAAC9B,SAAS;IACtC6C,IAAI,EAAE,MAAAA,CAAA,KAAYf,GAAG,CAAClC,UAAU;IAChCkD,IAAI,EAAE,MAAAA,CAAA,KAAYC,IAAI,CAACC,KAAK,CAAClB,GAAG,CAAClC,UAAU,IAAI,IAAI;EACrD,CAAC;EACD,OAAOgD,KAAK;AACd;;AAEA;AACA,OAAO,eAAeK,QAAQA,CAAC9B,KAAwB,EAAEC,IAAkB,EAAiB;EAC1F;EACA,MAAMS,SAAS,GAAG,OAAQlB,gBAAgB,EAAUG,YAAY,KAAK,UAAU;EAC/E,IAAI,CAACe,SAAS,EAAE;;EAEhB;EACA,MAAMS,GAAG,GAAGpB,iBAAiB,CAACC,KAAK,EAAEC,IAAI,CAAC;EAC1C,MAAM8B,MAAM,GAAGZ,GAAG,CAAC7D,OAAO,EAAE0E,IAAI,CAAC1C,CAAC,IAAIA,CAAC,CAACxB,GAAG,CAACmE,WAAW,CAAC,CAAC,KAAK,aAAa,CAAC,IAAI,KAAK;EACrF;EACA,MAAMC,QAAQ,GAAIjC,IAAI,EAAUkC,WAAiC;EACjE,IAAI,CAACJ,MAAM,IAAIG,QAAQ,EAAE;IACvBf,GAAG,CAAC7D,OAAO,GAAG,CAAC6D,GAAG,CAAC7D,OAAO,IAAI,EAAE,EAAE8E,MAAM,CAAC,CAAC;MAAEtE,GAAG,EAAE,aAAa;MAAEC,KAAK,EAAEmE;IAAS,CAAC,CAAC,CAAC;EACrF;EACA,MAAMG,WAAW,GAAGlB,GAAG,CAAC7D,OAAO,EAAE0E,IAAI,CAAC1C,CAAC,IAAIA,CAAC,CAACxB,GAAG,CAACmE,WAAW,CAAC,CAAC,KAAK,aAAa,CAAC;EACjF,IAAI,CAACI,WAAW,EAAE;IAChB,MAAM,IAAIjD,KAAK,CAAC,4CAA4C,CAAC;EAC/D;;EAEA;EACAM,YAAY,CAAC,CAAC;EACd,IAAI,CAACD,MAAM,IAAI,OAAQA,MAAM,CAASqC,QAAQ,KAAK,UAAU,EAAE;EAC/D,MAAMrC,MAAM,CAACqC,QAAQ,CAACX,GAAG,CAAC;AAC5B;;AAEA;AACA;AACA,OAAO,eAAemB,kBAAkBA,CACtCtC,KAAwB,EACxBC,IAA6C,EAC9B;EACf;EACA,MAAMkB,GAAG,GAAGpB,iBAAiB,CAACC,KAAK,EAAEC,IAAI,CAAC;EAC1C,MAAMsC,UAAU,GAAGpB,GAAG,CAAC7D,OAAO,EAAEkF,IAAI,CAAClD,CAAC,IAAIA,CAAC,CAACxB,GAAG,CAACmE,WAAW,CAAC,CAAC,KAAK,aAAa,CAAC,EAAElE,KAAK;EACvF,MAAMmE,QAAQ,GAAIjC,IAAI,EAAUkC,WAAiC;EACjE,MAAMA,WAAW,GAAGI,UAAU,IAAIL,QAAQ;EAC1C,IAAI,CAACC,WAAW,EAAE;IAChB,MAAM,IAAI/C,KAAK,CAAC,0EAA0E,CAAC;EAC7F;;EAEA;EACA,MAAMkC,UAAU,GAAG,CAACH,GAAG,CAAC7D,OAAO,IAAI,EAAE,EAAEiE,MAAM,CAAC,CAACC,GAAG,EAAE;IAAE1D,GAAG;IAAEC;EAAM,CAAC,KAAK;IACrEyD,GAAG,CAACpD,MAAM,CAACN,GAAG,CAAC,CAAC,GAAGM,MAAM,CAACL,KAAK,CAAC;IAChC,OAAOyD,GAAG;EACZ,CAAC,EAAE,CAAC,CAA2B,CAAC;EAEhC,MAAMtD,KAAK,GAAG;IACZgC,GAAG,EAAEiB,GAAG,CAACjB,GAAG;IACZiC,WAAW;IACX7E,OAAO,EAAEgE;EACX,CAAU;;EAEV;EACA,IAAI;IACF;IACA;IACA,MAAM;MAAEmB;IAAK,CAAC,GAAGC,OAAO,CAAC,mBAAmB,CAAC;IAC7C,MAAMC,OAAO,GAAG,IAAIF,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAMG,GAAG,GAAG,+BAA+B;IAC3C,IAAIC,GAAU,GAAG,EAAE;IACnB,IAAI;MACF,MAAMC,GAAG,GAAGH,OAAO,CAACI,SAAS,CAACH,GAAG,CAAC;MAClC,IAAIE,GAAG,EAAED,GAAG,GAAGjB,IAAI,CAACC,KAAK,CAACiB,GAAG,CAAC;MAC9B,IAAI,CAAC9E,KAAK,CAACC,OAAO,CAAC4E,GAAG,CAAC,EAAEA,GAAG,GAAG,EAAE;IACnC,CAAC,CAAC,MAAM;MACNA,GAAG,GAAG,EAAE;IACV;IACAA,GAAG,CAAChF,IAAI,CAACK,KAAK,CAAC;IACfyE,OAAO,CAACK,GAAG,CAACJ,GAAG,EAAEhB,IAAI,CAACqB,SAAS,CAACJ,GAAG,CAAC,CAAC;EACvC,CAAC,CAAC,OAAOK,CAAC,EAAE;IACVrD,OAAO,CAACsD,IAAI,CAAC,gEAAgE,EAAED,CAAC,CAAC;EACnF;AACF;;AAEA;AACA,OAAO,eAAeE,sBAAsBA,CAACjB,WAAmB,EAAiB;EAC/E;EACA,IAAI;IACF;IACA,MAAM;MAAEM;IAAK,CAAC,GAAGC,OAAO,CAAC,mBAAmB,CAAC;IAC7C,MAAMC,OAAO,GAAG,IAAIF,IAAI,CAAC,CAAC;IAC1B,MAAMG,GAAG,GAAG,+BAA+B;IAC3C,IAAIC,GAAU,GAAG,EAAE;IACnB,IAAI;MACF,MAAMC,GAAG,GAAGH,OAAO,CAACI,SAAS,CAACH,GAAG,CAAC;MAClC,IAAIE,GAAG,EAAED,GAAG,GAAGjB,IAAI,CAACC,KAAK,CAACiB,GAAG,CAAC;MAC9B,IAAI,CAAC9E,KAAK,CAACC,OAAO,CAAC4E,GAAG,CAAC,EAAEA,GAAG,GAAG,EAAE;IACnC,CAAC,CAAC,MAAM;MACNA,GAAG,GAAG,EAAE;IACV;IACA,MAAMQ,IAAI,GAAGR,GAAG,CAACS,MAAM,CAAEJ,CAAC,IAAKA,CAAC,IAAIA,CAAC,CAACf,WAAW,KAAKA,WAAW,CAAC;IAClE,IAAIkB,IAAI,CAAClF,MAAM,KAAK,CAAC,EAAE;MACrB,IAAI,OAAQwE,OAAO,CAASY,MAAM,KAAK,UAAU,EAAE;QAChDZ,OAAO,CAASY,MAAM,CAACX,GAAG,CAAC;MAC9B,CAAC,MAAM;QACLD,OAAO,CAACK,GAAG,CAACJ,GAAG,EAAEhB,IAAI,CAACqB,SAAS,CAAC,EAAE,CAAC,CAAC;MACtC;IACF,CAAC,MAAM,IAAII,IAAI,CAAClF,MAAM,KAAK0E,GAAG,CAAC1E,MAAM,EAAE;MACrCwE,OAAO,CAACK,GAAG,CAACJ,GAAG,EAAEhB,IAAI,CAACqB,SAAS,CAACI,IAAI,CAAC,CAAC;IACxC;EACF,CAAC,CAAC,OAAOH,CAAC,EAAE;IACVrD,OAAO,CAACsD,IAAI,CAAC,oEAAoE,EAAED,CAAC,CAAC;EACvF;AACF;;AAEA;AACA,OAAO,eAAeM,yBAAyBA,CAAA,EAAkB;EAC/D,IAAI;IACF;IACA,MAAM;MAAEf;IAAK,CAAC,GAAGC,OAAO,CAAC,mBAAmB,CAAC;IAC7C,MAAMC,OAAO,GAAG,IAAIF,IAAI,CAAC,CAAC;IAC1B,MAAMG,GAAG,GAAG,+BAA+B;IAC3C,IAAI,OAAQD,OAAO,CAASY,MAAM,KAAK,UAAU,EAAE;MAChDZ,OAAO,CAASY,MAAM,CAACX,GAAG,CAAC;IAC9B,CAAC,MAAM;MACLD,OAAO,CAACK,GAAG,CAACJ,GAAG,EAAEhB,IAAI,CAACqB,SAAS,CAAC,EAAE,CAAC,CAAC;IACtC;EACF,CAAC,CAAC,OAAOC,CAAC,EAAE;IACVrD,OAAO,CAACsD,IAAI,CAAC,uEAAuE,EAAED,CAAC,CAAC;EAC1F;AACF;;AAEA;;AAYA,IAAIO,YAA6B;AACjC,IAAIC,WAA4B;AAChC,SAASC,oBAAoBA,CAACC,IAAI,GAAG,aAAa,EAAmB;EACnE/D,OAAO,CAACgE,GAAG,CAAC,0BAA0B,CAAC;EACvC,IAAI;IACF;IACA,MAAM;MAAEC;IAAS,CAAC,GAAGpB,OAAO,CAAC,4BAA4B,CAAC;IAC1De,YAAY,GAAGA,YAAY,IAAIK,QAAQ,CAACC,aAAa,CAACH,IAAI,CAAC;IAC3D/D,OAAO,CAACgE,GAAG,CAAC,eAAe,EAAE,CAAC,CAACJ,YAAY,CAAC;IAC5C,OAAOA,YAAY;EACrB,CAAC,CAAC,MAAM;IACN5D,OAAO,CAACsD,IAAI,CAAC,0CAA0C,CAAC;IACxD,OAAO5F,SAAS;EAClB;AACF;AAEA,SAASyG,WAAWA,CAAA,EAAoB;EACtC,IAAI;IACF,IAAIN,WAAW,EAAE,OAAOA,WAAW;IACnC;IACA,MAAM;MAAEI;IAAS,CAAC,GAAGpB,OAAO,CAAC,4BAA4B,CAAC;IAC1DgB,WAAW,GAAGI,QAAQ;IACtB,OAAOJ,WAAW;EACpB,CAAC,CAAC,MAAM;IACN7D,OAAO,CAACsD,IAAI,CAAC,0CAA0C,CAAC;IACxD,OAAO5F,SAAS;EAClB;AACF;AAEA,OAAO,eAAe0G,mBAAmBA,CACvCjE,KAAwB,EACxBC,IAA6B,EAC7BiE,UAAiC,EACjCC,OAAyD,EAC7C;EACZtE,OAAO,CAACgE,GAAG,CAAC,+BAA+B,CAAC;EAC5C,MAAMO,WAAW,GAAGD,OAAO,EAAEC,WAAW,KAAK,IAAI,CAAC,CAAC;EACnDvE,OAAO,CAACgE,GAAG,CAAC,mCAAmC,EAAEO,WAAW,CAAC;EAC7D,IAAIC,EAAmB;EACvB,IAAIP,QAAyB;EAC7B,IAAI;IACFO,EAAE,GAAGV,oBAAoB,CAACQ,OAAO,EAAEG,WAAW,CAAC;IAC/CzE,OAAO,CAACgE,GAAG,CAAC,uCAAuC,EAAE,CAAC,CAACQ,EAAE,CAAC;IAC1DP,QAAQ,GAAGE,WAAW,CAAC,CAAC;IACxBnE,OAAO,CAACgE,GAAG,CAAC,0CAA0C,EAAE,CAAC,CAACC,QAAQ,CAAC;EACrE,CAAC,CAAC,OAAOZ,CAAC,EAAE;IACVrD,OAAO,CAACC,KAAK,CAAC,mCAAmC,EAAEoD,CAAC,CAAC;EACvD;;EAEA;EACA,IAAI,CAACmB,EAAE,IAAI,CAACP,QAAQ,IAAI,OAAOO,EAAE,CAACE,GAAG,KAAK,UAAU,EAAE;IACpD1E,OAAO,CAACsD,IAAI,CAAC,uDAAuD,CAAC;IACrE,MAAMxC,GAAG,GAAG,MAAMF,aAAa,CAACT,KAAK,EAAEC,IAAI,CAAC;IAC5C,MAAMuE,OAAO,GAAG;MACdtE,GAAG,EAAES,GAAG,CAACT,GAAG;MACZa,MAAM,EAAEJ,GAAG,CAACI,MAAM;MAClBC,UAAU,EAAEL,GAAG,CAACK,UAAU;MAC1BC,EAAE,EAAEN,GAAG,CAACM,EAAE;MACVC,UAAU,EAAEP,GAAG,CAACO,UAAU;MAC1B5D,OAAO,EAAEqD,GAAG,CAACrD,OAAO;MACpBuB,SAAS,EAAEuF,WAAW,GAAGzD,GAAG,CAAC9B,SAAS,GAAGtB,SAAS;MAClDkB,UAAU,EAAE2F,WAAW,GAAG7G,SAAS,GAAGoD,GAAG,CAAClC;IAC5C,CAAU;IACV,OAAOyF,UAAU,CAACM,OAAc,CAAC;EACnC;EAEA,OAAO,MAAM,IAAIC,OAAO,CAAI,CAACC,OAAO,EAAEC,MAAM,KAAK;IAC/C,IAAI;MACF9E,OAAO,CAACgE,GAAG,CAAC,2CAA2C,CAAC;MACxDQ,EAAE,CAACE,GAAG,CAAC,MAAOK,GAA0B,IAAK;QAC3C,SAAS;;QACT,IAAI;UACF/E,OAAO,CAACgE,GAAG,CAAC,sDAAsD,CAAC;UACnE,MAAMlD,GAAG,GAAG,MAAMF,aAAa,CAACT,KAAK,EAAEC,IAAI,CAAC;UAC5CJ,OAAO,CAACgE,GAAG,CAAC,sCAAsC,CAAC;UACnD,MAAM3D,GAAG,GAAGS,GAAG,CAACT,GAAG;UACnB,MAAMa,MAAM,GAAGJ,GAAG,CAACI,MAAM;UACzB,MAAMC,UAAU,GAAGL,GAAG,CAACK,UAAU;UACjC,MAAMC,EAAE,GAAGN,GAAG,CAACM,EAAE;UACjB,MAAMC,UAAU,GAAGP,GAAG,CAACO,UAAU;UACjC,MAAM2D,YAA2B,GAAGlE,GAAG,CAACrD,OAAO;UAC/C,MAAMuB,SAAkC,GAAGtB,SAAS,CAAC,CAAC;UACtD,MAAMkB,UAA8B,GAAG2F,WAAW,GAAG7G,SAAS,GAAGoD,GAAG,CAAClC,UAAU;UAC/E,MAAM+F,OAAO,GAAG;YAAEtE,GAAG;YAAEa,MAAM;YAAEC,UAAU;YAAEC,EAAE;YAAEC,UAAU;YAAE5D,OAAO,EAAEuH,YAAY;YAAEhG,SAAS;YAAEJ;UAAW,CAAC;UACzG,MAAMqG,GAAG,GAAGF,GAAG,CAACJ,OAAO,CAAC;UACxB;UACAV,QAAQ,CAACiB,OAAO,CAACL,OAAO,CAAC,CAACI,GAAU,CAAC;QACvC,CAAC,CAAC,OAAO5B,CAAC,EAAE;UACVY,QAAQ,CAACiB,OAAO,CAACJ,MAAM,CAAC,CAACzB,CAAQ,CAAC;QACpC;MACF,CAAC,EAAEgB,UAAiB,CAAC;IACvB,CAAC,CAAC,OAAOhB,CAAC,EAAE;MACVrD,OAAO,CAACC,KAAK,CAAC,oCAAoC,EAAEoD,CAAC,CAAC;MACtDyB,MAAM,CAACzB,CAAC,CAAC;IACX;EACF,CAAC,CAAC;AACJ;AAEA,OAAO,MAAM8B,CAAC,GAAGrB,oBAAoB,CAAC,CAAC;AACvC,OAAO,MAAMsB,CAAC,GAAGjB,WAAW,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["NitroFetch","NitroFetchSingleton","headersToPairs","headers","undefined","pairs","Headers","forEach","v","k","push","key","value","Array","isArray","entry","length","String","Object","entries","normalizeBody","body","bodyString","URLSearchParams","toString","ArrayBuffer","bodyBytes","isView","view","buffer","slice","byteOffset","byteLength","Error","pairsToHeaders","h","append","NitroFetchHybrid","client","ensureClient","createClient","err","console","error","buildNitroRequest","input","init","url","method","headersInit","URL","normalized","toUpperCase","followRedirects","nitroFetchRaw","hasNative","res","fetch","bytes","arrayBuffer","status","statusText","ok","redirected","req","request","nitroFetch","headersObj","reduce","acc","light","text","json","JSON","parse","prefetch","hasKey","some","toLowerCase","fromInit","prefetchKey","concat","finalHasKey","prefetchOnAppStart","fromHeader","find","MMKV","require","storage","KEY","arr","raw","getString","e","filter","set","stringify","warn","removeFromAutoPrefetch","next","delete","removeAllFromAutoprefetch","nitroRuntime","WorkletsRef","ensureWorkletRuntime","name","log","Worklets","createRuntime","getWorklets","nitroFetchOnWorklet","mapWorklet","options","preferBytes","rt","runtimeName","run","payload","Promise","resolve","reject","map","headersPairs","out","runOnJS","x","y"],"sourceRoot":"../../src","sources":["fetch.ts"],"mappings":";;AAMA,SAASA,UAAU,IAAIC,mBAAmB,QAAQ,qBAAkB;;AAEpE;;AAEA,SAASC,cAAcA,CAACC,OAAqB,EAA6B;EACxE,SAAS;;EACT,IAAI,CAACA,OAAO,EAAE,OAAOC,SAAS;EAC9B,MAAMC,KAAoB,GAAG,EAAE;EAC/B,IAAIF,OAAO,YAAYG,OAAO,EAAE;IAC9BH,OAAO,CAACI,OAAO,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKJ,KAAK,CAACK,IAAI,CAAC;MAAEC,GAAG,EAAEF,CAAC;MAAEG,KAAK,EAAEJ;IAAE,CAAC,CAAC,CAAC;IAC3D,OAAOH,KAAK;EACd;EACA,IAAIQ,KAAK,CAACC,OAAO,CAACX,OAAO,CAAC,EAAE;IAC1B;IACA,KAAK,MAAMY,KAAK,IAAIZ,OAAO,EAAW;MACpC,IAAIU,KAAK,CAACC,OAAO,CAACC,KAAK,CAAC,IAAIA,KAAK,CAACC,MAAM,IAAI,CAAC,EAAE;QAC7CX,KAAK,CAACK,IAAI,CAAC;UAAEC,GAAG,EAAEM,MAAM,CAACF,KAAK,CAAC,CAAC,CAAC,CAAC;UAAEH,KAAK,EAAEK,MAAM,CAACF,KAAK,CAAC,CAAC,CAAC;QAAE,CAAC,CAAC;MAChE,CAAC,MAAM,IAAIA,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAIA,KAAK,IAAI,OAAO,IAAIA,KAAK,EAAE;QACnFV,KAAK,CAACK,IAAI,CAACK,KAAoB,CAAC;MAClC;IACF;IACA,OAAOV,KAAK;EACd;EACA;EACA,KAAK,MAAM,CAACI,CAAC,EAAED,CAAC,CAAC,IAAIU,MAAM,CAACC,OAAO,CAAChB,OAAO,CAAC,EAAE;IAC5CE,KAAK,CAACK,IAAI,CAAC;MAAEC,GAAG,EAAEF,CAAC;MAAEG,KAAK,EAAEK,MAAM,CAACT,CAAC;IAAE,CAAC,CAAC;EAC1C;EACA,OAAOH,KAAK;AACd;AAEA,SAASe,aAAaA,CAACC,IAAiC,EAAgE;EACtH,SAAS;;EACT,IAAIA,IAAI,IAAI,IAAI,EAAE,OAAOjB,SAAS;EAClC,IAAI,OAAOiB,IAAI,KAAK,QAAQ,EAAE,OAAO;IAAEC,UAAU,EAAED;EAAK,CAAC;EACzD,IAAIA,IAAI,YAAYE,eAAe,EAAE,OAAO;IAAED,UAAU,EAAED,IAAI,CAACG,QAAQ,CAAC;EAAE,CAAC;EAC3E,IAAI,OAAOC,WAAW,KAAK,WAAW,IAAIJ,IAAI,YAAYI,WAAW,EAAE,OAAO;IAAEC,SAAS,EAAEL;EAAK,CAAC;EACjG,IAAII,WAAW,CAACE,MAAM,CAACN,IAAI,CAAC,EAAE;IAC5B,MAAMO,IAAI,GAAGP,IAAuB;IACpC;IACA;IACA,OAAO;MAAEK,SAAS,EAAEE,IAAI,CAACC,MAAM,CAACC,KAAK,CAACF,IAAI,CAACG,UAAU,EAAEH,IAAI,CAACG,UAAU,GAAGH,IAAI,CAACI,UAAU;IAAE,CAAC;EAC7F;EACA;EACA,MAAM,IAAIC,KAAK,CAAC,uCAAuC,CAAC;AAC1D;;AAEA;AACA,SAASC,cAAcA,CAAC7B,KAAoB,EAAW;EACrD,SAAS;;EACT,MAAM8B,CAAC,GAAG,IAAI7B,OAAO,CAAC,CAAC;EACvB,KAAK,MAAM;IAAEK,GAAG;IAAEC;EAAM,CAAC,IAAIP,KAAK,EAAE8B,CAAC,CAACC,MAAM,CAACzB,GAAG,EAAEC,KAAK,CAAC;EACxD,OAAOuB,CAAC;AACV;AAEA,MAAME,gBAAkC,GAAGpC,mBAAmB;AAE9D,IAAIqC,MAAgE;AAEpE,SAASC,YAAYA,CAAA,EAAG;EACtB,IAAID,MAAM,EAAE,OAAOA,MAAM;EACzB,IAAI;IACFA,MAAM,GAAGD,gBAAgB,CAACG,YAAY,CAAC,CAAC;EAC1C,CAAC,CAAC,OAAOC,GAAG,EAAE;IACZC,OAAO,CAACC,KAAK,CAAC,oCAAoC,EAAEF,GAAG,CAAC;IACxD;EACF;EACA,OAAOH,MAAM;AACf;AAEA,SAASM,iBAAiBA,CAACC,KAAwB,EAAEC,IAAkB,EAAgB;EACrF,SAAS;;EACT,IAAIC,GAAW;EACf,IAAIC,MAA0B;EAC9B,IAAIC,WAAoC;EACxC,IAAI5B,IAAiC;EAErC,IAAI,OAAOwB,KAAK,KAAK,QAAQ,IAAIA,KAAK,YAAYK,GAAG,EAAE;IACrDH,GAAG,GAAG9B,MAAM,CAAC4B,KAAK,CAAC;IACnBG,MAAM,GAAGF,IAAI,EAAEE,MAAM;IACrBC,WAAW,GAAGH,IAAI,EAAE3C,OAAO;IAC3BkB,IAAI,GAAGyB,IAAI,EAAEzB,IAAI,IAAI,IAAI;EAC3B,CAAC,MAAM;IACL;IACA0B,GAAG,GAAGF,KAAK,CAACE,GAAG;IACfC,MAAM,GAAGH,KAAK,CAACG,MAAM;IACrBC,WAAW,GAAGJ,KAAK,CAAC1C,OAAc;IAClC;IACAkB,IAAI,GAAGyB,IAAI,EAAEzB,IAAI,IAAI,IAAI;EAC3B;EAEA,MAAMlB,OAAO,GAAGD,cAAc,CAAC+C,WAAW,CAAC;EAC3C,MAAME,UAAU,GAAG/B,aAAa,CAACC,IAAI,CAAC;EAEtC,OAAO;IACL0B,GAAG;IACHC,MAAM,EAAGA,MAAM,EAAEI,WAAW,CAAC,CAAC,IAAY,KAAK;IAC/CjD,OAAO;IACPmB,UAAU,EAAE6B,UAAU,EAAE7B,UAAU;IAClCI,SAAS,EAAE,EAAE;IAAC;IACd2B,eAAe,EAAE;EACnB,CAAC;AACH;AAEA,eAAeC,aAAaA,CAACT,KAAwB,EAAEC,IAAkB,EAA0B;EACjG,SAAS;;EACT,MAAMS,SAAS,GAAG,OAAQlB,gBAAgB,EAAUG,YAAY,KAAK,UAAU;EAC/E,IAAI,CAACe,SAAS,EAAE;IACd;IACA;IACA,MAAMC,GAAG,GAAG,MAAMC,KAAK,CAACZ,KAAK,EAASC,IAAI,CAAC;IAC3C,MAAMC,GAAG,GAAIS,GAAG,CAAST,GAAG,IAAI9B,MAAM,CAAC4B,KAAK,CAAC;IAC7C,MAAMa,KAAK,GAAG,MAAMF,GAAG,CAACG,WAAW,CAAC,CAAC;IACrC,MAAMxD,OAAsB,GAAG,EAAE;IACjCqD,GAAG,CAACrD,OAAO,CAACI,OAAO,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKN,OAAO,CAACO,IAAI,CAAC;MAAEC,GAAG,EAAEF,CAAC;MAAEG,KAAK,EAAEJ;IAAE,CAAC,CAAC,CAAC;IACjE,OAAO;MACLuC,GAAG;MACHa,MAAM,EAAEJ,GAAG,CAACI,MAAM;MAClBC,UAAU,EAAEL,GAAG,CAACK,UAAU;MAC1BC,EAAE,EAAEN,GAAG,CAACM,EAAE;MACVC,UAAU,EAAGP,GAAG,CAASO,UAAU,IAAI,KAAK;MAC5C5D,OAAO;MACPuB,SAAS,EAAEgC,KAAK;MAChBpC,UAAU,EAAElB;IACd,CAAC,CAAyB,CAAC;EAC7B;EAEA,MAAM4D,GAAG,GAAGpB,iBAAiB,CAACC,KAAK,EAAEC,IAAI,CAAC;EAC1CP,YAAY,CAAC,CAAC;EACd,IAAI,CAACD,MAAM,IAAI,OAAQA,MAAM,CAAS2B,OAAO,KAAK,UAAU,EAAE,MAAM,IAAIhC,KAAK,CAAC,iCAAiC,CAAC;EAChH,MAAMuB,GAAkB,GAAG,MAAMlB,MAAM,CAAC2B,OAAO,CAACD,GAAG,CAAC;EACpD,OAAOR,GAAG;AACZ;AAEA,OAAO,eAAeU,UAAUA,CAACrB,KAAwB,EAAEC,IAAkB,EAAqB;EAChG,SAAS;;EACT;EACA,MAAMS,SAAS,GAAG,OAAQlB,gBAAgB,EAAUG,YAAY,KAAK,UAAU;EAC/E,IAAI,CAACe,SAAS,EAAE;IACd;IACA,OAAOE,KAAK,CAACZ,KAAK,EAASC,IAAI,CAAC;EAClC;EAEA,MAAMU,GAAG,GAAG,MAAMF,aAAa,CAACT,KAAK,EAAEC,IAAI,CAAC;;EAE5C;EACA,MAAMqB,UAAU,GAAGX,GAAG,CAACrD,OAAO,CAACiE,MAAM,CAAC,CAACC,GAAG,EAAE;IAAE1D,GAAG;IAAEC;EAAM,CAAC,KAAK;IACzDyD,GAAG,CAAC1D,GAAG,CAAC,GAAGC,KAAK;IAChB,OAAOyD,GAAG;EACZ,CAAC,EAAE,CAAC,CAA2B,CAAC;EAEpC,MAAMC,KAAU,GAAG;IACjBvB,GAAG,EAAES,GAAG,CAACT,GAAG;IACZe,EAAE,EAAEN,GAAG,CAACM,EAAE;IACVF,MAAM,EAAEJ,GAAG,CAACI,MAAM;IAClBC,UAAU,EAAEL,GAAG,CAACK,UAAU;IAC1BE,UAAU,EAAEP,GAAG,CAACO,UAAU;IAC1B5D,OAAO,EAAEgE,UAAU;IACnBR,WAAW,EAAE,MAAAA,CAAA,KAAYH,GAAG,CAAC9B,SAAS;IACtC6C,IAAI,EAAE,MAAAA,CAAA,KAAYf,GAAG,CAAClC,UAAU;IAChCkD,IAAI,EAAE,MAAAA,CAAA,KAAYC,IAAI,CAACC,KAAK,CAAClB,GAAG,CAAClC,UAAU,IAAI,IAAI;EACrD,CAAC;EACD,OAAOgD,KAAK;AACd;;AAEA;AACA,OAAO,eAAeK,QAAQA,CAAC9B,KAAwB,EAAEC,IAAkB,EAAiB;EAC1F;EACA,MAAMS,SAAS,GAAG,OAAQlB,gBAAgB,EAAUG,YAAY,KAAK,UAAU;EAC/E,IAAI,CAACe,SAAS,EAAE;;EAEhB;EACA,MAAMS,GAAG,GAAGpB,iBAAiB,CAACC,KAAK,EAAEC,IAAI,CAAC;EAC1C,MAAM8B,MAAM,GAAGZ,GAAG,CAAC7D,OAAO,EAAE0E,IAAI,CAAC1C,CAAC,IAAIA,CAAC,CAACxB,GAAG,CAACmE,WAAW,CAAC,CAAC,KAAK,aAAa,CAAC,IAAI,KAAK;EACrF;EACA,MAAMC,QAAQ,GAAIjC,IAAI,EAAUkC,WAAiC;EACjE,IAAI,CAACJ,MAAM,IAAIG,QAAQ,EAAE;IACvBf,GAAG,CAAC7D,OAAO,GAAG,CAAC6D,GAAG,CAAC7D,OAAO,IAAI,EAAE,EAAE8E,MAAM,CAAC,CAAC;MAAEtE,GAAG,EAAE,aAAa;MAAEC,KAAK,EAAEmE;IAAS,CAAC,CAAC,CAAC;EACrF;EACA,MAAMG,WAAW,GAAGlB,GAAG,CAAC7D,OAAO,EAAE0E,IAAI,CAAC1C,CAAC,IAAIA,CAAC,CAACxB,GAAG,CAACmE,WAAW,CAAC,CAAC,KAAK,aAAa,CAAC;EACjF,IAAI,CAACI,WAAW,EAAE;IAChB,MAAM,IAAIjD,KAAK,CAAC,4CAA4C,CAAC;EAC/D;;EAEA;EACAM,YAAY,CAAC,CAAC;EACd,IAAI,CAACD,MAAM,IAAI,OAAQA,MAAM,CAASqC,QAAQ,KAAK,UAAU,EAAE;EAC/D,MAAMrC,MAAM,CAACqC,QAAQ,CAACX,GAAG,CAAC;AAC5B;;AAEA;AACA;AACA,OAAO,eAAemB,kBAAkBA,CACtCtC,KAAwB,EACxBC,IAA6C,EAC9B;EACf;EACA,MAAMkB,GAAG,GAAGpB,iBAAiB,CAACC,KAAK,EAAEC,IAAI,CAAC;EAC1C,MAAMsC,UAAU,GAAGpB,GAAG,CAAC7D,OAAO,EAAEkF,IAAI,CAAClD,CAAC,IAAIA,CAAC,CAACxB,GAAG,CAACmE,WAAW,CAAC,CAAC,KAAK,aAAa,CAAC,EAAElE,KAAK;EACvF,MAAMmE,QAAQ,GAAIjC,IAAI,EAAUkC,WAAiC;EACjE,MAAMA,WAAW,GAAGI,UAAU,IAAIL,QAAQ;EAC1C,IAAI,CAACC,WAAW,EAAE;IAChB,MAAM,IAAI/C,KAAK,CAAC,0EAA0E,CAAC;EAC7F;;EAEA;EACA,MAAMkC,UAAU,GAAG,CAACH,GAAG,CAAC7D,OAAO,IAAI,EAAE,EAAEiE,MAAM,CAAC,CAACC,GAAG,EAAE;IAAE1D,GAAG;IAAEC;EAAM,CAAC,KAAK;IACrEyD,GAAG,CAACpD,MAAM,CAACN,GAAG,CAAC,CAAC,GAAGM,MAAM,CAACL,KAAK,CAAC;IAChC,OAAOyD,GAAG;EACZ,CAAC,EAAE,CAAC,CAA2B,CAAC;EAEhC,MAAMtD,KAAK,GAAG;IACZgC,GAAG,EAAEiB,GAAG,CAACjB,GAAG;IACZiC,WAAW;IACX7E,OAAO,EAAEgE;EACX,CAAU;;EAEV;EACA,IAAI;IACF;IACA;IACA,MAAM;MAAEmB;IAAK,CAAC,GAAGC,OAAO,CAAC,mBAAmB,CAAC;IAC7C,MAAMC,OAAO,GAAG,IAAIF,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAMG,GAAG,GAAG,+BAA+B;IAC3C,IAAIC,GAAU,GAAG,EAAE;IACnB,IAAI;MACF,MAAMC,GAAG,GAAGH,OAAO,CAACI,SAAS,CAACH,GAAG,CAAC;MAClC,IAAIE,GAAG,EAAED,GAAG,GAAGjB,IAAI,CAACC,KAAK,CAACiB,GAAG,CAAC;MAC9B,IAAI,CAAC9E,KAAK,CAACC,OAAO,CAAC4E,GAAG,CAAC,EAAEA,GAAG,GAAG,EAAE;IACnC,CAAC,CAAC,MAAM;MACNA,GAAG,GAAG,EAAE;IACV;IACA,IAAIA,GAAG,CAACb,IAAI,CAACgB,CAAC,IAAIA,CAAC,IAAIA,CAAC,CAACb,WAAW,KAAKA,WAAW,CAAC,EAAE;MACrDU,GAAG,GAAGA,GAAG,CAACI,MAAM,CAACD,CAAC,IAAIA,CAAC,IAAIA,CAAC,CAACb,WAAW,KAAKA,WAAW,CAAC;IAC3D;IACAU,GAAG,CAAChF,IAAI,CAACK,KAAK,CAAC;IACfyE,OAAO,CAACO,GAAG,CAACN,GAAG,EAAEhB,IAAI,CAACuB,SAAS,CAACN,GAAG,CAAC,CAAC;EACvC,CAAC,CAAC,OAAOG,CAAC,EAAE;IACVnD,OAAO,CAACuD,IAAI,CAAC,gEAAgE,EAAEJ,CAAC,CAAC;EACnF;AACF;;AAEA;AACA,OAAO,eAAeK,sBAAsBA,CAAClB,WAAmB,EAAiB;EAC/E;EACA,IAAI;IACF;IACA,MAAM;MAAEM;IAAK,CAAC,GAAGC,OAAO,CAAC,mBAAmB,CAAC;IAC7C,MAAMC,OAAO,GAAG,IAAIF,IAAI,CAAC,CAAC;IAC1B,MAAMG,GAAG,GAAG,+BAA+B;IAC3C,IAAIC,GAAU,GAAG,EAAE;IACnB,IAAI;MACF,MAAMC,GAAG,GAAGH,OAAO,CAACI,SAAS,CAACH,GAAG,CAAC;MAClC,IAAIE,GAAG,EAAED,GAAG,GAAGjB,IAAI,CAACC,KAAK,CAACiB,GAAG,CAAC;MAC9B,IAAI,CAAC9E,KAAK,CAACC,OAAO,CAAC4E,GAAG,CAAC,EAAEA,GAAG,GAAG,EAAE;IACnC,CAAC,CAAC,MAAM;MACNA,GAAG,GAAG,EAAE;IACV;IACA,MAAMS,IAAI,GAAGT,GAAG,CAACI,MAAM,CAAED,CAAC,IAAKA,CAAC,IAAIA,CAAC,CAACb,WAAW,KAAKA,WAAW,CAAC;IAClE,IAAImB,IAAI,CAACnF,MAAM,KAAK,CAAC,EAAE;MACrB,IAAI,OAAQwE,OAAO,CAASY,MAAM,KAAK,UAAU,EAAE;QAChDZ,OAAO,CAASY,MAAM,CAACX,GAAG,CAAC;MAC9B,CAAC,MAAM;QACLD,OAAO,CAACO,GAAG,CAACN,GAAG,EAAEhB,IAAI,CAACuB,SAAS,CAAC,EAAE,CAAC,CAAC;MACtC;IACF,CAAC,MAAM,IAAIG,IAAI,CAACnF,MAAM,KAAK0E,GAAG,CAAC1E,MAAM,EAAE;MACrCwE,OAAO,CAACO,GAAG,CAACN,GAAG,EAAEhB,IAAI,CAACuB,SAAS,CAACG,IAAI,CAAC,CAAC;IACxC;EACF,CAAC,CAAC,OAAON,CAAC,EAAE;IACVnD,OAAO,CAACuD,IAAI,CAAC,oEAAoE,EAAEJ,CAAC,CAAC;EACvF;AACF;;AAEA;AACA,OAAO,eAAeQ,yBAAyBA,CAAA,EAAkB;EAC/D,IAAI;IACF;IACA,MAAM;MAAEf;IAAK,CAAC,GAAGC,OAAO,CAAC,mBAAmB,CAAC;IAC7C,MAAMC,OAAO,GAAG,IAAIF,IAAI,CAAC,CAAC;IAC1B,MAAMG,GAAG,GAAG,+BAA+B;IAC3C,IAAI,OAAQD,OAAO,CAASY,MAAM,KAAK,UAAU,EAAE;MAChDZ,OAAO,CAASY,MAAM,CAACX,GAAG,CAAC;IAC9B,CAAC,MAAM;MACLD,OAAO,CAACO,GAAG,CAACN,GAAG,EAAEhB,IAAI,CAACuB,SAAS,CAAC,EAAE,CAAC,CAAC;IACtC;EACF,CAAC,CAAC,OAAOH,CAAC,EAAE;IACVnD,OAAO,CAACuD,IAAI,CAAC,uEAAuE,EAAEJ,CAAC,CAAC;EAC1F;AACF;;AAEA;;AAYA,IAAIS,YAA6B;AACjC,IAAIC,WAA4B;AAChC,SAASC,oBAAoBA,CAACC,IAAI,GAAG,aAAa,EAAmB;EACnE/D,OAAO,CAACgE,GAAG,CAAC,0BAA0B,CAAC;EACvC,IAAI;IACF;IACA,MAAM;MAAEC;IAAS,CAAC,GAAGpB,OAAO,CAAC,4BAA4B,CAAC;IAC1De,YAAY,GAAGA,YAAY,IAAIK,QAAQ,CAACC,aAAa,CAACH,IAAI,CAAC;IAC3D/D,OAAO,CAACgE,GAAG,CAAC,eAAe,EAAE,CAAC,CAACJ,YAAY,CAAC;IAC5C,OAAOA,YAAY;EACrB,CAAC,CAAC,MAAM;IACN5D,OAAO,CAACuD,IAAI,CAAC,0CAA0C,CAAC;IACxD,OAAO7F,SAAS;EAClB;AACF;AAEA,SAASyG,WAAWA,CAAA,EAAoB;EACtC,IAAI;IACF,IAAIN,WAAW,EAAE,OAAOA,WAAW;IACnC;IACA,MAAM;MAAEI;IAAS,CAAC,GAAGpB,OAAO,CAAC,4BAA4B,CAAC;IAC1DgB,WAAW,GAAGI,QAAQ;IACtB,OAAOJ,WAAW;EACpB,CAAC,CAAC,MAAM;IACN7D,OAAO,CAACuD,IAAI,CAAC,0CAA0C,CAAC;IACxD,OAAO7F,SAAS;EAClB;AACF;AAEA,OAAO,eAAe0G,mBAAmBA,CACvCjE,KAAwB,EACxBC,IAA6B,EAC7BiE,UAAiC,EACjCC,OAAyD,EAC7C;EACZtE,OAAO,CAACgE,GAAG,CAAC,+BAA+B,CAAC;EAC5C,MAAMO,WAAW,GAAGD,OAAO,EAAEC,WAAW,KAAK,IAAI,CAAC,CAAC;EACnDvE,OAAO,CAACgE,GAAG,CAAC,mCAAmC,EAAEO,WAAW,CAAC;EAC7D,IAAIC,EAAmB;EACvB,IAAIP,QAAyB;EAC7B,IAAI;IACFO,EAAE,GAAGV,oBAAoB,CAACQ,OAAO,EAAEG,WAAW,CAAC;IAC/CzE,OAAO,CAACgE,GAAG,CAAC,uCAAuC,EAAE,CAAC,CAACQ,EAAE,CAAC;IAC1DP,QAAQ,GAAGE,WAAW,CAAC,CAAC;IACxBnE,OAAO,CAACgE,GAAG,CAAC,0CAA0C,EAAE,CAAC,CAACC,QAAQ,CAAC;EACrE,CAAC,CAAC,OAAOd,CAAC,EAAE;IACVnD,OAAO,CAACC,KAAK,CAAC,mCAAmC,EAAEkD,CAAC,CAAC;EACvD;;EAEA;EACA,IAAI,CAACqB,EAAE,IAAI,CAACP,QAAQ,IAAI,OAAOO,EAAE,CAACE,GAAG,KAAK,UAAU,EAAE;IACpD1E,OAAO,CAACuD,IAAI,CAAC,uDAAuD,CAAC;IACrE,MAAMzC,GAAG,GAAG,MAAMF,aAAa,CAACT,KAAK,EAAEC,IAAI,CAAC;IAC5C,MAAMuE,OAAO,GAAG;MACdtE,GAAG,EAAES,GAAG,CAACT,GAAG;MACZa,MAAM,EAAEJ,GAAG,CAACI,MAAM;MAClBC,UAAU,EAAEL,GAAG,CAACK,UAAU;MAC1BC,EAAE,EAAEN,GAAG,CAACM,EAAE;MACVC,UAAU,EAAEP,GAAG,CAACO,UAAU;MAC1B5D,OAAO,EAAEqD,GAAG,CAACrD,OAAO;MACpBuB,SAAS,EAAEuF,WAAW,GAAGzD,GAAG,CAAC9B,SAAS,GAAGtB,SAAS;MAClDkB,UAAU,EAAE2F,WAAW,GAAG7G,SAAS,GAAGoD,GAAG,CAAClC;IAC5C,CAAU;IACV,OAAOyF,UAAU,CAACM,OAAc,CAAC;EACnC;EAEA,OAAO,MAAM,IAAIC,OAAO,CAAI,CAACC,OAAO,EAAEC,MAAM,KAAK;IAC/C,IAAI;MACF9E,OAAO,CAACgE,GAAG,CAAC,2CAA2C,CAAC;MACxDQ,EAAE,CAACE,GAAG,CAAC,MAAOK,GAA0B,IAAK;QAC3C,SAAS;;QACT,IAAI;UACF/E,OAAO,CAACgE,GAAG,CAAC,sDAAsD,CAAC;UACnE,MAAMlD,GAAG,GAAG,MAAMF,aAAa,CAACT,KAAK,EAAEC,IAAI,CAAC;UAC5CJ,OAAO,CAACgE,GAAG,CAAC,sCAAsC,CAAC;UACnD,MAAM3D,GAAG,GAAGS,GAAG,CAACT,GAAG;UACnB,MAAMa,MAAM,GAAGJ,GAAG,CAACI,MAAM;UACzB,MAAMC,UAAU,GAAGL,GAAG,CAACK,UAAU;UACjC,MAAMC,EAAE,GAAGN,GAAG,CAACM,EAAE;UACjB,MAAMC,UAAU,GAAGP,GAAG,CAACO,UAAU;UACjC,MAAM2D,YAA2B,GAAGlE,GAAG,CAACrD,OAAO;UAC/C,MAAMuB,SAAkC,GAAGtB,SAAS,CAAC,CAAC;UACtD,MAAMkB,UAA8B,GAAG2F,WAAW,GAAG7G,SAAS,GAAGoD,GAAG,CAAClC,UAAU;UAC/E,MAAM+F,OAAO,GAAG;YAAEtE,GAAG;YAAEa,MAAM;YAAEC,UAAU;YAAEC,EAAE;YAAEC,UAAU;YAAE5D,OAAO,EAAEuH,YAAY;YAAEhG,SAAS;YAAEJ;UAAW,CAAC;UACzG,MAAMqG,GAAG,GAAGF,GAAG,CAACJ,OAAO,CAAC;UACxB;UACAV,QAAQ,CAACiB,OAAO,CAACL,OAAO,CAAC,CAACI,GAAU,CAAC;QACvC,CAAC,CAAC,OAAO9B,CAAC,EAAE;UACVc,QAAQ,CAACiB,OAAO,CAACJ,MAAM,CAAC,CAAC3B,CAAQ,CAAC;QACpC;MACF,CAAC,EAAEkB,UAAiB,CAAC;IACvB,CAAC,CAAC,OAAOlB,CAAC,EAAE;MACVnD,OAAO,CAACC,KAAK,CAAC,oCAAoC,EAAEkD,CAAC,CAAC;MACtD2B,MAAM,CAAC3B,CAAC,CAAC;IACX;EACF,CAAC,CAAC;AACJ;AAEA,OAAO,MAAMgC,CAAC,GAAGrB,oBAAoB,CAAC,CAAC;AACvC,OAAO,MAAMsB,CAAC,GAAGjB,WAAW,CAAC,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,WAAW,EAGZ,MAAM,oBAAoB,CAAC;AAsI5B,wBAAsB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CA6BhG;AAGD,wBAAsB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB1F;AAID,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,CA0Cf;AAGD,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B/E;AAGD,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAc/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;AA+BR,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,CA8DZ;AAED,eAAO,MAAM,CAAC,KAAyB,CAAC;AACxC,eAAO,MAAM,CAAC,KAAgB,CAAC;AAE/B,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,WAAW,EAGZ,MAAM,oBAAoB,CAAC;AAsI5B,wBAAsB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CA6BhG;AAGD,wBAAsB,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB1F;AAID,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,CA6Cf;AAGD,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B/E;AAGD,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC,CAc/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;AA+BR,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,CA8DZ;AAED,eAAO,MAAM,CAAC,KAAyB,CAAC;AACxC,eAAO,MAAM,CAAC,KAAgB,CAAC;AAE/B,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-nitro-fetch",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Awesome Fetch :)",
5
5
  "main": "./lib/module/index.js",
6
6
  "module": "./lib/module/index.js",
package/src/fetch.ts CHANGED
@@ -235,6 +235,9 @@ export async function prefetchOnAppStart(
235
235
  } catch {
236
236
  arr = [];
237
237
  }
238
+ if (arr.some(e => e && e.prefetchKey === prefetchKey)) {
239
+ arr = arr.filter(e => e && e.prefetchKey !== prefetchKey);
240
+ }
238
241
  arr.push(entry);
239
242
  storage.set(KEY, JSON.stringify(arr));
240
243
  } catch (e) {
@@ -1,2 +0,0 @@
1
- ;
2
- export {};
@@ -1,3 +0,0 @@
1
- import { NitroModules } from 'react-native-nitro-modules';
2
- // Create singletons once per JS runtime
3
- export const NitroFetch = NitroModules.createHybridObject('NitroFetch');
package/src/fetch.js DELETED
@@ -1,377 +0,0 @@
1
- import { NitroFetch as NitroFetchSingleton } from './NitroInstances';
2
- // No base64: pass strings/ArrayBuffers directly
3
- function headersToPairs(headers) {
4
- 'worklet';
5
- if (!headers)
6
- return undefined;
7
- const pairs = [];
8
- if (headers instanceof Headers) {
9
- headers.forEach((v, k) => pairs.push({ key: k, value: v }));
10
- return pairs;
11
- }
12
- if (Array.isArray(headers)) {
13
- // Convert tuple pairs to objects if needed
14
- for (const entry of headers) {
15
- if (Array.isArray(entry) && entry.length >= 2) {
16
- pairs.push({ key: String(entry[0]), value: String(entry[1]) });
17
- }
18
- else if (entry && typeof entry === 'object' && 'key' in entry && 'value' in entry) {
19
- pairs.push(entry);
20
- }
21
- }
22
- return pairs;
23
- }
24
- // Record<string, string>
25
- for (const [k, v] of Object.entries(headers)) {
26
- pairs.push({ key: k, value: String(v) });
27
- }
28
- return pairs;
29
- }
30
- function normalizeBody(body) {
31
- 'worklet';
32
- if (body == null)
33
- return undefined;
34
- if (typeof body === 'string')
35
- return { bodyString: body };
36
- if (body instanceof URLSearchParams)
37
- return { bodyString: body.toString() };
38
- if (typeof ArrayBuffer !== 'undefined' && body instanceof ArrayBuffer)
39
- return { bodyBytes: body };
40
- if (ArrayBuffer.isView(body)) {
41
- const view = body;
42
- // Pass a copy/slice of the underlying bytes without base64
43
- //@ts-ignore
44
- return { bodyBytes: view.buffer.slice(view.byteOffset, view.byteOffset + view.byteLength) };
45
- }
46
- // TODO: Blob/FormData support can be added later
47
- throw new Error('Unsupported body type for nitro fetch');
48
- }
49
- // @ts-ignore
50
- function pairsToHeaders(pairs) {
51
- 'worklet';
52
- const h = new Headers();
53
- for (const { key, value } of pairs)
54
- h.append(key, value);
55
- return h;
56
- }
57
- const NitroFetchHybrid = NitroFetchSingleton;
58
- let client;
59
- function ensureClient() {
60
- if (client)
61
- return client;
62
- try {
63
- client = NitroFetchHybrid.createClient();
64
- }
65
- catch (err) {
66
- console.error('Failed to create NitroFetch client', err);
67
- // native not ready; keep undefined
68
- }
69
- return client;
70
- }
71
- function buildNitroRequest(input, init) {
72
- 'worklet';
73
- let url;
74
- let method;
75
- let headersInit;
76
- let body;
77
- if (typeof input === 'string' || input instanceof URL) {
78
- url = String(input);
79
- method = init?.method;
80
- headersInit = init?.headers;
81
- body = init?.body ?? null;
82
- }
83
- else {
84
- // Request object
85
- url = input.url;
86
- method = input.method;
87
- headersInit = input.headers;
88
- // Clone body if needed – Request objects in RN typically allow direct access
89
- body = init?.body ?? null;
90
- }
91
- const headers = headersToPairs(headersInit);
92
- const normalized = normalizeBody(body);
93
- return {
94
- url,
95
- method: method?.toUpperCase() ?? 'GET',
96
- headers,
97
- bodyString: normalized?.bodyString,
98
- bodyBytes: "", //normalized?.bodyBytes,
99
- followRedirects: true,
100
- };
101
- }
102
- async function nitroFetchRaw(input, init) {
103
- 'worklet';
104
- const hasNative = typeof NitroFetchHybrid?.createClient === 'function';
105
- if (!hasNative) {
106
- // Fallback path not supported for raw; use global fetch and synthesize minimal shape
107
- // @ts-ignore: global fetch exists in RN
108
- const res = await fetch(input, init);
109
- const url = res.url ?? String(input);
110
- const bytes = await res.arrayBuffer();
111
- const headers = [];
112
- res.headers.forEach((v, k) => headers.push({ key: k, value: v }));
113
- return {
114
- url,
115
- status: res.status,
116
- statusText: res.statusText,
117
- ok: res.ok,
118
- redirected: res.redirected ?? false,
119
- headers,
120
- bodyBytes: bytes,
121
- bodyString: undefined,
122
- }; // bleee
123
- }
124
- const req = buildNitroRequest(input, init);
125
- ensureClient();
126
- if (!client || typeof client.request !== 'function')
127
- throw new Error('NitroFetch client not available');
128
- const res = await client.request(req);
129
- return res;
130
- }
131
- export async function nitroFetch(input, init) {
132
- 'worklet';
133
- // If native implementation is not present yet, fallback to global fetch
134
- const hasNative = typeof NitroFetchHybrid?.createClient === 'function';
135
- if (!hasNative) {
136
- // @ts-ignore: global fetch exists in RN
137
- return fetch(input, init);
138
- }
139
- const res = await nitroFetchRaw(input, init);
140
- // Fallback lightweight Response-like object (minimal methods)
141
- const headersObj = res.headers.reduce((acc, { key, value }) => {
142
- acc[key] = value;
143
- return acc;
144
- }, {});
145
- const light = {
146
- url: res.url,
147
- ok: res.ok,
148
- status: res.status,
149
- statusText: res.statusText,
150
- redirected: res.redirected,
151
- headers: headersObj,
152
- arrayBuffer: async () => res.bodyBytes,
153
- text: async () => res.bodyString,
154
- json: async () => JSON.parse(res.bodyString ?? '{}'),
155
- };
156
- return light;
157
- }
158
- // Start a native prefetch. Requires a `prefetchKey` header on the request.
159
- export async function prefetch(input, init) {
160
- // If native implementation is not present yet, do nothing
161
- const hasNative = typeof NitroFetchHybrid?.createClient === 'function';
162
- if (!hasNative)
163
- return;
164
- // Build NitroRequest and ensure prefetchKey header exists
165
- const req = buildNitroRequest(input, init);
166
- const hasKey = req.headers?.some(h => h.key.toLowerCase() === 'prefetchkey') ?? false;
167
- // Also support passing prefetchKey via non-standard field on init
168
- const fromInit = init?.prefetchKey;
169
- if (!hasKey && fromInit) {
170
- req.headers = (req.headers ?? []).concat([{ key: 'prefetchKey', value: fromInit }]);
171
- }
172
- const finalHasKey = req.headers?.some(h => h.key.toLowerCase() === 'prefetchkey');
173
- if (!finalHasKey) {
174
- throw new Error('prefetch requires a \"prefetchKey\" header');
175
- }
176
- // Ensure client and call native prefetch
177
- ensureClient();
178
- if (!client || typeof client.prefetch !== 'function')
179
- return;
180
- await client.prefetch(req);
181
- }
182
- // Persist a request to MMKV so native can prefetch it on app start.
183
- // Stores an array of entries under the same key Android reads: "nitrofetch_autoprefetch_queue".
184
- export async function prefetchOnAppStart(input, init) {
185
- // Resolve request and prefetchKey
186
- const req = buildNitroRequest(input, init);
187
- const fromHeader = req.headers?.find(h => h.key.toLowerCase() === 'prefetchkey')?.value;
188
- const fromInit = init?.prefetchKey;
189
- const prefetchKey = fromHeader ?? fromInit;
190
- if (!prefetchKey) {
191
- throw new Error('prefetchOnAppStart requires a "prefetchKey" (header or init.prefetchKey)');
192
- }
193
- // Convert headers to a plain object for storage
194
- const headersObj = (req.headers ?? []).reduce((acc, { key, value }) => {
195
- acc[String(key)] = String(value);
196
- return acc;
197
- }, {});
198
- const entry = {
199
- url: req.url,
200
- prefetchKey,
201
- headers: headersObj,
202
- };
203
- // Write or append to MMKV queue
204
- try {
205
- // Dynamically require to keep it optional for consumers
206
- // eslint-disable-next-line @typescript-eslint/no-var-requires
207
- const { MMKV } = require('react-native-mmkv');
208
- const storage = new MMKV(); // default instance matches Android's defaultMMKV
209
- const KEY = 'nitrofetch_autoprefetch_queue';
210
- let arr = [];
211
- try {
212
- const raw = storage.getString(KEY);
213
- if (raw)
214
- arr = JSON.parse(raw);
215
- if (!Array.isArray(arr))
216
- arr = [];
217
- }
218
- catch {
219
- arr = [];
220
- }
221
- arr.push(entry);
222
- storage.set(KEY, JSON.stringify(arr));
223
- }
224
- catch (e) {
225
- console.warn('react-native-mmkv not available; prefetchOnAppStart is a no-op', e);
226
- }
227
- }
228
- // Remove one entry (by prefetchKey) from the auto-prefetch queue in MMKV.
229
- export async function removeFromAutoPrefetch(prefetchKey) {
230
- // No-op on iOS
231
- try {
232
- // eslint-disable-next-line @typescript-eslint/no-var-requires
233
- const { MMKV } = require('react-native-mmkv');
234
- const storage = new MMKV();
235
- const KEY = 'nitrofetch_autoprefetch_queue';
236
- let arr = [];
237
- try {
238
- const raw = storage.getString(KEY);
239
- if (raw)
240
- arr = JSON.parse(raw);
241
- if (!Array.isArray(arr))
242
- arr = [];
243
- }
244
- catch {
245
- arr = [];
246
- }
247
- const next = arr.filter((e) => e && e.prefetchKey !== prefetchKey);
248
- if (next.length === 0) {
249
- if (typeof storage.delete === 'function') {
250
- storage.delete(KEY);
251
- }
252
- else {
253
- storage.set(KEY, JSON.stringify([]));
254
- }
255
- }
256
- else if (next.length !== arr.length) {
257
- storage.set(KEY, JSON.stringify(next));
258
- }
259
- }
260
- catch (e) {
261
- console.warn('react-native-mmkv not available; removeFromAutoPrefetch is a no-op', e);
262
- }
263
- }
264
- // Remove all entries from the auto-prefetch queue in MMKV.
265
- export async function removeAllFromAutoprefetch() {
266
- try {
267
- // eslint-disable-next-line @typescript-eslint/no-var-requires
268
- const { MMKV } = require('react-native-mmkv');
269
- const storage = new MMKV();
270
- const KEY = 'nitrofetch_autoprefetch_queue';
271
- if (typeof storage.delete === 'function') {
272
- storage.delete(KEY);
273
- }
274
- else {
275
- storage.set(KEY, JSON.stringify([]));
276
- }
277
- }
278
- catch (e) {
279
- console.warn('react-native-mmkv not available; removeAllFromAutoprefetch is a no-op', e);
280
- }
281
- }
282
- let nitroRuntime;
283
- let WorkletsRef;
284
- function ensureWorkletRuntime(name = 'nitro-fetch') {
285
- console.log('ensuring worklet runtime');
286
- try {
287
- // eslint-disable-next-line @typescript-eslint/no-var-requires
288
- const { Worklets } = require('react-native-worklets-core');
289
- nitroRuntime = nitroRuntime ?? Worklets.createRuntime(name);
290
- console.log('nitroRuntime:', !!nitroRuntime);
291
- return nitroRuntime;
292
- }
293
- catch {
294
- console.warn('react-native-worklets-core not available');
295
- return undefined;
296
- }
297
- }
298
- function getWorklets() {
299
- try {
300
- if (WorkletsRef)
301
- return WorkletsRef;
302
- // eslint-disable-next-line @typescript-eslint/no-var-requires
303
- const { Worklets } = require('react-native-worklets-core');
304
- WorkletsRef = Worklets;
305
- return WorkletsRef;
306
- }
307
- catch {
308
- console.warn('react-native-worklets-core not available');
309
- return undefined;
310
- }
311
- }
312
- export async function nitroFetchOnWorklet(input, init, mapWorklet, options) {
313
- console.log('nitroFetchOnWorklet: starting');
314
- const preferBytes = options?.preferBytes === true; // default true
315
- console.log('nitroFetchOnWorklet: preferBytes:', preferBytes);
316
- let rt;
317
- let Worklets;
318
- try {
319
- rt = ensureWorkletRuntime(options?.runtimeName);
320
- console.log('nitroFetchOnWorklet: runtime created?', !!rt);
321
- Worklets = getWorklets();
322
- console.log('nitroFetchOnWorklet: Worklets available?', !!Worklets);
323
- }
324
- catch (e) {
325
- console.error('nitroFetchOnWorklet: setup failed', e);
326
- }
327
- // Fallback: if runtime is not available, do the work on JS
328
- if (!rt || !Worklets || typeof rt.run !== 'function') {
329
- console.warn('nitroFetchOnWorklet: no runtime, mapping on JS thread');
330
- const res = await nitroFetchRaw(input, init);
331
- const payload = {
332
- url: res.url,
333
- status: res.status,
334
- statusText: res.statusText,
335
- ok: res.ok,
336
- redirected: res.redirected,
337
- headers: res.headers,
338
- bodyBytes: preferBytes ? res.bodyBytes : undefined,
339
- bodyString: preferBytes ? undefined : res.bodyString,
340
- };
341
- return mapWorklet(payload);
342
- }
343
- return await new Promise((resolve, reject) => {
344
- try {
345
- console.log('nitroFetchOnWorklet: about to call rt.run');
346
- rt.run(async (map) => {
347
- 'worklet';
348
- try {
349
- console.log('nitroFetchOnWorklet: running fetch on worklet thread');
350
- const res = await nitroFetchRaw(input, init);
351
- console.log('nitroFetchOnWorklet: fetch completed');
352
- const url = res.url;
353
- const status = res.status;
354
- const statusText = res.statusText;
355
- const ok = res.ok;
356
- const redirected = res.redirected;
357
- const headersPairs = res.headers;
358
- const bodyBytes = undefined; // preferBytes ? res.bodyBytes : undefined;
359
- const bodyString = preferBytes ? undefined : res.bodyString;
360
- const payload = { url, status, statusText, ok, redirected, headers: headersPairs, bodyBytes, bodyString };
361
- const out = map(payload);
362
- // Resolve back on JS thread
363
- Worklets.runOnJS(resolve)(out);
364
- }
365
- catch (e) {
366
- Worklets.runOnJS(reject)(e);
367
- }
368
- }, mapWorklet);
369
- }
370
- catch (e) {
371
- console.error('nitroFetchOnWorklet: rt.run failed', e);
372
- reject(e);
373
- }
374
- });
375
- }
376
- export const x = ensureWorkletRuntime();
377
- export const y = getWorklets();
package/src/index.js DELETED
@@ -1,8 +0,0 @@
1
- export { nitroFetch as fetch, nitroFetchOnWorklet, prefetch, prefetchOnAppStart, removeFromAutoPrefetch, removeAllFromAutoprefetch, } from './fetch';
2
- export { NitroFetch } from './NitroInstances';
3
- import './fetch';
4
- // Keep legacy export to avoid breaking any local tests/usages during scaffolding.
5
- // Will be removed once native Cronet path is ready.
6
- export function multiply(a, b) {
7
- return a * b;
8
- }