@hot-updater/react-native 0.24.0 → 0.24.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/DefaultResolver.js +38 -0
- package/lib/commonjs/DefaultResolver.js.map +1 -0
- package/lib/commonjs/checkForUpdate.js +35 -50
- package/lib/commonjs/checkForUpdate.js.map +1 -1
- package/lib/commonjs/index.js +26 -14
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/types.js +12 -0
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/wrap.js +44 -13
- package/lib/commonjs/wrap.js.map +1 -1
- package/lib/module/DefaultResolver.js +34 -0
- package/lib/module/DefaultResolver.js.map +1 -0
- package/lib/module/checkForUpdate.js +35 -50
- package/lib/module/checkForUpdate.js.map +1 -1
- package/lib/module/index.js +26 -14
- package/lib/module/index.js.map +1 -1
- package/lib/module/types.js +12 -0
- package/lib/module/types.js.map +1 -1
- package/lib/module/wrap.js +44 -13
- package/lib/module/wrap.js.map +1 -1
- package/lib/typescript/commonjs/DefaultResolver.d.ts +10 -0
- package/lib/typescript/commonjs/DefaultResolver.d.ts.map +1 -0
- package/lib/typescript/commonjs/checkForUpdate.d.ts +2 -1
- package/lib/typescript/commonjs/checkForUpdate.d.ts.map +1 -1
- package/lib/typescript/commonjs/index.d.ts +3 -3
- package/lib/typescript/commonjs/index.d.ts.map +1 -1
- package/lib/typescript/commonjs/types.d.ts +115 -0
- package/lib/typescript/commonjs/types.d.ts.map +1 -1
- package/lib/typescript/commonjs/wrap.d.ts +64 -10
- package/lib/typescript/commonjs/wrap.d.ts.map +1 -1
- package/lib/typescript/module/DefaultResolver.d.ts +10 -0
- package/lib/typescript/module/DefaultResolver.d.ts.map +1 -0
- package/lib/typescript/module/checkForUpdate.d.ts +2 -1
- package/lib/typescript/module/checkForUpdate.d.ts.map +1 -1
- package/lib/typescript/module/index.d.ts +3 -3
- package/lib/typescript/module/index.d.ts.map +1 -1
- package/lib/typescript/module/types.d.ts +115 -0
- package/lib/typescript/module/types.d.ts.map +1 -1
- package/lib/typescript/module/wrap.d.ts +64 -10
- package/lib/typescript/module/wrap.d.ts.map +1 -1
- package/package.json +7 -7
- package/src/DefaultResolver.ts +36 -0
- package/src/checkForUpdate.ts +43 -59
- package/src/index.ts +51 -19
- package/src/types.ts +135 -0
- package/src/wrap.tsx +161 -72
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createDefaultResolver = createDefaultResolver;
|
|
7
|
+
var _fetchUpdateInfo = require("./fetchUpdateInfo.js");
|
|
8
|
+
/**
|
|
9
|
+
* Creates a default resolver that uses baseURL for network operations.
|
|
10
|
+
* This encapsulates the existing baseURL logic into a resolver.
|
|
11
|
+
*
|
|
12
|
+
* @param baseURL - The base URL for the update server
|
|
13
|
+
* @returns A HotUpdaterResolver that uses the baseURL
|
|
14
|
+
*/
|
|
15
|
+
function createDefaultResolver(baseURL) {
|
|
16
|
+
return {
|
|
17
|
+
checkUpdate: async params => {
|
|
18
|
+
// Build URL based on strategy (existing buildUpdateUrl logic)
|
|
19
|
+
let url;
|
|
20
|
+
if (params.updateStrategy === "fingerprint") {
|
|
21
|
+
if (!params.fingerprintHash) {
|
|
22
|
+
throw new Error("Fingerprint hash is required");
|
|
23
|
+
}
|
|
24
|
+
url = `${baseURL}/fingerprint/${params.platform}/${params.fingerprintHash}/${params.channel}/${params.minBundleId}/${params.bundleId}`;
|
|
25
|
+
} else {
|
|
26
|
+
url = `${baseURL}/app-version/${params.platform}/${params.appVersion}/${params.channel}/${params.minBundleId}/${params.bundleId}`;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
// Use existing fetchUpdateInfo
|
|
30
|
+
return (0, _fetchUpdateInfo.fetchUpdateInfo)({
|
|
31
|
+
url,
|
|
32
|
+
requestHeaders: params.requestHeaders,
|
|
33
|
+
requestTimeout: params.requestTimeout
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=DefaultResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_fetchUpdateInfo","require","createDefaultResolver","baseURL","checkUpdate","params","url","updateStrategy","fingerprintHash","Error","platform","channel","minBundleId","bundleId","appVersion","fetchUpdateInfo","requestHeaders","requestTimeout"],"sourceRoot":"../../src","sources":["DefaultResolver.ts"],"mappings":";;;;;;AACA,IAAAA,gBAAA,GAAAC,OAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,qBAAqBA,CAACC,OAAe,EAAsB;EACzE,OAAO;IACLC,WAAW,EAAE,MACXC,MAAiC,IACC;MAClC;MACA,IAAIC,GAAW;MACf,IAAID,MAAM,CAACE,cAAc,KAAK,aAAa,EAAE;QAC3C,IAAI,CAACF,MAAM,CAACG,eAAe,EAAE;UAC3B,MAAM,IAAIC,KAAK,CAAC,8BAA8B,CAAC;QACjD;QACAH,GAAG,GAAG,GAAGH,OAAO,gBAAgBE,MAAM,CAACK,QAAQ,IAAIL,MAAM,CAACG,eAAe,IAAIH,MAAM,CAACM,OAAO,IAAIN,MAAM,CAACO,WAAW,IAAIP,MAAM,CAACQ,QAAQ,EAAE;MACxI,CAAC,MAAM;QACLP,GAAG,GAAG,GAAGH,OAAO,gBAAgBE,MAAM,CAACK,QAAQ,IAAIL,MAAM,CAACS,UAAU,IAAIT,MAAM,CAACM,OAAO,IAAIN,MAAM,CAACO,WAAW,IAAIP,MAAM,CAACQ,QAAQ,EAAE;MACnI;;MAEA;MACA,OAAO,IAAAE,gCAAe,EAAC;QACrBT,GAAG;QACHU,cAAc,EAAEX,MAAM,CAACW,cAAc;QACrCC,cAAc,EAAEZ,MAAM,CAACY;MACzB,CAAC,CAAC;IACJ;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -6,26 +6,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.checkForUpdate = checkForUpdate;
|
|
7
7
|
var _reactNative = require("react-native");
|
|
8
8
|
var _error = require("./error.js");
|
|
9
|
-
var _fetchUpdateInfo = require("./fetchUpdateInfo.js");
|
|
10
9
|
var _native = require("./native.js");
|
|
11
|
-
// Internal type that includes
|
|
10
|
+
// Internal type that includes resolver for use within index.ts
|
|
12
11
|
|
|
13
|
-
// Internal function to build update URL (not exported)
|
|
14
|
-
function buildUpdateUrl(baseURL, updateStrategy, params) {
|
|
15
|
-
switch (updateStrategy) {
|
|
16
|
-
case "fingerprint":
|
|
17
|
-
{
|
|
18
|
-
if (!params.fingerprintHash) {
|
|
19
|
-
throw new _error.HotUpdaterError("Fingerprint hash is required");
|
|
20
|
-
}
|
|
21
|
-
return `${baseURL}/fingerprint/${params.platform}/${params.fingerprintHash}/${params.channel}/${params.minBundleId}/${params.bundleId}`;
|
|
22
|
-
}
|
|
23
|
-
case "appVersion":
|
|
24
|
-
{
|
|
25
|
-
return `${baseURL}/app-version/${params.platform}/${params.appVersion}/${params.channel}/${params.minBundleId}/${params.bundleId}`;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
12
|
async function checkForUpdate(options) {
|
|
30
13
|
if (__DEV__) {
|
|
31
14
|
return null;
|
|
@@ -34,10 +17,6 @@ async function checkForUpdate(options) {
|
|
|
34
17
|
options.onError?.(new _error.HotUpdaterError("HotUpdater is only supported on iOS and Android"));
|
|
35
18
|
return null;
|
|
36
19
|
}
|
|
37
|
-
if (!options.baseURL || !options.updateStrategy) {
|
|
38
|
-
options.onError?.(new _error.HotUpdaterError("'baseURL' and 'updateStrategy' are required"));
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
20
|
const currentAppVersion = (0, _native.getAppVersion)();
|
|
42
21
|
const platform = _reactNative.Platform.OS;
|
|
43
22
|
const currentBundleId = (0, _native.getBundleId)();
|
|
@@ -48,34 +27,40 @@ async function checkForUpdate(options) {
|
|
|
48
27
|
return null;
|
|
49
28
|
}
|
|
50
29
|
const fingerprintHash = (0, _native.getFingerprintHash)();
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
30
|
+
if (!options.resolver?.checkUpdate) {
|
|
31
|
+
options.onError?.(new _error.HotUpdaterError("Resolver is required but not configured"));
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
let updateInfo = null;
|
|
35
|
+
try {
|
|
36
|
+
updateInfo = await options.resolver.checkUpdate({
|
|
37
|
+
platform,
|
|
38
|
+
appVersion: currentAppVersion,
|
|
39
|
+
bundleId: currentBundleId,
|
|
40
|
+
minBundleId,
|
|
41
|
+
channel,
|
|
42
|
+
updateStrategy: options.updateStrategy,
|
|
43
|
+
fingerprintHash,
|
|
44
|
+
requestHeaders: options.requestHeaders,
|
|
45
|
+
requestTimeout: options.requestTimeout
|
|
46
|
+
});
|
|
47
|
+
} catch (error) {
|
|
48
|
+
options.onError?.(error);
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
if (!updateInfo) {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
...updateInfo,
|
|
56
|
+
updateBundle: async () => {
|
|
57
|
+
return (0, _native.updateBundle)({
|
|
58
|
+
bundleId: updateInfo.id,
|
|
59
|
+
fileUrl: updateInfo.fileUrl,
|
|
60
|
+
fileHash: updateInfo.fileHash,
|
|
61
|
+
status: updateInfo.status
|
|
62
|
+
});
|
|
67
63
|
}
|
|
68
|
-
|
|
69
|
-
...updateInfo,
|
|
70
|
-
updateBundle: async () => {
|
|
71
|
-
return (0, _native.updateBundle)({
|
|
72
|
-
bundleId: updateInfo.id,
|
|
73
|
-
fileUrl: updateInfo.fileUrl,
|
|
74
|
-
fileHash: updateInfo.fileHash,
|
|
75
|
-
status: updateInfo.status
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
});
|
|
64
|
+
};
|
|
80
65
|
}
|
|
81
66
|
//# sourceMappingURL=checkForUpdate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_error","
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_error","_native","checkForUpdate","options","__DEV__","includes","Platform","OS","onError","HotUpdaterError","currentAppVersion","getAppVersion","platform","currentBundleId","getBundleId","minBundleId","getMinBundleId","channel","getChannel","fingerprintHash","getFingerprintHash","resolver","checkUpdate","updateInfo","appVersion","bundleId","updateStrategy","requestHeaders","requestTimeout","error","updateBundle","id","fileUrl","fileHash","status"],"sourceRoot":"../../src","sources":["checkForUpdate.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AAoCA;;AAKO,eAAeG,cAAcA,CAClCC,OAAsC,EACA;EACtC,IAAIC,OAAO,EAAE;IACX,OAAO,IAAI;EACb;EAEA,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAACC,QAAQ,CAACC,qBAAQ,CAACC,EAAE,CAAC,EAAE;IAC7CJ,OAAO,CAACK,OAAO,GACb,IAAIC,sBAAe,CAAC,iDAAiD,CACvE,CAAC;IACD,OAAO,IAAI;EACb;EAEA,MAAMC,iBAAiB,GAAG,IAAAC,qBAAa,EAAC,CAAC;EACzC,MAAMC,QAAQ,GAAGN,qBAAQ,CAACC,EAAuB;EACjD,MAAMM,eAAe,GAAG,IAAAC,mBAAW,EAAC,CAAC;EACrC,MAAMC,WAAW,GAAG,IAAAC,sBAAc,EAAC,CAAC;EACpC,MAAMC,OAAO,GAAG,IAAAC,kBAAU,EAAC,CAAC;EAE5B,IAAI,CAACR,iBAAiB,EAAE;IACtBP,OAAO,CAACK,OAAO,GAAG,IAAIC,sBAAe,CAAC,2BAA2B,CAAC,CAAC;IACnE,OAAO,IAAI;EACb;EAEA,MAAMU,eAAe,GAAG,IAAAC,0BAAkB,EAAC,CAAC;EAE5C,IAAI,CAACjB,OAAO,CAACkB,QAAQ,EAAEC,WAAW,EAAE;IAClCnB,OAAO,CAACK,OAAO,GACb,IAAIC,sBAAe,CAAC,yCAAyC,CAC/D,CAAC;IACD,OAAO,IAAI;EACb;EAEA,IAAIc,UAAgC,GAAG,IAAI;EAE3C,IAAI;IACFA,UAAU,GAAG,MAAMpB,OAAO,CAACkB,QAAQ,CAACC,WAAW,CAAC;MAC9CV,QAAQ;MACRY,UAAU,EAAEd,iBAAiB;MAC7Be,QAAQ,EAAEZ,eAAe;MACzBE,WAAW;MACXE,OAAO;MACPS,cAAc,EAAEvB,OAAO,CAACuB,cAAc;MACtCP,eAAe;MACfQ,cAAc,EAAExB,OAAO,CAACwB,cAAc;MACtCC,cAAc,EAAEzB,OAAO,CAACyB;IAC1B,CAAC,CAAC;EACJ,CAAC,CAAC,OAAOC,KAAK,EAAE;IACd1B,OAAO,CAACK,OAAO,GAAGqB,KAAc,CAAC;IACjC,OAAO,IAAI;EACb;EAEA,IAAI,CAACN,UAAU,EAAE;IACf,OAAO,IAAI;EACb;EAEA,OAAO;IACL,GAAGA,UAAU;IACbO,YAAY,EAAE,MAAAA,CAAA,KAAY;MACxB,OAAO,IAAAA,oBAAY,EAAC;QAClBL,QAAQ,EAAEF,UAAU,CAACQ,EAAE;QACvBC,OAAO,EAAET,UAAU,CAACS,OAAO;QAC3BC,QAAQ,EAAEV,UAAU,CAACU,QAAQ;QAC7BC,MAAM,EAAEX,UAAU,CAACW;MACrB,CAAC,CAAC;IACJ;EACF,CAAC;AACH","ignoreList":[]}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -22,6 +22,7 @@ Object.defineProperty(exports, "isSignatureVerificationError", {
|
|
|
22
22
|
}
|
|
23
23
|
});
|
|
24
24
|
var _checkForUpdate = require("./checkForUpdate.js");
|
|
25
|
+
var _DefaultResolver = require("./DefaultResolver.js");
|
|
25
26
|
var _native = require("./native.js");
|
|
26
27
|
var _store = require("./store.js");
|
|
27
28
|
Object.keys(_store).forEach(function (key) {
|
|
@@ -52,14 +53,14 @@ var _types = require("./types.js");
|
|
|
52
53
|
function createHotUpdaterClient() {
|
|
53
54
|
// Global configuration stored from wrap
|
|
54
55
|
const globalConfig = {
|
|
55
|
-
|
|
56
|
+
resolver: null
|
|
56
57
|
};
|
|
57
|
-
|
|
58
|
-
if (globalConfig.
|
|
58
|
+
const ensureGlobalResolver = methodName => {
|
|
59
|
+
if (!globalConfig.resolver) {
|
|
59
60
|
throw new Error(`[HotUpdater] ${methodName} requires HotUpdater.wrap() to be used.\n\n` + `To fix this issue, wrap your root component with HotUpdater.wrap():\n\n` + `Option 1: With automatic updates\n` + ` export default HotUpdater.wrap({\n` + ` baseURL: "<your-update-server-url>",\n` + ` updateStrategy: "appVersion",\n` + ` updateMode: "auto"\n` + ` })(App);\n\n` + `Option 2: Manual updates only (custom flow)\n` + ` export default HotUpdater.wrap({\n` + ` baseURL: "<your-update-server-url>",\n` + ` updateMode: "manual"\n` + ` })(App);\n\n` + `For more information, visit: https://hot-updater.dev/docs/react-native-api/wrap`);
|
|
60
61
|
}
|
|
61
|
-
return globalConfig.
|
|
62
|
-
}
|
|
62
|
+
return globalConfig.resolver;
|
|
63
|
+
};
|
|
63
64
|
return {
|
|
64
65
|
/**
|
|
65
66
|
* `HotUpdater.wrap` checks for updates at the entry point, and if there is a bundle to update, it downloads the bundle and applies the update strategy.
|
|
@@ -86,10 +87,25 @@ function createHotUpdaterClient() {
|
|
|
86
87
|
* ```
|
|
87
88
|
*/
|
|
88
89
|
wrap: options => {
|
|
89
|
-
|
|
90
|
+
let normalizedOptions;
|
|
91
|
+
if ("baseURL" in options && options.baseURL) {
|
|
92
|
+
const {
|
|
93
|
+
baseURL,
|
|
94
|
+
...rest
|
|
95
|
+
} = options;
|
|
96
|
+
normalizedOptions = {
|
|
97
|
+
...rest,
|
|
98
|
+
resolver: (0, _DefaultResolver.createDefaultResolver)(baseURL)
|
|
99
|
+
};
|
|
100
|
+
} else if ("resolver" in options && options.resolver) {
|
|
101
|
+
normalizedOptions = options;
|
|
102
|
+
} else {
|
|
103
|
+
throw new Error(`[HotUpdater] Either baseURL or resolver must be provided.\n\n` + `Option 1: Using baseURL (recommended for most cases)\n` + ` export default HotUpdater.wrap({\n` + ` baseURL: "<your-update-server-url>",\n` + ` updateStrategy: "appVersion",\n` + ` updateMode: "auto"\n` + ` })(App);\n\n` + `Option 2: Using custom resolver (advanced)\n` + ` export default HotUpdater.wrap({\n` + ` resolver: {\n` + ` checkUpdate: async (params) => { /* custom logic */ },\n` + ` notifyAppReady: async (params) => { /* custom logic */ }\n` + ` },\n` + ` updateMode: "manual"\n` + ` })(App);\n\n` + `For more information, visit: https://hot-updater.dev/docs/react-native-api/wrap`);
|
|
104
|
+
}
|
|
105
|
+
globalConfig.resolver = normalizedOptions.resolver;
|
|
90
106
|
globalConfig.requestHeaders = options.requestHeaders;
|
|
91
107
|
globalConfig.requestTimeout = options.requestTimeout;
|
|
92
|
-
return (0, _wrap.wrap)(
|
|
108
|
+
return (0, _wrap.wrap)(normalizedOptions);
|
|
93
109
|
},
|
|
94
110
|
/**
|
|
95
111
|
* Reloads the app.
|
|
@@ -187,14 +203,10 @@ function createHotUpdaterClient() {
|
|
|
187
203
|
* ```
|
|
188
204
|
*/
|
|
189
205
|
checkForUpdate: config => {
|
|
190
|
-
const
|
|
191
|
-
|
|
192
|
-
// Merge globalConfig with provided config
|
|
193
|
-
// baseURL is always from wrap (globalConfig)
|
|
194
|
-
// requestHeaders/requestTimeout from wrap are used as defaults, but can be overridden
|
|
206
|
+
const resolver = ensureGlobalResolver("checkForUpdate");
|
|
195
207
|
const mergedConfig = {
|
|
196
208
|
...config,
|
|
197
|
-
|
|
209
|
+
resolver,
|
|
198
210
|
requestHeaders: {
|
|
199
211
|
...globalConfig.requestHeaders,
|
|
200
212
|
...config.requestHeaders
|
|
@@ -237,7 +249,7 @@ function createHotUpdaterClient() {
|
|
|
237
249
|
* ```
|
|
238
250
|
*/
|
|
239
251
|
updateBundle: params => {
|
|
240
|
-
|
|
252
|
+
ensureGlobalResolver("updateBundle");
|
|
241
253
|
return (0, _native.updateBundle)(params);
|
|
242
254
|
},
|
|
243
255
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_checkForUpdate","require","_native","_store","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_wrap","_types","addListener","progress","hotUpdaterStore","setState","createHotUpdaterClient","globalConfig","
|
|
1
|
+
{"version":3,"names":["_checkForUpdate","require","_DefaultResolver","_native","_store","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_wrap","_types","addListener","progress","hotUpdaterStore","setState","createHotUpdaterClient","globalConfig","resolver","ensureGlobalResolver","methodName","Error","wrap","options","normalizedOptions","baseURL","rest","createDefaultResolver","requestHeaders","requestTimeout","reload","isUpdateDownloaded","getSnapshot","getAppVersion","getBundleId","getMinBundleId","getChannel","checkForUpdate","config","mergedConfig","updateBundle","params","getFingerprintHash","getCrashHistory","clearCrashHistory","HotUpdater"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIxB,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;IACIyB,cAAc,EAAGC,MAA6B,IAAK;MACjD,MAAMpB,QAAQ,GAAGC,oBAAoB,CAAC,gBAAgB,CAAC;MAEvD,MAAMoB,YAA2C,GAAG;QAClD,GAAGD,MAAM;QACTpB,QAAQ;QACRU,cAAc,EAAE;UACd,GAAGX,YAAY,CAACW,cAAc;UAC9B,GAAGU,MAAM,CAACV;QACZ,CAAC;QACDC,cAAc,EAAES,MAAM,CAACT,cAAc,IAAIZ,YAAY,CAACY;MACxD,CAAC;MAED,OAAO,IAAAQ,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;MACtCtB,oBAAoB,CAAC,cAAc,CAAC;MACpC,OAAO,IAAAqB,oBAAY,EAACC,MAAM,CAAC;IAC7B,CAAC;IAED;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;IACIC,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,GAAAvC,OAAA,CAAAuC,UAAA,GAAG7B,sBAAsB,CAAC,CAAC","ignoreList":[]}
|
package/lib/commonjs/types.js
CHANGED
|
@@ -5,6 +5,18 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.extractSignatureFailure = extractSignatureFailure;
|
|
7
7
|
exports.isSignatureVerificationError = isSignatureVerificationError;
|
|
8
|
+
/**
|
|
9
|
+
* Parameters passed to resolver.checkUpdate method
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Parameters passed to resolver.notifyAppReady method
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Resolver interface for custom network operations
|
|
18
|
+
*/
|
|
19
|
+
|
|
8
20
|
/**
|
|
9
21
|
* Information about a signature verification failure.
|
|
10
22
|
* This is a security-critical event that indicates the bundle
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["isSignatureVerificationError","error","Error","message","toLowerCase","includes","extractSignatureFailure","bundleId","normalizedError","String"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"names":["isSignatureVerificationError","error","Error","message","toLowerCase","includes","extractSignatureFailure","bundleId","normalizedError","String"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;;;;;;AAGA;AACA;AACA;;AAgDA;AACA;AACA;;AA0BA;AACA;AACA;;AAoDA;AACA;AACA;AACA;AACA;;AAgBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,4BAA4BA,CAACC,KAAc,EAAW;EACpE,IAAI,EAAEA,KAAK,YAAYC,KAAK,CAAC,EAAE;IAC7B,OAAO,KAAK;EACd;EAEA,MAAMC,OAAO,GAAGF,KAAK,CAACE,OAAO,CAACC,WAAW,CAAC,CAAC;;EAE3C;EACA;EACA,OACED,OAAO,CAACE,QAAQ,CAAC,wBAAwB,CAAC,IAC1CF,OAAO,CAACE,QAAQ,CAAC,2BAA2B,CAAC,IAC7CF,OAAO,CAACE,QAAQ,CAAC,8BAA8B,CAAC,IAChDF,OAAO,CAACE,QAAQ,CAAC,6BAA6B,CAAC,IAC/CF,OAAO,CAACE,QAAQ,CAAC,qCAAqC,CAAC;AAE3D;;AAEA;AACA;AACA;AACO,SAASC,uBAAuBA,CACrCL,KAAc,EACdM,QAAgB,EACc;EAC9B,MAAMC,eAAe,GACnBP,KAAK,YAAYC,KAAK,GAAGD,KAAK,GAAG,IAAIC,KAAK,CAACO,MAAM,CAACR,KAAK,CAAC,CAAC;EAE3D,OAAO;IACLM,QAAQ;IACRJ,OAAO,EAAEK,eAAe,CAACL,OAAO;IAChCF,KAAK,EAAEO;EACT,CAAC;AACH","ignoreList":[]}
|
package/lib/commonjs/wrap.js
CHANGED
|
@@ -16,17 +16,53 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
|
|
|
16
16
|
* Common options shared between auto and manual update modes
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Configuration with baseURL for standard server-based updates
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Configuration with resolver for custom network operations
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Union type ensuring baseURL and resolver are mutually exclusive
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Internal options after normalization in index.ts
|
|
33
|
+
* Always has resolver (never baseURL)
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Helper function to handle notifyAppReady flow
|
|
38
|
+
*/
|
|
39
|
+
const handleNotifyAppReady = async options => {
|
|
40
|
+
try {
|
|
41
|
+
// Always call native notifyAppReady for bundle promotion
|
|
42
|
+
const nativeResult = (0, _native.notifyAppReady)();
|
|
43
|
+
|
|
44
|
+
// If resolver.notifyAppReady exists, call it with simplified params
|
|
45
|
+
if (options.resolver?.notifyAppReady) {
|
|
46
|
+
await options.resolver.notifyAppReady({
|
|
47
|
+
status: nativeResult.status,
|
|
48
|
+
crashedBundleId: nativeResult.crashedBundleId,
|
|
49
|
+
requestHeaders: options.requestHeaders,
|
|
50
|
+
requestTimeout: options.requestTimeout
|
|
51
|
+
}).catch(e => {
|
|
52
|
+
console.warn("[HotUpdater] Resolver notifyAppReady failed:", e);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
options.onNotifyAppReady?.(nativeResult);
|
|
56
|
+
} catch (e) {
|
|
57
|
+
console.warn("[HotUpdater] Failed to notify app ready:", e);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
19
60
|
function wrap(options) {
|
|
20
61
|
if (options.updateMode === "manual") {
|
|
21
62
|
return WrappedComponent => {
|
|
22
63
|
const ManualHOC = props => {
|
|
23
64
|
(0, _react.useLayoutEffect)(() => {
|
|
24
|
-
|
|
25
|
-
const result = (0, _native.notifyAppReady)();
|
|
26
|
-
options.onNotifyAppReady?.(result);
|
|
27
|
-
} catch (e) {
|
|
28
|
-
console.warn("[HotUpdater] Failed to notify app ready:", e);
|
|
29
|
-
}
|
|
65
|
+
void handleNotifyAppReady(options);
|
|
30
66
|
}, []);
|
|
31
67
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(WrappedComponent, {
|
|
32
68
|
...props
|
|
@@ -50,7 +86,7 @@ function wrap(options) {
|
|
|
50
86
|
try {
|
|
51
87
|
setUpdateStatus("CHECK_FOR_UPDATE");
|
|
52
88
|
const updateInfo = await (0, _checkForUpdate.checkForUpdate)({
|
|
53
|
-
|
|
89
|
+
resolver: restOptions.resolver,
|
|
54
90
|
updateStrategy: restOptions.updateStrategy,
|
|
55
91
|
requestHeaders: restOptions.requestHeaders,
|
|
56
92
|
requestTimeout: restOptions.requestTimeout,
|
|
@@ -107,12 +143,7 @@ function wrap(options) {
|
|
|
107
143
|
|
|
108
144
|
// Notify native side that app is ready (JS bundle fully loaded)
|
|
109
145
|
(0, _react.useLayoutEffect)(() => {
|
|
110
|
-
|
|
111
|
-
const result = (0, _native.notifyAppReady)();
|
|
112
|
-
restOptions.onNotifyAppReady?.(result);
|
|
113
|
-
} catch (e) {
|
|
114
|
-
console.warn("[HotUpdater] Failed to notify app ready:", e);
|
|
115
|
-
}
|
|
146
|
+
void handleNotifyAppReady(restOptions);
|
|
116
147
|
}, []);
|
|
117
148
|
|
|
118
149
|
// Start update check
|
package/lib/commonjs/wrap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_checkForUpdate","_useEventCallback","_native","_store","_jsxRuntime","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_checkForUpdate","_useEventCallback","_native","_store","_jsxRuntime","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","handleNotifyAppReady","options","nativeResult","nativeNotifyAppReady","resolver","notifyAppReady","status","crashedBundleId","requestHeaders","requestTimeout","catch","console","warn","onNotifyAppReady","wrap","updateMode","WrappedComponent","ManualHOC","props","useLayoutEffect","jsx","reloadOnForceUpdate","restOptions","HotUpdaterHOC","progress","useHotUpdaterStore","state","message","setMessage","useState","updateStatus","setUpdateStatus","initHotUpdater","useEventCallback","updateInfo","checkForUpdate","updateStrategy","onError","onUpdateProcessCompleted","shouldForceUpdate","id","getBundleId","updateBundle","error","isSuccess","Error","reload","useEffect","onProgress","fallbackComponent","Fallback"],"sourceRoot":"../../src","sources":["wrap.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { fetchUpdateInfo } from "./fetchUpdateInfo.js";
|
|
4
|
+
/**
|
|
5
|
+
* Creates a default resolver that uses baseURL for network operations.
|
|
6
|
+
* This encapsulates the existing baseURL logic into a resolver.
|
|
7
|
+
*
|
|
8
|
+
* @param baseURL - The base URL for the update server
|
|
9
|
+
* @returns A HotUpdaterResolver that uses the baseURL
|
|
10
|
+
*/
|
|
11
|
+
export function createDefaultResolver(baseURL) {
|
|
12
|
+
return {
|
|
13
|
+
checkUpdate: async params => {
|
|
14
|
+
// Build URL based on strategy (existing buildUpdateUrl logic)
|
|
15
|
+
let url;
|
|
16
|
+
if (params.updateStrategy === "fingerprint") {
|
|
17
|
+
if (!params.fingerprintHash) {
|
|
18
|
+
throw new Error("Fingerprint hash is required");
|
|
19
|
+
}
|
|
20
|
+
url = `${baseURL}/fingerprint/${params.platform}/${params.fingerprintHash}/${params.channel}/${params.minBundleId}/${params.bundleId}`;
|
|
21
|
+
} else {
|
|
22
|
+
url = `${baseURL}/app-version/${params.platform}/${params.appVersion}/${params.channel}/${params.minBundleId}/${params.bundleId}`;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Use existing fetchUpdateInfo
|
|
26
|
+
return fetchUpdateInfo({
|
|
27
|
+
url,
|
|
28
|
+
requestHeaders: params.requestHeaders,
|
|
29
|
+
requestTimeout: params.requestTimeout
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=DefaultResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["fetchUpdateInfo","createDefaultResolver","baseURL","checkUpdate","params","url","updateStrategy","fingerprintHash","Error","platform","channel","minBundleId","bundleId","appVersion","requestHeaders","requestTimeout"],"sourceRoot":"../../src","sources":["DefaultResolver.ts"],"mappings":";;AACA,SAASA,eAAe,QAAQ,sBAAmB;AAGnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,qBAAqBA,CAACC,OAAe,EAAsB;EACzE,OAAO;IACLC,WAAW,EAAE,MACXC,MAAiC,IACC;MAClC;MACA,IAAIC,GAAW;MACf,IAAID,MAAM,CAACE,cAAc,KAAK,aAAa,EAAE;QAC3C,IAAI,CAACF,MAAM,CAACG,eAAe,EAAE;UAC3B,MAAM,IAAIC,KAAK,CAAC,8BAA8B,CAAC;QACjD;QACAH,GAAG,GAAG,GAAGH,OAAO,gBAAgBE,MAAM,CAACK,QAAQ,IAAIL,MAAM,CAACG,eAAe,IAAIH,MAAM,CAACM,OAAO,IAAIN,MAAM,CAACO,WAAW,IAAIP,MAAM,CAACQ,QAAQ,EAAE;MACxI,CAAC,MAAM;QACLP,GAAG,GAAG,GAAGH,OAAO,gBAAgBE,MAAM,CAACK,QAAQ,IAAIL,MAAM,CAACS,UAAU,IAAIT,MAAM,CAACM,OAAO,IAAIN,MAAM,CAACO,WAAW,IAAIP,MAAM,CAACQ,QAAQ,EAAE;MACnI;;MAEA;MACA,OAAOZ,eAAe,CAAC;QACrBK,GAAG;QACHS,cAAc,EAAEV,MAAM,CAACU,cAAc;QACrCC,cAAc,EAAEX,MAAM,CAACW;MACzB,CAAC,CAAC;IACJ;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -2,27 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
import { Platform } from "react-native";
|
|
4
4
|
import { HotUpdaterError } from "./error.js";
|
|
5
|
-
import { fetchUpdateInfo } from "./fetchUpdateInfo.js";
|
|
6
5
|
import { getAppVersion, getBundleId, getChannel, getFingerprintHash, getMinBundleId, updateBundle } from "./native.js";
|
|
7
6
|
|
|
8
|
-
// Internal type that includes
|
|
7
|
+
// Internal type that includes resolver for use within index.ts
|
|
9
8
|
|
|
10
|
-
// Internal function to build update URL (not exported)
|
|
11
|
-
function buildUpdateUrl(baseURL, updateStrategy, params) {
|
|
12
|
-
switch (updateStrategy) {
|
|
13
|
-
case "fingerprint":
|
|
14
|
-
{
|
|
15
|
-
if (!params.fingerprintHash) {
|
|
16
|
-
throw new HotUpdaterError("Fingerprint hash is required");
|
|
17
|
-
}
|
|
18
|
-
return `${baseURL}/fingerprint/${params.platform}/${params.fingerprintHash}/${params.channel}/${params.minBundleId}/${params.bundleId}`;
|
|
19
|
-
}
|
|
20
|
-
case "appVersion":
|
|
21
|
-
{
|
|
22
|
-
return `${baseURL}/app-version/${params.platform}/${params.appVersion}/${params.channel}/${params.minBundleId}/${params.bundleId}`;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
9
|
export async function checkForUpdate(options) {
|
|
27
10
|
if (__DEV__) {
|
|
28
11
|
return null;
|
|
@@ -31,10 +14,6 @@ export async function checkForUpdate(options) {
|
|
|
31
14
|
options.onError?.(new HotUpdaterError("HotUpdater is only supported on iOS and Android"));
|
|
32
15
|
return null;
|
|
33
16
|
}
|
|
34
|
-
if (!options.baseURL || !options.updateStrategy) {
|
|
35
|
-
options.onError?.(new HotUpdaterError("'baseURL' and 'updateStrategy' are required"));
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
17
|
const currentAppVersion = getAppVersion();
|
|
39
18
|
const platform = Platform.OS;
|
|
40
19
|
const currentBundleId = getBundleId();
|
|
@@ -45,34 +24,40 @@ export async function checkForUpdate(options) {
|
|
|
45
24
|
return null;
|
|
46
25
|
}
|
|
47
26
|
const fingerprintHash = getFingerprintHash();
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
27
|
+
if (!options.resolver?.checkUpdate) {
|
|
28
|
+
options.onError?.(new HotUpdaterError("Resolver is required but not configured"));
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
let updateInfo = null;
|
|
32
|
+
try {
|
|
33
|
+
updateInfo = await options.resolver.checkUpdate({
|
|
34
|
+
platform,
|
|
35
|
+
appVersion: currentAppVersion,
|
|
36
|
+
bundleId: currentBundleId,
|
|
37
|
+
minBundleId,
|
|
38
|
+
channel,
|
|
39
|
+
updateStrategy: options.updateStrategy,
|
|
40
|
+
fingerprintHash,
|
|
41
|
+
requestHeaders: options.requestHeaders,
|
|
42
|
+
requestTimeout: options.requestTimeout
|
|
43
|
+
});
|
|
44
|
+
} catch (error) {
|
|
45
|
+
options.onError?.(error);
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
if (!updateInfo) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
...updateInfo,
|
|
53
|
+
updateBundle: async () => {
|
|
54
|
+
return updateBundle({
|
|
55
|
+
bundleId: updateInfo.id,
|
|
56
|
+
fileUrl: updateInfo.fileUrl,
|
|
57
|
+
fileHash: updateInfo.fileHash,
|
|
58
|
+
status: updateInfo.status
|
|
59
|
+
});
|
|
64
60
|
}
|
|
65
|
-
|
|
66
|
-
...updateInfo,
|
|
67
|
-
updateBundle: async () => {
|
|
68
|
-
return updateBundle({
|
|
69
|
-
bundleId: updateInfo.id,
|
|
70
|
-
fileUrl: updateInfo.fileUrl,
|
|
71
|
-
fileHash: updateInfo.fileHash,
|
|
72
|
-
status: updateInfo.status
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
});
|
|
61
|
+
};
|
|
77
62
|
}
|
|
78
63
|
//# sourceMappingURL=checkForUpdate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Platform","HotUpdaterError","
|
|
1
|
+
{"version":3,"names":["Platform","HotUpdaterError","getAppVersion","getBundleId","getChannel","getFingerprintHash","getMinBundleId","updateBundle","checkForUpdate","options","__DEV__","includes","OS","onError","currentAppVersion","platform","currentBundleId","minBundleId","channel","fingerprintHash","resolver","checkUpdate","updateInfo","appVersion","bundleId","updateStrategy","requestHeaders","requestTimeout","error","id","fileUrl","fileHash","status"],"sourceRoot":"../../src","sources":["checkForUpdate.ts"],"mappings":";;AACA,SAASA,QAAQ,QAAQ,cAAc;AACvC,SAASC,eAAe,QAAQ,YAAS;AACzC,SACEC,aAAa,EACbC,WAAW,EACXC,UAAU,EACVC,kBAAkB,EAClBC,cAAc,EACdC,YAAY,QACP,aAAU;;AA6BjB;;AAKA,OAAO,eAAeC,cAAcA,CAClCC,OAAsC,EACA;EACtC,IAAIC,OAAO,EAAE;IACX,OAAO,IAAI;EACb;EAEA,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAACC,QAAQ,CAACX,QAAQ,CAACY,EAAE,CAAC,EAAE;IAC7CH,OAAO,CAACI,OAAO,GACb,IAAIZ,eAAe,CAAC,iDAAiD,CACvE,CAAC;IACD,OAAO,IAAI;EACb;EAEA,MAAMa,iBAAiB,GAAGZ,aAAa,CAAC,CAAC;EACzC,MAAMa,QAAQ,GAAGf,QAAQ,CAACY,EAAuB;EACjD,MAAMI,eAAe,GAAGb,WAAW,CAAC,CAAC;EACrC,MAAMc,WAAW,GAAGX,cAAc,CAAC,CAAC;EACpC,MAAMY,OAAO,GAAGd,UAAU,CAAC,CAAC;EAE5B,IAAI,CAACU,iBAAiB,EAAE;IACtBL,OAAO,CAACI,OAAO,GAAG,IAAIZ,eAAe,CAAC,2BAA2B,CAAC,CAAC;IACnE,OAAO,IAAI;EACb;EAEA,MAAMkB,eAAe,GAAGd,kBAAkB,CAAC,CAAC;EAE5C,IAAI,CAACI,OAAO,CAACW,QAAQ,EAAEC,WAAW,EAAE;IAClCZ,OAAO,CAACI,OAAO,GACb,IAAIZ,eAAe,CAAC,yCAAyC,CAC/D,CAAC;IACD,OAAO,IAAI;EACb;EAEA,IAAIqB,UAAgC,GAAG,IAAI;EAE3C,IAAI;IACFA,UAAU,GAAG,MAAMb,OAAO,CAACW,QAAQ,CAACC,WAAW,CAAC;MAC9CN,QAAQ;MACRQ,UAAU,EAAET,iBAAiB;MAC7BU,QAAQ,EAAER,eAAe;MACzBC,WAAW;MACXC,OAAO;MACPO,cAAc,EAAEhB,OAAO,CAACgB,cAAc;MACtCN,eAAe;MACfO,cAAc,EAAEjB,OAAO,CAACiB,cAAc;MACtCC,cAAc,EAAElB,OAAO,CAACkB;IAC1B,CAAC,CAAC;EACJ,CAAC,CAAC,OAAOC,KAAK,EAAE;IACdnB,OAAO,CAACI,OAAO,GAAGe,KAAc,CAAC;IACjC,OAAO,IAAI;EACb;EAEA,IAAI,CAACN,UAAU,EAAE;IACf,OAAO,IAAI;EACb;EAEA,OAAO;IACL,GAAGA,UAAU;IACbf,YAAY,EAAE,MAAAA,CAAA,KAAY;MACxB,OAAOA,YAAY,CAAC;QAClBiB,QAAQ,EAAEF,UAAU,CAACO,EAAE;QACvBC,OAAO,EAAER,UAAU,CAACQ,OAAO;QAC3BC,QAAQ,EAAET,UAAU,CAACS,QAAQ;QAC7BC,MAAM,EAAEV,UAAU,CAACU;MACrB,CAAC,CAAC;IACJ;EACF,CAAC;AACH","ignoreList":[]}
|