@take-out/native-hot-update 0.4.3 → 0.4.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.
- package/dist/cjs/createHotUpdater.cjs +180 -136
- package/dist/cjs/createHotUpdater.native.js +189 -151
- package/dist/cjs/createHotUpdater.native.js.map +1 -1
- package/dist/cjs/helpers.cjs +15 -11
- package/dist/cjs/helpers.native.js +17 -13
- package/dist/cjs/helpers.native.js.map +1 -1
- package/dist/cjs/index.cjs +14 -12
- package/dist/cjs/index.native.js +14 -12
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/mmkv.cjs +12 -10
- package/dist/cjs/mmkv.native.js +12 -10
- package/dist/cjs/mmkv.native.js.map +1 -1
- package/dist/cjs/types.cjs +7 -5
- package/dist/cjs/types.native.js +7 -5
- package/dist/cjs/types.native.js.map +1 -1
- package/dist/esm/createHotUpdater.mjs +152 -110
- package/dist/esm/createHotUpdater.mjs.map +1 -1
- package/dist/esm/createHotUpdater.native.js +161 -125
- package/dist/esm/createHotUpdater.native.js.map +1 -1
- package/dist/esm/helpers.mjs +3 -1
- package/dist/esm/helpers.mjs.map +1 -1
- package/dist/esm/helpers.native.js +3 -1
- package/dist/esm/helpers.native.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","index_exports","HotUpdater","import_react_native","createHotUpdater","import_createHotUpdater","useHotUpdaterStore","module","exports","require"],"sources":["index.native.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar index_exports = {};\n__export(index_exports, {\n HotUpdater: () => import_react_native.HotUpdater,\n createHotUpdater: () => import_createHotUpdater.createHotUpdater,\n useHotUpdaterStore: () => import_react_native.useHotUpdaterStore\n});\nmodule.exports = __toCommonJS(index_exports);\nvar import_react_native = require(\"@hot-updater/react-native\");\nvar import_createHotUpdater = require(\"./createHotUpdater\");\n//# sourceMappingURL=index.js.map\n"],"mappings":"AAAA,YAAY;;AACZ,IAAIA,SAAS,GAAGC,MAAM,CAACC,cAAc;AACrC,IAAIC,gBAAgB,GAAGF,MAAM,CAACG,wBAAwB;AACtD,IAAIC,iBAAiB,GAAGJ,MAAM,CAACK,mBAAmB;AAClD,IAAIC,YAAY,GAAGN,MAAM,CAACO,SAAS,CAACC,cAAc;AAClD,IAAIC,QAAQ,GAAGA,CAACC,MAAM,EAAEC,GAAG,KAAK;EAC9B,KAAK,IAAIC,IAAI,IAAID,GAAG,EAClBZ,SAAS,CAACW,MAAM,EAAEE,IAAI,EAAE;IAAEC,GAAG,EAAEF,GAAG,CAACC,IAAI,CAAC;IAAEE,UAAU,EAAE;EAAK,CAAC,CAAC;AACjE,CAAC;AACD,IAAIC,WAAW,GAAGA,CAACC,EAAE,EAAEC,IAAI,EAAEC,MAAM,EAAEC,IAAI,KAAK;EAC5C,IAAIF,IAAI,IAAI,OAAOA,IAAI,KAAK,QAAQ,IAAI,OAAOA,IAAI,KAAK,UAAU,EAAE;IAClE,KAAK,IAAIG,GAAG,IAAIhB,iBAAiB,CAACa,IAAI,CAAC,EACrC,IAAI,CAACX,YAAY,CAACe,IAAI,CAACL,EAAE,EAAEI,GAAG,CAAC,IAAIA,GAAG,KAAKF,MAAM,EAC/CnB,SAAS,CAACiB,EAAE,EAAEI,GAAG,EAAE;MAAEP,GAAG,EAAEA,CAAA,KAAMI,IAAI,CAACG,GAAG,CAAC;MAAEN,UAAU,EAAE,EAAEK,IAAI,GAAGjB,gBAAgB,CAACe,IAAI,EAAEG,GAAG,CAAC,CAAC,IAAID,IAAI,CAACL;IAAW,CAAC,CAAC;EACxH;EACA,OAAOE,EAAE;AACX,CAAC;AACD,IAAIM,YAAY,GAAIC,GAAG,IAAKR,WAAW,CAAChB,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE;EAAEyB,KAAK,EAAE;AAAK,CAAC,CAAC,EAAED,GAAG,CAAC;AAC1F,IAAIE,aAAa,GAAG,CAAC,CAAC;AACtBhB,QAAQ,CAACgB,aAAa,EAAE;EACtBC,UAAU,EAAEA,CAAA,KAAMC,mBAAmB,CAACD,UAAU;EAChDE,gBAAgB,EAAEA,CAAA,KAAMC,uBAAuB,CAACD,gBAAgB;EAChEE,kBAAkB,EAAEA,CAAA,KAAMH,mBAAmB,CAACG;AAChD,CAAC,CAAC;AACFC,MAAM,CAACC,OAAO,GAAGV,YAAY,CAACG,aAAa,CAAC;AAC5C,IAAIE,mBAAmB,GAAGM,OAAO,CAAC,2BAA2B,CAAC;AAC9D,IAAIJ,uBAAuB,GAAGI,OAAO,CAAC,8BAAoB,CAAC","ignoreList":[]}
|
package/dist/cjs/mmkv.cjs
CHANGED
|
@@ -3,20 +3,22 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
3
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
5
|
var __export = (target, all) => {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
for (var name in all) __defProp(target, name, {
|
|
7
|
+
get: all[name],
|
|
8
|
+
enumerable: true
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
13
14
|
get: () => from[key],
|
|
14
15
|
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
15
16
|
});
|
|
16
|
-
|
|
17
|
-
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
18
20
|
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
19
|
-
value:
|
|
21
|
+
value: true
|
|
20
22
|
}), mod);
|
|
21
23
|
var mmkv_exports = {};
|
|
22
24
|
__export(mmkv_exports, {
|
package/dist/cjs/mmkv.native.js
CHANGED
|
@@ -5,20 +5,22 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
7
|
var __export = (target, all) => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
for (var name in all) __defProp(target, name, {
|
|
9
|
+
get: all[name],
|
|
10
|
+
enumerable: true
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
15
16
|
get: () => from[key],
|
|
16
17
|
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
17
18
|
});
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
20
22
|
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
21
|
-
value:
|
|
23
|
+
value: true
|
|
22
24
|
}), mod);
|
|
23
25
|
var mmkv_exports = {};
|
|
24
26
|
__export(mmkv_exports, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","mmkv_exports","createMMKVStorage","module","exports","mmkv","getString","set","delete"],"sources":["mmkv.native.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar mmkv_exports = {};\n__export(mmkv_exports, {\n createMMKVStorage: () => createMMKVStorage\n});\nmodule.exports = __toCommonJS(mmkv_exports);\nfunction createMMKVStorage(mmkv) {\n return {\n get: function(key) {\n return mmkv.getString(key);\n },\n set: function(key, value) {\n return mmkv.set(key, value);\n },\n delete: function(key) {\n return mmkv.delete(key);\n }\n };\n}\n//# sourceMappingURL=mmkv.js.map\n"],"mappings":"AAAA,YAAY;;AACZ,IAAIA,SAAS,GAAGC,MAAM,CAACC,cAAc;AACrC,IAAIC,gBAAgB,GAAGF,MAAM,CAACG,wBAAwB;AACtD,IAAIC,iBAAiB,GAAGJ,MAAM,CAACK,mBAAmB;AAClD,IAAIC,YAAY,GAAGN,MAAM,CAACO,SAAS,CAACC,cAAc;AAClD,IAAIC,QAAQ,GAAGA,CAACC,MAAM,EAAEC,GAAG,KAAK;EAC9B,KAAK,IAAIC,IAAI,IAAID,GAAG,EAClBZ,SAAS,CAACW,MAAM,EAAEE,IAAI,EAAE;IAAEC,GAAG,EAAEF,GAAG,CAACC,IAAI,CAAC;IAAEE,UAAU,EAAE;EAAK,CAAC,CAAC;AACjE,CAAC;AACD,IAAIC,WAAW,GAAGA,CAACC,EAAE,EAAEC,IAAI,EAAEC,MAAM,EAAEC,IAAI,KAAK;EAC5C,IAAIF,IAAI,IAAI,OAAOA,IAAI,KAAK,QAAQ,IAAI,OAAOA,IAAI,KAAK,UAAU,EAAE;IAClE,KAAK,IAAIG,GAAG,IAAIhB,iBAAiB,CAACa,IAAI,CAAC,EACrC,IAAI,CAACX,YAAY,CAACe,IAAI,CAACL,EAAE,EAAEI,GAAG,CAAC,IAAIA,GAAG,KAAKF,MAAM,EAC/CnB,SAAS,CAACiB,EAAE,EAAEI,GAAG,EAAE;MAAEP,GAAG,EAAEA,CAAA,KAAMI,IAAI,CAACG,GAAG,CAAC;MAAEN,UAAU,EAAE,EAAEK,IAAI,GAAGjB,gBAAgB,CAACe,IAAI,EAAEG,GAAG,CAAC,CAAC,IAAID,IAAI,CAACL;IAAW,CAAC,CAAC;EACxH;EACA,OAAOE,EAAE;AACX,CAAC;AACD,IAAIM,YAAY,GAAIC,GAAG,IAAKR,WAAW,CAAChB,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE;EAAEyB,KAAK,EAAE;AAAK,CAAC,CAAC,EAAED,GAAG,CAAC;AAC1F,IAAIE,YAAY,GAAG,CAAC,CAAC;AACrBhB,QAAQ,CAACgB,YAAY,EAAE;EACrBC,iBAAiB,EAAEA,CAAA,KAAMA;AAC3B,CAAC,CAAC;AACFC,MAAM,CAACC,OAAO,GAAGN,YAAY,CAACG,YAAY,CAAC;AAC3C,SAASC,iBAAiBA,CAACG,IAAI,EAAE;EAC/B,OAAO;IACLhB,GAAG,EAAE,SAAAA,CAASO,GAAG,EAAE;MACjB,OAAOS,IAAI,CAACC,SAAS,CAACV,GAAG,CAAC;IAC5B,CAAC;IACDW,GAAG,EAAE,SAAAA,CAASX,GAAG,EAAEI,KAAK,EAAE;MACxB,OAAOK,IAAI,CAACE,GAAG,CAACX,GAAG,EAAEI,KAAK,CAAC;IAC7B,CAAC;IACDQ,MAAM,EAAE,SAAAA,CAASZ,GAAG,EAAE;MACpB,OAAOS,IAAI,CAACG,MAAM,CAACZ,GAAG,CAAC;IACzB;EACF,CAAC;AACH","ignoreList":[]}
|
package/dist/cjs/types.cjs
CHANGED
|
@@ -3,14 +3,16 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
3
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
5
|
var __copyProps = (to, from, except, desc) => {
|
|
6
|
-
if (from && typeof from
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
7
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
8
|
+
get: () => from[key],
|
|
9
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
10
|
+
});
|
|
11
|
+
}
|
|
10
12
|
return to;
|
|
11
13
|
};
|
|
12
14
|
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
13
|
-
value:
|
|
15
|
+
value: true
|
|
14
16
|
}), mod);
|
|
15
17
|
var types_exports = {};
|
|
16
18
|
module.exports = __toCommonJS(types_exports);
|
package/dist/cjs/types.native.js
CHANGED
|
@@ -5,14 +5,16 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
7
|
var __copyProps = (to, from, except, desc) => {
|
|
8
|
-
if (from && typeof from
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
9
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
10
|
+
get: () => from[key],
|
|
11
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
12
|
+
});
|
|
13
|
+
}
|
|
12
14
|
return to;
|
|
13
15
|
};
|
|
14
16
|
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
15
|
-
value:
|
|
17
|
+
value: true
|
|
16
18
|
}), mod);
|
|
17
19
|
var types_exports = {};
|
|
18
20
|
module.exports = __toCommonJS(types_exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__copyProps","to","from","except","desc","key","call","get","enumerable","__toCommonJS","mod","value","types_exports","module","exports"],"sources":["types.native.js"],"sourcesContent":["\"use strict\";\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toCommonJS = (mod) => __copyProps(__defProp({}, \"__esModule\", { value: true }), mod);\nvar types_exports = {};\nmodule.exports = __toCommonJS(types_exports);\n//# sourceMappingURL=types.js.map\n"],"mappings":"AAAA,YAAY;;AACZ,IAAIA,SAAS,GAAGC,MAAM,CAACC,cAAc;AACrC,IAAIC,gBAAgB,GAAGF,MAAM,CAACG,wBAAwB;AACtD,IAAIC,iBAAiB,GAAGJ,MAAM,CAACK,mBAAmB;AAClD,IAAIC,YAAY,GAAGN,MAAM,CAACO,SAAS,CAACC,cAAc;AAClD,IAAIC,WAAW,GAAGA,CAACC,EAAE,EAAEC,IAAI,EAAEC,MAAM,EAAEC,IAAI,KAAK;EAC5C,IAAIF,IAAI,IAAI,OAAOA,IAAI,KAAK,QAAQ,IAAI,OAAOA,IAAI,KAAK,UAAU,EAAE;IAClE,KAAK,IAAIG,GAAG,IAAIV,iBAAiB,CAACO,IAAI,CAAC,EACrC,IAAI,CAACL,YAAY,CAACS,IAAI,CAACL,EAAE,EAAEI,GAAG,CAAC,IAAIA,GAAG,KAAKF,MAAM,EAC/Cb,SAAS,CAACW,EAAE,EAAEI,GAAG,EAAE;MAAEE,GAAG,EAAEA,CAAA,KAAML,IAAI,CAACG,GAAG,CAAC;MAAEG,UAAU,EAAE,EAAEJ,IAAI,GAAGX,gBAAgB,CAACS,IAAI,EAAEG,GAAG,CAAC,CAAC,IAAID,IAAI,CAACI;IAAW,CAAC,CAAC;EACxH;EACA,OAAOP,EAAE;AACX,CAAC;AACD,IAAIQ,YAAY,GAAIC,GAAG,IAAKV,WAAW,CAACV,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE;EAAEqB,KAAK,EAAE;AAAK,CAAC,CAAC,EAAED,GAAG,CAAC;AAC1F,IAAIE,aAAa,GAAG,CAAC,CAAC;AACtBC,MAAM,CAACC,OAAO,GAAGL,YAAY,CAACG,aAAa,CAAC","ignoreList":[]}
|
|
@@ -2,135 +2,177 @@ import { HotUpdater, useHotUpdaterStore } from "@hot-updater/react-native";
|
|
|
2
2
|
import * as Application from "expo-application";
|
|
3
3
|
import { useEffect, useRef, useState } from "react";
|
|
4
4
|
import { Alert } from "react-native-web";
|
|
5
|
-
const INITIAL_OTA_ID = "00000000-0000-0000-0000-000000000000"
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
const INITIAL_OTA_ID = "00000000-0000-0000-0000-000000000000";
|
|
6
|
+
const BUNDLE_ID_KEY_PREFIX = "hotUpdater.bundleId";
|
|
7
|
+
const PRE_RELEASE_BUNDLE_ID_KEY = "hotUpdater.preReleaseBundleId";
|
|
8
8
|
function createHotUpdater(config) {
|
|
9
9
|
const {
|
|
10
10
|
storage,
|
|
11
11
|
updateStrategy = "appVersion"
|
|
12
12
|
} = config;
|
|
13
|
-
let isUpdatePending =
|
|
13
|
+
let isUpdatePending = false;
|
|
14
14
|
const getAppliedOta = () => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
15
|
+
const id = HotUpdater.getBundleId();
|
|
16
|
+
if (id === INITIAL_OTA_ID) return null;
|
|
17
|
+
if (id === HotUpdater.getMinBundleId()) return null;
|
|
18
|
+
return id;
|
|
19
|
+
};
|
|
20
|
+
const getShortOtaId = () => {
|
|
21
|
+
const fullId = getAppliedOta();
|
|
22
|
+
return fullId ? fullId.slice(-12) : null;
|
|
23
|
+
};
|
|
24
|
+
const getIsUpdatePending = () => {
|
|
25
|
+
return isUpdatePending;
|
|
26
|
+
};
|
|
27
|
+
const getPreReleaseBundleId = () => {
|
|
28
|
+
return storage.get(PRE_RELEASE_BUNDLE_ID_KEY);
|
|
29
|
+
};
|
|
30
|
+
const handleUpdateDownloaded = (id, options = {}) => {
|
|
31
|
+
const appVersion = Application.nativeApplicationVersion;
|
|
32
|
+
if (appVersion) {
|
|
33
|
+
storage.set(`${BUNDLE_ID_KEY_PREFIX}.${appVersion}`, id);
|
|
34
|
+
}
|
|
35
|
+
if (options.isPreRelease) {
|
|
36
|
+
storage.set(PRE_RELEASE_BUNDLE_ID_KEY, id);
|
|
37
|
+
} else {
|
|
38
|
+
storage.delete(PRE_RELEASE_BUNDLE_ID_KEY);
|
|
39
|
+
}
|
|
40
|
+
isUpdatePending = true;
|
|
41
|
+
};
|
|
42
|
+
const useOtaUpdater = (options = {}) => {
|
|
43
|
+
const {
|
|
44
|
+
enabled = true,
|
|
45
|
+
onUpdateDownloaded: onUpdateDownloadedCallback,
|
|
46
|
+
onError
|
|
47
|
+
} = options;
|
|
48
|
+
const progress = useHotUpdaterStore(state => state.progress);
|
|
49
|
+
const isUpdating = progress > 0.01;
|
|
50
|
+
const [isUserClearedForAccess, setIsUserClearedForAccess] = useState(false);
|
|
51
|
+
const isUserClearedForAccessRef = useRef(isUserClearedForAccess);
|
|
52
|
+
isUserClearedForAccessRef.current = isUserClearedForAccess;
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
if (!isUpdating) {
|
|
47
55
|
const timer = setTimeout(() => {
|
|
48
|
-
isUserClearedForAccessRef.current
|
|
49
|
-
|
|
56
|
+
if (!isUserClearedForAccessRef.current) {
|
|
57
|
+
setIsUserClearedForAccess(true);
|
|
58
|
+
}
|
|
59
|
+
}, 5e3);
|
|
50
60
|
return () => clearTimeout(timer);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
61
|
+
}
|
|
62
|
+
return void 0;
|
|
63
|
+
}, [isUpdating]);
|
|
64
|
+
useEffect(() => {
|
|
65
|
+
const timer = setTimeout(() => {
|
|
66
|
+
if (!isUserClearedForAccessRef.current) {
|
|
67
|
+
setIsUserClearedForAccess(true);
|
|
68
|
+
}
|
|
69
|
+
}, 2e4);
|
|
70
|
+
return () => clearTimeout(timer);
|
|
71
|
+
}, []);
|
|
72
|
+
useEffect(() => {
|
|
73
|
+
let shouldContinue = true;
|
|
74
|
+
(async () => {
|
|
75
|
+
try {
|
|
76
|
+
if (!enabled) {
|
|
77
|
+
setIsUserClearedForAccess(true);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (!shouldContinue) return;
|
|
81
|
+
const updateInfo = await HotUpdater.checkForUpdate({
|
|
82
|
+
updateStrategy
|
|
83
|
+
});
|
|
84
|
+
if (!updateInfo) {
|
|
85
|
+
setIsUserClearedForAccess(true);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (!shouldContinue) return;
|
|
89
|
+
if (updateInfo.status === "ROLLBACK") {
|
|
90
|
+
const preReleaseBundleId = getPreReleaseBundleId();
|
|
91
|
+
const currentBundleId = HotUpdater.getBundleId();
|
|
92
|
+
if (preReleaseBundleId && preReleaseBundleId === currentBundleId && currentBundleId > updateInfo.id) {
|
|
93
|
+
Alert.alert("Update Skipped", "Skipped rollback because you are using a newer pre-release bundle.");
|
|
94
|
+
setIsUserClearedForAccess(true);
|
|
57
95
|
return;
|
|
58
96
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
97
|
+
}
|
|
98
|
+
if (!updateInfo.shouldForceUpdate) {
|
|
99
|
+
setIsUserClearedForAccess(true);
|
|
100
|
+
}
|
|
101
|
+
if (!shouldContinue) return;
|
|
102
|
+
await updateInfo.updateBundle();
|
|
103
|
+
handleUpdateDownloaded(updateInfo.id);
|
|
104
|
+
const info = {
|
|
105
|
+
id: updateInfo.id,
|
|
106
|
+
isCriticalUpdate: updateInfo.shouldForceUpdate,
|
|
107
|
+
fileUrl: updateInfo.fileUrl,
|
|
108
|
+
message: updateInfo.message
|
|
109
|
+
};
|
|
110
|
+
onUpdateDownloadedCallback?.(info);
|
|
111
|
+
if (!shouldContinue) return;
|
|
112
|
+
if (updateInfo.shouldForceUpdate) {
|
|
113
|
+
if (!isUserClearedForAccessRef.current) {
|
|
114
|
+
HotUpdater.reload();
|
|
65
115
|
return;
|
|
66
116
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
if (updateInfo.shouldForceUpdate || setIsUserClearedForAccess(!0), !shouldContinue) return;
|
|
77
|
-
await updateInfo.updateBundle(), handleUpdateDownloaded(updateInfo.id);
|
|
78
|
-
const info = {
|
|
79
|
-
id: updateInfo.id,
|
|
80
|
-
isCriticalUpdate: updateInfo.shouldForceUpdate,
|
|
81
|
-
fileUrl: updateInfo.fileUrl,
|
|
82
|
-
message: updateInfo.message
|
|
83
|
-
};
|
|
84
|
-
if (onUpdateDownloadedCallback?.(info), !shouldContinue) return;
|
|
85
|
-
if (updateInfo.shouldForceUpdate) {
|
|
86
|
-
if (!isUserClearedForAccessRef.current) {
|
|
87
|
-
HotUpdater.reload();
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
Alert.alert("Update Downloaded", "An important update has been downloaded. Reload now to apply it?", [{
|
|
91
|
-
text: "Later",
|
|
92
|
-
style: "cancel"
|
|
93
|
-
}, {
|
|
94
|
-
text: "Reload Now",
|
|
95
|
-
onPress: () => HotUpdater.reload()
|
|
96
|
-
}]);
|
|
97
|
-
}
|
|
98
|
-
} catch (error) {
|
|
99
|
-
onError?.(error), setIsUserClearedForAccess(!0);
|
|
100
|
-
} finally {
|
|
101
|
-
isUserClearedForAccessRef.current || setIsUserClearedForAccess(!0);
|
|
117
|
+
Alert.alert("Update Downloaded", "An important update has been downloaded. Reload now to apply it?", [{
|
|
118
|
+
text: "Later",
|
|
119
|
+
style: "cancel"
|
|
120
|
+
}, {
|
|
121
|
+
text: "Reload Now",
|
|
122
|
+
onPress: () => HotUpdater.reload()
|
|
123
|
+
}]);
|
|
102
124
|
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
125
|
+
} catch (error) {
|
|
126
|
+
onError?.(error);
|
|
127
|
+
setIsUserClearedForAccess(true);
|
|
128
|
+
} finally {
|
|
129
|
+
if (!isUserClearedForAccessRef.current) {
|
|
130
|
+
setIsUserClearedForAccess(true);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
})();
|
|
134
|
+
return () => {
|
|
135
|
+
shouldContinue = false;
|
|
110
136
|
};
|
|
111
|
-
},
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
137
|
+
}, [enabled, onUpdateDownloadedCallback, onError]);
|
|
138
|
+
return {
|
|
139
|
+
userClearedForAccess: isUserClearedForAccess,
|
|
140
|
+
progress,
|
|
141
|
+
isUpdatePending: getIsUpdatePending()
|
|
142
|
+
};
|
|
143
|
+
};
|
|
144
|
+
const checkForUpdate = async (options = {}) => {
|
|
145
|
+
const {
|
|
146
|
+
channel,
|
|
147
|
+
isPreRelease = false
|
|
148
|
+
} = options;
|
|
149
|
+
const requestHeaders = {};
|
|
150
|
+
if (channel) {
|
|
151
|
+
requestHeaders["X-Channel"] = channel;
|
|
152
|
+
}
|
|
153
|
+
const updateInfo = await HotUpdater.checkForUpdate({
|
|
154
|
+
updateStrategy,
|
|
155
|
+
...(Object.keys(requestHeaders).length > 0 && {
|
|
156
|
+
requestHeaders
|
|
157
|
+
})
|
|
158
|
+
});
|
|
159
|
+
if (updateInfo) {
|
|
160
|
+
await updateInfo.updateBundle();
|
|
161
|
+
handleUpdateDownloaded(updateInfo.id, {
|
|
126
162
|
isPreRelease
|
|
127
|
-
})
|
|
163
|
+
});
|
|
164
|
+
return {
|
|
128
165
|
id: updateInfo.id,
|
|
129
166
|
isCriticalUpdate: updateInfo.shouldForceUpdate,
|
|
130
167
|
fileUrl: updateInfo.fileUrl,
|
|
131
168
|
message: updateInfo.message
|
|
132
|
-
}
|
|
133
|
-
}
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
return null;
|
|
172
|
+
};
|
|
173
|
+
return {
|
|
174
|
+
useOtaUpdater,
|
|
175
|
+
checkForUpdate,
|
|
134
176
|
getAppliedOta,
|
|
135
177
|
getShortOtaId,
|
|
136
178
|
getIsUpdatePending,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["HotUpdater","useHotUpdaterStore","Application","useEffect","useRef","useState","Alert","INITIAL_OTA_ID","BUNDLE_ID_KEY_PREFIX","PRE_RELEASE_BUNDLE_ID_KEY","createHotUpdater","config","storage","updateStrategy","isUpdatePending","getAppliedOta","id","getBundleId","getMinBundleId","getShortOtaId","fullId","slice","getIsUpdatePending","getPreReleaseBundleId","get","handleUpdateDownloaded","options","appVersion","nativeApplicationVersion","set","isPreRelease","delete","useOtaUpdater","enabled","onUpdateDownloaded","onUpdateDownloadedCallback","onError","progress","state","isUpdating","isUserClearedForAccess","setIsUserClearedForAccess","isUserClearedForAccessRef","current","timer","setTimeout","clearTimeout","shouldContinue","updateInfo","checkForUpdate","status","preReleaseBundleId","currentBundleId","alert","shouldForceUpdate","updateBundle","info","isCriticalUpdate","fileUrl","message","reload","text","style","onPress","error","userClearedForAccess","channel","requestHeaders","Object","keys","length","getChannel","clearCrashHistory","getCrashHistory"],"sources":["../../src/createHotUpdater.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,UAAA,EAAYC,kBAAA,QAA0B;AAC/C,YAAYC,WAAA,MAAiB;AAC7B,SAASC,SAAA,EAAWC,MAAA,EAAQC,QAAA,QAAgB;AAC5C,SAASC,KAAA,QAAa;AAItB,MAAMC,cAAA,GAAiB;
|
|
1
|
+
{"version":3,"names":["HotUpdater","useHotUpdaterStore","Application","useEffect","useRef","useState","Alert","INITIAL_OTA_ID","BUNDLE_ID_KEY_PREFIX","PRE_RELEASE_BUNDLE_ID_KEY","createHotUpdater","config","storage","updateStrategy","isUpdatePending","getAppliedOta","id","getBundleId","getMinBundleId","getShortOtaId","fullId","slice","getIsUpdatePending","getPreReleaseBundleId","get","handleUpdateDownloaded","options","appVersion","nativeApplicationVersion","set","isPreRelease","delete","useOtaUpdater","enabled","onUpdateDownloaded","onUpdateDownloadedCallback","onError","progress","state","isUpdating","isUserClearedForAccess","setIsUserClearedForAccess","isUserClearedForAccessRef","current","timer","setTimeout","clearTimeout","shouldContinue","updateInfo","checkForUpdate","status","preReleaseBundleId","currentBundleId","alert","shouldForceUpdate","updateBundle","info","isCriticalUpdate","fileUrl","message","reload","text","style","onPress","error","userClearedForAccess","channel","requestHeaders","Object","keys","length","getChannel","clearCrashHistory","getCrashHistory"],"sources":["../../src/createHotUpdater.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|