@hot-updater/react-native 0.26.1 → 0.27.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.
Files changed (34) hide show
  1. package/android/src/main/AndroidManifest.xml +10 -0
  2. package/android/src/main/AndroidManifestNew.xml +10 -0
  3. package/android/src/main/java/com/hotupdater/HotUpdaterImpl.kt +52 -5
  4. package/android/src/main/java/com/hotupdater/HotUpdaterRestartActivity.kt +64 -0
  5. package/android/src/newarch/HotUpdaterModule.kt +13 -0
  6. package/android/src/oldarch/HotUpdaterModule.kt +14 -0
  7. package/android/src/oldarch/HotUpdaterSpec.kt +2 -0
  8. package/ios/HotUpdater/Internal/HotUpdater.mm +10 -0
  9. package/lib/commonjs/index.js +11 -0
  10. package/lib/commonjs/index.js.map +1 -1
  11. package/lib/commonjs/native.js +87 -2
  12. package/lib/commonjs/native.js.map +1 -1
  13. package/lib/commonjs/specs/NativeHotUpdater.js.map +1 -1
  14. package/lib/module/index.js +12 -1
  15. package/lib/module/index.js.map +1 -1
  16. package/lib/module/native.js +86 -2
  17. package/lib/module/native.js.map +1 -1
  18. package/lib/module/specs/NativeHotUpdater.js.map +1 -1
  19. package/lib/typescript/commonjs/index.d.ts +13 -2
  20. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  21. package/lib/typescript/commonjs/native.d.ts +48 -1
  22. package/lib/typescript/commonjs/native.d.ts.map +1 -1
  23. package/lib/typescript/commonjs/specs/NativeHotUpdater.d.ts +6 -0
  24. package/lib/typescript/commonjs/specs/NativeHotUpdater.d.ts.map +1 -1
  25. package/lib/typescript/module/index.d.ts +13 -2
  26. package/lib/typescript/module/index.d.ts.map +1 -1
  27. package/lib/typescript/module/native.d.ts +48 -1
  28. package/lib/typescript/module/native.d.ts.map +1 -1
  29. package/lib/typescript/module/specs/NativeHotUpdater.d.ts +6 -0
  30. package/lib/typescript/module/specs/NativeHotUpdater.d.ts.map +1 -1
  31. package/package.json +6 -6
  32. package/src/index.ts +20 -1
  33. package/src/native.ts +111 -2
  34. package/src/specs/NativeHotUpdater.ts +6 -0
@@ -1,3 +1,13 @@
1
1
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
2
  package="com.hotupdater">
3
+ <application>
4
+ <activity
5
+ android:name="com.hotupdater.HotUpdaterRestartActivity"
6
+ android:excludeFromRecents="true"
7
+ android:exported="false"
8
+ android:launchMode="singleTask"
9
+ android:noHistory="true"
10
+ android:process=":hotupdater_restart"
11
+ android:theme="@android:style/Theme.NoDisplay" />
12
+ </application>
3
13
  </manifest>
@@ -1,2 +1,12 @@
1
1
  <manifest xmlns:android="http://schemas.android.com/apk/res/android">
2
+ <application>
3
+ <activity
4
+ android:name="com.hotupdater.HotUpdaterRestartActivity"
5
+ android:excludeFromRecents="true"
6
+ android:exported="false"
7
+ android:launchMode="singleTask"
8
+ android:noHistory="true"
9
+ android:process=":hotupdater_restart"
10
+ android:theme="@android:style/Theme.NoDisplay" />
11
+ </application>
2
12
  </manifest>
@@ -1,6 +1,9 @@
1
1
  package com.hotupdater
2
2
 
3
+ import android.app.ActivityOptions
3
4
  import android.content.Context
5
+ import android.content.Intent
6
+ import android.os.Process
4
7
  import android.util.Log
5
8
  import kotlinx.coroutines.Dispatchers
6
9
  import kotlinx.coroutines.withContext
