1
0
mirror of https://gitcode.com/gh_mirrors/re/react-native-pushy.git synced 2025-11-23 07:53:38 +08:00
Code Issues Packages Projects Releases Wiki Activity GitHub Gitee

Compare commits

..

11 Commits

Author SHA1 Message Date
sunnylqm
59b60fdc6d Update .gitmodules to reflect new submodule paths for HDiffPatch and lzma, and increment version in package.json to 10.34.3. 2025-10-16 11:35:39 +08:00
sunnylqm
c768705221 Update .gitmodules to add new submodules for HDiffPatch and lzma, and increment version in package.json to 10.34.2. 2025-10-16 11:13:22 +08:00
sunnylqm
57206dd2f1 Update .gitignore to exclude new harmony package files, remove submodule entries from .gitmodules, and increment version in package.json to 10.34.1. Refactor build-profile.json5 for consistency and update PushyFileJSBundleProvider to handle optional chaining. Remove obsolete pushy.har file and adjust dependencies in oh-package.json5 for clarity. 2025-10-16 00:48:17 +08:00
sunnylqm
4e27d906c3 Reorder properties in CheckResult object for consistency in UpdateProvider component. 2025-09-28 23:23:16 +08:00
sunnylqm
c24f469475 Refactor Pushy class to replace getCurrentVersionInfo with currentVersionInfo for improved clarity and consistency. 2025-09-28 21:57:56 +08:00
sunnylqm
8f8a29eda8 Update version in package.json from 10.34.0-beta.0 to 10.34.0 for stable release. 2025-09-24 16:56:28 +08:00
sunnylqm
a78542b214 Update version to 10.34.0-beta.0 in package.json and modify NDK version for build-lib script; update package manager to yarn@1.22.21. 2025-09-24 15:29:57 +08:00
Sunny Luo
8d9ae57a5f Bump version from 10.32.1 to 10.33.0 2025-09-24 08:28:11 +08:00
Sunny Luo
2502935fc0 Update package.json 2025-09-24 08:27:57 +08:00
波仔糕
8e6d9bf460 update judge logic for v2 (#513)
* update judge logic for v2

* udpate
2025-09-24 08:26:16 +08:00
波仔糕
897f334343 resolve aab package image hot update issue (#512)
* modify harmony download logic to async

* fix harmony image assets load fail issue

* resolve aab package image hot update issue

* update

* udpate
2025-09-23 23:41:40 +08:00
21 changed files with 202 additions and 119 deletions

5
.gitignore vendored
View File

@@ -52,3 +52,8 @@ Example/testHotUpdate/harmony
Example/testHotUpdate/android/app/.cxx Example/testHotUpdate/android/app/.cxx
Example/harmony_use_pushy/libs Example/harmony_use_pushy/libs
**/mcp.json **/mcp.json
harmony/package
**/oh_modules
harmony/pushy/.preview

8
.gitmodules vendored
View File

@@ -4,9 +4,9 @@
[submodule "android/jni/HDiffPatch"] [submodule "android/jni/HDiffPatch"]
path = android/jni/HDiffPatch path = android/jni/HDiffPatch
url = https://github.com/sisong/HDiffPatch.git url = https://github.com/sisong/HDiffPatch.git
[submodule "harmony/src/main/cpp/HDiffPatch"] [submodule "harmony/pushy/src/main/cpp/HDiffPatch"]
path = harmony/src/main/cpp/HDiffPatch path = harmony/pushy/src/main/cpp/HDiffPatch
url = https://github.com/sisong/HDiffPatch.git url = https://github.com/sisong/HDiffPatch.git
[submodule "harmony/src/main/cpp/lzma"] [submodule "harmony/pushy/src/main/cpp/lzma"]
path = harmony/src/main/cpp/lzma path = harmony/pushy/src/main/cpp/lzma
url = https://github.com/sisong/lzma.git url = https://github.com/sisong/lzma.git

View File

@@ -1,41 +1,49 @@
{ {
"app": { app: {
"signingConfigs": [], signingConfigs: [],
"products": [ products: [
{ {
"name": "default", name: 'default',
"signingConfig": "default", signingConfig: 'default',
"compatibleSdkVersion": "5.0.0(12)", compatibleSdkVersion: '5.0.0(12)',
"runtimeOS": "HarmonyOS", runtimeOS: 'HarmonyOS',
"buildOption": { buildOption: {
"strictMode": { strictMode: {
"caseSensitiveCheck": true, caseSensitiveCheck: true,
"useNormalizedOHMUrl": true useNormalizedOHMUrl: true,
} },
} },
} },
], ],
"buildModeSet": [ buildModeSet: [
{ {
"name": "debug", name: 'debug',
}, },
{ {
"name": "release" name: 'release',
}
]
}, },
"modules": [ ],
},
modules: [
{ {
"name": "entry", name: 'entry',
"srcPath": "./entry", srcPath: './entry',
"targets": [ targets: [
{ {
"name": "default", name: 'default',
"applyToProducts": [ applyToProducts: ['default'],
"default" },
] ],
} },
] {
} name: 'pushy',
] srcPath: '../../../harmony/pushy',
targets: [
{
name: 'default',
applyToProducts: ['default'],
},
],
},
],
} }

View File

@@ -1,25 +1,26 @@
{ {
"meta": { "meta": {
"stableOrder": true "stableOrder": true,
"enableUnifiedLockfile": false
}, },
"lockfileVersion": 3, "lockfileVersion": 3,
"ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.",
"specifiers": { "specifiers": {
"@rnoh/react-native-openharmony@0.72.38": "@rnoh/react-native-openharmony@0.72.38", "@rnoh/react-native-openharmony@0.72.38": "@rnoh/react-native-openharmony@0.72.38",
"pushy@../../node_modules/react-native-update/harmony": "pushy@../../node_modules/react-native-update/harmony" "pushy@../../node_modules/react-native-update/harmony/pushy": "pushy@../../node_modules/react-native-update/harmony/pushy"
}, },
"packages": { "packages": {
"@rnoh/react-native-openharmony@0.72.38": { "@rnoh/react-native-openharmony@0.72.38": {
"name": "@rnoh/react-native-openharmony", "name": "",
"version": "0.72.38", "version": "0.72.38",
"integrity": "sha512-br5SIrbB0OarSLirenleE7eTOX1lNccMJ7nb/G7qWTyJ7kW4DalmTXVKYpoT2qaOLls1uEE7McD1OjbZZM9jug==", "integrity": "sha512-br5SIrbB0OarSLirenleE7eTOX1lNccMJ7nb/G7qWTyJ7kW4DalmTXVKYpoT2qaOLls1uEE7McD1OjbZZM9jug==",
"resolved": "https://ohpm.openharmony.cn/ohpm/@rnoh/react-native-openharmony/-/react-native-openharmony-0.72.38.har", "resolved": "https://ohpm.openharmony.cn/ohpm/@rnoh/react-native-openharmony/-/react-native-openharmony-0.72.38.har",
"registryType": "ohpm" "registryType": "ohpm"
}, },
"pushy@../../node_modules/react-native-update/harmony": { "pushy@../../node_modules/react-native-update/harmony/pushy": {
"name": "pushy", "name": "pushy",
"version": "3.1.0-0.0.7", "version": "3.1.0-0.0.7",
"resolved": "../../node_modules/react-native-update/harmony", "resolved": "",
"registryType": "local", "registryType": "local",
"dependencies": { "dependencies": {
"@rnoh/react-native-openharmony": "^0.72.38" "@rnoh/react-native-openharmony": "^0.72.38"

View File

@@ -1,13 +1,12 @@
{ {
"name": "entry", name: 'entry',
"version": "1.0.0", version: '1.0.0',
"description": "Please describe the basic information.", description: 'Please describe the basic information.',
"main": "", main: '',
"author": "", author: '',
"license": "", license: '',
"dependencies": { dependencies: {
"@rnoh/react-native-openharmony": "0.72.38", '@rnoh/react-native-openharmony': '0.72.38',
"pushy": "file:../../node_modules/react-native-update/harmony/pushy.har", pushy: 'file:../../node_modules/react-native-update/harmony/pushy',
} },
} }

View File

@@ -1,6 +1,6 @@
import { appTasks } from '@ohos/hvigor-ohos-plugin'; import {appTasks} from '@ohos/hvigor-ohos-plugin';
export default { export default {
system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ system: appTasks /* Built-in plugin of Hvigor. It cannot be modified. */,
plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ plugins: [] /* Custom plugin to extend the functionality of Hvigor. */,
} };

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -25,6 +25,7 @@ import java.util.ArrayList;
import java.util.Enumeration; import java.util.Enumeration;
import java.util.Iterator; import java.util.Iterator;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.CRC32;
import java.util.HashMap; import java.util.HashMap;
import okio.BufferedSink; import okio.BufferedSink;
@@ -198,6 +199,10 @@ class DownloadTask extends AsyncTask<DownloadTaskParams, long[], Void> {
return fout.toByteArray(); return fout.toByteArray();
} }
private String getCRC32AsDecimal(long crc32Value) {
return String.valueOf(crc32Value & 0xFFFFFFFFL);
}
private void copyFilesWithBlacklist(String current, File from, File to, JSONObject blackList) throws IOException { private void copyFilesWithBlacklist(String current, File from, File to, JSONObject blackList) throws IOException {
File[] files = from.listFiles(); File[] files = from.listFiles();
for (File file : files) { for (File file : files) {
@@ -273,12 +278,41 @@ class DownloadTask extends AsyncTask<DownloadTaskParams, long[], Void> {
zipFile.close(); zipFile.close();
} }
private void copyFromResourceV2(HashMap<String, ArrayList<File>> resToCopy2) throws IOException {
SafeZipFile zipFile = new SafeZipFile(new File(context.getPackageResourcePath()));
Enumeration<? extends ZipEntry> entries = zipFile.entries();
while (entries.hasMoreElements()) {
ZipEntry ze = entries.nextElement();
String fn = ze.getName();
long zipCrc32 = ze.getCrc();
String crc32Decimal = getCRC32AsDecimal(zipCrc32);
ArrayList<File> targets = resToCopy2.get(crc32Decimal);
if (targets != null) {
File lastTarget = null;
for (File target: targets) {
if (UpdateContext.DEBUG) {
Log.d("react-native-update", "Copying from resource " + fn + " to " + target);
}
if (lastTarget != null) {
copyFile(lastTarget, target);
} else {
zipFile.unzipToFile(ze, target);
lastTarget = target;
}
}
}
}
zipFile.close();
}
private void doPatchFromApk(DownloadTaskParams param) throws IOException, JSONException { private void doPatchFromApk(DownloadTaskParams param) throws IOException, JSONException {
downloadFile(param); downloadFile(param);
removeDirectory(param.unzipDirectory); removeDirectory(param.unzipDirectory);
param.unzipDirectory.mkdirs(); param.unzipDirectory.mkdirs();
HashMap<String, ArrayList<File>> copyList = new HashMap<String, ArrayList<File>>(); HashMap<String, ArrayList<File>> copyList = new HashMap<String, ArrayList<File>>();
HashMap<String, ArrayList<File>> copiesv2List = new HashMap<String, ArrayList<File>>();
Boolean isV2 = false;
boolean foundDiff = false; boolean foundDiff = false;
boolean foundBundlePatch = false; boolean foundBundlePatch = false;
@@ -297,7 +331,35 @@ class DownloadTask extends AsyncTask<DownloadTaskParams, long[], Void> {
JSONObject obj = (JSONObject)new JSONTokener(json).nextValue(); JSONObject obj = (JSONObject)new JSONTokener(json).nextValue();
JSONObject copies = obj.getJSONObject("copies"); JSONObject copies = obj.getJSONObject("copies");
JSONObject copiesv2 = obj.getJSONObject("copiesv2");
Iterator<?> keys = copies.keys(); Iterator<?> keys = copies.keys();
Iterator<?> keysV2 = copiesv2.keys();
if(keysV2.hasNext()){
isV2 = true;
while( keysV2.hasNext() ) {
String from = (String)keysV2.next();
String to = copiesv2.getString(from);
if (from.isEmpty()) {
from = to;
}
ArrayList<File> target = null;
if (!copiesv2List.containsKey(from)) {
target = new ArrayList<File>();
copiesv2List.put(from, target);
} else {
target = copiesv2List.get((from));
}
File toFile = new File(param.unzipDirectory, to);
// Fixing a Zip Path Traversal Vulnerability
// https://support.google.com/faqs/answer/9294009
String canonicalPath = toFile.getCanonicalPath();
if (!canonicalPath.startsWith(param.unzipDirectory.getCanonicalPath() + File.separator)) {
throw new SecurityException("Illegal name: " + to);
}
target.add(toFile);
}
}else{
while( keys.hasNext() ) { while( keys.hasNext() ) {
String to = (String)keys.next(); String to = (String)keys.next();
String from = copies.getString(to); String from = copies.getString(to);
@@ -321,6 +383,7 @@ class DownloadTask extends AsyncTask<DownloadTaskParams, long[], Void> {
} }
target.add(toFile); target.add(toFile);
} }
}
continue; continue;
} }
if (fn.equals("index.bundlejs.patch")) { if (fn.equals("index.bundlejs.patch")) {
@@ -348,7 +411,11 @@ class DownloadTask extends AsyncTask<DownloadTaskParams, long[], Void> {
throw new Error("bundle patch not found"); throw new Error("bundle patch not found");
} }
if(isV2){
copyFromResourceV2(copiesv2List);
}else{
copyFromResource(copyList); copyFromResource(copyList);
}
if (UpdateContext.DEBUG) { if (UpdateContext.DEBUG) {
Log.d("react-native-update", "Unzip finished"); Log.d("react-native-update", "Unzip finished");

Binary file not shown.

View File

@@ -1,6 +1,7 @@
{ {
"meta": { "meta": {
"stableOrder": true "stableOrder": true,
"enableUnifiedLockfile": false
}, },
"lockfileVersion": 3, "lockfileVersion": 3,
"ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.",
@@ -9,7 +10,7 @@
}, },
"packages": { "packages": {
"@rnoh/react-native-openharmony@0.72.38": { "@rnoh/react-native-openharmony@0.72.38": {
"name": "@rnoh/react-native-openharmony", "name": "",
"version": "0.72.38", "version": "0.72.38",
"integrity": "sha512-br5SIrbB0OarSLirenleE7eTOX1lNccMJ7nb/G7qWTyJ7kW4DalmTXVKYpoT2qaOLls1uEE7McD1OjbZZM9jug==", "integrity": "sha512-br5SIrbB0OarSLirenleE7eTOX1lNccMJ7nb/G7qWTyJ7kW4DalmTXVKYpoT2qaOLls1uEE7McD1OjbZZM9jug==",
"resolved": "https://ohpm.openharmony.cn/ohpm/@rnoh/react-native-openharmony/-/react-native-openharmony-0.72.38.har", "resolved": "https://ohpm.openharmony.cn/ohpm/@rnoh/react-native-openharmony/-/react-native-openharmony-0.72.38.har",

View File

@@ -1,5 +1,5 @@
{ {
"license": "ISC", "license": "MIT",
"types": "", "types": "",
"devDependencies": {}, "devDependencies": {},
"name": "pushy", "name": "pushy",
@@ -8,5 +8,6 @@
"version": "3.1.0-0.0.7", "version": "3.1.0-0.0.7",
"dependencies": { "dependencies": {
"@rnoh/react-native-openharmony":"^0.72.38" "@rnoh/react-native-openharmony":"^0.72.38"
} },
"modelVersion": "5.0.0"
} }

View File

@@ -12,7 +12,7 @@ export class PushyFileJSBundleProvider extends JSBundleProvider {
this.updateContext = new UpdateContext(context); this.updateContext = new UpdateContext(context);
} }
getURL(): string { getURL(): string {
return this.updateContext.getBundleUrl().substring(1); return this.updateContext.getBundleUrl()?.substring(1);
} }
async getBundle(): Promise<ArrayBuffer> { async getBundle(): Promise<ArrayBuffer> {

View File

@@ -9,47 +9,47 @@ import { UpdateModuleImpl } from './UpdateModuleImpl';
import { UpdateContext } from './UpdateContext'; import { UpdateContext } from './UpdateContext';
import { EventHub } from './EventHub'; import { EventHub } from './EventHub';
const TAG = "PushyTurboModule" const TAG = 'PushyTurboModule';
export class PushyTurboModule extends TurboModule { export class PushyTurboModule extends TurboModule {
mUiCtx: common.UIAbilityContext mUiCtx: common.UIAbilityContext;
context: UpdateContext context: UpdateContext;
constructor(protected ctx: TurboModuleContext) { constructor(protected ctx: TurboModuleContext) {
super(ctx); super(ctx);
logger.debug(TAG, ",PushyTurboModule constructor"); logger.debug(TAG, ',PushyTurboModule constructor');
this.mUiCtx = ctx.uiAbilityContext this.mUiCtx = ctx.uiAbilityContext;
this.context = new UpdateContext(this.mUiCtx) this.context = new UpdateContext(this.mUiCtx);
EventHub.getInstance().setRNInstance(ctx.rnInstance) EventHub.getInstance().setRNInstance(ctx.rnInstance);
} }
getConstants(): Object { getConstants(): Object {
logger.debug(TAG, ",call getConstants"); logger.debug(TAG, ',call getConstants');
const context = this.mUiCtx; const context = this.mUiCtx;
const preferencesManager = dataPreferences.getPreferencesSync(context,{ name: 'update' }); const preferencesManager = dataPreferences.getPreferencesSync(context,{ name: 'update' });
const isFirstTime = preferencesManager.getSync("isFirstTime", false) as boolean; const isFirstTime = preferencesManager.getSync('isFirstTime', false) as boolean;
const rolledBackVersion = preferencesManager.getSync("rolledBackVersion", "") as string; const rolledBackVersion = preferencesManager.getSync('rolledBackVersion', '') as string;
const uuid = preferencesManager.getSync("uuid", "") as string; const uuid = preferencesManager.getSync('uuid', '') as string;
const currentVersion = preferencesManager.getSync("currentVersion", "") as string; const currentVersion = preferencesManager.getSync('currentVersion', '') as string;
const currentVersionInfo = this.context.getKv(`hash_${currentVersion}`); const currentVersionInfo = this.context.getKv(`hash_${currentVersion}`);
const buildTime = preferencesManager.getSync("buildTime", "") as string; const buildTime = preferencesManager.getSync('buildTime', '') as string;
const isUsingBundleUrl = this.context.getIsUsingBundleUrl(); const isUsingBundleUrl = this.context.getIsUsingBundleUrl();
let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_REQUESTED_PERMISSION; let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_REQUESTED_PERMISSION;
let packageVersion = ''; let packageVersion = '';
try { try {
const bundleInfo = bundleManager.getBundleInfoForSelfSync(bundleFlags); const bundleInfo = bundleManager.getBundleInfoForSelfSync(bundleFlags);
packageVersion = bundleInfo?.versionName || "Unknown" packageVersion = bundleInfo?.versionName || 'Unknown';
} catch (error) { } catch (error) {
console.error("Failed to get bundle info:", error); console.error('Failed to get bundle info:', error);
} }
if (isFirstTime) { if (isFirstTime) {
preferencesManager.deleteSync("isFirstTime"); preferencesManager.deleteSync('isFirstTime');
} }
if (rolledBackVersion) { if (rolledBackVersion) {
preferencesManager.deleteSync("rolledBackVersion"); preferencesManager.deleteSync('rolledBackVersion');
} }
return { return {
@@ -62,12 +62,12 @@ getConstants(): Object {
isFirstTime, isFirstTime,
rolledBackVersion, rolledBackVersion,
uuid, uuid,
} };
} }
setLocalHashInfo(hash: string, info: string): boolean { setLocalHashInfo(hash: string, info: string): boolean {
logger.debug(TAG, ",call setLocalHashInfo"); logger.debug(TAG, ',call setLocalHashInfo');
return UpdateModuleImpl.setLocalHashInfo(this.context, hash, info); return UpdateModuleImpl.setLocalHashInfo(this.context, hash, info);
} }
@@ -76,50 +76,50 @@ getConstants(): Object {
} }
async setUuid(uuid: string): Promise<boolean> { async setUuid(uuid: string): Promise<boolean> {
logger.debug(TAG, `,call setUuid`); logger.debug(TAG, ',call setUuid');
return UpdateModuleImpl.setUuid(this.context,uuid); return UpdateModuleImpl.setUuid(this.context,uuid);
} }
async reloadUpdate(options: { hash: string }): Promise<void> { async reloadUpdate(options: { hash: string }): Promise<void> {
logger.debug(TAG, `,call reloadUpdate`); logger.debug(TAG, ',call reloadUpdate');
return UpdateModuleImpl.reloadUpdate(this.context, this.mUiCtx, options); return UpdateModuleImpl.reloadUpdate(this.context, this.mUiCtx, options);
} }
async setNeedUpdate(options: { hash: string }): Promise<boolean> { async setNeedUpdate(options: { hash: string }): Promise<boolean> {
logger.debug(TAG, `,call setNeedUpdate`); logger.debug(TAG, ',call setNeedUpdate');
return UpdateModuleImpl.setNeedUpdate(this.context, options); return UpdateModuleImpl.setNeedUpdate(this.context, options);
} }
async markSuccess(): Promise<boolean> { async markSuccess(): Promise<boolean> {
logger.debug(TAG, `,call markSuccess`); logger.debug(TAG, ',call markSuccess');
return UpdateModuleImpl.markSuccess(this.context); return UpdateModuleImpl.markSuccess(this.context);
} }
async downloadPatchFromPpk(options: { updateUrl: string; hash: string; originHash: string }): Promise<void> { async downloadPatchFromPpk(options: { updateUrl: string; hash: string; originHash: string }): Promise<void> {
logger.debug(TAG, `,call downloadPatchFromPpk`); logger.debug(TAG, ',call downloadPatchFromPpk');
return UpdateModuleImpl.downloadPatchFromPpk(this.context, options); return UpdateModuleImpl.downloadPatchFromPpk(this.context, options);
} }
async downloadPatchFromPackage(options: { updateUrl: string; hash: string }): Promise<void> { async downloadPatchFromPackage(options: { updateUrl: string; hash: string }): Promise<void> {
logger.debug(TAG, `,call downloadPatchFromPackage`); logger.debug(TAG, ',call downloadPatchFromPackage');
return UpdateModuleImpl.downloadPatchFromPackage(this.context, options); return UpdateModuleImpl.downloadPatchFromPackage(this.context, options);
} }
async downloadFullUpdate(options: { updateUrl: string; hash: string }): Promise<void> { async downloadFullUpdate(options: { updateUrl: string; hash: string }): Promise<void> {
logger.debug(TAG, `,call downloadFullUpdate`); logger.debug(TAG, ',call downloadFullUpdate');
return UpdateModuleImpl.downloadFullUpdate(this.context, options); return UpdateModuleImpl.downloadFullUpdate(this.context, options);
} }
async downloadAndInstallApk(options: { url: string; target: string; hash: string }): Promise<void> { async downloadAndInstallApk(options: { url: string; target: string; hash: string }): Promise<void> {
logger.debug(TAG, `,call downloadAndInstallApk`); logger.debug(TAG, ',call downloadAndInstallApk');
return UpdateModuleImpl.downloadAndInstallApk(this.mUiCtx, options); return UpdateModuleImpl.downloadAndInstallApk(this.mUiCtx, options);
} }
addListener(eventName: string): void { addListener(eventName: string): void {
logger.debug(TAG, `,call addListener`); logger.debug(TAG, ',call addListener');
} }
removeListeners(count: number): void { removeListeners(count: number): void {
logger.debug(TAG, `,call removeListeners`); logger.debug(TAG, ',call removeListeners');
} }
} }

View File

@@ -1,6 +1,6 @@
{ {
"name": "react-native-update", "name": "react-native-update",
"version": "10.32.0", "version": "10.34.3",
"description": "react-native hot update", "description": "react-native hot update",
"main": "src/index", "main": "src/index",
"scripts": { "scripts": {
@@ -9,7 +9,7 @@
"lint": "eslint \"src/*.@(ts|tsx|js|jsx)\" && tsc --noEmit", "lint": "eslint \"src/*.@(ts|tsx|js|jsx)\" && tsc --noEmit",
"submodule": "git submodule update --init --recursive", "submodule": "git submodule update --init --recursive",
"test": "echo \"Error: no test specified\" && exit 1", "test": "echo \"Error: no test specified\" && exit 1",
"build-lib": "bun submodule && $ANDROID_HOME/ndk/20.1.5948944/ndk-build NDK_PROJECT_PATH=android APP_BUILD_SCRIPT=android/jni/Android.mk NDK_APPLICATION_MK=android/jni/Application.mk NDK_LIBS_OUT=android/lib", "build:so": "bun submodule && $ANDROID_HOME/ndk/28.2.13676358/ndk-build NDK_PROJECT_PATH=android APP_BUILD_SCRIPT=android/jni/Android.mk NDK_APPLICATION_MK=android/jni/Application.mk NDK_LIBS_OUT=android/lib",
"build:ios-debug": "cd Example/testHotUpdate && bun && detox build --configuration ios.sim.debug", "build:ios-debug": "cd Example/testHotUpdate && bun && detox build --configuration ios.sim.debug",
"build:ios-release": "cd Example/testHotUpdate && bun && detox build --configuration ios.sim.release", "build:ios-release": "cd Example/testHotUpdate && bun && detox build --configuration ios.sim.release",
"test:ios-debug": "cd Example/testHotUpdate && detox test --configuration ios.sim.debug", "test:ios-debug": "cd Example/testHotUpdate && detox test --configuration ios.sim.debug",

View File

@@ -8,7 +8,7 @@ import {
buildTime, buildTime,
cInfo, cInfo,
currentVersion, currentVersion,
getCurrentVersionInfo, currentVersionInfo,
isFirstTime, isFirstTime,
isRolledBack, isRolledBack,
packageVersion, packageVersion,
@@ -163,7 +163,6 @@ export class Pushy {
log(type + ' ' + message); log(type + ' ' + message);
await this.loggerPromise.promise; await this.loggerPromise.promise;
const { logger = noop, appKey } = this.options; const { logger = noop, appKey } = this.options;
const info = await getCurrentVersionInfo();
const overridePackageVersion = this.options.overridePackageVersion; const overridePackageVersion = this.options.overridePackageVersion;
logger({ logger({
type, type,
@@ -175,7 +174,7 @@ export class Pushy {
overridePackageVersion, overridePackageVersion,
buildTime, buildTime,
message, message,
...info, ...currentVersionInfo,
...data, ...data,
}, },
}); });

View File

@@ -179,8 +179,8 @@ export const UpdateProvider = ({
delete rootInfo.expVersion; delete rootInfo.expVersion;
for (const versionInfo of versions) { for (const versionInfo of versions) {
const info: CheckResult = { const info: CheckResult = {
...versionInfo,
...rootInfo, ...rootInfo,
...versionInfo,
}; };
const rollout = info.config?.rollout?.[packageVersion]; const rollout = info.config?.rollout?.[packageVersion];
if (info.update && rollout) { if (info.update && rollout) {