@hot-updater/react-native 0.35.3 → 0.35.5

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.
@@ -429,7 +429,9 @@ class BundleFileStorageService(
429
429
  if (!HashUtils.verifyHash(patchDownloadResult.file, patch.patchFileHash)) {
430
430
  false
431
431
  } else {
432
- BsdiffPatch.apply(sourceFile, patchDownloadResult.file, targetFile)
432
+ withContext(Dispatchers.IO) {
433
+ BsdiffPatch.apply(sourceFile, patchDownloadResult.file, targetFile)
434
+ }
433
435
  HashUtils.verifyHash(targetFile, expectedHash).also { patched ->
434
436
  if (patched) {
435
437
  Log.d(
@@ -4,5 +4,5 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.HOT_UPDATER_SDK_VERSION = void 0;
7
- const HOT_UPDATER_SDK_VERSION = exports.HOT_UPDATER_SDK_VERSION = "0.35.3";
7
+ const HOT_UPDATER_SDK_VERSION = exports.HOT_UPDATER_SDK_VERSION = "0.35.5";
8
8
  //# sourceMappingURL=sdkVersion.js.map
@@ -50,10 +50,19 @@ const createHotUpdaterStore = () => {
50
50
  return state;
51
51
  };
52
52
  const listeners = new Set();
53
+ let isEmitScheduled = false;
53
54
  const emitChange = () => {
54
- for (const listener of listeners) {
55
- listener();
55
+ if (isEmitScheduled) {
56
+ return;
56
57
  }
58
+ isEmitScheduled = true;
59
+ const scheduleFrame = typeof requestAnimationFrame === "function" ? requestAnimationFrame : callback => callback(0);
60
+ scheduleFrame(() => {
61
+ isEmitScheduled = false;
62
+ for (const listener of listeners) {
63
+ listener();
64
+ }
65
+ });
57
66
  };
58
67
  const normalizeDiffDetails = details => {
59
68
  const totalFilesCount = Math.max(0, details.totalFilesCount);
@@ -1 +1 @@
1
- {"version":3,"names":["_withSelector","_interopRequireDefault","require","_native","e","__esModule","default","useSyncExternalStoreWithSelector","useSyncExternalStoreExports","areDiffDetailsEqual","left","right","totalFilesCount","completedFilesCount","files","length","every","leftFile","index","rightFile","undefined","order","path","downloadPath","downloadedBytes","progress","status","totalBytes","areStatesEqual","isUpdateDownloaded","artifactType","details","normalizeByteCount","value","Number","isFinite","Math","round","normalizeDownloadPath","createHotUpdaterStore","state","getSnapshot","listeners","Set","emitChange","listener","normalizeDiffDetails","max","normalizedFiles","map","file","min","sort","setState","newState","nextState","applyProgressEvent","event","subscribe","add","delete","addListener","hotUpdaterStore","exports","useHotUpdaterStore","selector","snapshot"],"sourceRoot":"../../src","sources":["store.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_withSelector","_interopRequireDefault","require","_native","e","__esModule","default","useSyncExternalStoreWithSelector","useSyncExternalStoreExports","areDiffDetailsEqual","left","right","totalFilesCount","completedFilesCount","files","length","every","leftFile","index","rightFile","undefined","order","path","downloadPath","downloadedBytes","progress","status","totalBytes","areStatesEqual","isUpdateDownloaded","artifactType","details","normalizeByteCount","value","Number","isFinite","Math","round","normalizeDownloadPath","createHotUpdaterStore","state","getSnapshot","listeners","Set","isEmitScheduled","emitChange","scheduleFrame","requestAnimationFrame","callback","listener","normalizeDiffDetails","max","normalizedFiles","map","file","min","sort","setState","newState","nextState","applyProgressEvent","event","subscribe","add","delete","addListener","hotUpdaterStore","exports","useHotUpdaterStore","selector","snapshot"],"sourceRoot":"../../src","sources":["store.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ var _react = require("@testing-library/react");
4
+ var _react2 = require("react");
5
+ var _vitest = require("vitest");
6
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); } // @vitest-environment jsdom
7
+ const listeners = _vitest.vi.hoisted(() => new Map());
8
+ _vitest.vi.mock("./native", () => ({
9
+ addListener: _vitest.vi.fn((eventName, listener) => {
10
+ listeners.set(eventName, listener);
11
+ return () => {
12
+ listeners.delete(eventName);
13
+ };
14
+ })
15
+ }));
16
+ (0, _vitest.describe)("hotUpdaterStore notification scheduling", () => {
17
+ (0, _vitest.beforeEach)(() => {
18
+ listeners.clear();
19
+ _vitest.vi.resetModules();
20
+ });
21
+ (0, _vitest.afterEach)(() => {
22
+ (0, _react.cleanup)();
23
+ _vitest.vi.unstubAllGlobals();
24
+ });
25
+ (0, _vitest.it)("keeps progress notifications from exceeding React's maximum update depth", async () => {
26
+ // Given
27
+ const frameCallbacks = [];
28
+ _vitest.vi.stubGlobal("requestAnimationFrame", callback => {
29
+ frameCallbacks.push(callback);
30
+ return frameCallbacks.length;
31
+ });
32
+ const {
33
+ hotUpdaterStore
34
+ } = await Promise.resolve().then(() => _interopRequireWildcard(require("./store")));
35
+ const emitProgress = listeners.get("onProgress");
36
+ const Consumer = () => {
37
+ const [progress, setProgress] = (0, _react2.useState)(0);
38
+ (0, _react2.useLayoutEffect)(() => {
39
+ const unsubscribe = hotUpdaterStore.subscribe(() => {
40
+ setProgress(hotUpdaterStore.getSnapshot().progress);
41
+ });
42
+ return () => {
43
+ unsubscribe();
44
+ };
45
+ }, []);
46
+ (0, _react2.useLayoutEffect)(() => {
47
+ if (progress >= 1) {
48
+ return;
49
+ }
50
+ const nextProgress = Math.min(1, progress + 0.01);
51
+ emitProgress?.({
52
+ artifactType: "archive",
53
+ downloadedBytes: nextProgress * 1_000_000,
54
+ progress: nextProgress,
55
+ totalBytes: 1_000_000
56
+ });
57
+ }, [progress]);
58
+ return null;
59
+ };
60
+
61
+ // When
62
+ (0, _react.render)(/*#__PURE__*/(0, _react2.createElement)(Consumer));
63
+ for (let frame = 0; frame < 200 && hotUpdaterStore.getSnapshot().progress < 1; frame++) {
64
+ const frameCallback = frameCallbacks.shift();
65
+ (0, _vitest.expect)(frameCallback).toBeTypeOf("function");
66
+ await new Promise(resolve => setImmediate(resolve));
67
+ await (0, _react2.act)(async () => {
68
+ frameCallback?.(0);
69
+ });
70
+ }
71
+
72
+ // Then
73
+ (0, _vitest.expect)(hotUpdaterStore.getSnapshot().progress).toBe(1);
74
+ });
75
+ });
76
+ //# sourceMappingURL=store.notification.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_react2","_vitest","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","listeners","vi","hoisted","Map","mock","addListener","fn","eventName","listener","delete","describe","beforeEach","clear","resetModules","afterEach","cleanup","unstubAllGlobals","it","frameCallbacks","stubGlobal","callback","push","length","hotUpdaterStore","Promise","resolve","then","emitProgress","Consumer","progress","setProgress","useState","useLayoutEffect","unsubscribe","subscribe","getSnapshot","nextProgress","Math","min","artifactType","downloadedBytes","totalBytes","render","createElement","frame","frameCallback","shift","expect","toBeTypeOf","setImmediate","act","toBe"],"sourceRoot":"../../src","sources":["store.notification.spec.ts"],"mappings":"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","ignoreList":[]}
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
 
3
- export const HOT_UPDATER_SDK_VERSION = "0.35.3";
3
+ export const HOT_UPDATER_SDK_VERSION = "0.35.5";
4
4
  //# sourceMappingURL=sdkVersion.js.map
@@ -45,10 +45,19 @@ const createHotUpdaterStore = () => {
45
45
  return state;
46
46
  };
47
47
  const listeners = new Set();
48
+ let isEmitScheduled = false;
48
49
  const emitChange = () => {
49
- for (const listener of listeners) {
50
- listener();
50
+ if (isEmitScheduled) {
51
+ return;
51
52
  }
53
+ isEmitScheduled = true;
54
+ const scheduleFrame = typeof requestAnimationFrame === "function" ? requestAnimationFrame : callback => callback(0);
55
+ scheduleFrame(() => {
56
+ isEmitScheduled = false;
57
+ for (const listener of listeners) {
58
+ listener();
59
+ }
60
+ });
52
61
  };
53
62
  const normalizeDiffDetails = details => {
54
63
  const totalFilesCount = Math.max(0, details.totalFilesCount);
@@ -1 +1 @@
1
- {"version":3,"names":["useSyncExternalStoreExports","addListener","useSyncExternalStoreWithSelector","areDiffDetailsEqual","left","right","totalFilesCount","completedFilesCount","files","length","every","leftFile","index","rightFile","undefined","order","path","downloadPath","downloadedBytes","progress","status","totalBytes","areStatesEqual","isUpdateDownloaded","artifactType","details","normalizeByteCount","value","Number","isFinite","Math","round","normalizeDownloadPath","createHotUpdaterStore","state","getSnapshot","listeners","Set","emitChange","listener","normalizeDiffDetails","max","normalizedFiles","map","file","min","sort","setState","newState","nextState","applyProgressEvent","event","subscribe","add","delete","hotUpdaterStore","useHotUpdaterStore","selector","snapshot"],"sourceRoot":"../../src","sources":["store.ts"],"mappings":";;AAAA,OAAOA,2BAA2B,MAAM,4CAA4C;AAOpF,SAASC,WAAW,QAAQ,aAAU;AAWtC,MAAM;EAAEC;AAAiC,CAAC,GAAGF,2BAA2B;AAExE,MAAMG,mBAAmB,GAAGA,CAC1BC,IAA0C,EAC1CC,KAA2C,KACxC;EACH,IAAID,IAAI,KAAKC,KAAK,EAAE;IAClB,OAAO,IAAI;EACb;EAEA,IAAID,IAAI,KAAK,IAAI,IAAIC,KAAK,KAAK,IAAI,EAAE;IACnC,OAAO,KAAK;EACd;EAEA,IACED,IAAI,CAACE,eAAe,KAAKD,KAAK,CAACC,eAAe,IAC9CF,IAAI,CAACG,mBAAmB,KAAKF,KAAK,CAACE,mBAAmB,IACtDH,IAAI,CAACI,KAAK,CAACC,MAAM,KAAKJ,KAAK,CAACG,KAAK,CAACC,MAAM,EACxC;IACA,OAAO,KAAK;EACd;EAEA,OAAOL,IAAI,CAACI,KAAK,CAACE,KAAK,CAAC,CAACC,QAAQ,EAAEC,KAAK,KAAK;IAC3C,MAAMC,SAAS,GAAGR,KAAK,CAACG,KAAK,CAACI,KAAK,CAAC;IACpC,OACEC,SAAS,KAAKC,SAAS,IACvBH,QAAQ,CAACI,KAAK,KAAKF,SAAS,CAACE,KAAK,IAClCJ,QAAQ,CAACK,IAAI,KAAKH,SAAS,CAACG,IAAI,IAChCL,QAAQ,CAACM,YAAY,KAAKJ,SAAS,CAACI,YAAY,IAChDN,QAAQ,CAACO,eAAe,KAAKL,SAAS,CAACK,eAAe,IACtDP,QAAQ,CAACQ,QAAQ,KAAKN,SAAS,CAACM,QAAQ,IACxCR,QAAQ,CAACS,MAAM,KAAKP,SAAS,CAACO,MAAM,IACpCT,QAAQ,CAACU,UAAU,KAAKR,SAAS,CAACQ,UAAU;EAEhD,CAAC,CAAC;AACJ,CAAC;AAED,MAAMC,cAAc,GAAGA,CAAClB,IAAqB,EAAEC,KAAsB,KAAK;EACxE,OACED,IAAI,CAACe,QAAQ,KAAKd,KAAK,CAACc,QAAQ,IAChCf,IAAI,CAACc,eAAe,KAAKb,KAAK,CAACa,eAAe,IAC9Cd,IAAI,CAACiB,UAAU,KAAKhB,KAAK,CAACgB,UAAU,IACpCjB,IAAI,CAACmB,kBAAkB,KAAKlB,KAAK,CAACkB,kBAAkB,IACpDnB,IAAI,CAACoB,YAAY,KAAKnB,KAAK,CAACmB,YAAY,IACxCrB,mBAAmB,CAACC,IAAI,CAACqB,OAAO,EAAEpB,KAAK,CAACoB,OAAO,CAAC;AAEpD,CAAC;AAED,MAAMC,kBAAkB,GAAIC,KAAyB,IAAK;EACxD,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAI,CAACC,MAAM,CAACC,QAAQ,CAACF,KAAK,CAAC,IAAIA,KAAK,GAAG,CAAC,EAAE;IACrE,OAAOb,SAAS;EAClB;EACA,OAAOgB,IAAI,CAACC,KAAK,CAACJ,KAAK,CAAC;AAC1B,CAAC;AAED,MAAMK,qBAAqB,GAAIL,KAAyB,IAAK;EAC3D,OAAO,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,CAAClB,MAAM,GAAG,CAAC,GAAGkB,KAAK,GAAGb,SAAS;AAC1E,CAAC;AAED,MAAMmB,qBAAqB,GAAGA,CAAA,KAAM;EAClC,IAAIC,KAAsB,GAAG;IAC3Bf,QAAQ,EAAE,CAAC;IACXD,eAAe,EAAEJ,SAAS;IAC1BO,UAAU,EAAEP,SAAS;IACrBS,kBAAkB,EAAE,KAAK;IACzBC,YAAY,EAAE,IAAI;IAClBC,OAAO,EAAE;EACX,CAAC;EAED,MAAMU,WAAW,GAAGA,CAAA,KAAM;IACxB,OAAOD,KAAK;EACd,CAAC;EAED,MAAME,SAAS,GAAG,IAAIC,GAAG,CAAa,CAAC;EAEvC,MAAMC,UAAU,GAAGA,CAAA,KAAM;IACvB,KAAK,MAAMC,QAAQ,IAAIH,SAAS,EAAE;MAChCG,QAAQ,CAAC,CAAC;IACZ;EACF,CAAC;EAED,MAAMC,oBAAoB,GACxBf,OAAsC,IACJ;IAClC,MAAMnB,eAAe,GAAGwB,IAAI,CAACW,GAAG,CAAC,CAAC,EAAEhB,OAAO,CAACnB,eAAe,CAAC;IAC5D,MAAMoC,eAA6C,GAAGjB,OAAO,CAACjB,KAAK,CAChEmC,GAAG,CAAEC,IAAI,IAAK;MACb,MAAM3B,YAAY,GAChBe,qBAAqB,CAACY,IAAI,CAAC3B,YAAY,CAAC,IAAI2B,IAAI,CAAC5B,IAAI;MAEvD,OAAO;QACLC,YAAY;QACZC,eAAe,EAAEQ,kBAAkB,CAACkB,IAAI,CAAC1B,eAAe,CAAC;QACzDH,KAAK,EAAEe,IAAI,CAACW,GAAG,CAAC,CAAC,EAAEG,IAAI,CAAC7B,KAAK,CAAC;QAC9BC,IAAI,EAAE4B,IAAI,CAAC5B,IAAI;QACfG,QAAQ,EAAEW,IAAI,CAACW,GAAG,CAAC,CAAC,EAAEX,IAAI,CAACe,GAAG,CAACD,IAAI,CAACzB,QAAQ,EAAE,CAAC,CAAC,CAAC;QACjDC,MAAM,EAAEwB,IAAI,CAACxB,MAAM;QACnBC,UAAU,EAAEK,kBAAkB,CAACkB,IAAI,CAACvB,UAAU;MAChD,CAAC;IACH,CAAC,CAAC,CACDyB,IAAI,CAAC,CAAC1C,IAAI,EAAEC,KAAK,KAAKD,IAAI,CAACW,KAAK,GAAGV,KAAK,CAACU,KAAK,CAAC;IAElD,OAAO;MACLR,mBAAmB,EAAEuB,IAAI,CAACW,GAAG,CAC3B,CAAC,EACDX,IAAI,CAACe,GAAG,CAACpB,OAAO,CAAClB,mBAAmB,EAAED,eAAe,CACvD,CAAC;MACDE,KAAK,EAAEkC,eAAe;MACtBpC;IACF,CAAC;EACH,CAAC;EAED,MAAMyC,QAAQ,GAAIC,QAAkC,IAAK;IACvD;IACA,MAAMC,SAA0B,GAAG;MACjC,GAAGf,KAAK;MACR,GAAGc;IACL,CAAC;;IAED;IACA;IACA;IACA,IAAI,UAAU,IAAIA,QAAQ,IAAI,OAAOA,QAAQ,CAAC7B,QAAQ,KAAK,QAAQ,EAAE;MACnE8B,SAAS,CAAC9B,QAAQ,GAAGW,IAAI,CAACW,GAAG,CAAC,CAAC,EAAEX,IAAI,CAACe,GAAG,CAACG,QAAQ,CAAC7B,QAAQ,EAAE,CAAC,CAAC,CAAC;MAChE8B,SAAS,CAAC1B,kBAAkB,GAAG0B,SAAS,CAAC9B,QAAQ,IAAI,CAAC;IACxD,CAAC,MAAM,IACL,oBAAoB,IAAI6B,QAAQ,IAChC,OAAOA,QAAQ,CAACzB,kBAAkB,KAAK,SAAS,EAChD;MACA0B,SAAS,CAAC1B,kBAAkB,GAAGyB,QAAQ,CAACzB,kBAAkB;IAC5D;IAEA,IAAIyB,QAAQ,CAACvB,OAAO,KAAKX,SAAS,EAAE;MAClCmC,SAAS,CAACxB,OAAO,GAAGS,KAAK,CAACT,OAAO;IACnC;IAEA,IAAIwB,SAAS,CAACzB,YAAY,KAAK,MAAM,EAAE;MACrCyB,SAAS,CAACxB,OAAO,GAAG,IAAI;IAC1B;IAEA,IAAIH,cAAc,CAACY,KAAK,EAAEe,SAAS,CAAC,EAAE;MACpC;IACF;IAEAf,KAAK,GAAGe,SAAS;IACjBX,UAAU,CAAC,CAAC;EACd,CAAC;EAED,MAAMY,kBAAkB,GAAIC,KAA8B,IAAK;IAC7DJ,QAAQ,CAAC;MACPvB,YAAY,EAAE2B,KAAK,CAAC3B,YAAY;MAChCC,OAAO,EACL0B,KAAK,CAAC3B,YAAY,KAAK,MAAM,GACzBgB,oBAAoB,CAACW,KAAK,CAAC1B,OAAO,CAAC,GACnC,IAAI;MACVP,eAAe,EACbiC,KAAK,CAAC3B,YAAY,KAAK,SAAS,GAC5BE,kBAAkB,CAACyB,KAAK,CAACjC,eAAe,CAAC,GACzCJ,SAAS;MACfK,QAAQ,EAAEgC,KAAK,CAAChC,QAAQ;MACxBE,UAAU,EACR8B,KAAK,CAAC3B,YAAY,KAAK,SAAS,GAC5BE,kBAAkB,CAACyB,KAAK,CAAC9B,UAAU,CAAC,GACpCP;IACR,CAAC,CAAC;EACJ,CAAC;EAED,MAAMsC,SAAS,GAAIb,QAAoB,IAAK;IAC1CH,SAAS,CAACiB,GAAG,CAACd,QAAQ,CAAC;IACvB,OAAO,MAAMH,SAAS,CAACkB,MAAM,CAACf,QAAQ,CAAC;EACzC,CAAC;;EAED;EACA;EACAtC,WAAW,CAAC,YAAY,EAAEiD,kBAAkB,CAAC;EAE7C,OAAO;IAAEf,WAAW;IAAEY,QAAQ;IAAEK;EAAU,CAAC;AAC7C,CAAC;AAED,OAAO,MAAMG,eAAe,GAAGtB,qBAAqB,CAAC,CAAC;AAEtD,OAAO,MAAMuB,kBAAkB,GAAGA,CAChCC,QAA0C,GAAIC,QAAQ,IAAKA,QAAa,KACrE;EACH,OAAOxD,gCAAgC,CACrCqD,eAAe,CAACH,SAAS,EACzBG,eAAe,CAACpB,WAAW,EAC3BoB,eAAe,CAACpB,WAAW,EAC3BsB,QACF,CAAC;AACH,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["useSyncExternalStoreExports","addListener","useSyncExternalStoreWithSelector","areDiffDetailsEqual","left","right","totalFilesCount","completedFilesCount","files","length","every","leftFile","index","rightFile","undefined","order","path","downloadPath","downloadedBytes","progress","status","totalBytes","areStatesEqual","isUpdateDownloaded","artifactType","details","normalizeByteCount","value","Number","isFinite","Math","round","normalizeDownloadPath","createHotUpdaterStore","state","getSnapshot","listeners","Set","isEmitScheduled","emitChange","scheduleFrame","requestAnimationFrame","callback","listener","normalizeDiffDetails","max","normalizedFiles","map","file","min","sort","setState","newState","nextState","applyProgressEvent","event","subscribe","add","delete","hotUpdaterStore","useHotUpdaterStore","selector","snapshot"],"sourceRoot":"../../src","sources":["store.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+
3
+ // @vitest-environment jsdom
4
+
5
+ import { cleanup, render } from "@testing-library/react";
6
+ import { act, createElement, useLayoutEffect, useState } from "react";
7
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
8
+ const listeners = vi.hoisted(() => new Map());
9
+ vi.mock("./native", () => ({
10
+ addListener: vi.fn((eventName, listener) => {
11
+ listeners.set(eventName, listener);
12
+ return () => {
13
+ listeners.delete(eventName);
14
+ };
15
+ })
16
+ }));
17
+ describe("hotUpdaterStore notification scheduling", () => {
18
+ beforeEach(() => {
19
+ listeners.clear();
20
+ vi.resetModules();
21
+ });
22
+ afterEach(() => {
23
+ cleanup();
24
+ vi.unstubAllGlobals();
25
+ });
26
+ it("keeps progress notifications from exceeding React's maximum update depth", async () => {
27
+ // Given
28
+ const frameCallbacks = [];
29
+ vi.stubGlobal("requestAnimationFrame", callback => {
30
+ frameCallbacks.push(callback);
31
+ return frameCallbacks.length;
32
+ });
33
+ const {
34
+ hotUpdaterStore
35
+ } = await import("./store");
36
+ const emitProgress = listeners.get("onProgress");
37
+ const Consumer = () => {
38
+ const [progress, setProgress] = useState(0);
39
+ useLayoutEffect(() => {
40
+ const unsubscribe = hotUpdaterStore.subscribe(() => {
41
+ setProgress(hotUpdaterStore.getSnapshot().progress);
42
+ });
43
+ return () => {
44
+ unsubscribe();
45
+ };
46
+ }, []);
47
+ useLayoutEffect(() => {
48
+ if (progress >= 1) {
49
+ return;
50
+ }
51
+ const nextProgress = Math.min(1, progress + 0.01);
52
+ emitProgress?.({
53
+ artifactType: "archive",
54
+ downloadedBytes: nextProgress * 1_000_000,
55
+ progress: nextProgress,
56
+ totalBytes: 1_000_000
57
+ });
58
+ }, [progress]);
59
+ return null;
60
+ };
61
+
62
+ // When
63
+ render(/*#__PURE__*/createElement(Consumer));
64
+ for (let frame = 0; frame < 200 && hotUpdaterStore.getSnapshot().progress < 1; frame++) {
65
+ const frameCallback = frameCallbacks.shift();
66
+ expect(frameCallback).toBeTypeOf("function");
67
+ await new Promise(resolve => setImmediate(resolve));
68
+ await act(async () => {
69
+ frameCallback?.(0);
70
+ });
71
+ }
72
+
73
+ // Then
74
+ expect(hotUpdaterStore.getSnapshot().progress).toBe(1);
75
+ });
76
+ });
77
+ //# sourceMappingURL=store.notification.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["cleanup","render","act","createElement","useLayoutEffect","useState","afterEach","beforeEach","describe","expect","it","vi","listeners","hoisted","Map","mock","addListener","fn","eventName","listener","set","delete","clear","resetModules","unstubAllGlobals","frameCallbacks","stubGlobal","callback","push","length","hotUpdaterStore","emitProgress","get","Consumer","progress","setProgress","unsubscribe","subscribe","getSnapshot","nextProgress","Math","min","artifactType","downloadedBytes","totalBytes","frame","frameCallback","shift","toBeTypeOf","Promise","resolve","setImmediate","toBe"],"sourceRoot":"../../src","sources":["store.notification.spec.ts"],"mappings":"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","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- export declare const HOT_UPDATER_SDK_VERSION = "0.35.3";
1
+ export declare const HOT_UPDATER_SDK_VERSION = "0.35.5";
2
2
  //# sourceMappingURL=sdkVersion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,6BAA6B,EAE9B,MAAM,UAAU,CAAC;AAGlB,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC;IACxC,OAAO,EAAE,6BAA6B,GAAG,IAAI,CAAC;CAC/C,CAAC;AAqLF,eAAO,MAAM,eAAe;;yBAnEE,OAAO,CAAC,eAAe,CAAC;0BAuDvB,MAAM,IAAI;CAYa,CAAC;AAEvD,eAAO,MAAM,kBAAkB,GAAI,CAAC,GAAG,eAAe,EACpD,WAAU,CAAC,QAAQ,EAAE,eAAe,KAAK,CAA+B,MAQzE,CAAC"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,6BAA6B,EAE9B,MAAM,UAAU,CAAC;AAGlB,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC;IACxC,OAAO,EAAE,6BAA6B,GAAG,IAAI,CAAC;CAC/C,CAAC;AAkMF,eAAO,MAAM,eAAe;;yBAnEE,OAAO,CAAC,eAAe,CAAC;0BAuDvB,MAAM,IAAI;CAYa,CAAC;AAEvD,eAAO,MAAM,kBAAkB,GAAI,CAAC,GAAG,eAAe,EACpD,WAAU,CAAC,QAAQ,EAAE,eAAe,KAAK,CAA+B,MAQzE,CAAC"}
@@ -1,2 +1,2 @@
1
- export declare const HOT_UPDATER_SDK_VERSION = "0.35.3";
1
+ export declare const HOT_UPDATER_SDK_VERSION = "0.35.5";
2
2
  //# sourceMappingURL=sdkVersion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,6BAA6B,EAE9B,MAAM,UAAU,CAAC;AAGlB,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC;IACxC,OAAO,EAAE,6BAA6B,GAAG,IAAI,CAAC;CAC/C,CAAC;AAqLF,eAAO,MAAM,eAAe;;yBAnEE,OAAO,CAAC,eAAe,CAAC;0BAuDvB,MAAM,IAAI;CAYa,CAAC;AAEvD,eAAO,MAAM,kBAAkB,GAAI,CAAC,GAAG,eAAe,EACpD,WAAU,CAAC,QAAQ,EAAE,eAAe,KAAK,CAA+B,MAQzE,CAAC"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../../src/store.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,6BAA6B,EAE9B,MAAM,UAAU,CAAC;AAGlB,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAAC;IACxC,OAAO,EAAE,6BAA6B,GAAG,IAAI,CAAC;CAC/C,CAAC;AAkMF,eAAO,MAAM,eAAe;;yBAnEE,OAAO,CAAC,eAAe,CAAC;0BAuDvB,MAAM,IAAI;CAYa,CAAC;AAEvD,eAAO,MAAM,kBAAkB,GAAI,CAAC,GAAG,eAAe,EACpD,WAAU,CAAC,QAAQ,EAAE,eAAe,KAAK,CAA+B,MAQzE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hot-updater/react-native",
3
- "version": "0.35.3",
3
+ "version": "0.35.5",
4
4
  "description": "React Native OTA solution for self-hosted",
5
5
  "source": "./src/index.ts",
6
6
  "main": "./lib/commonjs/index.js",
@@ -115,24 +115,29 @@
115
115
  },
116
116
  "devDependencies": {
117
117
  "@react-native-community/cli": "18.0.0",
118
+ "@testing-library/dom": "10.4.1",
119
+ "@testing-library/react": "16.3.2",
118
120
  "@types/node": "^22.10.5",
119
121
  "@types/react": "19.1.3",
122
+ "@types/react-dom": "19.1.3",
120
123
  "@types/use-sync-external-store": "^0.0.6",
121
124
  "del-cli": "^6.0.0",
122
125
  "expo": "^50.0.0",
126
+ "jsdom": "29.1.1",
123
127
  "oxc-transform": "0.121.0",
124
128
  "react": "19.1.3",
129
+ "react-dom": "19.1.3",
125
130
  "react-native": "0.79.1",
126
131
  "react-native-builder-bob": "0.41.0",
127
132
  "typescript": "^6.0.2",
128
- "hot-updater": "0.35.3"
133
+ "hot-updater": "0.35.5"
129
134
  },
130
135
  "dependencies": {
131
136
  "use-sync-external-store": "1.5.0",
132
- "@hot-updater/cli-tools": "0.35.3",
133
- "@hot-updater/core": "0.35.3",
134
- "@hot-updater/plugin-core": "0.35.3",
135
- "@hot-updater/js": "0.35.3"
137
+ "@hot-updater/core": "0.35.5",
138
+ "@hot-updater/js": "0.35.5",
139
+ "@hot-updater/plugin-core": "0.35.5",
140
+ "@hot-updater/cli-tools": "0.35.5"
136
141
  },
137
142
  "scripts": {
138
143
  "build": "node ./scripts/sync-sdk-version.mjs run -- bob build && tsc -p plugin/tsconfig.build.json",
package/src/sdkVersion.ts CHANGED
@@ -1 +1 @@
1
- export const HOT_UPDATER_SDK_VERSION = "0.35.3";
1
+ export const HOT_UPDATER_SDK_VERSION = "0.35.5";
@@ -0,0 +1,92 @@
1
+ // @vitest-environment jsdom
2
+
3
+ import { cleanup, render } from "@testing-library/react";
4
+ import { act, createElement, useLayoutEffect, useState } from "react";
5
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
6
+
7
+ const listeners = vi.hoisted(
8
+ () => new Map<string, (event: Record<string, unknown>) => void>(),
9
+ );
10
+
11
+ vi.mock("./native", () => ({
12
+ addListener: vi.fn(
13
+ (eventName: string, listener: (event: Record<string, unknown>) => void) => {
14
+ listeners.set(eventName, listener);
15
+ return () => {
16
+ listeners.delete(eventName);
17
+ };
18
+ },
19
+ ),
20
+ }));
21
+
22
+ describe("hotUpdaterStore notification scheduling", () => {
23
+ beforeEach(() => {
24
+ listeners.clear();
25
+ vi.resetModules();
26
+ });
27
+
28
+ afterEach(() => {
29
+ cleanup();
30
+ vi.unstubAllGlobals();
31
+ });
32
+
33
+ it("keeps progress notifications from exceeding React's maximum update depth", async () => {
34
+ // Given
35
+ const frameCallbacks: ((timestamp: number) => void)[] = [];
36
+ vi.stubGlobal(
37
+ "requestAnimationFrame",
38
+ (callback: (timestamp: number) => void) => {
39
+ frameCallbacks.push(callback);
40
+ return frameCallbacks.length;
41
+ },
42
+ );
43
+ const { hotUpdaterStore } = await import("./store");
44
+ const emitProgress = listeners.get("onProgress");
45
+ const Consumer = () => {
46
+ const [progress, setProgress] = useState(0);
47
+
48
+ useLayoutEffect(() => {
49
+ const unsubscribe = hotUpdaterStore.subscribe(() => {
50
+ setProgress(hotUpdaterStore.getSnapshot().progress);
51
+ });
52
+ return () => {
53
+ unsubscribe();
54
+ };
55
+ }, []);
56
+
57
+ useLayoutEffect(() => {
58
+ if (progress >= 1) {
59
+ return;
60
+ }
61
+
62
+ const nextProgress = Math.min(1, progress + 0.01);
63
+ emitProgress?.({
64
+ artifactType: "archive",
65
+ downloadedBytes: nextProgress * 1_000_000,
66
+ progress: nextProgress,
67
+ totalBytes: 1_000_000,
68
+ });
69
+ }, [progress]);
70
+
71
+ return null;
72
+ };
73
+
74
+ // When
75
+ render(createElement(Consumer));
76
+ for (
77
+ let frame = 0;
78
+ frame < 200 && hotUpdaterStore.getSnapshot().progress < 1;
79
+ frame++
80
+ ) {
81
+ const frameCallback = frameCallbacks.shift();
82
+ expect(frameCallback).toBeTypeOf("function");
83
+ await new Promise<void>((resolve) => setImmediate(resolve));
84
+ await act(async () => {
85
+ frameCallback?.(0);
86
+ });
87
+ }
88
+
89
+ // Then
90
+ expect(hotUpdaterStore.getSnapshot().progress).toBe(1);
91
+ });
92
+ });
package/src/store.ts CHANGED
@@ -90,11 +90,24 @@ const createHotUpdaterStore = () => {
90
90
  };
91
91
 
92
92
  const listeners = new Set<() => void>();
93
+ let isEmitScheduled = false;
93
94
 
94
95
  const emitChange = () => {
95
- for (const listener of listeners) {
96
- listener();
96
+ if (isEmitScheduled) {
97
+ return;
97
98
  }
99
+
100
+ isEmitScheduled = true;
101
+ const scheduleFrame =
102
+ typeof requestAnimationFrame === "function"
103
+ ? requestAnimationFrame
104
+ : (callback: (timestamp: number) => void) => callback(0);
105
+ scheduleFrame(() => {
106
+ isEmitScheduled = false;
107
+ for (const listener of listeners) {
108
+ listener();
109
+ }
110
+ });
98
111
  };
99
112
 
100
113
  const normalizeDiffDetails = (