react-native-nitro-fetch 0.1.1

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 (90) hide show
  1. package/LICENSE +20 -0
  2. package/NitroFetch.podspec +30 -0
  3. package/README.md +134 -0
  4. package/android/CMakeLists.txt +70 -0
  5. package/android/build.gradle +131 -0
  6. package/android/gradle.properties +5 -0
  7. package/android/src/main/AndroidManifest.xml +2 -0
  8. package/android/src/main/cpp/cpp-adapter.cpp +6 -0
  9. package/android/src/main/java/com/margelo/nitro/nitrofetch/AutoPrefetcher.kt +91 -0
  10. package/android/src/main/java/com/margelo/nitro/nitrofetch/FetchCache.kt +48 -0
  11. package/android/src/main/java/com/margelo/nitro/nitrofetch/NitroFetch.kt +94 -0
  12. package/android/src/main/java/com/margelo/nitro/nitrofetch/NitroFetchClient.kt +256 -0
  13. package/android/src/main/java/com/margelo/nitro/nitrofetch/NitroFetchPackage.kt +22 -0
  14. package/ios/FetchCache.swift +56 -0
  15. package/ios/NitroAutoPrefetcher.swift +81 -0
  16. package/ios/NitroBootstrap.mm +27 -0
  17. package/ios/NitroFetch.swift +9 -0
  18. package/ios/NitroFetchClient.swift +205 -0
  19. package/lib/module/NitroFetch.nitro.js +7 -0
  20. package/lib/module/NitroFetch.nitro.js.map +1 -0
  21. package/lib/module/NitroInstances.js +6 -0
  22. package/lib/module/NitroInstances.js.map +1 -0
  23. package/lib/module/fetch.js +441 -0
  24. package/lib/module/fetch.js.map +1 -0
  25. package/lib/module/index.js +12 -0
  26. package/lib/module/index.js.map +1 -0
  27. package/lib/module/package.json +1 -0
  28. package/lib/typescript/package.json +1 -0
  29. package/lib/typescript/src/NitroFetch.nitro.d.ts +39 -0
  30. package/lib/typescript/src/NitroFetch.nitro.d.ts.map +1 -0
  31. package/lib/typescript/src/NitroInstances.d.ts +3 -0
  32. package/lib/typescript/src/NitroInstances.d.ts.map +1 -0
  33. package/lib/typescript/src/fetch.d.ts +26 -0
  34. package/lib/typescript/src/fetch.d.ts.map +1 -0
  35. package/lib/typescript/src/index.d.ts +6 -0
  36. package/lib/typescript/src/index.d.ts.map +1 -0
  37. package/nitro.json +21 -0
  38. package/nitrogen/generated/android/c++/JHybridNitroFetchClientSpec.cpp +96 -0
  39. package/nitrogen/generated/android/c++/JHybridNitroFetchClientSpec.hpp +65 -0
  40. package/nitrogen/generated/android/c++/JHybridNitroFetchSpec.cpp +49 -0
  41. package/nitrogen/generated/android/c++/JHybridNitroFetchSpec.hpp +64 -0
  42. package/nitrogen/generated/android/c++/JNitroHeader.hpp +57 -0
  43. package/nitrogen/generated/android/c++/JNitroRequest.hpp +103 -0
  44. package/nitrogen/generated/android/c++/JNitroRequestMethod.hpp +74 -0
  45. package/nitrogen/generated/android/c++/JNitroResponse.hpp +105 -0
  46. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofetch/HybridNitroFetchClientSpec.kt +56 -0
  47. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofetch/HybridNitroFetchSpec.kt +52 -0
  48. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofetch/NitroHeader.kt +32 -0
  49. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofetch/NitroRequest.kt +47 -0
  50. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofetch/NitroRequestMethod.kt +26 -0
  51. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofetch/NitroResponse.kt +50 -0
  52. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofetch/nitrofetchOnLoad.kt +35 -0
  53. package/nitrogen/generated/android/nitrofetch+autolinking.cmake +80 -0
  54. package/nitrogen/generated/android/nitrofetch+autolinking.gradle +27 -0
  55. package/nitrogen/generated/android/nitrofetchOnLoad.cpp +54 -0
  56. package/nitrogen/generated/android/nitrofetchOnLoad.hpp +25 -0
  57. package/nitrogen/generated/ios/NitroFetch+autolinking.rb +60 -0
  58. package/nitrogen/generated/ios/NitroFetch-Swift-Cxx-Bridge.cpp +73 -0
  59. package/nitrogen/generated/ios/NitroFetch-Swift-Cxx-Bridge.hpp +298 -0
  60. package/nitrogen/generated/ios/NitroFetch-Swift-Cxx-Umbrella.hpp +67 -0
  61. package/nitrogen/generated/ios/NitroFetchAutolinking.mm +41 -0
  62. package/nitrogen/generated/ios/NitroFetchAutolinking.swift +40 -0
  63. package/nitrogen/generated/ios/c++/HybridNitroFetchClientSpecSwift.cpp +11 -0
  64. package/nitrogen/generated/ios/c++/HybridNitroFetchClientSpecSwift.hpp +101 -0
  65. package/nitrogen/generated/ios/c++/HybridNitroFetchSpecSwift.cpp +11 -0
  66. package/nitrogen/generated/ios/c++/HybridNitroFetchSpecSwift.hpp +75 -0
  67. package/nitrogen/generated/ios/swift/Func_void.swift +47 -0
  68. package/nitrogen/generated/ios/swift/Func_void_NitroResponse.swift +47 -0
  69. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +47 -0
  70. package/nitrogen/generated/ios/swift/HybridNitroFetchClientSpec.swift +50 -0
  71. package/nitrogen/generated/ios/swift/HybridNitroFetchClientSpec_cxx.swift +149 -0
  72. package/nitrogen/generated/ios/swift/HybridNitroFetchSpec.swift +49 -0
  73. package/nitrogen/generated/ios/swift/HybridNitroFetchSpec_cxx.swift +126 -0
  74. package/nitrogen/generated/ios/swift/NitroHeader.swift +46 -0
  75. package/nitrogen/generated/ios/swift/NitroRequest.swift +199 -0
  76. package/nitrogen/generated/ios/swift/NitroRequestMethod.swift +60 -0
  77. package/nitrogen/generated/ios/swift/NitroResponse.swift +155 -0
  78. package/nitrogen/generated/shared/c++/HybridNitroFetchClientSpec.cpp +22 -0
  79. package/nitrogen/generated/shared/c++/HybridNitroFetchClientSpec.hpp +68 -0
  80. package/nitrogen/generated/shared/c++/HybridNitroFetchSpec.cpp +21 -0
  81. package/nitrogen/generated/shared/c++/HybridNitroFetchSpec.hpp +64 -0
  82. package/nitrogen/generated/shared/c++/NitroHeader.hpp +71 -0
  83. package/nitrogen/generated/shared/c++/NitroRequest.hpp +101 -0
  84. package/nitrogen/generated/shared/c++/NitroRequestMethod.hpp +96 -0
  85. package/nitrogen/generated/shared/c++/NitroResponse.hpp +102 -0
  86. package/package.json +177 -0
  87. package/src/NitroFetch.nitro.ts +57 -0
  88. package/src/NitroInstances.ts +8 -0
  89. package/src/fetch.ts +426 -0
  90. package/src/index.tsx +17 -0