@@ -295,19 +298,63 @@ class HotUpdaterImpl {
295
298
  * @param reactContext The original context (preferably ReactApplicationContext to get current activity)
296
299
  */
297
300
  suspend fun reload(reactContext: Context) {
298
- val reactIntegrationManager = ReactIntegrationManager(reactContext)
299
- val bundleURL = getJSBundleFile()
300
-
301
301
  try {
302
302
  withContext(Dispatchers.Main) {
303
- reactIntegrationManager.setJSBundle(bundleURL)
304
- reactIntegrationManager.reload()
303
+ performReactReload(reactContext)
305
304
  }
306
305
  } catch (e: Exception) {
307
306
  Log.e("HotUpdaterImpl", "Failed to reload application", e)
308
307
  }
309
308
  }
310
309
 
310
+ suspend fun reloadProcess(reactContext: Context) {
311
+ try {
312
+ withContext(Dispatchers.Main) {
313
+ if (!restartApplication(reactContext)) {
314
+ Log.w(TAG, "Falling back to in-process reload because process restart could not be started")
315
+ performReactReload(reactContext)
316
+ }
317
+ }
318
+ } catch (e: Exception) {
319
+ Log.e("HotUpdaterImpl", "Failed to restart application process", e)
320
+ throw e
321
+ }
322
+ }
323
+
324
+ private suspend fun performReactReload(reactContext: Context) {
325
+ val reactIntegrationManager = ReactIntegrationManager(reactContext)
326
+ val bundleURL = getJSBundleFile()
327
+ reactIntegrationManager.setJSBundle(bundleURL)
328
+ reactIntegrationManager.reload()
329
+ }
330
+
331
+ // Use a cold restart in release builds so bundle application does not depend on RN reload timing.
332
+ private fun restartApplication(reactContext: Context): Boolean {
333
+ val currentActivity =
334
+ (reactContext as? com.facebook.react.bridge.ReactApplicationContext)?.currentActivity
335
+ if (currentActivity == null) {
336
+ Log.w(TAG, "Cannot restart app: current activity unavailable")
337
+ return false
338
+ }
339
+
340
+ return try {
341
+ val restartIntent =
342
+ Intent(currentActivity, HotUpdaterRestartActivity::class.java).apply {
343
+ addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
344
+ putExtra(HotUpdaterRestartActivity.EXTRA_PACKAGE_NAME, currentActivity.packageName)
345
+ putExtra(HotUpdaterRestartActivity.EXTRA_TARGET_PID, Process.myPid())
346
+ }
347
+ val options = ActivityOptions.makeCustomAnimation(currentActivity, 0, 0)
348
+ currentActivity.startActivity(restartIntent, options.toBundle())
349
+
350
+ Log.i(TAG, "Started restart trampoline to apply update bundle")
351
+ return true
352
+ } catch (e: Exception) {
353
+ Log.w(TAG, "Failed to start restart trampoline", e)
354
+ false
355
+ }
356
+ }
357
+
311
358
  /**
312
359
  * Notifies the system that the app has successfully started with the given bundle.
313
360
  * If the bundle matches the staging bundle, it promotes to stable.
@@ -0,0 +1,64 @@
1
+ package com.hotupdater
2
+
3
+ import android.app.Activity
4
+ import android.app.ActivityOptions
5
+ import android.content.Intent
6
+ import android.os.Bundle
7
+ import android.os.Handler
8
+ import android.os.Looper
9
+ import android.os.Process
10
+ import android.util.Log
11
+
12
+ class HotUpdaterRestartActivity : Activity() {
13
+ override fun onCreate(savedInstanceState: Bundle?) {
14
+ super.onCreate(savedInstanceState)
15
+
16
+ val targetPid = intent.getIntExtra(EXTRA_TARGET_PID, -1)
17
+ val packageName = intent.getStringExtra(EXTRA_PACKAGE_NAME) ?: this.packageName
18
+ val launchIntent = getRestartIntent(packageName)
19
+
20
+ if (launchIntent == null) {
21
+ Log.e(TAG, "Cannot relaunch app: launch intent not found for $packageName")
22
+ finishWithoutAnimation()
23
+ killCurrentProcess()
24
+ return
25
+ }
26
+
27
+ if (targetPid > 0) {
28
+ Process.killProcess(targetPid)
29
+ }
30
+
31
+ val options = ActivityOptions.makeCustomAnimation(this, 0, 0)
32
+ startActivity(launchIntent, options.toBundle())
33
+ finishWithoutAnimation()
34
+
35
+ // Keep the trampoline alive just long enough to let Android settle the relaunch,
36
+ // then tear down the helper process as well.
37
+ Handler(Looper.getMainLooper()).postDelayed({ killCurrentProcess() }, PROCESS_KILL_DELAY_MS)
38
+ }
39
+
40
+ private fun finishWithoutAnimation() {
41
+ finish()
42
+ }
43
+
44
+ private fun getRestartIntent(packageName: String): Intent? {
45
+ val launchIntent = packageManager.getLaunchIntentForPackage(packageName) ?: return null
46
+ val component = launchIntent.component ?: return null
47
+
48
+ return Intent.makeRestartActivityTask(component).apply {
49
+ `package` = packageName
50
+ addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION)
51
+ }
52
+ }
53
+
54
+ private fun killCurrentProcess() {
55
+ Process.killProcess(Process.myPid())
56
+ }
57
+
58
+ companion object {
59
+ private const val TAG = "HotUpdaterRestart"
60
+ private const val PROCESS_KILL_DELAY_MS = 100L
61
+ const val EXTRA_PACKAGE_NAME = "hot_updater.package_name"
62
+ const val EXTRA_TARGET_PID = "hot_updater.target_pid"
63
+ }
64
+ }
@@ -49,6 +49,19 @@ class HotUpdaterModule internal constructor(
49
49
  }
50
50
  }
51
51
 
52
+ override fun reloadProcess(promise: Promise) {
53
+ moduleScope.launch {
54
+ try {
55
+ val impl = getInstance()
56
+ impl.reloadProcess(mReactApplicationContext)
57
+ promise.resolve(null)
58
+ } catch (e: Exception) {
59
+ Log.d("HotUpdater", "Failed to restart process", e)
60
+ promise.reject("reloadProcess", e)
61
+ }
62
+ }
63
+ }
64
+
52
65
  override fun updateBundle(
53
66
  params: ReadableMap,
54
67
  promise: Promise,
@@ -52,6 +52,20 @@ class HotUpdaterModule internal constructor(
52
52
  }
53
53
  }
54
54
 
55
+ @ReactMethod
56
+ override fun reloadProcess(promise: Promise) {
57
+ moduleScope.launch {
58
+ try {
59
+ val impl = getInstance()
60
+ impl.reloadProcess(mReactApplicationContext)
61
+ promise.resolve(null)
62
+ } catch (e: Exception) {
63
+ Log.d("HotUpdater", "Failed to restart process", e)
64
+ promise.reject("reloadProcess", e)
65
+ }
66
+ }
67
+ }
68
+
55
69
  @ReactMethod
56
70
  override fun updateBundle(
57
71
  params: ReadableMap,
@@ -15,6 +15,8 @@ abstract class HotUpdaterSpec internal constructor(
15
15
 
16
16
  abstract fun reload(promise: Promise)
17
17
 
18
+ abstract fun reloadProcess(promise: Promise)
19
+
18
20
  abstract fun notifyAppReady(params: ReadableMap): String
19
21
 
20
22
  abstract fun getCrashHistory(): String
@@ -273,6 +273,11 @@ RCT_EXPORT_MODULE();
273
273
  });
274
274
  }
275
275
 
276
+ - (void)reloadProcess:(RCTPromiseResolveBlock)resolve
277
+ reject:(RCTPromiseRejectBlock)reject {
278
+ [self reload:resolve reject:reject];
279
+ }
280
+
276
281
  - (void)updateBundle:(JS::NativeHotUpdater::UpdateBundleParams &)params
277
282
  resolve:(RCTPromiseResolveBlock)resolve
278
283
  reject:(RCTPromiseRejectBlock)reject {
@@ -373,6 +378,11 @@ RCT_EXPORT_METHOD(reload:(RCTPromiseResolveBlock)resolve
373
378
  });
374
379
  }
375
380
 
381
+ RCT_EXPORT_METHOD(reloadProcess:(RCTPromiseResolveBlock)resolve
382
+ reject:(RCTPromiseRejectBlock)reject) {
383
+ [self reload:resolve reject:reject];
384
+ }
385
+
376
386
  RCT_EXPORT_METHOD(updateBundle:(NSDictionary *)params
377
387
  resolve:(RCTPromiseResolveBlock)resolve
378
388
  reject:(RCTPromiseRejectBlock)reject) {
@@ -128,6 +128,17 @@ function createHotUpdaterClient() {
128
128
  * Reloads the app.
129
129
  */
130
130
  reload: _native.reload,
131
+ /**
132
+ * Configures how `HotUpdater.reload()` behaves.
133
+ *
134
+ * This can be called unconditionally on both platforms.
135
+ * The default is `processRestart`.
136
+ *
137
+ * - `reload`: built-in React Native reload on both platforms
138
+ * - `processRestart`: Android process restart, iOS behaves like normal reload
139
+ * - `custom`: run a custom JS handler on both platforms
140
+ */
141
+ setReloadBehavior: _native.setReloadBehavior,
131
142
  /**
132
143
  * Returns whether an update has finished downloading in this app session.
133
144
  *
@@ -1 +1 @@
1
- {"version":3,"names":["_checkForUpdate","require","_DefaultResolver","_native","_store","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_wrap","_types","registerGlobalGetBaseURL","fn","getBaseURL","globalThis","HotUpdaterGetBaseURL","global","createHotUpdaterClient","globalConfig","resolver","ensureGlobalResolver","methodName","Error","wrap","options","normalizedOptions","baseURL","rest","createDefaultResolver","requestHeaders","requestTimeout","reload","isUpdateDownloaded","hotUpdaterStore","getSnapshot","getAppVersion","getBundleId","getMinBundleId","getChannel","getDefaultChannel","isChannelSwitched","addListener","checkForUpdate","config","mergedConfig","updateBundle","params","resetChannel","ok","setState","progress","getFingerprintHash","getCrashHistory","clearCrashHistory","HotUpdater"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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AAMC,sBAAe,CAACC,WAAW,CAAC,CAAC,CAACF,kBAAkB;IAE1E;AACJ;AACA;IACIG,aAAa,EAAbA,qBAAa;IAEb;AACJ;AACA;IACIC,WAAW,EAAXA,mBAAW;IAEX;AACJ;AACA;IACIC,cAAc,EAAdA,sBAAc;IAEd;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,UAAU,EAAVA,kBAAU;IAEV;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,iBAAiB,EAAjBA,yBAAiB;IAEjB;AACJ;AACA;AACA;AACA;IACIC,iBAAiB,EAAjBA,yBAAiB;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,WAAW,EAAXA,mBAAW;IAEX;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,cAAc,EAAGC,MAA6B,IAAK;MACjD,MAAMxB,QAAQ,GAAGC,oBAAoB,CAAC,gBAAgB,CAAC;MAEvD,MAAMwB,YAA2C,GAAG;QAClD,GAAGD,MAAM;QACTxB,QAAQ;QACRU,cAAc,EAAE;UACd,GAAGX,YAAY,CAACW,cAAc;UAC9B,GAAGc,MAAM,CAACd;QACZ,CAAC;QACDC,cAAc,EAAEa,MAAM,CAACb,cAAc,IAAIZ,YAAY,CAACY;MACxD,CAAC;MAED,OAAO,IAAAY,8BAAc,EAACE,YAAY,CAAC;IACrC,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,YAAY,EAAGC,MAAoB,IAAK;MACtC1B,oBAAoB,CAAC,cAAc,CAAC;MACpC,OAAO,IAAAyB,oBAAY,EAACC,MAAM,CAAC;IAC7B,CAAC;IAED;AACJ;AACA;AACA;AACA;IACIC,YAAY,EAAE,MAAAA,CAAA,KAAY;MACxB,MAAMC,EAAE,GAAG,MAAM,IAAAD,oBAAY,EAAC,CAAC;MAC/B,IAAIC,EAAE,EAAE;QACNf,sBAAe,CAACgB,QAAQ,CAAC;UACvBjB,kBAAkB,EAAE,KAAK;UACzBkB,QAAQ,EAAE;QACZ,CAAC,CAAC;MACJ;MACA,OAAOF,EAAE;IACX,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIG,kBAAkB,EAAlBA,0BAAkB;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,eAAe,EAAfA,uBAAe;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,iBAAiB,EAAjBA;EACF,CAAC;AACH;AAEO,MAAMC,UAAU,GAAAjD,OAAA,CAAAiD,UAAA,GAAGrC,sBAAsB,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_checkForUpdate","require","_DefaultResolver","_native","_store","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_wrap","_types","registerGlobalGetBaseURL","fn","getBaseURL","globalThis","HotUpdaterGetBaseURL","global","createHotUpdaterClient","globalConfig","resolver","ensureGlobalResolver","methodName","Error","wrap","options","normalizedOptions","baseURL","rest","createDefaultResolver","requestHeaders","requestTimeout","reload","setReloadBehavior","isUpdateDownloaded","hotUpdaterStore","getSnapshot","getAppVersion","getBundleId","getMinBundleId","getChannel","getDefaultChannel","isChannelSwitched","addListener","checkForUpdate","config","mergedConfig","updateBundle","params","resetChannel","ok","setState","progress","getFingerprintHash","getCrashHistory","clearCrashHistory","HotUpdater"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,kBAAkB,EAAEA,CAAA,KAAMC,sBAAe,CAACC,WAAW,CAAC,CAAC,CAACF,kBAAkB;IAE1E;AACJ;AACA;IACIG,aAAa,EAAbA,qBAAa;IAEb;AACJ;AACA;IACIC,WAAW,EAAXA,mBAAW;IAEX;AACJ;AACA;IACIC,cAAc,EAAdA,sBAAc;IAEd;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,UAAU,EAAVA,kBAAU;IAEV;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,iBAAiB,EAAjBA,yBAAiB;IAEjB;AACJ;AACA;AACA;AACA;IACIC,iBAAiB,EAAjBA,yBAAiB;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,WAAW,EAAXA,mBAAW;IAEX;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,cAAc,EAAGC,MAA6B,IAAK;MACjD,MAAMzB,QAAQ,GAAGC,oBAAoB,CAAC,gBAAgB,CAAC;MAEvD,MAAMyB,YAA2C,GAAG;QAClD,GAAGD,MAAM;QACTzB,QAAQ;QACRU,cAAc,EAAE;UACd,GAAGX,YAAY,CAACW,cAAc;UAC9B,GAAGe,MAAM,CAACf;QACZ,CAAC;QACDC,cAAc,EAAEc,MAAM,CAACd,cAAc,IAAIZ,YAAY,CAACY;MACxD,CAAC;MAED,OAAO,IAAAa,8BAAc,EAACE,YAAY,CAAC;IACrC,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,YAAY,EAAGC,MAAoB,IAAK;MACtC3B,oBAAoB,CAAC,cAAc,CAAC;MACpC,OAAO,IAAA0B,oBAAY,EAACC,MAAM,CAAC;IAC7B,CAAC;IAED;AACJ;AACA;AACA;AACA;IACIC,YAAY,EAAE,MAAAA,CAAA,KAAY;MACxB,MAAMC,EAAE,GAAG,MAAM,IAAAD,oBAAY,EAAC,CAAC;MAC/B,IAAIC,EAAE,EAAE;QACNf,sBAAe,CAACgB,QAAQ,CAAC;UACvBjB,kBAAkB,EAAE,KAAK;UACzBkB,QAAQ,EAAE;QACZ,CAAC,CAAC;MACJ;MACA,OAAOF,EAAE;IACX,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIG,kBAAkB,EAAlBA,0BAAkB;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,eAAe,EAAfA,uBAAe;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,iBAAiB,EAAjBA;EACF,CAAC;AACH;AAEO,MAAMC,UAAU,GAAAlD,OAAA,CAAAkD,UAAA,GAAGtC,sBAAsB,CAAC,CAAC","ignoreList":[]}
@@ -18,12 +18,36 @@ Object.defineProperty(exports, "isHotUpdaterError", {
18
18
  }
19
19
  });
20
20
  exports.resetChannel = exports.reload = exports.notifyAppReady = void 0;
21
+ exports.setReloadBehavior = setReloadBehavior;
21
22
  exports.updateBundle = updateBundle;
22
23
  var _reactNative = require("react-native");
23
24
  var _error = require("./error.js");
24
25
  var _NativeHotUpdater = _interopRequireDefault(require("./specs/NativeHotUpdater.js"));
25
26
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
26
27
  const NIL_UUID = "00000000-0000-0000-0000-000000000000";
28
+
29
+ /**
30
+ * Built-in reload behaviors used by `HotUpdater.reload()`.
31
+ *
32
+ * - `reload`: In-process React Native reload.
33
+ * - `processRestart`: Android-only cold restart. On iOS the same call behaves like `reload`.
34
+ */
35
+
36
+ /**
37
+ * Custom reload hook used when `setReloadBehavior("custom", handler)` is configured.
38
+ *
39
+ * This is useful for brownfield apps that need to delegate reload behavior to
40
+ * a host-native container instead of using HotUpdater's built-in reload flow.
41
+ */
42
+
43
+ /**
44
+ * Full reload policy accepted by `setReloadBehavior()`.
45
+ *
46
+ * - `reload`: Built-in React reload on both platforms
47
+ * - `processRestart`: Android process restart, iOS behaves like `reload`
48
+ * - `custom`: Run a user-provided JS handler on both platforms
49
+ */
50
+
27
51
  const HotUpdaterConstants = exports.HotUpdaterConstants = {
28
52
  HOT_UPDATER_BUNDLE_ID: __HOT_UPDATER_BUNDLE_ID || NIL_UUID
29
53
  };
@@ -69,6 +93,12 @@ class HotUpdaterSessionState {
69
93
  }
70
94
  }
