@hxa-rn/rn-fetch-blob 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +290 -0
- package/harmony/fetch_blob/LICENSE +21 -0
- package/harmony/fetch_blob/NOTICE +33 -0
- package/harmony/fetch_blob/OAT.xml +38 -0
- package/harmony/fetch_blob/build-profile.json5 +16 -0
- package/harmony/fetch_blob/hvigorfile.ts +2 -0
- package/harmony/fetch_blob/index.ets +1 -0
- package/harmony/fetch_blob/oh-package.json5 +14 -0
- package/harmony/fetch_blob/src/main/cpp/CMakeLists.txt +15 -0
- package/harmony/fetch_blob/src/main/cpp/FetchBlobPackage.h +13 -0
- package/harmony/fetch_blob/src/main/cpp/generated/RNOH/generated/BaseFetchBlobPackage.h +72 -0
- package/harmony/fetch_blob/src/main/cpp/generated/RNOH/generated/turbo_modules/RNFetchBlob.cpp +55 -0
- package/harmony/fetch_blob/src/main/cpp/generated/RNOH/generated/turbo_modules/RNFetchBlob.h +16 -0
- package/harmony/fetch_blob/src/main/ets/FetchBlobTurboModulesFactory.ets +18 -0
- package/harmony/fetch_blob/src/main/ets/Logger.ts +40 -0
- package/harmony/fetch_blob/src/main/ets/RNFetchBlobConfig.ts +45 -0
- package/harmony/fetch_blob/src/main/ets/RNFetchBlobFS.ts +673 -0
- package/harmony/fetch_blob/src/main/ets/RNFetchBlobImpl.ts +246 -0
- package/harmony/fetch_blob/src/main/ets/RNFetchBlobReq.ts +530 -0
- package/harmony/fetch_blob/src/main/ets/RNFetchBlobStream.ts +169 -0
- package/harmony/fetch_blob/src/main/ets/RNFetchBlobTurboModule.ts +192 -0
- package/harmony/fetch_blob/src/main/ets/generated/index.ets +5 -0
- package/harmony/fetch_blob/src/main/ets/generated/ts.ts +5 -0
- package/harmony/fetch_blob/src/main/ets/generated/turboModules/RNFetchBlob.ts +92 -0
- package/harmony/fetch_blob/src/main/ets/generated/turboModules/ts.ts +5 -0
- package/harmony/fetch_blob/src/main/module.json5 +22 -0
- package/harmony/fetch_blob/src/main/resources/base/element/string.json +8 -0
- package/harmony/fetch_blob/src/main/resources/en_US/element/string.json +8 -0
- package/harmony/fetch_blob/src/main/resources/zh_CN/element/string.json +8 -0
- package/harmony/fetch_blob.har +0 -0
- package/package.json +59 -0
- package/src/android.js +62 -0
- package/src/class/RNFetchBlobFile.js +17 -0
- package/src/class/RNFetchBlobReadStream.js +82 -0
- package/src/class/RNFetchBlobSession.js +74 -0
- package/src/class/RNFetchBlobWriteStream.js +57 -0
- package/src/class/StatefulPromise.js +7 -0
- package/src/fs.js +432 -0
- package/src/index.d.ts +690 -0
- package/src/index.js +577 -0
- package/src/ios.js +54 -0
- package/src/json-stream.js +45 -0
- package/src/lib/oboe-browser.min.js +1 -0
- package/src/polyfill/Blob.js +362 -0
- package/src/polyfill/Event.js +11 -0
- package/src/polyfill/EventTarget.js +79 -0
- package/src/polyfill/Fetch.js +213 -0
- package/src/polyfill/File.js +27 -0
- package/src/polyfill/FileReader.js +90 -0
- package/src/polyfill/ProgressEvent.js +32 -0
- package/src/polyfill/XMLHttpRequest.js +446 -0
- package/src/polyfill/XMLHttpRequestEventTarget.js +118 -0
- package/src/polyfill/index.js +11 -0
- package/src/specs/v1/NativeRNFetchBlob.ts +85 -0
- package/src/types.js +64 -0
- package/src/utils/log.js +40 -0
- package/src/utils/unicode.js +7 -0
- package/src/utils/uri.js +28 -0
- package/src/utils/uuid.js +4 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 hxa-rn
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
本项目基于 [rn-fetch-blob](https://github.com/joltup/rn-fetch-blob)开发。如果在使用过程中有任何问题,欢迎在AtomGit提交Issue,会及时跟进。
|
|
2
|
+
|
|
3
|
+
## 项目介绍
|
|
4
|
+
|
|
5
|
+
`@hxa-rn/rn-fetch-blob` 是 [rn-fetch-blob](https://github.com/joltup/rn-fetch-blob) 的 React Native 鸿蒙(OpenHarmony)适配包,提供上传、下载与文件系统访问能力,支持文件流读写以处理大文件。当前版本 **0.12.0**。
|
|
6
|
+
|
|
7
|
+
| 鸿蒙适配包版本 | 原始库版本 | 支持 RN 版本 | Autolink | 编译 API 版本 |
|
|
8
|
+
| ------------ | ---------- | ------------ | -------- | ------------- |
|
|
9
|
+
| 0.12.0 | 0.12.0 | 0.72+ | 是 | API12+ |
|
|
10
|
+
|
|
11
|
+
## 集成指南
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install @hxa-rn/rn-fetch-blob
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**peerDependencies**:`react-native` >= 0.72。
|
|
18
|
+
|
|
19
|
+
import 时使用原库名 `'rn-fetch-blob'`,而非鸿蒙适配包名 `'@hxa-rn/rn-fetch-blob'`(`harmony.alias` 已配置为 `rn-fetch-blob`)。
|
|
20
|
+
|
|
21
|
+
当前版本支持 Autolink;若工程已接入 Autolink,可跳过手动配置。
|
|
22
|
+
|
|
23
|
+
<details>
|
|
24
|
+
<summary>Manual Link 配置</summary>
|
|
25
|
+
|
|
26
|
+
> 本模块需要同时在 C++ 侧和 ETS 侧注册 Package。
|
|
27
|
+
|
|
28
|
+
### 1. Overrides RN SDK
|
|
29
|
+
|
|
30
|
+
在工程根目录 `oh-package.json5` 添加:
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"overrides": {
|
|
35
|
+
"@rnoh/react-native-openharmony": "./react_native_openharmony"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### 2. 引入原生端依赖
|
|
41
|
+
|
|
42
|
+
打开 `entry/oh-package.json5`,添加:
|
|
43
|
+
|
|
44
|
+
```json
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"@hxa-rn/rn-fetch-blob": "file:../../node_modules/@hxa-rn/rn-fetch-blob/harmony/fetch_blob.har"
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
执行 `ohpm install`。
|
|
51
|
+
|
|
52
|
+
### 3. 配置 CMakeLists
|
|
53
|
+
|
|
54
|
+
打开 `entry/src/main/cpp/CMakeLists.txt`,添加:
|
|
55
|
+
|
|
56
|
+
```cmake
|
|
57
|
+
set(OH_MODULES "${CMAKE_CURRENT_SOURCE_DIR}/../../../oh_modules")
|
|
58
|
+
|
|
59
|
+
add_subdirectory("${OH_MODULES}/@hxa-rn/rn-fetch-blob/src/main/cpp" ./fetch_blob)
|
|
60
|
+
|
|
61
|
+
target_link_libraries(rnoh_app PUBLIC fetch_blob)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### 4. 注册 Package(C++ 侧)
|
|
65
|
+
|
|
66
|
+
打开 `entry/src/main/cpp/PackageProvider.cpp`,添加:
|
|
67
|
+
|
|
68
|
+
```cpp
|
|
69
|
+
#include "FetchBlobPackage.h"
|
|
70
|
+
|
|
71
|
+
std::vector<std::shared_ptr<Package>> PackageProvider::getPackages(Package::Context ctx) {
|
|
72
|
+
return {
|
|
73
|
+
std::make_shared<FetchBlobPackage>(ctx),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### 5. 注册 Package(ETS 侧)
|
|
79
|
+
|
|
80
|
+
打开 `entry/src/main/ets/RNPackagesFactory.ets`,添加:
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
import { FetchBlobPackage } from '@hxa-rn/rn-fetch-blob';
|
|
84
|
+
|
|
85
|
+
export function createRNPackages(ctx: RNPackageContext): RNPackage[] {
|
|
86
|
+
return [
|
|
87
|
+
new FetchBlobPackage(ctx),
|
|
88
|
+
];
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
</details>
|
|
93
|
+
|
|
94
|
+
## 使用说明
|
|
95
|
+
|
|
96
|
+
```tsx
|
|
97
|
+
import RNFetchBlob from 'rn-fetch-blob';
|
|
98
|
+
|
|
99
|
+
async function run() {
|
|
100
|
+
// 1. HTTP 文件下载
|
|
101
|
+
const resp = await RNFetchBlob.config({
|
|
102
|
+
fileCache: true,
|
|
103
|
+
appendExt: 'png',
|
|
104
|
+
path: `${RNFetchBlob.fs.dirs.DocumentDir}/sample.png`,
|
|
105
|
+
timeout: 30000,
|
|
106
|
+
}).fetch('GET', 'https://picsum.photos/200/300');
|
|
107
|
+
|
|
108
|
+
const filePath = resp.path();
|
|
109
|
+
const info = resp.respInfo;
|
|
110
|
+
console.log('saved to:', filePath, 'status:', info.status);
|
|
111
|
+
|
|
112
|
+
// 2. 下载进度
|
|
113
|
+
await RNFetchBlob.config({ fileCache: true })
|
|
114
|
+
.fetch('GET', 'https://picsum.photos/200/300')
|
|
115
|
+
.progress({ count: 1, interval: 100 }, (received, total) => {
|
|
116
|
+
console.log(`received ${received} / ${total}`);
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
// 3. POST JSON
|
|
120
|
+
await RNFetchBlob.config({})
|
|
121
|
+
.fetch(
|
|
122
|
+
'POST',
|
|
123
|
+
'https://httpbin.org/post',
|
|
124
|
+
{ 'Content-Type': 'application/json' },
|
|
125
|
+
JSON.stringify({ name: 'test' }),
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
// 4. 文件系统
|
|
129
|
+
await RNFetchBlob.fs.createFile(
|
|
130
|
+
`${RNFetchBlob.fs.dirs.DocumentDir}/a.txt`,
|
|
131
|
+
'Hello',
|
|
132
|
+
'utf8',
|
|
133
|
+
);
|
|
134
|
+
const content = await RNFetchBlob.fs.readFile(
|
|
135
|
+
`${RNFetchBlob.fs.dirs.DocumentDir}/a.txt`,
|
|
136
|
+
'utf8',
|
|
137
|
+
);
|
|
138
|
+
console.log('file content:', content);
|
|
139
|
+
await RNFetchBlob.fs.unlink(`${RNFetchBlob.fs.dirs.DocumentDir}/a.txt`);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
run();
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**平台差异**:
|
|
146
|
+
|
|
147
|
+
- 目录常量:`DocumentDir` / `CacheDir` / `PictureDir` / `MusicDir` / `MovieDir` / `DownloadDir` 映射鸿蒙应用沙箱绝对路径;`DCIMDir` / `SDCardDir` / `SDCardApplicationDir` / `LibraryDir` 鸿蒙无对应外部存储概念,降级返回 `''` 或应用沙箱路径
|
|
148
|
+
- 不支持 API:`fs.scanFile`、`android.addCompleteDownload`、`ios.previewDocument` / `openDocument` / `excludeFromBackupKey`、`fs.pathForAppGroup` —— 调用时 reject / callback 返回 `… is not supported on HarmonyOS`,业务需 try-catch(详解见下方「遗留问题」)
|
|
149
|
+
- `syncPathAppGroup` 返回 `''`;`emitExpiredEvent` 为空实现(不列入「不支持」报告,见下方约束)
|
|
150
|
+
- `actionViewIntent` 使用 `@kit.PreviewKit` 预览文件;`getContentIntent` 使用 `@ohos.file.picker` DocumentViewPicker
|
|
151
|
+
- `wifiOnly` / `trusty` / `followRedirect` 等配置项已按鸿蒙 `@ohos.net.http` 语义实现
|
|
152
|
+
|
|
153
|
+
## 接口文档
|
|
154
|
+
|
|
155
|
+
| API | 描述 | 参数 | 返回值 | HarmonyOS 支持 |
|
|
156
|
+
|-----|------|------|--------|----------------|
|
|
157
|
+
| `config(options)` | 注入请求配置(fileCache/path/timeout/appendExt 等) | `RNFetchBlobConfig` | `RNFetchBlobStatic` | ✅ |
|
|
158
|
+
| `fetch(method, url, headers?, body?)` | 发起 HTTP 请求,支持 GET/POST/PUT/DELETE 与 multipart | method, url, headers, body | `StatefulPromise<FetchBlobResponse>` | ✅ |
|
|
159
|
+
| `.progress(config?, cb)` | 下载进度上报 | `{count,interval}`, `(received,total)=>void` | 链式 Promise | ✅ |
|
|
160
|
+
| `.uploadProgress(config?, cb)` | 上传进度上报 | `{count,interval}`, `(sent,total)=>void` | 链式 Promise | ✅ |
|
|
161
|
+
| `.cancel(cb?)` | 取消进行中的请求 | 可选回调 | 链式 Promise | ✅ |
|
|
162
|
+
| `.stateChange(cb)` | HTTP 状态变化事件(state 2 = header 就绪) | `(state)=>void` | 链式 Promise | ✅ |
|
|
163
|
+
| `session(name)` | 获取/创建缓存会话 | name | `RNFetchBlobSession` | ✅ |
|
|
164
|
+
| `fs.dirs` | 应用目录常量集合 | - | `Dirs` | ✅ |
|
|
165
|
+
| `fs.createFile(path, data, encoding)` | 创建文本/二进制文件 | path, data, encoding | `Promise<string>` | ✅ |
|
|
166
|
+
| `fs.createFileASCII(path, dataArray)` | 创建 ASCII 文件 | path, `number[]` | `Promise<void>` | ✅ |
|
|
167
|
+
| `fs.readFile(path, encoding)` | 读取文件(utf8/base64/ascii) | path, encoding | `Promise<string \| number[]>` | ✅ |
|
|
168
|
+
| `fs.writeFile(path, data, encoding)` | 写入文件 | path, data, encoding | `Promise<void>` | ✅ |
|
|
169
|
+
| `fs.appendFile(path, data, encoding)` | 追加内容 | path, data, encoding | `Promise<number>` | ✅ |
|
|
170
|
+
| `fs.unlink(path)` | 删除文件 | path | `Promise<void>` | ✅ |
|
|
171
|
+
| `fs.mkdir(path)` | 创建目录 | path | `Promise<void>` | ✅ |
|
|
172
|
+
| `fs.exists(path)` | 判断路径是否存在 | path | `Promise<boolean>` | ✅ |
|
|
173
|
+
| `fs.isDir(path)` | 判断是否为目录 | path | `Promise<boolean>` | ✅ |
|
|
174
|
+
| `fs.ls(path)` | 列出目录内容 | path | `Promise<string[]>` | ✅ |
|
|
175
|
+
| `fs.stat(path)` | 获取文件状态 | path | `Promise<RNFetchBlobStat>` | ✅ |
|
|
176
|
+
| `fs.lstat(path)` | 获取符号链接状态 | path | `Promise<RNFetchBlobStat[]>` | ✅ |
|
|
177
|
+
| `fs.cp(src, dest)` | 复制文件 | src, dest | `Promise<boolean>` | ✅ |
|
|
178
|
+
| `fs.mv(src, dest)` | 移动文件 | src, dest | `Promise<boolean>` | ✅ |
|
|
179
|
+
| `fs.slice(src, dest, start, end)` | 文件切片 | src, dest, start, end | `Promise<void>` | ✅ |
|
|
180
|
+
| `fs.hash(path, algorithm)` | 计算文件哈希 | path, md5/sha1/sha256 | `Promise<string>` | ✅ |
|
|
181
|
+
| `fs.df()` | 查询磁盘空间 | - | `Promise<{free,total}>` | ✅ |
|
|
182
|
+
| `fs.writeStream(path, encoding, append)` | 开启写入流 | path, encoding, append | `Promise<WriteStream>` | ✅ |
|
|
183
|
+
| `fs.writeChunk(streamId, data)` | 写入流数据块 | streamId, data | `Promise<void>` | ✅ |
|
|
184
|
+
| `fs.writeArrayChunk(streamId, dataArray)` | 写入字节数组块 | streamId, `number[]` | `Promise<void>` | ✅ |
|
|
185
|
+
| `fs.closeStream(streamId)` | 关闭写入流 | streamId | `Promise<void>` | ✅ |
|
|
186
|
+
| `fs.readStream(path, encoding, bufferSize, tick)` | 开启读取流(data/end/error 事件) | path, encoding, bufferSize, tick | `Promise<ReadStream>` | ✅ |
|
|
187
|
+
| `fs.removeSession(paths)` | 批量删除会话缓存文件 | `string[]` | `Promise<void>` | ✅ |
|
|
188
|
+
| `fs.asset(path)` | 映射应用资源路径 | path | `string` | ✅ |
|
|
189
|
+
| `android.actionViewIntent(path, mime)` | 系统文件预览 | path, mime | `Promise<void>` | ✅ |
|
|
190
|
+
| `android.getContentIntent(mime)` | 内容选择器选文件 | mime | `Promise<string>` | ✅ |
|
|
191
|
+
| `android.addCompleteDownload(config)` | 添加下载记录 | config | `Promise<void>` | ❌ 否(U-02) |
|
|
192
|
+
| `android.getSDCardDir()` | 获取 SD 卡目录 | - | `Promise<string>` | ⚠️ 沙箱路径 |
|
|
193
|
+
| `android.getSDCardApplicationDir()` | 获取 SD 卡应用目录 | - | `Promise<string>` | ⚠️ 沙箱路径 |
|
|
194
|
+
| `fs.scanFile(pairs)` | 媒体文件扫描入相册 | `Array<{path}>` | `Promise<void>` | ❌ 否(U-01) |
|
|
195
|
+
| `ios.previewDocument(uri, scheme)` | iOS 文档预览 | uri, scheme | `Promise<void>` | ❌ 否(U-03) |
|
|
196
|
+
| `ios.openDocument(uri, scheme)` | iOS 文档打开 | uri, scheme | `Promise<void>` | ❌ 否(U-04) |
|
|
197
|
+
| `ios.excludeFromBackupKey(url)` | iOS 排除备份 | url | `Promise<void>` | ❌ 否(U-05) |
|
|
198
|
+
| `fs.pathForAppGroup(group)` | iOS App Group 路径 | group | `Promise<string>` | ❌ 否(U-06) |
|
|
199
|
+
| `fs.syncPathAppGroup(group)` | iOS App Group 同步 | group | `string` | ⚠️ 返回 `''` |
|
|
200
|
+
|
|
201
|
+
> ✅ = 鸿蒙原生实现;⚠️ = 降级/沙箱替代实现(不列入不支持报告);❌ = 鸿蒙不支持,返回 `… is not supported on HarmonyOS`(编号见下方「遗留问题」)。
|
|
202
|
+
> 目录常量获取方式:`RNFetchBlob.fs.dirs.DocumentDir` 等(`getConstants()` 映射)。
|
|
203
|
+
|
|
204
|
+
## 快速验证(运行 Example)
|
|
205
|
+
|
|
206
|
+
### 前置条件
|
|
207
|
+
|
|
208
|
+
| 依赖 | 版本要求 |
|
|
209
|
+
|------|----------|
|
|
210
|
+
| Node.js | >= 18 |
|
|
211
|
+
| DevEco Studio | 5.0+ |
|
|
212
|
+
| HarmonyOS SDK | API 12+ |
|
|
213
|
+
|
|
214
|
+
### 运行步骤
|
|
215
|
+
|
|
216
|
+
**1. 克隆仓库**
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
git clone https://gitcode.com/hxa-rn/rn-fetch-blob.git
|
|
220
|
+
cd rn-fetch-blob
|
|
221
|
+
git checkout br_rnoh0.72
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
**2. 安装仓库开发依赖**
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
npm install --legacy-peer-deps
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Example 已改为从 npm 公仓安装 `@hxa-rn/rn-fetch-blob@0.12.0`,不再使用本地 `file:../xxx.tgz`,运行 Example 不必再执行 `npm pack`。
|
|
231
|
+
|
|
232
|
+
**3. 进入 example 目录,安装依赖**
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
cd example # 或 example_auto
|
|
236
|
+
npm install --legacy-peer-deps
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**4. 生成 JS Bundle**
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
npm run dev
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
产物:`harmony/entry/src/main/resources/rawfile/bundle.harmony.js`
|
|
246
|
+
|
|
247
|
+
**5. 用 DevEco Studio 打开鸿蒙工程**
|
|
248
|
+
|
|
249
|
+
- 打开 DevEco Studio
|
|
250
|
+
- 选择 `example/harmony`(或 `example_auto/harmony`)目录
|
|
251
|
+
- 等待 Sync 完成
|
|
252
|
+
|
|
253
|
+
**6. 编译并运行 HAP**
|
|
254
|
+
|
|
255
|
+
在 DevEco Studio 中点击运行按钮,将 HAP 安装到设备/模拟器。
|
|
256
|
+
|
|
257
|
+
> **注意**:Example 中已预置插件依赖和 Package 注册,无需手动配置 Link。Example 已声明 `ohos.permission.INTERNET`(HTTP 请求必需)。
|
|
258
|
+
|
|
259
|
+
## 约束与限制
|
|
260
|
+
|
|
261
|
+
**兼容性**
|
|
262
|
+
|
|
263
|
+
- 鸿蒙 SDK:API 12+
|
|
264
|
+
- 上游 RN 库:rn-fetch-blob 0.12.0
|
|
265
|
+
- React Native / RNOH:0.72+
|
|
266
|
+
- DevEco Studio:5.0+
|
|
267
|
+
|
|
268
|
+
**权限**
|
|
269
|
+
|
|
270
|
+
- `ohos.permission.INTERNET`(HTTP 请求必需,需在 `entry/src/main/module.json5` 的 `requestPermissions` 中声明)
|
|
271
|
+
|
|
272
|
+
**平台能力差异**
|
|
273
|
+
|
|
274
|
+
- 大文件(GB 级)响应体按 `path`/`fileCache` 落盘,避免读入内存导致 OOM
|
|
275
|
+
- `wifiOnly` 仅对蜂窝数据网络生效(与 Android SDK21+ 语义一致)
|
|
276
|
+
- `trusty` 信任自签名证书场景受鸿蒙系统 CA 策略限制
|
|
277
|
+
- `getSDCardDir` / `getSDCardApplicationDir` 无外部 SD 概念,返回应用 `filesDir`
|
|
278
|
+
- `syncPathAppGroup` 返回空串;`emitExpiredEvent` 为空实现(iOS AppState 过期网络事件,鸿蒙无对等触发)
|
|
279
|
+
|
|
280
|
+
## 开源license
|
|
281
|
+
|
|
282
|
+
本项目基于 MIT 协议,详见 [LICENSE](LICENSE) 文件。
|
|
283
|
+
|
|
284
|
+
## 问题反馈渠道
|
|
285
|
+
|
|
286
|
+
使用问题请在 AtomGit 提交 Issue。也可在 GitCode 仓库反馈:
|
|
287
|
+
|
|
288
|
+
https://gitcode.com/hxa-rn/rn-fetch-blob
|
|
289
|
+
|
|
290
|
+
https://gitcode.com/hxa-rn/rn-fetch-blob/issues
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 hxa-rn
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
OPEN SOURCE SOFTWARE NOTICE
|
|
2
|
+
|
|
3
|
+
Please note we provide an open source software notice for the third party open source software along with this software and/or this software component (in the following just “this SOFTWARE”). The open source software licenses are granted by the respective right holders.
|
|
4
|
+
|
|
5
|
+
Warranty Disclaimer
|
|
6
|
+
THE OPEN SOURCE SOFTWARE IN THIS PRODUCT IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT WITHOUT ANY WARRANTY, WITHOUT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE APPLICABLE LICENSES FOR MORE DETAILS.
|
|
7
|
+
|
|
8
|
+
Copyright Notice and License Texts
|
|
9
|
+
|
|
10
|
+
----------------------------------------------------------------------
|
|
11
|
+
Software: react-native-netinfo V11.1.0
|
|
12
|
+
|
|
13
|
+
MIT License
|
|
14
|
+
|
|
15
|
+
Copyright (c) 2015-present, Facebook, Inc.
|
|
16
|
+
|
|
17
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
18
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
19
|
+
in the Software without restriction, including without limitation the rights
|
|
20
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
21
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
22
|
+
furnished to do so, subject to the following conditions:
|
|
23
|
+
|
|
24
|
+
The above copyright notice and this permission notice shall be included in all
|
|
25
|
+
copies or substantial portions of the Software.
|
|
26
|
+
|
|
27
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
28
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
29
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
30
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
31
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
32
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
33
|
+
SOFTWARE.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<configuration>
|
|
3
|
+
<oatconfig>
|
|
4
|
+
<licensefile>LICENSE</licensefile>
|
|
5
|
+
<filefilterlist>
|
|
6
|
+
<filefilter name="copyrightPolicyFilter" desc="Filters for compatibility,license header policies">
|
|
7
|
+
<filteritem type="filename" name="hvigorfile.ts" desc="hvigor构建脚本,DevEco Studio自动生成,不需要添加版权头"/>
|
|
8
|
+
<filteritem type="filename" name="*.json5" desc="hvigor工程配置文件,DevEco Studio自动生成,不需要添加版权头"/>
|
|
9
|
+
<filteritem type="filename" name="*.proto" desc="资源文件,不需要添加版权头"/>
|
|
10
|
+
<filteritem type="filename" name="*.json" desc="资源文件,不需要添加版权头"/>
|
|
11
|
+
<filteritem type="filepath" name="hvigorw" desc="工程模板,不修改版权头,以防有修改版权风险"/>
|
|
12
|
+
<filteritem type="filepath" name="hvigorw.bat" desc="工程模板,不修改版权头,以防有修改版权风险"/>
|
|
13
|
+
<filteritem type="filepath" name="hvigor/hvigor-wrapper.js" desc="工程模板,不修改版权头,以防有修改版权风险"/>
|
|
14
|
+
<filteritem type="filename" name="LICENSE" desc="工程文件,不修改版权头"/>
|
|
15
|
+
</filefilter>
|
|
16
|
+
<filefilter name="defaultPolicyFilter" desc="Filters for compatibility,license header policies">
|
|
17
|
+
<filteritem type="filename" name="hvigorfile.ts" desc="hvigor构建脚本,DevEco Studio自动生成,不需要添加许可证头"/>
|
|
18
|
+
<filteritem type="filename" name="*.json5" desc="hvigor工程配置文件,DevEco Studio自动生成,不需要添加许可证头"/>
|
|
19
|
+
<filteritem type="filename" name="LICENSE" desc="原三方库证书文件无需更改,因此添加过滤"/>
|
|
20
|
+
<filteritem type="filename" name="*.proto" desc="资源文件,不需要添加许可证头"/>
|
|
21
|
+
<filteritem type="filename" name="*.json" desc="资源文件,不需要添加许可证头"/>
|
|
22
|
+
<filteritem type="filepath" name="hvigorw" desc="工程模板,不修改版权头,以防有修改版权风险"/>
|
|
23
|
+
<filteritem type="filepath" name="hvigorw.bat" desc="工程模板,不修改版权头,以防有修改版权风险"/>
|
|
24
|
+
<filteritem type="filepath" name="hvigor/hvigor-wrapper.js" desc="工程模板,不修改版权头,以防有修改版权风险"/>
|
|
25
|
+
</filefilter>
|
|
26
|
+
<filefilter name="binaryFileTypePolicyFilter" desc="Filters for resources files policies">
|
|
27
|
+
<filteritem type="filename" name="icon.png" desc="应用图标"/>
|
|
28
|
+
<filteritem type="filename" name="app_icon.png" desc="应用图标"/>
|
|
29
|
+
<filteritem type="filename" name="warn.png" desc="页面展示图标"/>
|
|
30
|
+
</filefilter>
|
|
31
|
+
</filefilterlist>
|
|
32
|
+
<policylist>
|
|
33
|
+
<policy name="projectPolicy" desc="">
|
|
34
|
+
<policyitem type="license" name="MIT" path="*.*" desc="license under the MIT"/>
|
|
35
|
+
</policy>
|
|
36
|
+
</policylist>
|
|
37
|
+
</oatconfig>
|
|
38
|
+
</configuration>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"apiType": "stageMode",
|
|
3
|
+
// "buildOption": {
|
|
4
|
+
// "externalNativeOptions": {
|
|
5
|
+
// "path": "./src/main/cpp/CMakeLists.txt",
|
|
6
|
+
// "arguments": "",
|
|
7
|
+
// "cppFlags": ""
|
|
8
|
+
// },
|
|
9
|
+
// },
|
|
10
|
+
"targets": [
|
|
11
|
+
{
|
|
12
|
+
"name": "default",
|
|
13
|
+
"runtimeOS": "HarmonyOS"
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { FetchBlobPackage as default } from './src/main/ets/FetchBlobTurboModulesFactory';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"license": "Apache-2.0",
|
|
3
|
+
"devDependencies": {
|
|
4
|
+
|
|
5
|
+
},
|
|
6
|
+
"author": "",
|
|
7
|
+
"name": "@hxa-rn/rn-fetch-blob",
|
|
8
|
+
"description": "Please describe the basic information.",
|
|
9
|
+
"main": "index.ets",
|
|
10
|
+
"version": "1.0.0",
|
|
11
|
+
"dependencies": {
|
|
12
|
+
"@rnoh/react-native-openharmony": "file:../react_native_openharmony_release.har"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# the minimum version of CMake.
|
|
2
|
+
cmake_minimum_required(VERSION 3.13)
|
|
3
|
+
set(CMAKE_VERBOSE_MAKEFILE on)
|
|
4
|
+
|
|
5
|
+
# react-native codegen-harmony 将 C++ 产物放在 generated/;#include 以 src/main/cpp 为根(如 generated/Foo.h),
|
|
6
|
+
# 同时 generated 下的 .cpp 常使用 #include "Foo.h",故需同时加入 cpp 与 cpp/generated。
|
|
7
|
+
set(library_generated_dir "${CMAKE_CURRENT_SOURCE_DIR}/generated")
|
|
8
|
+
# 不用 **/*.cpp:OHOS 自带 CMake 在 Windows 上常匹配不到,会得到空列表 → add_library 报 No SOURCES。
|
|
9
|
+
file(GLOB_RECURSE library_generated_SRC CONFIGURE_DEPENDS "${library_generated_dir}/*.cpp")
|
|
10
|
+
file(GLOB library_SRC CONFIGURE_DEPENDS *.cpp)
|
|
11
|
+
add_library(fetch_blob SHARED ${library_SRC} ${library_generated_SRC})
|
|
12
|
+
target_include_directories(fetch_blob PUBLIC
|
|
13
|
+
${CMAKE_CURRENT_SOURCE_DIR}
|
|
14
|
+
${library_generated_dir})
|
|
15
|
+
target_link_libraries(fetch_blob PUBLIC rnoh)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#ifndef FETCHBLOBPACKAGE_H
|
|
2
|
+
#define FETCHBLOBPACKAGE_H
|
|
3
|
+
|
|
4
|
+
#include "generated/RNOH/generated/BaseFetchBlobPackage.h"
|
|
5
|
+
#pragma once
|
|
6
|
+
|
|
7
|
+
namespace rnoh {
|
|
8
|
+
class FetchBlobPackage : public BaseFetchBlobPackage {
|
|
9
|
+
using Super = BaseFetchBlobPackage;
|
|
10
|
+
using Super::Super;
|
|
11
|
+
};
|
|
12
|
+
} // namespace rnoh
|
|
13
|
+
#endif //FETCHBLOBPACKAGE_H
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This code was generated by "react-native codegen-lib-harmony"
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
#pragma once
|
|
6
|
+
|
|
7
|
+
#include "RNOH/Package.h"
|
|
8
|
+
#include "RNOH/ArkTSTurboModule.h"
|
|
9
|
+
#include "RNOH/generated/turbo_modules/RNFetchBlob.h"
|
|
10
|
+
|
|
11
|
+
namespace rnoh {
|
|
12
|
+
|
|
13
|
+
class BaseFetchBlobPackageTurboModuleFactoryDelegate : public TurboModuleFactoryDelegate {
|
|
14
|
+
public:
|
|
15
|
+
SharedTurboModule createTurboModule(Context ctx, const std::string &name) const override {
|
|
16
|
+
if (name == "RNFetchBlob") {
|
|
17
|
+
return std::make_shared<RNFetchBlob>(ctx, name);
|
|
18
|
+
}
|
|
19
|
+
return nullptr;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
class BaseFetchBlobPackageEventEmitRequestHandler : public EventEmitRequestHandler {
|
|
24
|
+
public:
|
|
25
|
+
void handleEvent(Context const &ctx) override {
|
|
26
|
+
auto eventEmitter = ctx.shadowViewRegistry->getEventEmitter<facebook::react::EventEmitter>(ctx.tag);
|
|
27
|
+
auto componentName = ctx.shadowViewRegistry->getComponentName(ctx.tag);
|
|
28
|
+
|
|
29
|
+
if (eventEmitter == nullptr) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
std::vector<std::string> supportedComponentNames = {
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
std::vector<std::string> supportedEventNames = {
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
if (std::find(supportedComponentNames.begin(), supportedComponentNames.end(), componentName) != supportedComponentNames.end() &&
|
|
40
|
+
std::find(supportedEventNames.begin(), supportedEventNames.end(), ctx.eventName) != supportedEventNames.end()) {
|
|
41
|
+
eventEmitter->dispatchEvent(ctx.eventName, ArkJS(ctx.env).getDynamic(ctx.payload));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class BaseFetchBlobPackage : public Package {
|
|
48
|
+
public:
|
|
49
|
+
BaseFetchBlobPackage(Package::Context ctx) : Package(ctx){};
|
|
50
|
+
|
|
51
|
+
std::unique_ptr<TurboModuleFactoryDelegate> createTurboModuleFactoryDelegate() override {
|
|
52
|
+
return std::make_unique<BaseFetchBlobPackageTurboModuleFactoryDelegate>();
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
std::vector<facebook::react::ComponentDescriptorProvider> createComponentDescriptorProviders() override {
|
|
56
|
+
return {
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
ComponentJSIBinderByString createComponentJSIBinderByName() override {
|
|
61
|
+
return {
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
EventEmitRequestHandlers createEventEmitRequestHandlers() override {
|
|
66
|
+
return {
|
|
67
|
+
std::make_shared<BaseFetchBlobPackageEventEmitRequestHandler>(),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
} // namespace rnoh
|
package/harmony/fetch_blob/src/main/cpp/generated/RNOH/generated/turbo_modules/RNFetchBlob.cpp
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This code was generated by "react-native codegen-lib-harmony"
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
#include "RNFetchBlob.h"
|
|
6
|
+
|
|
7
|
+
namespace rnoh {
|
|
8
|
+
using namespace facebook;
|
|
9
|
+
|
|
10
|
+
RNFetchBlob::RNFetchBlob(const ArkTSTurboModule::Context ctx, const std::string name) : ArkTSTurboModule(ctx, name) {
|
|
11
|
+
methodMap_ = {
|
|
12
|
+
ARK_METHOD_METADATA(getConstants, 0),
|
|
13
|
+
ARK_METHOD_METADATA(fetchBlob, 7),
|
|
14
|
+
ARK_METHOD_METADATA(fetchBlobForm, 7),
|
|
15
|
+
ARK_METHOD_METADATA(cancelRequest, 2),
|
|
16
|
+
ARK_METHOD_METADATA(enableProgressReport, 3),
|
|
17
|
+
ARK_METHOD_METADATA(enableUploadProgressReport, 3),
|
|
18
|
+
ARK_ASYNC_METHOD_METADATA(createFile, 3),
|
|
19
|
+
ARK_ASYNC_METHOD_METADATA(createFileASCII, 2),
|
|
20
|
+
ARK_ASYNC_METHOD_METADATA(writeFile, 4),
|
|
21
|
+
ARK_ASYNC_METHOD_METADATA(writeFileArray, 3),
|
|
22
|
+
ARK_ASYNC_METHOD_METADATA(readFile, 2),
|
|
23
|
+
ARK_METHOD_METADATA(unlink, 2),
|
|
24
|
+
ARK_ASYNC_METHOD_METADATA(mkdir, 1),
|
|
25
|
+
ARK_METHOD_METADATA(exists, 2),
|
|
26
|
+
ARK_METHOD_METADATA(cp, 3),
|
|
27
|
+
ARK_METHOD_METADATA(mv, 3),
|
|
28
|
+
ARK_ASYNC_METHOD_METADATA(ls, 1),
|
|
29
|
+
ARK_METHOD_METADATA(stat, 2),
|
|
30
|
+
ARK_METHOD_METADATA(lstat, 2),
|
|
31
|
+
ARK_ASYNC_METHOD_METADATA(hash, 2),
|
|
32
|
+
ARK_ASYNC_METHOD_METADATA(slice, 4),
|
|
33
|
+
ARK_METHOD_METADATA(df, 1),
|
|
34
|
+
ARK_METHOD_METADATA(removeSession, 2),
|
|
35
|
+
ARK_METHOD_METADATA(writeStream, 4),
|
|
36
|
+
ARK_METHOD_METADATA(writeChunk, 3),
|
|
37
|
+
ARK_METHOD_METADATA(writeArrayChunk, 3),
|
|
38
|
+
ARK_METHOD_METADATA(closeStream, 2),
|
|
39
|
+
ARK_METHOD_METADATA(readStream, 5),
|
|
40
|
+
ARK_METHOD_METADATA(scanFile, 2),
|
|
41
|
+
ARK_ASYNC_METHOD_METADATA(actionViewIntent, 2),
|
|
42
|
+
ARK_ASYNC_METHOD_METADATA(getContentIntent, 1),
|
|
43
|
+
ARK_ASYNC_METHOD_METADATA(addCompleteDownload, 1),
|
|
44
|
+
ARK_ASYNC_METHOD_METADATA(getSDCardDir, 0),
|
|
45
|
+
ARK_ASYNC_METHOD_METADATA(getSDCardApplicationDir, 0),
|
|
46
|
+
ARK_ASYNC_METHOD_METADATA(pathForAppGroup, 1),
|
|
47
|
+
ARK_METHOD_METADATA(syncPathAppGroup, 1),
|
|
48
|
+
ARK_ASYNC_METHOD_METADATA(previewDocument, 2),
|
|
49
|
+
ARK_ASYNC_METHOD_METADATA(openDocument, 2),
|
|
50
|
+
ARK_ASYNC_METHOD_METADATA(excludeFromBackupKey, 1),
|
|
51
|
+
ARK_METHOD_METADATA(emitExpiredEvent, 1),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
} // namespace rnoh
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This code was generated by "react-native codegen-lib-harmony"
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
#pragma once
|
|
6
|
+
|
|
7
|
+
#include "RNOH/ArkTSTurboModule.h"
|
|
8
|
+
|
|
9
|
+
namespace rnoh {
|
|
10
|
+
|
|
11
|
+
class JSI_EXPORT RNFetchBlob : public ArkTSTurboModule {
|
|
12
|
+
public:
|
|
13
|
+
RNFetchBlob(const ArkTSTurboModule::Context ctx, const std::string name);
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
} // namespace rnoh
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { RNOHPackage } from '@rnoh/react-native-openharmony/ets';
|
|
2
|
+
import type { UITurboModule, UITurboModuleContext } from '@rnoh/react-native-openharmony/ts';
|
|
3
|
+
import { RNFetchBlobTurboModule } from './RNFetchBlobTurboModule';
|
|
4
|
+
import { TM } from './generated/ts';
|
|
5
|
+
|
|
6
|
+
export class FetchBlobPackage extends RNOHPackage {
|
|
7
|
+
getUITurboModuleFactoryByNameMap(): Map<string, (ctx: UITurboModuleContext) => UITurboModule | null> {
|
|
8
|
+
const map = new Map<string, (ctx: UITurboModuleContext) => UITurboModule | null>();
|
|
9
|
+
map.set(TM.RNFetchBlob.NAME, (ctx: UITurboModuleContext) => new RNFetchBlobTurboModule(ctx));
|
|
10
|
+
return map;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
override async createEagerUITurboModuleByNameMap(ctx: UITurboModuleContext): Promise<Map<string, UITurboModule>> {
|
|
14
|
+
const module = new RNFetchBlobTurboModule(ctx);
|
|
15
|
+
return new Map()
|
|
16
|
+
.set(TM.RNFetchBlob.NAME, module)
|
|
17
|
+
}
|
|
18
|
+
}
|