@@ -0,0 +1,199 @@
1
+ ///
2
+ /// NitroRequest.swift
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ import NitroModules
9
+
10
+ /**
11
+ * Represents an instance of `NitroRequest`, backed by a C++ struct.
12
+ */
13
+ public typealias NitroRequest = margelo.nitro.nitrofetch.NitroRequest
14
+
15
+ public extension NitroRequest {
16
+ private typealias bridge = margelo.nitro.nitrofetch.bridge.swift
17
+
18
+ /**
19
+ * Create a new instance of `NitroRequest`.
20
+ */
21
+ init(url: String, method: NitroRequestMethod?, headers: [NitroHeader]?, bodyString: String?, bodyBytes: ArrayBuffer?, timeoutMs: Double?, followRedirects: Bool?) {
22
+ self.init(std.string(url), { () -> bridge.std__optional_NitroRequestMethod_ in
23
+ if let __unwrappedValue = method {
24
+ return bridge.create_std__optional_NitroRequestMethod_(__unwrappedValue)
25
+ } else {
26
+ return .init()
27
+ }
28
+ }(), { () -> bridge.std__optional_std__vector_NitroHeader__ in
29
+ if let __unwrappedValue = headers {
30
+ return bridge.create_std__optional_std__vector_NitroHeader__({ () -> bridge.std__vector_NitroHeader_ in
31
+ var __vector = bridge.create_std__vector_NitroHeader_(__unwrappedValue.count)
32
+ for __item in __unwrappedValue {
33
+ __vector.push_back(__item)
34
+ }
35
+ return __vector
36
+ }())
37
+ } else {
38
+ return .init()
39
+ }
40
+ }(), { () -> bridge.std__optional_std__string_ in
41
+ if let __unwrappedValue = bodyString {
42
+ return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
43
+ } else {
44
+ return .init()
45
+ }
46
+ }(), { () -> bridge.std__optional_std__shared_ptr_ArrayBuffer__ in
47
+ if let __unwrappedValue = bodyBytes {
48
+ return bridge.create_std__optional_std__shared_ptr_ArrayBuffer__(__unwrappedValue.getArrayBuffer())
49
+ } else {
50
+ return .init()
51
+ }
52
+ }(), { () -> bridge.std__optional_double_ in
53
+ if let __unwrappedValue = timeoutMs {
54
+ return bridge.create_std__optional_double_(__unwrappedValue)
55
+ } else {
56
+ return .init()
57
+ }
58
+ }(), { () -> bridge.std__optional_bool_ in
59
+ if let __unwrappedValue = followRedirects {
60
+ return bridge.create_std__optional_bool_(__unwrappedValue)
61
+ } else {
62
+ return .init()
63
+ }
64
+ }())
65
+ }
66
+
67
+ var url: String {
68
+ @inline(__always)
69
+ get {
70
+ return String(self.__url)
71
+ }
72
+ @inline(__always)
73
+ set {
74
+ self.__url = std.string(newValue)
75
+ }
76
+ }
77
+
78
+ var method: NitroRequestMethod? {
79
+ @inline(__always)
80
+ get {
81
+ return self.__method.value
82
+ }
83
+ @inline(__always)
84
+ set {
85
+ self.__method = { () -> bridge.std__optional_NitroRequestMethod_ in
86
+ if let __unwrappedValue = newValue {
87
+ return bridge.create_std__optional_NitroRequestMethod_(__unwrappedValue)
88
+ } else {
89
+ return .init()
90
+ }
91
+ }()
92
+ }
93
+ }
94
+
95
+ var headers: [NitroHeader]? {
96
+ @inline(__always)
97
+ get {
98
+ return { () -> [NitroHeader]? in
99
+ if bridge.has_value_std__optional_std__vector_NitroHeader__(self.__headers) {
100
+ let __unwrapped = bridge.get_std__optional_std__vector_NitroHeader__(self.__headers)
101
+ return __unwrapped.map({ __item in __item })
102
+ } else {
103
+ return nil
104
+ }
105
+ }()
106
+ }
107
+ @inline(__always)
108
+ set {
109
+ self.__headers = { () -> bridge.std__optional_std__vector_NitroHeader__ in
110
+ if let __unwrappedValue = newValue {
111
+ return bridge.create_std__optional_std__vector_NitroHeader__({ () -> bridge.std__vector_NitroHeader_ in
112
+ var __vector = bridge.create_std__vector_NitroHeader_(__unwrappedValue.count)
113
+ for __item in __unwrappedValue {
114
+ __vector.push_back(__item)
115
+ }
116
+ return __vector
117
+ }())
118
+ } else {
119
+ return .init()
120
+ }
121
+ }()
122
+ }
123
+ }
124
+
125
+ var bodyString: String? {
126
+ @inline(__always)
127
+ get {
128
+ return { () -> String? in
129
+ if bridge.has_value_std__optional_std__string_(self.__bodyString) {
130
+ let __unwrapped = bridge.get_std__optional_std__string_(self.__bodyString)
131
+ return String(__unwrapped)
132
+ } else {
133
+ return nil
134
+ }
135
+ }()
136
+ }
137
+ @inline(__always)
138
+ set {
139
+ self.__bodyString = { () -> bridge.std__optional_std__string_ in
140
+ if let __unwrappedValue = newValue {
141
+ return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
142
+ } else {
143
+ return .init()
144
+ }
145
+ }()
146
+ }
147
+ }
148
+
149
+ var bodyBytes: ArrayBuffer? {
150
+ @inline(__always)
151
+ get {
152
+ return self.__bodyBytes.value
153
+ }
154
+ @inline(__always)
155
+ set {
156
+ self.__bodyBytes = { () -> bridge.std__optional_std__shared_ptr_ArrayBuffer__ in
157
+ if let __unwrappedValue = newValue {
158
+ return bridge.create_std__optional_std__shared_ptr_ArrayBuffer__(__unwrappedValue.getArrayBuffer())
159
+ } else {
160
+ return .init()
161
+ }
162
+ }()
163
+ }
164
+ }
165
+
166
+ var timeoutMs: Double? {
167
+ @inline(__always)
168
+ get {
169
+ return self.__timeoutMs.value
170
+ }
171
+ @inline(__always)
172
+ set {
173
+ self.__timeoutMs = { () -> bridge.std__optional_double_ in
174
+ if let __unwrappedValue = newValue {
175
+ return bridge.create_std__optional_double_(__unwrappedValue)
176
+ } else {
177
+ return .init()
178
+ }
179
+ }()
180
+ }
181
+ }
182
+
183
+ var followRedirects: Bool? {
184
+ @inline(__always)
185
+ get {
186
+ return self.__followRedirects.value
187
+ }
188
+ @inline(__always)
189
+ set {
190
+ self.__followRedirects = { () -> bridge.std__optional_bool_ in
191
+ if let __unwrappedValue = newValue {
192
+ return bridge.create_std__optional_bool_(__unwrappedValue)
193
+ } else {
194
+ return .init()
195
+ }
196
+ }()
197
+ }
198
+ }
199
+ }
@@ -0,0 +1,60 @@
1
+ ///
2
+ /// NitroRequestMethod.swift
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ /**
9
+ * Represents the JS union `NitroRequestMethod`, backed by a C++ enum.
10
+ */
11
+ public typealias NitroRequestMethod = margelo.nitro.nitrofetch.NitroRequestMethod
12
+
13
+ public extension NitroRequestMethod {
14
+ /**
15
+ * Get a NitroRequestMethod for the given String value, or
16
+ * return `nil` if the given value was invalid/unknown.
17
+ */
18
+ init?(fromString string: String) {
19
+ switch string {
20
+ case "GET":
21
+ self = .get
22
+ case "HEAD":
23
+ self = .head
24
+ case "POST":
25
+ self = .post
26
+ case "PUT":
27
+ self = .put
28
+ case "PATCH":
29
+ self = .patch
30
+ case "DELETE":
31
+ self = .delete
32
+ case "OPTIONS":
33
+ self = .options
34
+ default:
35
+ return nil
36
+ }
37
+ }
38
+
39
+ /**
40
+ * Get the String value this NitroRequestMethod represents.
41
+ */
42
+ var stringValue: String {
43
+ switch self {
44
+ case .get:
45
+ return "GET"
46
+ case .head:
47
+ return "HEAD"
48
+ case .post:
49
+ return "POST"
50
+ case .put:
51
+ return "PUT"
52
+ case .patch:
53
+ return "PATCH"
54
+ case .delete:
55
+ return "DELETE"
56
+ case .options:
57
+ return "OPTIONS"
58
+ }
59
+ }
60
+ }
@@ -0,0 +1,155 @@
1
+ ///
2
+ /// NitroResponse.swift
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ import NitroModules
9
+
10
+ /**
11
+ * Represents an instance of `NitroResponse`, backed by a C++ struct.
12
+ */
13
+ public typealias NitroResponse = margelo.nitro.nitrofetch.NitroResponse
14
+
15
+ public extension NitroResponse {
16
+ private typealias bridge = margelo.nitro.nitrofetch.bridge.swift
17
+
18
+ /**
19
+ * Create a new instance of `NitroResponse`.
20
+ */
21
+ init(url: String, status: Double, statusText: String, ok: Bool, redirected: Bool, headers: [NitroHeader], bodyString: String?, bodyBytes: ArrayBuffer?) {
22
+ self.init(std.string(url), status, std.string(statusText), ok, redirected, { () -> bridge.std__vector_NitroHeader_ in
23
+ var __vector = bridge.create_std__vector_NitroHeader_(headers.count)
24
+ for __item in headers {
25
+ __vector.push_back(__item)
26
+ }
27
+ return __vector
28
+ }(), { () -> bridge.std__optional_std__string_ in
29
+ if let __unwrappedValue = bodyString {
30
+ return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
31
+ } else {
32
+ return .init()
33
+ }
34
+ }(), { () -> bridge.std__optional_std__shared_ptr_ArrayBuffer__ in
35
+ if let __unwrappedValue = bodyBytes {
36
+ return bridge.create_std__optional_std__shared_ptr_ArrayBuffer__(__unwrappedValue.getArrayBuffer())
37
+ } else {
38
+ return .init()
39
+ }
40
+ }())
41
+ }
42
+
43
+ var url: String {
44
+ @inline(__always)
45
+ get {
46
+ return String(self.__url)
47
+ }
48
+ @inline(__always)
49
+ set {
50
+ self.__url = std.string(newValue)
51
+ }
52
+ }
53
+
54
+ var status: Double {
55
+ @inline(__always)
56
+ get {
57
+ return self.__status
58
+ }
59
+ @inline(__always)
60
+ set {
61
+ self.__status = newValue
62
+ }
63
+ }
64
+
65
+ var statusText: String {
66
+ @inline(__always)
67
+ get {
68
+ return String(self.__statusText)
69
+ }
70
+ @inline(__always)
71
+ set {
72
+ self.__statusText = std.string(newValue)
73
+ }
74
+ }
75
+
76
+ var ok: Bool {
77
+ @inline(__always)
78
+ get {
79
+ return self.__ok
80
+ }
81
+ @inline(__always)
82
+ set {
83
+ self.__ok = newValue
84
+ }
85
+ }
86
+
87
+ var redirected: Bool {
88
+ @inline(__always)
89
+ get {
90
+ return self.__redirected
91
+ }
92
+ @inline(__always)
93
+ set {
94
+ self.__redirected = newValue
95
+ }
96
+ }
97
+
98
+ var headers: [NitroHeader] {
99
+ @inline(__always)
100
+ get {
101
+ return self.__headers.map({ __item in __item })
102
+ }
103
+ @inline(__always)
104
+ set {
105
+ self.__headers = { () -> bridge.std__vector_NitroHeader_ in
106
+ var __vector = bridge.create_std__vector_NitroHeader_(newValue.count)
107
+ for __item in newValue {
108
+ __vector.push_back(__item)
109
+ }
110
+ return __vector
111
+ }()
112
+ }
113
+ }
114
+
115
+ var bodyString: String? {
116
+ @inline(__always)
117
+ get {
118
+ return { () -> String? in
119
+ if bridge.has_value_std__optional_std__string_(self.__bodyString) {
120
+ let __unwrapped = bridge.get_std__optional_std__string_(self.__bodyString)
121
+ return String(__unwrapped)
122
+ } else {
123
+ return nil
124
+ }
125
+ }()
126
+ }
127
+ @inline(__always)
128
+ set {
129
+ self.__bodyString = { () -> bridge.std__optional_std__string_ in
130
+ if let __unwrappedValue = newValue {
131
+ return bridge.create_std__optional_std__string_(std.string(__unwrappedValue))
132
+ } else {
133
+ return .init()
134
+ }
135
+ }()
136
+ }
137
+ }
138
+
139
+ var bodyBytes: ArrayBuffer? {
140
+ @inline(__always)
141
+ get {
142
+ return self.__bodyBytes.value
143
+ }
144
+ @inline(__always)
145
+ set {
146
+ self.__bodyBytes = { () -> bridge.std__optional_std__shared_ptr_ArrayBuffer__ in
147
+ if let __unwrappedValue = newValue {
148
+ return bridge.create_std__optional_std__shared_ptr_ArrayBuffer__(__unwrappedValue.getArrayBuffer())
149
+ } else {
150
+ return .init()
151
+ }
152
+ }()
153
+ }
154
+ }
155
+ }
@@ -0,0 +1,22 @@
1
+ ///
2
+ /// HybridNitroFetchClientSpec.cpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #include "HybridNitroFetchClientSpec.hpp"
9
+
10
+ namespace margelo::nitro::nitrofetch {
11
+
12
+ void HybridNitroFetchClientSpec::loadHybridMethods() {
13
+ // load base methods/properties
14
+ HybridObject::loadHybridMethods();
15
+ // load custom methods/properties
16
+ registerHybrids(this, [](Prototype& prototype) {
17
+ prototype.registerHybridMethod("request", &HybridNitroFetchClientSpec::request);
18
+ prototype.registerHybridMethod("prefetch", &HybridNitroFetchClientSpec::prefetch);
19
+ });
20
+ }
21
+
22
+ } // namespace margelo::nitro::nitrofetch
@@ -0,0 +1,68 @@
1
+ ///
2
+ /// HybridNitroFetchClientSpec.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #if __has_include(<NitroModules/HybridObject.hpp>)
11
+ #include <NitroModules/HybridObject.hpp>
12
+ #else
13
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
14
+ #endif
15
+
16
+ // Forward declaration of `NitroResponse` to properly resolve imports.
17
+ namespace margelo::nitro::nitrofetch { struct NitroResponse; }
18
+ // Forward declaration of `NitroRequest` to properly resolve imports.
19
+ namespace margelo::nitro::nitrofetch { struct NitroRequest; }
20
+
21
+ #include "NitroResponse.hpp"
22
+ #include <NitroModules/Promise.hpp>
23
+ #include "NitroRequest.hpp"
24
+
25
+ namespace margelo::nitro::nitrofetch {
26
+
27
+ using namespace margelo::nitro;
28
+
29
+ /**
30
+ * An abstract base class for `NitroFetchClient`
31
+ * Inherit this class to create instances of `HybridNitroFetchClientSpec` in C++.
32
+ * You must explicitly call `HybridObject`'s constructor yourself, because it is virtual.
33
+ * @example
34
+ * ```cpp
35
+ * class HybridNitroFetchClient: public HybridNitroFetchClientSpec {
36
+ * public:
37
+ * HybridNitroFetchClient(...): HybridObject(TAG) { ... }
38
+ * // ...
39
+ * };
40
+ * ```
41
+ */
42
+ class HybridNitroFetchClientSpec: public virtual HybridObject {
43
+ public:
44
+ // Constructor
45
+ explicit HybridNitroFetchClientSpec(): HybridObject(TAG) { }
46
+
47
+ // Destructor
48
+ ~HybridNitroFetchClientSpec() override = default;
49
+
50
+ public:
51
+ // Properties
52
+
53
+
54
+ public:
55
+ // Methods
56
+ virtual std::shared_ptr<Promise<NitroResponse>> request(const NitroRequest& req) = 0;
57
+ virtual std::shared_ptr<Promise<void>> prefetch(const NitroRequest& req) = 0;
58
+
59
+ protected:
60
+ // Hybrid Setup
61
+ void loadHybridMethods() override;
62
+
63
+ protected:
64
+ // Tag for logging
65
+ static constexpr auto TAG = "NitroFetchClient";
66
+ };
67
+
68
+ } // namespace margelo::nitro::nitrofetch
@@ -0,0 +1,21 @@
1
+ ///
2
+ /// HybridNitroFetchSpec.cpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #include "HybridNitroFetchSpec.hpp"
9
+
10
+ namespace margelo::nitro::nitrofetch {
11
+
12
+ void HybridNitroFetchSpec::loadHybridMethods() {
13
+ // load base methods/properties
14
+ HybridObject::loadHybridMethods();
15
+ // load custom methods/properties
16
+ registerHybrids(this, [](Prototype& prototype) {
17
+ prototype.registerHybridMethod("createClient", &HybridNitroFetchSpec::createClient);
18
+ });
19
+ }
20
+
21
+ } // namespace margelo::nitro::nitrofetch
@@ -0,0 +1,64 @@
1
+ ///
2
+ /// HybridNitroFetchSpec.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #if __has_include(<NitroModules/HybridObject.hpp>)
11
+ #include <NitroModules/HybridObject.hpp>
12
+ #else
13
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
14
+ #endif
15
+
16
+ // Forward declaration of `HybridNitroFetchClientSpec` to properly resolve imports.
17
+ namespace margelo::nitro::nitrofetch { class HybridNitroFetchClientSpec; }
18
+
19
+ #include <memory>
20
+ #include "HybridNitroFetchClientSpec.hpp"
21
+
22
+ namespace margelo::nitro::nitrofetch {
23
+
24
+ using namespace margelo::nitro;
25
+
26
+ /**
27
+ * An abstract base class for `NitroFetch`
28
+ * Inherit this class to create instances of `HybridNitroFetchSpec` in C++.
29
+ * You must explicitly call `HybridObject`'s constructor yourself, because it is virtual.
30
+ * @example
31
+ * ```cpp
32
+ * class HybridNitroFetch: public HybridNitroFetchSpec {
33
+ * public:
34
+ * HybridNitroFetch(...): HybridObject(TAG) { ... }
35
+ * // ...
36
+ * };
37
+ * ```
38
+ */
39
+ class HybridNitroFetchSpec: public virtual HybridObject {
40
+ public:
41
+ // Constructor
42
+ explicit HybridNitroFetchSpec(): HybridObject(TAG) { }
43
+
44
+ // Destructor
45
+ ~HybridNitroFetchSpec() override = default;
46
+
47
+ public:
48
+ // Properties
49
+
50
+
51
+ public:
52
+ // Methods
53
+ virtual std::shared_ptr<HybridNitroFetchClientSpec> createClient() = 0;
54
+
55
+ protected:
56
+ // Hybrid Setup
57
+ void loadHybridMethods() override;
58
+
59
+ protected:
60
+ // Tag for logging
61
+ static constexpr auto TAG = "NitroFetch";
62
+ };
63
+
64
+ } // namespace margelo::nitro::nitrofetch
@@ -0,0 +1,71 @@
1
+ ///
2
+ /// NitroHeader.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #if __has_include(<NitroModules/JSIConverter.hpp>)
11
+ #include <NitroModules/JSIConverter.hpp>
12
+ #else
13
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
14
+ #endif
15
+ #if __has_include(<NitroModules/NitroDefines.hpp>)
16
+ #include <NitroModules/NitroDefines.hpp>
17
+ #else
18
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
19
+ #endif
20
+
21
+
22
+
23
+ #include <string>
24
+
25
+ namespace margelo::nitro::nitrofetch {
26
+
27
+ /**
28
+ * A struct which can be represented as a JavaScript object (NitroHeader).
29
+ */
30
+ struct NitroHeader {
31
+ public:
32
+ std::string key SWIFT_PRIVATE;
33
+ std::string value SWIFT_PRIVATE;
34
+
35
+ public:
36
+ NitroHeader() = default;
37
+ explicit NitroHeader(std::string key, std::string value): key(key), value(value) {}
38
+ };
39
+
40
+ } // namespace margelo::nitro::nitrofetch
41
+
42
+ namespace margelo::nitro {
43
+
44
+ // C++ NitroHeader <> JS NitroHeader (object)
45
+ template <>
46
+ struct JSIConverter<margelo::nitro::nitrofetch::NitroHeader> final {
47
+ static inline margelo::nitro::nitrofetch::NitroHeader fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) {
48
+ jsi::Object obj = arg.asObject(runtime);
49
+ return margelo::nitro::nitrofetch::NitroHeader(
50
+ JSIConverter<std::string>::fromJSI(runtime, obj.getProperty(runtime, "key")),
51
+ JSIConverter<std::string>::fromJSI(runtime, obj.getProperty(runtime, "value"))
52
+ );
53
+ }
54
+ static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::nitrofetch::NitroHeader& arg) {
55
+ jsi::Object obj(runtime);
56
+ obj.setProperty(runtime, "key", JSIConverter<std::string>::toJSI(runtime, arg.key));
57
+ obj.setProperty(runtime, "value", JSIConverter<std::string>::toJSI(runtime, arg.value));
58
+ return obj;
59
+ }
60
+ static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) {
61
+ if (!value.isObject()) {
62
+ return false;
63
+ }
64
+ jsi::Object obj = value.getObject(runtime);
65
+ if (!JSIConverter<std::string>::canConvert(runtime, obj.getProperty(runtime, "key"))) return false;
66
+ if (!JSIConverter<std::string>::canConvert(runtime, obj.getProperty(runtime, "value"))) return false;
67
+ return true;
68
+ }
69
+ };
70
+
71
+ } // namespace margelo::nitro