71
95
  const sessionState = new HotUpdaterSessionState();
96
+ let reloadBehavior = "processRestart";
97
+ let customReloadHandler = null;
98
+ const getReloadProcess = () => {
99
+ const nativeModule = _NativeHotUpdater.default;
100
+ return typeof nativeModule.reloadProcess === "function" ? nativeModule.reloadProcess.bind(nativeModule) : null;
101
+ };
72
102
  const eventEmitter = new _reactNative.NativeEventEmitter(_NativeHotUpdater.default);
73
103
  const addListener = (eventName, listener) => {
74
104
  const subscription = eventEmitter.addListener(eventName, listener);
@@ -137,20 +167,75 @@ const getAppVersion = () => {
137
167
  };
138
168
 
139
169
  /**
140
- * Reloads the app.
170
+ * Reloads the app using the currently configured reload behavior.
171
+ *
172
+ * Default behavior is `processRestart`.
173
+ * On iOS, `processRestart` behaves like the normal React reload path.
174
+ *
175
+ * When `setReloadBehavior("processRestart")` is used:
176
+ * - Android performs a cold process restart
177
+ * - iOS keeps the same behavior as the normal React reload path
178
+ * - older Android native binaries fall back to `reload()` if `reloadProcess()` is unavailable
179
+ *
180
+ * When `setReloadBehavior("custom", handler)` is used:
181
+ * - both Android and iOS execute the provided handler
141
182
  */
142
183
  exports.getAppVersion = getAppVersion;
143
184
  const reload = async () => {
185
+ if (reloadBehavior === "custom") {
186
+ if (!customReloadHandler) {
187
+ throw new Error("[HotUpdater] setReloadBehavior('custom') requires a reload handler.");
188
+ }
189
+ await customReloadHandler();
190
+ return;
191
+ }
192
+ if (_reactNative.Platform.OS === "android" && reloadBehavior === "processRestart") {
193
+ const reloadProcess = getReloadProcess();
194
+ if (reloadProcess) {
195
+ await reloadProcess();
196
+ return;
197
+ }
198
+ }
144
199
  await _NativeHotUpdater.default.reload();
145
200
  };
146
201
 
202
+ /**
203
+ * Configures how `HotUpdater.reload()` should behave.
204
+ *
205
+ * This API is available on both Android and iOS so app code can stay symmetric.
206
+ * By default, HotUpdater uses `processRestart`.
207
+ *
208
+ * Supported behaviors:
209
+ * - `reload`: Uses React Native's normal in-process reload flow
210
+ * - `processRestart`: Uses Android process restart when available; iOS keeps the same behavior as `reload`
211
+ * - `custom`: Executes a JS callback on both platforms
212
+ *
213
+ * `custom` is intended for brownfield apps that need host-native coordination.
214
+ */
215
+ exports.reload = reload;
216
+ function setReloadBehavior(...args) {
217
+ const [behavior, handler] = args;
218
+ if (behavior === "custom") {
219
+ if (typeof handler !== "function") {
220
+ throw new Error("[HotUpdater] setReloadBehavior('custom') requires a reload handler.");
221
+ }
222
+ reloadBehavior = behavior;
223
+ customReloadHandler = handler;
224
+ return;
225
+ }
226
+ if (handler) {
227
+ throw new Error(`[HotUpdater] setReloadBehavior('${behavior}') does not accept a custom reload handler.`);
228
+ }
229
+ reloadBehavior = behavior;
230
+ customReloadHandler = null;
231
+ }
232
+
147
233
  /**
148
234
  * Fetches the minimum bundle id, which represents the initial bundle of the app
149
235
  * since it is created at build time.
150
236
  *
151
237
  * @returns {string} Resolves with the minimum bundle id or null if not available.
152
238
  */
153
- exports.reload = reload;
154
239
  const getMinBundleId = () => {
155
240
  const constants = _NativeHotUpdater.default.getConstants();
156
241
  return constants.MIN_BUNDLE_ID;
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_error","_NativeHotUpdater","_interopRequireDefault","e","__esModule","default","NIL_UUID","HotUpdaterConstants","exports","HOT_UPDATER_BUNDLE_ID","__HOT_UPDATER_BUNDLE_ID","HotUpdaterSessionState","inflightUpdates","Map","lastInstalledBundleId","constructor","constants","HotUpdaterNative","getConstants","defaultChannel","DEFAULT_CHANNEL","CHANNEL","currentChannel","getChannel","getDefaultChannel","isChannelSwitched","hasInstalledBundle","bundleId","getInflightUpdate","get","trackInflightUpdate","promise","set","clearInflightUpdate","delete","markBundleInstalled","channel","resetChannelState","clear","sessionState","eventEmitter","NativeEventEmitter","addListener","eventName","listener","subscription","remove","updateBundle","paramsOrBundleId","fileUrl","updateBundleId","status","shouldSkipCurrentBundleIdCheck","localeCompare","getBundleId","Error","existing","targetFileUrl","targetFileHash","undefined","fileHash","targetChannel","ok","getAppVersion","APP_VERSION","reload","getMinBundleId","MIN_BUNDLE_ID","getFingerprintHash","FINGERPRINT_HASH","notifyAppReady","result","JSON","parse","getCrashHistory","clearCrashHistory","getBaseURL","resetChannel"],"sourceRoot":"../../src","sources":["native.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_error","_NativeHotUpdater","_interopRequireDefault","e","__esModule","default","NIL_UUID","HotUpdaterConstants","exports","HOT_UPDATER_BUNDLE_ID","__HOT_UPDATER_BUNDLE_ID","HotUpdaterSessionState","inflightUpdates","Map","lastInstalledBundleId","constructor","constants","HotUpdaterNative","getConstants","defaultChannel","DEFAULT_CHANNEL","CHANNEL","currentChannel","getChannel","getDefaultChannel","isChannelSwitched","hasInstalledBundle","bundleId","getInflightUpdate","get","trackInflightUpdate","promise","set","clearInflightUpdate","delete","markBundleInstalled","channel","resetChannelState","clear","sessionState","reloadBehavior","customReloadHandler","getReloadProcess","nativeModule","reloadProcess","bind","eventEmitter","NativeEventEmitter","addListener","eventName","listener","subscription","remove","updateBundle","paramsOrBundleId","fileUrl","updateBundleId","status","shouldSkipCurrentBundleIdCheck","localeCompare","getBundleId","Error","existing","targetFileUrl","targetFileHash","undefined","fileHash","targetChannel","ok","getAppVersion","APP_VERSION","reload","Platform","OS","setReloadBehavior","args","behavior","handler","getMinBundleId","MIN_BUNDLE_ID","getFingerprintHash","FINGERPRINT_HASH","notifyAppReady","result","JSON","parse","getCrashHistory","clearCrashHistory","getBaseURL","resetChannel"],"sourceRoot":"../../src","sources":["native.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_default","exports","default","TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../../src","sources":["specs/NativeHotUpdater.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAkHpCC,gCAAmB,CAACC,YAAY,CAAO,YAAY,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","_default","exports","default","TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../../src","sources":["specs/NativeHotUpdater.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAwHpCC,gCAAmB,CAACC,YAAY,CAAO,YAAY,CAAC","ignoreList":[]}
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { checkForUpdate } from "./checkForUpdate.js";
4
4
  import { createDefaultResolver } from "./DefaultResolver.js";
5
- import { addListener, clearCrashHistory, getAppVersion, getBaseURL, getBundleId, getChannel, getCrashHistory, getDefaultChannel, getFingerprintHash, getMinBundleId, isChannelSwitched, reload, resetChannel, updateBundle } from "./native.js";
5
+ import { addListener, clearCrashHistory, getAppVersion, getBaseURL, getBundleId, getChannel, getCrashHistory, getDefaultChannel, getFingerprintHash, getMinBundleId, isChannelSwitched, reload, resetChannel, setReloadBehavior, updateBundle } from "./native.js";
6
6
  import { hotUpdaterStore } from "./store.js";
7
7
  import { wrap } from "./wrap.js";
8
8
  export * from "./store.js";
@@ -97,6 +97,17 @@ function createHotUpdaterClient() {
97
97
  * Reloads the app.
98
98
  */
99
99
  reload,
100
+ /**
101
+ * Configures how `HotUpdater.reload()` behaves.
102
+ *
103
+ * This can be called unconditionally on both platforms.
104
+ * The default is `processRestart`.
105
+ *
106
+ * - `reload`: built-in React Native reload on both platforms
107
+ * - `processRestart`: Android process restart, iOS behaves like normal reload
108
+ * - `custom`: run a custom JS handler on both platforms
109
+ */
110
+ setReloadBehavior,
100
111
  /**
101
112
  * Returns whether an update has finished downloading in this app session.
102
113
  *
@@ -1 +1 @@
1
- {"version":3,"names":["checkForUpdate","createDefaultResolver","addListener","clearCrashHistory","getAppVersion","getBaseURL","getBundleId","getChannel","getCrashHistory","getDefaultChannel","getFingerprintHash","getMinBundleId","isChannelSwitched","reload","resetChannel","updateBundle","hotUpdaterStore","wrap","extractSignatureFailure","isSignatureVerificationError","registerGlobalGetBaseURL","fn","globalThis","HotUpdaterGetBaseURL","global","createHotUpdaterClient","globalConfig","resolver","ensureGlobalResolver","methodName","Error","options","normalizedOptions","baseURL","rest","requestHeaders","requestTimeout","isUpdateDownloaded","getSnapshot","config","mergedConfig","params","ok","setState","progress","HotUpdater"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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IACIJ,UAAU;IAEV;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIE,iBAAiB;IAEjB;AACJ;AACA;AACA;AACA;IACIG,iBAAiB;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIV,WAAW;IAEX;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIF,cAAc,EAAGuC,MAA6B,IAAK;MACjD,MAAMZ,QAAQ,GAAGC,oBAAoB,CAAC,gBAAgB,CAAC;MAEvD,MAAMY,YAA2C,GAAG;QAClD,GAAGD,MAAM;QACTZ,QAAQ;QACRQ,cAAc,EAAE;UACd,GAAGT,YAAY,CAACS,cAAc;UAC9B,GAAGI,MAAM,CAACJ;QACZ,CAAC;QACDC,cAAc,EAAEG,MAAM,CAACH,cAAc,IAAIV,YAAY,CAACU;MACxD,CAAC;MAED,OAAOpC,cAAc,CAACwC,YAAY,CAAC;IACrC,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIzB,YAAY,EAAG0B,MAAoB,IAAK;MACtCb,oBAAoB,CAAC,cAAc,CAAC;MACpC,OAAOb,YAAY,CAAC0B,MAAM,CAAC;IAC7B,CAAC;IAED;AACJ;AACA;AACA;AACA;IACI3B,YAAY,EAAE,MAAAA,CAAA,KAAY;MACxB,MAAM4B,EAAE,GAAG,MAAM5B,YAAY,CAAC,CAAC;MAC/B,IAAI4B,EAAE,EAAE;QACN1B,eAAe,CAAC2B,QAAQ,CAAC;UACvBN,kBAAkB,EAAE,KAAK;UACzBO,QAAQ,EAAE;QACZ,CAAC,CAAC;MACJ;MACA,OAAOF,EAAE;IACX,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIhC,kBAAkB;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIF,eAAe;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIL;EACF,CAAC;AACH;AAEA,OAAO,MAAM0C,UAAU,GAAGpB,sBAAsB,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["checkForUpdate","createDefaultResolver","addListener","clearCrashHistory","getAppVersion","getBaseURL","getBundleId","getChannel","getCrashHistory","getDefaultChannel","getFingerprintHash","getMinBundleId","isChannelSwitched","reload","resetChannel","setReloadBehavior","updateBundle","hotUpdaterStore","wrap","extractSignatureFailure","isSignatureVerificationError","registerGlobalGetBaseURL","fn","globalThis","HotUpdaterGetBaseURL","global","createHotUpdaterClient","globalConfig","resolver","ensureGlobalResolver","methodName","Error","options","normalizedOptions","baseURL","rest","requestHeaders","requestTimeout","isUpdateDownloaded","getSnapshot","config","mergedConfig","params","ok","setState","progress","HotUpdater"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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A;IACIK,cAAc;IAEd;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIJ,UAAU;IAEV;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIE,iBAAiB;IAEjB;AACJ;AACA;AACA;AACA;IACIG,iBAAiB;IAEjB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIV,WAAW;IAEX;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIF,cAAc,EAAGwC,MAA6B,IAAK;MACjD,MAAMZ,QAAQ,GAAGC,oBAAoB,CAAC,gBAAgB,CAAC;MAEvD,MAAMY,YAA2C,GAAG;QAClD,GAAGD,MAAM;QACTZ,QAAQ;QACRQ,cAAc,EAAE;UACd,GAAGT,YAAY,CAACS,cAAc;UAC9B,GAAGI,MAAM,CAACJ;QACZ,CAAC;QACDC,cAAc,EAAEG,MAAM,CAACH,cAAc,IAAIV,YAAY,CAACU;MACxD,CAAC;MAED,OAAOrC,cAAc,CAACyC,YAAY,CAAC;IACrC,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIzB,YAAY,EAAG0B,MAAoB,IAAK;MACtCb,oBAAoB,CAAC,cAAc,CAAC;MACpC,OAAOb,YAAY,CAAC0B,MAAM,CAAC;IAC7B,CAAC;IAED;AACJ;AACA;AACA;AACA;IACI5B,YAAY,EAAE,MAAAA,CAAA,KAAY;MACxB,MAAM6B,EAAE,GAAG,MAAM7B,YAAY,CAAC,CAAC;MAC/B,IAAI6B,EAAE,EAAE;QACN1B,eAAe,CAAC2B,QAAQ,CAAC;UACvBN,kBAAkB,EAAE,KAAK;UACzBO,QAAQ,EAAE;QACZ,CAAC,CAAC;MACJ;MACA,OAAOF,EAAE;IACX,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIjC,kBAAkB;IAElB;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIF,eAAe;IAEf;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIL;EACF,CAAC;AACH;AAEA,OAAO,MAAM2C,UAAU,GAAGpB,sBAAsB,CAAC,CAAC","ignoreList":[]}
@@ -1,10 +1,33 @@
1
1
  "use strict";
2
2
 
3
- import { NativeEventEmitter } from "react-native";
3
+ import { NativeEventEmitter, Platform } from "react-native";
4
4
  import { HotUpdaterErrorCode, isHotUpdaterError } from "./error.js";
5
5
  import HotUpdaterNative from "./specs/NativeHotUpdater.js";
6
6
  export { HotUpdaterErrorCode, isHotUpdaterError };
7
7
  const NIL_UUID = "00000000-0000-0000-0000-000000000000";
8
+
9
+ /**
10
+ * Built-in reload behaviors used by `HotUpdater.reload()`.
11
+ *
12
+ * - `reload`: In-process React Native reload.
13
+ * - `processRestart`: Android-only cold restart. On iOS the same call behaves like `reload`.
14
+ */
15
+
16
+ /**
17
+ * Custom reload hook used when `setReloadBehavior("custom", handler)` is configured.
18
+ *
19
+ * This is useful for brownfield apps that need to delegate reload behavior to
20
+ * a host-native container instead of using HotUpdater's built-in reload flow.
21
+ */
22
+
23
+ /**
24
+ * Full reload policy accepted by `setReloadBehavior()`.
25
+ *
26
+ * - `reload`: Built-in React reload on both platforms
27
+ * - `processRestart`: Android process restart, iOS behaves like `reload`
28
+ * - `custom`: Run a user-provided JS handler on both platforms
29
+ */
30
+
8
31
  export const HotUpdaterConstants = {
9
32
  HOT_UPDATER_BUNDLE_ID: __HOT_UPDATER_BUNDLE_ID || NIL_UUID
10
33
  };
@@ -50,6 +73,12 @@ class HotUpdaterSessionState {
50
73
  }
51
74
  }
52
75
  const sessionState = new HotUpdaterSessionState();
76
+ let reloadBehavior = "processRestart";
77
+ let customReloadHandler = null;
78
+ const getReloadProcess = () => {
79
+ const nativeModule = HotUpdaterNative;
80
+ return typeof nativeModule.reloadProcess === "function" ? nativeModule.reloadProcess.bind(nativeModule) : null;
81
+ };
53
82
  const eventEmitter = new NativeEventEmitter(HotUpdaterNative);
54
83
  export const addListener = (eventName, listener) => {
55
84
  const subscription = eventEmitter.addListener(eventName, listener);
@@ -118,12 +147,67 @@ export const getAppVersion = () => {
118
147
  };
119
148
 
120
149
  /**
121
- * Reloads the app.
150
+ * Reloads the app using the currently configured reload behavior.
151
+ *
152
+ * Default behavior is `processRestart`.
153
+ * On iOS, `processRestart` behaves like the normal React reload path.
154
+ *
155
+ * When `setReloadBehavior("processRestart")` is used:
156
+ * - Android performs a cold process restart
157
+ * - iOS keeps the same behavior as the normal React reload path
158
+ * - older Android native binaries fall back to `reload()` if `reloadProcess()` is unavailable
159
+ *
160
+ * When `setReloadBehavior("custom", handler)` is used:
161
+ * - both Android and iOS execute the provided handler
122
162
  */
123
163
  export const reload = async () => {
164
+ if (reloadBehavior === "custom") {
165
+ if (!customReloadHandler) {
166
+ throw new Error("[HotUpdater] setReloadBehavior('custom') requires a reload handler.");
167
+ }
168
+ await customReloadHandler();
169
+ return;
170
+ }
171
+ if (Platform.OS === "android" && reloadBehavior === "processRestart") {
172
+ const reloadProcess = getReloadProcess();
173
+ if (reloadProcess) {
174
+ await reloadProcess();
175
+ return;
176
+ }
177
+ }
124
178
  await HotUpdaterNative.reload();
125
179
  };
126
180
 
181
+ /**
182
+ * Configures how `HotUpdater.reload()` should behave.
183
+ *
184
+ * This API is available on both Android and iOS so app code can stay symmetric.
185
+ * By default, HotUpdater uses `processRestart`.
186
+ *
187
+ * Supported behaviors:
188
+ * - `reload`: Uses React Native's normal in-process reload flow
189
+ * - `processRestart`: Uses Android process restart when available; iOS keeps the same behavior as `reload`
190
+ * - `custom`: Executes a JS callback on both platforms
191
+ *
192
+ * `custom` is intended for brownfield apps that need host-native coordination.
193
+ */
194
+ export function setReloadBehavior(...args) {
195
+ const [behavior, handler] = args;
196
+ if (behavior === "custom") {
197
+ if (typeof handler !== "function") {
198
+ throw new Error("[HotUpdater] setReloadBehavior('custom') requires a reload handler.");
199
+ }
200
+ reloadBehavior = behavior;
201
+ customReloadHandler = handler;
202
+ return;
203
+ }
204
+ if (handler) {
205
+ throw new Error(`[HotUpdater] setReloadBehavior('${behavior}') does not accept a custom reload handler.`);
206
+ }
207
+ reloadBehavior = behavior;
208
+ customReloadHandler = null;
209
+ }
210
+
127
211
  /**
128
212
  * Fetches the minimum bundle id, which represents the initial bundle of the app
129
213
  * since it is created at build time.
@@ -1 +1 @@
1
- {"version":3,"names":["NativeEventEmitter","HotUpdaterErrorCode","isHotUpdaterError","HotUpdaterNative","NIL_UUID","HotUpdaterConstants","HOT_UPDATER_BUNDLE_ID","__HOT_UPDATER_BUNDLE_ID","HotUpdaterSessionState","inflightUpdates","Map","lastInstalledBundleId","constructor","constants","getConstants","defaultChannel","DEFAULT_CHANNEL","CHANNEL","currentChannel","getChannel","getDefaultChannel","isChannelSwitched","hasInstalledBundle","bundleId","getInflightUpdate","get","trackInflightUpdate","promise","set","clearInflightUpdate","delete","markBundleInstalled","channel","resetChannelState","clear","sessionState","eventEmitter","addListener","eventName","listener","subscription","remove","updateBundle","paramsOrBundleId","fileUrl","updateBundleId","status","shouldSkipCurrentBundleIdCheck","localeCompare","getBundleId","Error","existing","targetFileUrl","targetFileHash","undefined","fileHash","targetChannel","ok","getAppVersion","APP_VERSION","reload","getMinBundleId","MIN_BUNDLE_ID","getFingerprintHash","FINGERPRINT_HASH","notifyAppReady","result","JSON","parse","getCrashHistory","clearCrashHistory","getBaseURL","resetChannel"],"sourceRoot":"../../src","sources":["native.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["NativeEventEmitter","Platform","HotUpdaterErrorCode","isHotUpdaterError","HotUpdaterNative","NIL_UUID","HotUpdaterConstants","HOT_UPDATER_BUNDLE_ID","__HOT_UPDATER_BUNDLE_ID","HotUpdaterSessionState","inflightUpdates","Map","lastInstalledBundleId","constructor","constants","getConstants","defaultChannel","DEFAULT_CHANNEL","CHANNEL","currentChannel","getChannel","getDefaultChannel","isChannelSwitched","hasInstalledBundle","bundleId","getInflightUpdate","get","trackInflightUpdate","promise","set","clearInflightUpdate","delete","markBundleInstalled","channel","resetChannelState","clear","sessionState","reloadBehavior","customReloadHandler","getReloadProcess","nativeModule","reloadProcess","bind","eventEmitter","addListener","eventName","listener","subscription","remove","updateBundle","paramsOrBundleId","fileUrl","updateBundleId","status","shouldSkipCurrentBundleIdCheck","localeCompare","getBundleId","Error","existing","targetFileUrl","targetFileHash","undefined","fileHash","targetChannel","ok","getAppVersion","APP_VERSION","reload","OS","setReloadBehavior","args","behavior","handler","getMinBundleId","MIN_BUNDLE_ID","getFingerprintHash","FINGERPRINT_HASH","notifyAppReady","result","JSON","parse","getCrashHistory","clearCrashHistory","getBaseURL","resetChannel"],"sourceRoot":"../../src","sources":["native.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../../src","sources":["specs/NativeHotUpdater.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;AAkHlD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,YAAY,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../../src","sources":["specs/NativeHotUpdater.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;AAwHlD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,YAAY,CAAC","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  import { type CheckForUpdateOptions } from "./checkForUpdate";
2
- import { type UpdateParams } from "./native";
2
+ import { setReloadBehavior, type UpdateParams } from "./native";
3
3
  import { type HotUpdaterOptions } from "./wrap";
4
- export type { HotUpdaterEvent, NotifyAppReadyResult } from "./native";
4
+ export type { CustomReloadHandler, HotUpdaterEvent, NotifyAppReadyResult, ReloadBehavior, ReloadBehaviorSetting, } from "./native";
5
5
  export * from "./store";
6
6
  export { extractSignatureFailure, type HotUpdaterResolver, isSignatureVerificationError, type ResolverCheckUpdateParams, type ResolverNotifyAppReadyParams, type SignatureVerificationFailure, } from "./types";
7
7
  export type { HotUpdaterOptions, RunUpdateProcessResponse } from "./wrap";
@@ -35,6 +35,17 @@ export declare const HotUpdater: {
35
35
  * Reloads the app.
36
36
  */
37
37
  reload: () => Promise<void>;
38
+ /**
39
+ * Configures how `HotUpdater.reload()` behaves.
40
+ *
41
+ * This can be called unconditionally on both platforms.
42
+ * The default is `processRestart`.
43
+ *
44
+ * - `reload`: built-in React Native reload on both platforms
45
+ * - `processRestart`: Android process restart, iOS behaves like normal reload
46
+ * - `custom`: run a custom JS handler on both platforms
47
+ */
48
+ setReloadBehavior: typeof setReloadBehavior;
38
49
  /**
39
50
  * Returns whether an update has finished downloading in this app session.
40
51
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,qBAAqB,EAG3B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAcL,KAAK,YAAY,EAElB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,KAAK,iBAAiB,EAAkC,MAAM,QAAQ,CAAC;AAEhF,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACtE,cAAc,SAAS,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,4BAA4B,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,GAClC,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AA4W1E,eAAO,MAAM,UAAU;IA5SnB;;;;;;;;;;;;;;;;;;;;;;;OAuBG;oBACa,iBAAiB;IAuCjC;;OAEG;;IAGH;;;;;;;;;;;;;;;;OAgBG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;;;;;;;;;;;OAYG;;IAGH;;;;;;;;;;;OAWG;;IAGH;;;;OAIG;;IAGH;;;;;;;;;;;;;;;;OAgBG;;IAGH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;6BACsB,qBAAqB;IAgB9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;2BACoB,YAAY;IAKnC;;;;OAIG;;IAYH;;;;;;;;;;OAUG;;IAGH;;;;;;;;;;;OAWG;;IAGH;;;;;;;;;;;OAWG;;CAK2C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,qBAAqB,EAG3B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAcL,iBAAiB,EACjB,KAAK,YAAY,EAElB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,KAAK,iBAAiB,EAAkC,MAAM,QAAQ,CAAC;AAEhF,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAClB,cAAc,SAAS,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,4BAA4B,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,GAClC,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AAwX1E,eAAO,MAAM,UAAU;IAxTnB;;;;;;;;;;;;;;;;;;;;;;;OAuBG;oBACa,iBAAiB;IAuCjC;;OAEG;;IAGH;;;;;;;;;OASG;;IAGH;;;;;;;;;;;;;;;;OAgBG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;;;;;;;;;;;OAYG;;IAGH;;;;;;;;;;;OAWG;;IAGH;;;;OAIG;;IAGH;;;;;;;;;;;;;;;;OAgBG;;IAGH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;6BACsB,qBAAqB;IAgB9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;2BACoB,YAAY;IAKnC;;;;OAIG;;IAYH;;;;;;;;;;OAUG;;IAGH;;;;;;;;;;;OAWG;;IAGH;;;;;;;;;;;OAWG;;CAK2C,CAAC"}
@@ -2,6 +2,28 @@ import type { UpdateStatus } from "@hot-updater/core";
2
2
  import { HotUpdaterErrorCode, isHotUpdaterError } from "./error";
3
3
  import { type UpdateBundleParams } from "./specs/NativeHotUpdater";
4
4
  export { HotUpdaterErrorCode, isHotUpdaterError };
5
+ /**
6
+ * Built-in reload behaviors used by `HotUpdater.reload()`.
7
+ *
8
+ * - `reload`: In-process React Native reload.
9
+ * - `processRestart`: Android-only cold restart. On iOS the same call behaves like `reload`.
10
+ */
11
+ export type ReloadBehavior = "reload" | "processRestart";
12
+ /**
13
+ * Custom reload hook used when `setReloadBehavior("custom", handler)` is configured.
14
+ *
15
+ * This is useful for brownfield apps that need to delegate reload behavior to
16
+ * a host-native container instead of using HotUpdater's built-in reload flow.
17
+ */
18
+ export type CustomReloadHandler = () => void | Promise<void>;
19
+ /**
20
+ * Full reload policy accepted by `setReloadBehavior()`.
21
+ *
22
+ * - `reload`: Built-in React reload on both platforms
23
+ * - `processRestart`: Android process restart, iOS behaves like `reload`
24
+ * - `custom`: Run a user-provided JS handler on both platforms
25
+ */
26
+ export type ReloadBehaviorSetting = ReloadBehavior | "custom";
5
27
  export declare const HotUpdaterConstants: {
6
28
  HOT_UPDATER_BUNDLE_ID: string;
7
29
  };
@@ -32,9 +54,34 @@ export declare function updateBundle(bundleId: string, fileUrl: string | null):
32
54
  */
33
55
  export declare const getAppVersion: () => string | null;
34
56
  /**
35
- * Reloads the app.
57
+ * Reloads the app using the currently configured reload behavior.
58
+ *
59
+ * Default behavior is `processRestart`.
60
+ * On iOS, `processRestart` behaves like the normal React reload path.
61
+ *
62
+ * When `setReloadBehavior("processRestart")` is used:
63
+ * - Android performs a cold process restart
64
+ * - iOS keeps the same behavior as the normal React reload path
65
+ * - older Android native binaries fall back to `reload()` if `reloadProcess()` is unavailable
66
+ *
67
+ * When `setReloadBehavior("custom", handler)` is used:
68
+ * - both Android and iOS execute the provided handler
36
69
  */
37
70
  export declare const reload: () => Promise<void>;
71
+ /**
72
+ * Configures how `HotUpdater.reload()` should behave.
73
+ *
74
+ * This API is available on both Android and iOS so app code can stay symmetric.
75
+ * By default, HotUpdater uses `processRestart`.
76
+ *
77
+ * Supported behaviors:
78
+ * - `reload`: Uses React Native's normal in-process reload flow
79
+ * - `processRestart`: Uses Android process restart when available; iOS keeps the same behavior as `reload`
80
+ * - `custom`: Executes a JS callback on both platforms
81
+ *
82
+ * `custom` is intended for brownfield apps that need host-native coordination.
83
+ */
84
+ export declare function setReloadBehavior(...args: [behavior: ReloadBehavior] | [behavior: "custom", handler: CustomReloadHandler]): void;
38
85
  /**
39
86
  * Fetches the minimum bundle id, which represents the initial bundle of the app
40
87
  * since it is created at build time.
@@ -1 +1 @@
1
- {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../../src/native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACjE,OAAyB,EACvB,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;AAMlD,eAAO,MAAM,mBAAmB;;CAE/B,CAAC;AA0DF,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAIF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,MAAM,eAAe,EACzD,WAAW,CAAC,EACZ,UAAU,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,eAO9C,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,kBAAkB,GAAG;IAC9C,MAAM,EAAE,YAAY,CAAC;IACrB,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC1C,CAAC;AAEF;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC3E;;GAEG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAAG,IAAI,GACrB,OAAO,CAAC,OAAO,CAAC,CAAC;AAuEpB;;GAEG;AACH,eAAO,MAAM,aAAa,QAAO,MAAM,GAAG,IAGzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,MAAM,qBAElB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,QAAO,MAGjC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,QAAO,MAI9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,QAAO,MAE7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAO,MAEpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAO,OAEpC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,QAAO,MAAM,GAAG,IAG9C,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,cAAc,QAAO,oBAYjC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,QAAO,MAAM,EAWxC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,QAAO,OAEpC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,QAAO,MAAM,GAAG,IAMtC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,QAAa,OAAO,CAAC,OAAO,CAUpD,CAAC"}
1
+ {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../../src/native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACjE,OAAyB,EACvB,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;AAIlD;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,gBAAgB,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,cAAc,GAAG,QAAQ,CAAC;AAI9D,eAAO,MAAM,mBAAmB;;CAE/B,CAAC;AAsEF,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAIF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,MAAM,eAAe,EACzD,WAAW,CAAC,EACZ,UAAU,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,eAO9C,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,kBAAkB,GAAG;IAC9C,MAAM,EAAE,YAAY,CAAC;IACrB,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC1C,CAAC;AAEF;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC3E;;GAEG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAAG,IAAI,GACrB,OAAO,CAAC,OAAO,CAAC,CAAC;AAuEpB;;GAEG;AACH,eAAO,MAAM,aAAa,QAAO,MAAM,GAAG,IAGzC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,MAAM,qBAqBlB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,IAAI,EACH,CAAC,QAAQ,EAAE,cAAc,CAAC,GAC1B,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,CAAC,GACrD,IAAI,CAuBN;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,QAAO,MAGjC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,QAAO,MAI9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,QAAO,MAE7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAO,MAEpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAO,OAEpC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,QAAO,MAAM,GAAG,IAG9C,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,cAAc,QAAO,oBAYjC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,QAAO,MAAM,EAWxC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,QAAO,OAEpC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,QAAO,MAAM,GAAG,IAMtC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,QAAa,OAAO,CAAC,OAAO,CAUpD,CAAC"}
@@ -16,6 +16,12 @@ export interface UpdateBundleParams {
16
16
  }
17
17
  export interface Spec extends TurboModule {
18
18
  reload(): Promise<void>;
19
+ /**
20
+ * Android process restart path used by `setReloadBehavior("processRestart")`.
21
+ *
22
+ * iOS exposes the same method name for API parity, but it behaves the same as `reload()`.
23
+ */
24
+ reloadProcess(): Promise<void>;
19
25
  /**
20
26
  * Downloads and applies a bundle update.
21
27
  *
@@ -1 +1 @@
1
- {"version":3,"file":"NativeHotUpdater.d.ts","sourceRoot":"","sources":["../../../../src/specs/NativeHotUpdater.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;;;;;;OAQG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,IAAK,SAAQ,WAAW;IAEvC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3D;;;;;;;;;;OAUG;IACH,cAAc,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG;QAC5C,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;QAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IAEF;;;;;OAKG;IACH,eAAe,IAAI,MAAM,EAAE,CAAC;IAE5B;;;;;OAKG;IACH,iBAAiB,IAAI,OAAO,CAAC;IAE7B;;;;OAIG;IACH,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjC;;;;;;OAMG;IACH,UAAU,EAAE,MAAM,MAAM,CAAC;IAGzB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM;QAC3B,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;KACjC,CAAC;CACH;;AAED,wBAAoE"}
1
+ {"version":3,"file":"NativeHotUpdater.d.ts","sourceRoot":"","sources":["../../../../src/specs/NativeHotUpdater.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;;;;;;OAQG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,IAAK,SAAQ,WAAW;IAEvC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB;;;;OAIG;IACH,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3D;;;;;;;;;;OAUG;IACH,cAAc,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG;QAC5C,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;QAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IAEF;;;;;OAKG;IACH,eAAe,IAAI,MAAM,EAAE,CAAC;IAE5B;;;;;OAKG;IACH,iBAAiB,IAAI,OAAO,CAAC;IAE7B;;;;OAIG;IACH,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjC;;;;;;OAMG;IACH,UAAU,EAAE,MAAM,MAAM,CAAC;IAGzB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM;QAC3B,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;KACjC,CAAC;CACH;;AAED,wBAAoE"}
@@ -1,7 +1,7 @@
1
1
  import { type CheckForUpdateOptions } from "./checkForUpdate";
2
- import { type UpdateParams } from "./native";
2
+ import { setReloadBehavior, type UpdateParams } from "./native";
3
3
  import { type HotUpdaterOptions } from "./wrap";
4
- export type { HotUpdaterEvent, NotifyAppReadyResult } from "./native";
4
+ export type { CustomReloadHandler, HotUpdaterEvent, NotifyAppReadyResult, ReloadBehavior, ReloadBehaviorSetting, } from "./native";
5
5
  export * from "./store";
6
6
  export { extractSignatureFailure, type HotUpdaterResolver, isSignatureVerificationError, type ResolverCheckUpdateParams, type ResolverNotifyAppReadyParams, type SignatureVerificationFailure, } from "./types";
7
7
  export type { HotUpdaterOptions, RunUpdateProcessResponse } from "./wrap";
@@ -35,6 +35,17 @@ export declare const HotUpdater: {
35
35
  * Reloads the app.
36
36
  */
37
37
  reload: () => Promise<void>;
38
+ /**
39
+ * Configures how `HotUpdater.reload()` behaves.
40
+ *
41
+ * This can be called unconditionally on both platforms.
42
+ * The default is `processRestart`.
43
+ *
44
+ * - `reload`: built-in React Native reload on both platforms
45
+ * - `processRestart`: Android process restart, iOS behaves like normal reload
46
+ * - `custom`: run a custom JS handler on both platforms
47
+ */
48
+ setReloadBehavior: typeof setReloadBehavior;
38
49
  /**
39
50
  * Returns whether an update has finished downloading in this app session.
40
51
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,qBAAqB,EAG3B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAcL,KAAK,YAAY,EAElB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,KAAK,iBAAiB,EAAkC,MAAM,QAAQ,CAAC;AAEhF,YAAY,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACtE,cAAc,SAAS,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,4BAA4B,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,GAClC,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AA4W1E,eAAO,MAAM,UAAU;IA5SnB;;;;;;;;;;;;;;;;;;;;;;;OAuBG;oBACa,iBAAiB;IAuCjC;;OAEG;;IAGH;;;;;;;;;;;;;;;;OAgBG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;;;;;;;;;;;OAYG;;IAGH;;;;;;;;;;;OAWG;;IAGH;;;;OAIG;;IAGH;;;;;;;;;;;;;;;;OAgBG;;IAGH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;6BACsB,qBAAqB;IAgB9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;2BACoB,YAAY;IAKnC;;;;OAIG;;IAYH;;;;;;;;;;OAUG;;IAGH;;;;;;;;;;;OAWG;;IAGH;;;;;;;;;;;OAWG;;CAK2C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,qBAAqB,EAG3B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAcL,iBAAiB,EACjB,KAAK,YAAY,EAElB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,KAAK,iBAAiB,EAAkC,MAAM,QAAQ,CAAC;AAEhF,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,qBAAqB,GACtB,MAAM,UAAU,CAAC;AAClB,cAAc,SAAS,CAAC;AACxB,OAAO,EACL,uBAAuB,EACvB,KAAK,kBAAkB,EACvB,4BAA4B,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,GAClC,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,QAAQ,CAAC;AAwX1E,eAAO,MAAM,UAAU;IAxTnB;;;;;;;;;;;;;;;;;;;;;;;OAuBG;oBACa,iBAAiB;IAuCjC;;OAEG;;IAGH;;;;;;;;;OASG;;IAGH;;;;;;;;;;;;;;;;OAgBG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;IAGH;;;;;;;;;;;;OAYG;;IAGH;;;;;;;;;;;OAWG;;IAGH;;;;OAIG;;IAGH;;;;;;;;;;;;;;;;OAgBG;;IAGH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;6BACsB,qBAAqB;IAgB9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;2BACoB,YAAY;IAKnC;;;;OAIG;;IAYH;;;;;;;;;;OAUG;;IAGH;;;;;;;;;;;OAWG;;IAGH;;;;;;;;;;;OAWG;;CAK2C,CAAC"}
@@ -2,6 +2,28 @@ import type { UpdateStatus } from "@hot-updater/core";
2
2
  import { HotUpdaterErrorCode, isHotUpdaterError } from "./error";
3
3
  import { type UpdateBundleParams } from "./specs/NativeHotUpdater";
4
4
  export { HotUpdaterErrorCode, isHotUpdaterError };
5
+ /**
6
+ * Built-in reload behaviors used by `HotUpdater.reload()`.
7
+ *
8
+ * - `reload`: In-process React Native reload.
9
+ * - `processRestart`: Android-only cold restart. On iOS the same call behaves like `reload`.
10
+ */
11
+ export type ReloadBehavior = "reload" | "processRestart";
12
+ /**
13
+ * Custom reload hook used when `setReloadBehavior("custom", handler)` is configured.
14
+ *
15
+ * This is useful for brownfield apps that need to delegate reload behavior to
16
+ * a host-native container instead of using HotUpdater's built-in reload flow.
17
+ */
18
+ export type CustomReloadHandler = () => void | Promise<void>;
19
+ /**
20
+ * Full reload policy accepted by `setReloadBehavior()`.
21
+ *
22
+ * - `reload`: Built-in React reload on both platforms
23
+ * - `processRestart`: Android process restart, iOS behaves like `reload`
24
+ * - `custom`: Run a user-provided JS handler on both platforms
25
+ */
26
+ export type ReloadBehaviorSetting = ReloadBehavior | "custom";
5
27
  export declare const HotUpdaterConstants: {
6
28
  HOT_UPDATER_BUNDLE_ID: string;
7
29
  };
@@ -32,9 +54,34 @@ export declare function updateBundle(bundleId: string, fileUrl: string | null):
32
54
  */
33
55
  export declare const getAppVersion: () => string | null;
34
56
  /**
35
- * Reloads the app.
57
+ * Reloads the app using the currently configured reload behavior.
58
+ *
59
+ * Default behavior is `processRestart`.
60
+ * On iOS, `processRestart` behaves like the normal React reload path.
61
+ *
62
+ * When `setReloadBehavior("processRestart")` is used:
63
+ * - Android performs a cold process restart
64
+ * - iOS keeps the same behavior as the normal React reload path
65
+ * - older Android native binaries fall back to `reload()` if `reloadProcess()` is unavailable
66
+ *
67
+ * When `setReloadBehavior("custom", handler)` is used:
68
+ * - both Android and iOS execute the provided handler
36
69
  */
37
70
  export declare const reload: () => Promise<void>;
71
+ /**
72
+ * Configures how `HotUpdater.reload()` should behave.
73
+ *
74
+ * This API is available on both Android and iOS so app code can stay symmetric.
75
+ * By default, HotUpdater uses `processRestart`.
76
+ *
77
+ * Supported behaviors:
78
+ * - `reload`: Uses React Native's normal in-process reload flow
79
+ * - `processRestart`: Uses Android process restart when available; iOS keeps the same behavior as `reload`
80
+ * - `custom`: Executes a JS callback on both platforms
81
+ *
82
+ * `custom` is intended for brownfield apps that need host-native coordination.
83
+ */
84
+ export declare function setReloadBehavior(...args: [behavior: ReloadBehavior] | [behavior: "custom", handler: CustomReloadHandler]): void;
38
85
  /**
39
86
  * Fetches the minimum bundle id, which represents the initial bundle of the app
40
87
  * since it is created at build time.
@@ -1 +1 @@
1
- {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../../src/native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACjE,OAAyB,EACvB,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;AAMlD,eAAO,MAAM,mBAAmB;;CAE/B,CAAC;AA0DF,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAIF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,MAAM,eAAe,EACzD,WAAW,CAAC,EACZ,UAAU,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,eAO9C,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,kBAAkB,GAAG;IAC9C,MAAM,EAAE,YAAY,CAAC;IACrB,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC1C,CAAC;AAEF;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC3E;;GAEG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAAG,IAAI,GACrB,OAAO,CAAC,OAAO,CAAC,CAAC;AAuEpB;;GAEG;AACH,eAAO,MAAM,aAAa,QAAO,MAAM,GAAG,IAGzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,MAAM,qBAElB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,QAAO,MAGjC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,QAAO,MAI9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,QAAO,MAE7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAO,MAEpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAO,OAEpC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,QAAO,MAAM,GAAG,IAG9C,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,cAAc,QAAO,oBAYjC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,QAAO,MAAM,EAWxC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,QAAO,OAEpC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,QAAO,MAAM,GAAG,IAMtC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,QAAa,OAAO,CAAC,OAAO,CAUpD,CAAC"}
1
+ {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../../src/native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AACjE,OAAyB,EACvB,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,CAAC;AAIlD;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,gBAAgB,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,cAAc,GAAG,QAAQ,CAAC;AAI9D,eAAO,MAAM,mBAAmB;;CAE/B,CAAC;AAsEF,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAIF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,MAAM,eAAe,EACzD,WAAW,CAAC,EACZ,UAAU,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,eAO9C,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,kBAAkB,GAAG;IAC9C,MAAM,EAAE,YAAY,CAAC;IACrB,8BAA8B,CAAC,EAAE,OAAO,CAAC;CAC1C,CAAC;AAEF;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC3E;;GAEG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAAG,IAAI,GACrB,OAAO,CAAC,OAAO,CAAC,CAAC;AAuEpB;;GAEG;AACH,eAAO,MAAM,aAAa,QAAO,MAAM,GAAG,IAGzC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,MAAM,qBAqBlB,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,IAAI,EACH,CAAC,QAAQ,EAAE,cAAc,CAAC,GAC1B,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,CAAC,GACrD,IAAI,CAuBN;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,QAAO,MAGjC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,QAAO,MAI9B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,UAAU,QAAO,MAE7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAO,MAEpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAO,OAEpC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,QAAO,MAAM,GAAG,IAG9C,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,cAAc,QAAO,oBAYjC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,QAAO,MAAM,EAWxC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,QAAO,OAEpC,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,QAAO,MAAM,GAAG,IAMtC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,QAAa,OAAO,CAAC,OAAO,CAUpD,CAAC"}
@@ -16,6 +16,12 @@ export interface UpdateBundleParams {
16
16
  }
17
17
  export interface Spec extends TurboModule {
18
18
  reload(): Promise<void>;
19
+ /**
20
+ * Android process restart path used by `setReloadBehavior("processRestart")`.
21
+ *
22
+ * iOS exposes the same method name for API parity, but it behaves the same as `reload()`.
23
+ */
24
+ reloadProcess(): Promise<void>;
19
25
  /**
20
26
  * Downloads and applies a bundle update.
21
27
  *
@@ -1 +1 @@
1
- {"version":3,"file":"NativeHotUpdater.d.ts","sourceRoot":"","sources":["../../../../src/specs/NativeHotUpdater.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;;;;;;OAQG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,IAAK,SAAQ,WAAW;IAEvC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3D;;;;;;;;;;OAUG;IACH,cAAc,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG;QAC5C,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;QAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IAEF;;;;;OAKG;IACH,eAAe,IAAI,MAAM,EAAE,CAAC;IAE5B;;;;;OAKG;IACH,iBAAiB,IAAI,OAAO,CAAC;IAE7B;;;;OAIG;IACH,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjC;;;;;;OAMG;IACH,UAAU,EAAE,MAAM,MAAM,CAAC;IAGzB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM;QAC3B,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;KACjC,CAAC;CACH;;AAED,wBAAoE"}
1
+ {"version":3,"file":"NativeHotUpdater.d.ts","sourceRoot":"","sources":["../../../../src/specs/NativeHotUpdater.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;;;;;;OAQG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,IAAK,SAAQ,WAAW;IAEvC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB;;;;OAIG;IACH,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE3D;;;;;;;;;;OAUG;IACH,cAAc,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG;QAC5C,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,QAAQ,CAAC;QAC5C,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IAEF;;;;;OAKG;IACH,eAAe,IAAI,MAAM,EAAE,CAAC;IAE5B;;;;;OAKG;IACH,iBAAiB,IAAI,OAAO,CAAC;IAE7B;;;;OAIG;IACH,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjC;;;;;;OAMG;IACH,UAAU,EAAE,MAAM,MAAM,CAAC;IAGzB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,YAAY,EAAE,MAAM;QAC3B,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,OAAO,EAAE,MAAM,CAAC;QAChB,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;KACjC,CAAC;CACH;;AAED,wBAAoE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hot-updater/react-native",
3
- "version": "0.26.1",
3
+ "version": "0.27.0",
4
4
  "description": "React Native OTA solution for self-hosted",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -120,14 +120,14 @@
120
120
  "react-native": "0.79.1",
121
121
  "react-native-builder-bob": "^0.40.10",
122
122
  "typescript": "^5.8.3",
123
- "hot-updater": "0.26.1"
123
+ "hot-updater": "0.27.0"
124
124
  },
125
125
  "dependencies": {
126
126
  "use-sync-external-store": "1.5.0",
127
- "@hot-updater/cli-tools": "0.26.1",
128
- "@hot-updater/js": "0.26.1",
129
- "@hot-updater/plugin-core": "0.26.1",
130
- "@hot-updater/core": "0.26.1"
127
+ "@hot-updater/cli-tools": "0.27.0",
128
+ "@hot-updater/core": "0.27.0",
129
+ "@hot-updater/js": "0.27.0",
130
+ "@hot-updater/plugin-core": "0.27.0"
131
131
  },
132
132
  "scripts": {
133
133
  "build": "bob build && tsc -p plugin/tsconfig.build.json",
package/src/index.ts CHANGED
@@ -18,6 +18,7 @@ import {
18
18
  isChannelSwitched,
19
19
  reload,
20
20
  resetChannel,
21
+ setReloadBehavior,
21
22
  type UpdateParams,
22
23
  updateBundle,
23
24
  } from "./native";
@@ -25,7 +26,13 @@ import { hotUpdaterStore } from "./store";
25
26
  import type { HotUpdaterResolver } from "./types";
26
27
  import { type HotUpdaterOptions, type InternalWrapOptions, wrap } from "./wrap";
27
28
 
28
- export type { HotUpdaterEvent, NotifyAppReadyResult } from "./native";
29
+ export type {
30
+ CustomReloadHandler,
31
+ HotUpdaterEvent,
32
+ NotifyAppReadyResult,
33
+ ReloadBehavior,
34
+ ReloadBehaviorSetting,
35
+ } from "./native";
29
36
  export * from "./store";
30
37
  export {
31
38
  extractSignatureFailure,
@@ -167,6 +174,18 @@ function createHotUpdaterClient() {
167
174
  */
168
175
  reload,
169
176
 
177
+ /**
178
+ * Configures how `HotUpdater.reload()` behaves.
179
+ *
180
+ * This can be called unconditionally on both platforms.
181
+ * The default is `processRestart`.
182
+ *
183
+ * - `reload`: built-in React Native reload on both platforms
184
+ * - `processRestart`: Android process restart, iOS behaves like normal reload
185
+ * - `custom`: run a custom JS handler on both platforms
186
+ */
187
+ setReloadBehavior,
188
+
170
189
  /**
171
190
  * Returns whether an update has finished downloading in this app session.
172
191
  *
package/src/native.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { UpdateStatus } from "@hot-updater/core";
2
- import { NativeEventEmitter } from "react-native";
2
+ import { NativeEventEmitter, Platform } from "react-native";
3
3
  import { HotUpdaterErrorCode, isHotUpdaterError } from "./error";
4
4
  import HotUpdaterNative, {
5
5
  type UpdateBundleParams,
@@ -9,6 +9,31 @@ export { HotUpdaterErrorCode, isHotUpdaterError };
9
9
 
10
10
  const NIL_UUID = "00000000-0000-0000-0000-000000000000";
11
11
 
12
+ /**
13
+ * Built-in reload behaviors used by `HotUpdater.reload()`.
14
+ *
15
+ * - `reload`: In-process React Native reload.
16
+ * - `processRestart`: Android-only cold restart. On iOS the same call behaves like `reload`.
17
+ */
18
+ export type ReloadBehavior = "reload" | "processRestart";
19
+
20
+ /**
21
+ * Custom reload hook used when `setReloadBehavior("custom", handler)` is configured.
22
+ *
23
+ * This is useful for brownfield apps that need to delegate reload behavior to
24
+ * a host-native container instead of using HotUpdater's built-in reload flow.
25
+ */
26
+ export type CustomReloadHandler = () => void | Promise<void>;
27
+
28
+ /**
29
+ * Full reload policy accepted by `setReloadBehavior()`.
30
+ *
31
+ * - `reload`: Built-in React reload on both platforms
32
+ * - `processRestart`: Android process restart, iOS behaves like `reload`
33
+ * - `custom`: Run a user-provided JS handler on both platforms
34
+ */
35
+ export type ReloadBehaviorSetting = ReloadBehavior | "custom";
36
+
12
37
  declare const __HOT_UPDATER_BUNDLE_ID: string | undefined;
13
38
 
14
39
  export const HotUpdaterConstants = {
@@ -70,6 +95,18 @@ class HotUpdaterSessionState {
70
95
  }
71
96
 
72
97
  const sessionState = new HotUpdaterSessionState();
98
+ let reloadBehavior: ReloadBehaviorSetting = "processRestart";
99
+ let customReloadHandler: CustomReloadHandler | null = null;
100
+
101
+ const getReloadProcess = (): (() => Promise<void>) | null => {
102
+ const nativeModule = HotUpdaterNative as typeof HotUpdaterNative & {
103
+ reloadProcess?: () => Promise<void>;
104
+ };
105
+
106
+ return typeof nativeModule.reloadProcess === "function"
107
+ ? nativeModule.reloadProcess.bind(nativeModule)
108
+ : null;
109
+ };
73
110
 
74
111
  export type HotUpdaterEvent = {
75
112
  onProgress: {
@@ -189,12 +226,84 @@ export const getAppVersion = (): string | null => {
189
226
  };
190
227
 
191
228
  /**
192
- * Reloads the app.
229
+ * Reloads the app using the currently configured reload behavior.
230
+ *
231
+ * Default behavior is `processRestart`.
232
+ * On iOS, `processRestart` behaves like the normal React reload path.
233
+ *
234
+ * When `setReloadBehavior("processRestart")` is used:
235
+ * - Android performs a cold process restart
236
+ * - iOS keeps the same behavior as the normal React reload path
237
+ * - older Android native binaries fall back to `reload()` if `reloadProcess()` is unavailable
238
+ *
239
+ * When `setReloadBehavior("custom", handler)` is used:
240
+ * - both Android and iOS execute the provided handler
193
241
  */
194
242
  export const reload = async () => {
243
+ if (reloadBehavior === "custom") {
244
+ if (!customReloadHandler) {
245
+ throw new Error(
246
+ "[HotUpdater] setReloadBehavior('custom') requires a reload handler.",
247
+ );
248
+ }
249
+
250
+ await customReloadHandler();
251
+ return;
252
+ }
253
+
254
+ if (Platform.OS === "android" && reloadBehavior === "processRestart") {
255
+ const reloadProcess = getReloadProcess();
256
+ if (reloadProcess) {
257
+ await reloadProcess();
258
+ return;
259
+ }
260
+ }
261
+
195
262
  await HotUpdaterNative.reload();
196
263
  };
197
264
 
265
+ /**
266
+ * Configures how `HotUpdater.reload()` should behave.
267
+ *
268
+ * This API is available on both Android and iOS so app code can stay symmetric.
269
+ * By default, HotUpdater uses `processRestart`.
270
+ *
271
+ * Supported behaviors:
272
+ * - `reload`: Uses React Native's normal in-process reload flow
273
+ * - `processRestart`: Uses Android process restart when available; iOS keeps the same behavior as `reload`
274
+ * - `custom`: Executes a JS callback on both platforms
275
+ *
276
+ * `custom` is intended for brownfield apps that need host-native coordination.
277
+ */
278
+ export function setReloadBehavior(
279
+ ...args:
280
+ | [behavior: ReloadBehavior]
281
+ | [behavior: "custom", handler: CustomReloadHandler]
282
+ ): void {
283
+ const [behavior, handler] = args;
284
+
285
+ if (behavior === "custom") {
286
+ if (typeof handler !== "function") {
287
+ throw new Error(
288
+ "[HotUpdater] setReloadBehavior('custom') requires a reload handler.",
289
+ );
290
+ }
291
+
292
+ reloadBehavior = behavior;
293
+ customReloadHandler = handler;
294
+ return;
295
+ }
296
+
297
+ if (handler) {
298
+ throw new Error(
299
+ `[HotUpdater] setReloadBehavior('${behavior}') does not accept a custom reload handler.`,
300
+ );
301
+ }
302
+
303
+ reloadBehavior = behavior;
304
+ customReloadHandler = null;
305
+ }
306
+
198
307
  /**
199
308
  * Fetches the minimum bundle id, which represents the initial bundle of the app
200
309
  * since it is created at build time.
@@ -20,6 +20,12 @@ export interface UpdateBundleParams {
20
20
  export interface Spec extends TurboModule {
21
21
  // Methods
22
22
  reload(): Promise<void>;
23
+ /**
24
+ * Android process restart path used by `setReloadBehavior("processRestart")`.
25
+ *
26
+ * iOS exposes the same method name for API parity, but it behaves the same as `reload()`.
27
+ */
28
+ reloadProcess(): Promise<void>;
23
29
  /**
24
30
  * Downloads and applies a bundle update.
25
31
  *