@react-native-firebase/storage 20.4.0 → 20.5.0
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +4 -0
- package/lib/version.js +1 -1
- package/lib/web/RNFBStorageModule.js +33 -21
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
@@ -3,6 +3,10 @@
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
5
5
|
|
6
|
+
## [20.5.0](https://github.com/invertase/react-native-firebase/compare/v20.4.0...v20.5.0) (2024-09-11)
|
7
|
+
|
8
|
+
**Note:** Version bump only for package @react-native-firebase/storage
|
9
|
+
|
6
10
|
## [20.4.0](https://github.com/invertase/react-native-firebase/compare/v20.3.0...v20.4.0) (2024-08-13)
|
7
11
|
|
8
12
|
### Features
|
package/lib/version.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
// Generated by genversion.
|
2
|
-
module.exports = '20.
|
2
|
+
module.exports = '20.5.0';
|
@@ -120,32 +120,48 @@ const storageInstances = {};
|
|
120
120
|
const tasks = {};
|
121
121
|
|
122
122
|
function getBucketFromUrl(url) {
|
123
|
-
|
124
|
-
|
125
|
-
|
123
|
+
// Check if the URL starts with "gs://"
|
124
|
+
if (url.startsWith('gs://')) {
|
125
|
+
// Return the bucket name by extracting everything up to the first slash after "gs://"
|
126
|
+
// and removing the "gs://" prefix
|
127
|
+
return url.substring(5).split('/')[0];
|
128
|
+
} else {
|
129
|
+
// Assume the URL is a path format, strip the leading slash if it exists and extract the bucket name
|
130
|
+
const strippedUrl = url.startsWith('/') ? url.substring(1) : url;
|
131
|
+
// Extract the bucket from the path, assuming it ends at the first slash after the domain
|
132
|
+
return strippedUrl.split('/')[0];
|
133
|
+
}
|
126
134
|
}
|
127
135
|
|
128
136
|
function getCachedAppInstance(appName) {
|
129
137
|
return (appInstances[appName] ??= getApp(appName));
|
130
138
|
}
|
131
139
|
|
140
|
+
function emulatorKey(appName, url) {
|
141
|
+
const bucket = getBucketFromUrl(url);
|
142
|
+
return `${appName}|${bucket}`;
|
143
|
+
}
|
144
|
+
|
132
145
|
// Returns a cached Storage instance.
|
133
146
|
function getCachedStorageInstance(appName, url) {
|
134
147
|
let instance;
|
148
|
+
const bucket = url ? getBucketFromUrl(url) : getCachedAppInstance(appName).options.storageBucket;
|
149
|
+
|
135
150
|
if (!url) {
|
136
151
|
instance = getCachedStorageInstance(
|
137
152
|
appName,
|
138
153
|
getCachedAppInstance(appName).options.storageBucket,
|
139
154
|
);
|
140
155
|
} else {
|
141
|
-
const bucket = getBucketFromUrl(url);
|
142
156
|
instance = storageInstances[`${appName}|${bucket}`] ??= getStorage(
|
143
157
|
getCachedAppInstance(appName),
|
144
158
|
bucket,
|
145
159
|
);
|
146
160
|
}
|
147
|
-
|
148
|
-
|
161
|
+
|
162
|
+
const key = emulatorKey(appName, bucket);
|
163
|
+
if (emulatorForApp[key]) {
|
164
|
+
connectStorageEmulator(instance, emulatorForApp[key].host, emulatorForApp[key].port);
|
149
165
|
}
|
150
166
|
return instance;
|
151
167
|
}
|
@@ -296,11 +312,12 @@ export default {
|
|
296
312
|
* @param {number} port - The emulator port.
|
297
313
|
* @return {Promise<void>}
|
298
314
|
*/
|
299
|
-
useEmulator(appName, host, port) {
|
315
|
+
useEmulator(appName, host, port, url) {
|
300
316
|
return guard(async () => {
|
301
|
-
const instance = getCachedStorageInstance(appName);
|
317
|
+
const instance = getCachedStorageInstance(appName, url);
|
302
318
|
connectStorageEmulator(instance, host, port);
|
303
|
-
|
319
|
+
const key = emulatorKey(appName, url);
|
320
|
+
emulatorForApp[key] = { host, port };
|
304
321
|
});
|
305
322
|
},
|
306
323
|
|
@@ -324,28 +341,23 @@ export default {
|
|
324
341
|
putString(appName, url, string, format, metadata = {}, taskId) {
|
325
342
|
return guard(async () => {
|
326
343
|
const ref = getReferenceFromUrl(appName, url);
|
344
|
+
let decodedString = null;
|
327
345
|
|
328
|
-
|
329
|
-
|
346
|
+
// This is always either base64 or base64url
|
330
347
|
switch (format) {
|
331
348
|
case 'base64':
|
332
|
-
|
349
|
+
decodedString = Base64.atob(string);
|
333
350
|
break;
|
334
351
|
case 'base64url':
|
335
|
-
|
352
|
+
decodedString = Base64.atob(string.replace(/_/g, '/').replace(/-/g, '+'));
|
336
353
|
break;
|
337
354
|
}
|
338
355
|
|
339
|
-
const
|
356
|
+
const encoder = new TextEncoder();
|
340
357
|
|
341
|
-
|
342
|
-
for (let i = 0; i < base64String.length; i++) {
|
343
|
-
byteArray[i] = base64String.charCodeAt(i);
|
344
|
-
}
|
345
|
-
}
|
358
|
+
const arrayBuffer = encoder.encode(decodedString).buffer;
|
346
359
|
|
347
|
-
|
348
|
-
const task = uploadBytesResumable(ref, byteArray, {
|
360
|
+
const task = uploadBytesResumable(ref, arrayBuffer, {
|
349
361
|
...makeSettableMetadata(metadata),
|
350
362
|
md5Hash: metadata.md5Hash,
|
351
363
|
});
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@react-native-firebase/storage",
|
3
|
-
"version": "20.
|
3
|
+
"version": "20.5.0",
|
4
4
|
"author": "Invertase <oss@invertase.io> (http://invertase.io)",
|
5
5
|
"description": "React Native Firebase - React Native Firebase provides native integration with Cloud Storage, providing support to upload and download files directly from your device and from your Firebase Cloud Storage bucket.",
|
6
6
|
"main": "lib/index.js",
|
@@ -29,10 +29,10 @@
|
|
29
29
|
"download"
|
30
30
|
],
|
31
31
|
"peerDependencies": {
|
32
|
-
"@react-native-firebase/app": "20.
|
32
|
+
"@react-native-firebase/app": "20.5.0"
|
33
33
|
},
|
34
34
|
"publishConfig": {
|
35
35
|
"access": "public"
|
36
36
|
},
|
37
|
-
"gitHead": "
|
37
|
+
"gitHead": "daf2bc9086c14bbb0e1b02a4d4274b7060263eb1"
|
38
38
|
}
|