react-native-update 8.5.1 → 8.5.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/lib/endpoint.ts +2 -2
- package/lib/main.ts +2 -2
- package/lib/utils.ts +49 -8
- package/package.json +3 -2
package/lib/endpoint.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { logger } from './utils';
|
|
1
|
+
import { logger, promiseAny } from './utils';
|
|
2
2
|
|
|
3
3
|
let currentEndpoint = 'https://update.react-native.cn/api';
|
|
4
4
|
let backupEndpoints: string[] = [
|
|
@@ -13,7 +13,7 @@ let backupEndpointsQueryUrls = [
|
|
|
13
13
|
export async function updateBackupEndpoints() {
|
|
14
14
|
if (backupEndpointsQueryUrls) {
|
|
15
15
|
try {
|
|
16
|
-
const resp = await
|
|
16
|
+
const resp = await promiseAny(
|
|
17
17
|
backupEndpointsQueryUrls.map((queryUrl) => fetch(queryUrl)),
|
|
18
18
|
);
|
|
19
19
|
const remoteEndpoints = await resp.json();
|
package/lib/main.ts
CHANGED
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
UpdateAvailableResult,
|
|
17
17
|
UpdateEventsListener,
|
|
18
18
|
} from './type';
|
|
19
|
-
import { assertRelease, logger, testUrls } from './utils';
|
|
19
|
+
import { assertRelease, logger, promiseAny, testUrls } from './utils';
|
|
20
20
|
export { setCustomEndpoints };
|
|
21
21
|
const {
|
|
22
22
|
version: v,
|
|
@@ -162,7 +162,7 @@ export async function checkUpdate(APPKEY: string) {
|
|
|
162
162
|
const backupEndpoints = await updateBackupEndpoints();
|
|
163
163
|
if (backupEndpoints) {
|
|
164
164
|
try {
|
|
165
|
-
resp = await
|
|
165
|
+
resp = await promiseAny(
|
|
166
166
|
backupEndpoints.map((endpoint) =>
|
|
167
167
|
fetch(getCheckUrl(APPKEY, endpoint), fetchPayload),
|
|
168
168
|
),
|
package/lib/utils.ts
CHANGED
|
@@ -1,4 +1,21 @@
|
|
|
1
|
-
import { Platform } from
|
|
1
|
+
import { Platform } from 'react-native';
|
|
2
|
+
|
|
3
|
+
export function promiseAny<T>(promises: Promise<T>[]) {
|
|
4
|
+
return new Promise<T>((resolve, reject) => {
|
|
5
|
+
let count = 0;
|
|
6
|
+
|
|
7
|
+
promises.forEach((promise) => {
|
|
8
|
+
Promise.resolve(promise)
|
|
9
|
+
.then(resolve)
|
|
10
|
+
.catch(() => {
|
|
11
|
+
count++;
|
|
12
|
+
if (count === promises.length) {
|
|
13
|
+
reject(new Error('All promises were rejected'));
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
}
|
|
2
19
|
|
|
3
20
|
export function logger(...args: any[]) {
|
|
4
21
|
console.log('Pushy: ', ...args);
|
|
@@ -13,20 +30,44 @@ export function assertRelease() {
|
|
|
13
30
|
const ping =
|
|
14
31
|
Platform.OS === 'web'
|
|
15
32
|
? Promise.resolve
|
|
16
|
-
: async (url: string) =>
|
|
17
|
-
|
|
33
|
+
: async (url: string) => {
|
|
34
|
+
let pingFinished = false;
|
|
35
|
+
return Promise.race([
|
|
18
36
|
fetch(url, {
|
|
19
37
|
method: 'HEAD',
|
|
20
38
|
})
|
|
21
|
-
.then(({ status }) =>
|
|
22
|
-
|
|
23
|
-
|
|
39
|
+
.then(({ status, statusText }) => {
|
|
40
|
+
pingFinished = true;
|
|
41
|
+
if (status === 200) {
|
|
42
|
+
return url;
|
|
43
|
+
}
|
|
44
|
+
logger('ping failed', url, status, statusText);
|
|
45
|
+
return null;
|
|
46
|
+
})
|
|
47
|
+
.catch((e) => {
|
|
48
|
+
pingFinished = true;
|
|
49
|
+
logger('ping error', url, e);
|
|
50
|
+
return null;
|
|
51
|
+
}),
|
|
52
|
+
new Promise((r) =>
|
|
53
|
+
setTimeout(() => {
|
|
54
|
+
r(null);
|
|
55
|
+
if (!pingFinished) {
|
|
56
|
+
logger('ping timeout', url);
|
|
57
|
+
}
|
|
58
|
+
}, 2000),
|
|
59
|
+
),
|
|
24
60
|
]);
|
|
25
|
-
|
|
61
|
+
};
|
|
26
62
|
|
|
27
63
|
export const testUrls = async (urls?: string[]) => {
|
|
28
64
|
if (!urls?.length) {
|
|
29
65
|
return null;
|
|
30
66
|
}
|
|
31
|
-
|
|
67
|
+
const ret = await promiseAny(urls.map(ping));
|
|
68
|
+
if (ret) {
|
|
69
|
+
return ret;
|
|
70
|
+
}
|
|
71
|
+
logger('all ping failed, use first url:', urls[0]);
|
|
72
|
+
return urls[0];
|
|
32
73
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-update",
|
|
3
|
-
"version": "8.5.
|
|
3
|
+
"version": "8.5.3",
|
|
4
4
|
"description": "react-native hot update",
|
|
5
5
|
"main": "lib/index.ts",
|
|
6
6
|
"scripts": {
|
|
@@ -36,5 +36,6 @@
|
|
|
36
36
|
"@types/react": "^18.2.33",
|
|
37
37
|
"react-native": "^0.72.6",
|
|
38
38
|
"typescript": "^5.2.2"
|
|
39
|
-
}
|
|
39
|
+
},
|
|
40
|
+
"packageManager": "yarn@1.22.21+sha1.1959a18351b811cdeedbd484a8f86c3cc3bbaf72"
|
|
40
41
|
}
|