@hot-updater/react-native 0.0.2 → 0.0.4
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/ios/HotUpdater/HotUpdater.mm +4 -3
- package/lib/error.d.ts +4 -0
- package/lib/error.d.ts.map +1 -0
- package/lib/error.js +25 -0
- package/lib/index.d.ts +4 -5
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +48 -16
- package/lib/wrapNetworkError.d.ts +2 -0
- package/lib/wrapNetworkError.d.ts.map +1 -0
- package/lib/wrapNetworkError.js +54 -0
- package/package.json +4 -1
|
@@ -132,8 +132,10 @@ static NSURL *_bundleURL = nil;
|
|
|
132
132
|
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
-
|
|
136
|
-
|
|
135
|
+
if (allSuccess) {
|
|
136
|
+
[self setVersionId:prefix];
|
|
137
|
+
NSLog(@"Downloaded all files.");
|
|
138
|
+
}
|
|
137
139
|
return allSuccess;
|
|
138
140
|
}
|
|
139
141
|
|
|
@@ -147,7 +149,6 @@ RCT_EXPORT_METHOD(getAppVersionId:(RCTResponseSenderBlock)callback) {
|
|
|
147
149
|
RCT_EXPORT_METHOD(downloadFilesFromURLs:(NSArray<NSString *> *)urlStrings prefix:(NSString *)prefix callback:(RCTResponseSenderBlock)callback) {
|
|
148
150
|
NSMutableArray<NSURL *> *urls = [NSMutableArray array];
|
|
149
151
|
for (NSString *urlString in urlStrings) {
|
|
150
|
-
NSLog(@"urlString: %@", urlString);
|
|
151
152
|
NSURL *url = [NSURL URLWithString:urlString];
|
|
152
153
|
|
|
153
154
|
if (url) {
|
package/lib/error.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B"}
|
package/lib/error.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
var __extends = (this && this.__extends) || (function () {
|
|
2
|
+
var extendStatics = function (d, b) {
|
|
3
|
+
extendStatics = Object.setPrototypeOf ||
|
|
4
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
5
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
6
|
+
return extendStatics(d, b);
|
|
7
|
+
};
|
|
8
|
+
return function (d, b) {
|
|
9
|
+
if (typeof b !== "function" && b !== null)
|
|
10
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
11
|
+
extendStatics(d, b);
|
|
12
|
+
function __() { this.constructor = d; }
|
|
13
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
14
|
+
};
|
|
15
|
+
})();
|
|
16
|
+
var HotUpdaterError = /** @class */ (function (_super) {
|
|
17
|
+
__extends(HotUpdaterError, _super);
|
|
18
|
+
function HotUpdaterError(message) {
|
|
19
|
+
var _this = _super.call(this, message) || this;
|
|
20
|
+
_this.name = "HotUpdaterError";
|
|
21
|
+
return _this;
|
|
22
|
+
}
|
|
23
|
+
return HotUpdaterError;
|
|
24
|
+
}(Error));
|
|
25
|
+
export { HotUpdaterError };
|
package/lib/index.d.ts
CHANGED
|
@@ -15,12 +15,11 @@ export declare const getAppVersionId: () => Promise<string | null>;
|
|
|
15
15
|
* @returns {Promise<boolean>} Resolves with true if download was successful, otherwise rejects with an error.
|
|
16
16
|
*/
|
|
17
17
|
export declare const downloadFilesFromURLs: (urlStrings: string[], prefix: string) => Promise<boolean>;
|
|
18
|
-
export type
|
|
19
|
-
ios: string;
|
|
20
|
-
android: string;
|
|
21
|
-
} | string;
|
|
18
|
+
export type HotUpdaterStatus = "INSTALLING_UPDATE" | "UP_TO_DATE";
|
|
22
19
|
export interface HotUpdaterInit {
|
|
23
20
|
metadata: HotUpdaterMetaData | (() => HotUpdaterMetaData) | (() => Promise<HotUpdaterMetaData>);
|
|
21
|
+
onSuccess?: (status: HotUpdaterStatus) => void;
|
|
22
|
+
onFailure?: (e: unknown) => void;
|
|
24
23
|
}
|
|
25
|
-
export declare const init: ({ metadata }: HotUpdaterInit) => Promise<void>;
|
|
24
|
+
export declare const init: ({ metadata, onSuccess, onFailure, }: HotUpdaterInit) => Promise<void>;
|
|
26
25
|
//# sourceMappingURL=index.d.ts.map
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAM7C;;;;;GAKG;AACH,eAAO,MAAM,eAAe,QAAa,QAAQ,MAAM,GAAG,IAAI,CAM7D,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,eACpB,MAAM,EAAE,UACZ,MAAM,KACb,QAAQ,OAAO,CAqBjB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,GAAG,YAAY,CAAC;AAElE,MAAM,WAAW,cAAc;IAC7B,QAAQ,EACJ,kBAAkB,GAClB,CAAC,MAAM,kBAAkB,CAAC,GAC1B,CAAC,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAExC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC/C,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CAClC;AAED,eAAO,MAAM,IAAI,wCAId,cAAc,kBA+BhB,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -34,7 +34,10 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
34
34
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
35
|
}
|
|
36
36
|
};
|
|
37
|
+
import { URL } from "react-native-url-polyfill";
|
|
37
38
|
import { NativeModules, Platform } from "react-native";
|
|
39
|
+
import { HotUpdaterError } from "./error";
|
|
40
|
+
import { wrapNetworkError } from "./wrapNetworkError";
|
|
38
41
|
var HotUpdater = NativeModules.HotUpdater;
|
|
39
42
|
/**
|
|
40
43
|
* Fetches the current app version id.
|
|
@@ -61,40 +64,69 @@ export var getAppVersionId = function () { return __awaiter(void 0, void 0, void
|
|
|
61
64
|
*/
|
|
62
65
|
export var downloadFilesFromURLs = function (urlStrings, prefix) {
|
|
63
66
|
return new Promise(function (resolve) {
|
|
64
|
-
|
|
67
|
+
var encodedURLs = urlStrings.map(function (urlString) {
|
|
68
|
+
var url = new URL(urlString);
|
|
69
|
+
return [
|
|
70
|
+
url.origin,
|
|
71
|
+
url.pathname
|
|
72
|
+
.split("/")
|
|
73
|
+
.map(function (pathname) { return encodeURIComponent(pathname); })
|
|
74
|
+
.join("/"),
|
|
75
|
+
].join("");
|
|
76
|
+
});
|
|
77
|
+
HotUpdater.downloadFilesFromURLs(encodedURLs, prefix, function (success) {
|
|
65
78
|
resolve(success);
|
|
66
79
|
});
|
|
67
80
|
});
|
|
68
81
|
};
|
|
69
82
|
export var init = function (_a) {
|
|
70
|
-
var metadata = _a.metadata;
|
|
83
|
+
var metadata = _a.metadata, onSuccess = _a.onSuccess, onFailure = _a.onFailure;
|
|
71
84
|
return __awaiter(void 0, void 0, void 0, function () {
|
|
72
|
-
var _b, files, id, _c, appVersionId;
|
|
85
|
+
var _b, files, id, _c, appVersionId, allDownloadFiles, e_1;
|
|
73
86
|
return __generator(this, function (_d) {
|
|
74
87
|
switch (_d.label) {
|
|
75
88
|
case 0:
|
|
76
89
|
if (!["ios", "android"].includes(Platform.OS)) {
|
|
77
|
-
throw new
|
|
90
|
+
throw new HotUpdaterError("HotUpdater is only supported on iOS and Android");
|
|
78
91
|
}
|
|
79
|
-
|
|
80
|
-
return [4 /*yield*/, metadata()];
|
|
92
|
+
_d.label = 1;
|
|
81
93
|
case 1:
|
|
82
|
-
|
|
83
|
-
return [3 /*break*/, 3];
|
|
94
|
+
_d.trys.push([1, 8, , 9]);
|
|
95
|
+
if (!(typeof metadata === "function")) return [3 /*break*/, 3];
|
|
96
|
+
return [4 /*yield*/, wrapNetworkError(metadata)];
|
|
84
97
|
case 2:
|
|
85
|
-
_c =
|
|
86
|
-
|
|
98
|
+
_c = _d.sent();
|
|
99
|
+
return [3 /*break*/, 4];
|
|
87
100
|
case 3:
|
|
101
|
+
_c = metadata;
|
|
102
|
+
_d.label = 4;
|
|
103
|
+
case 4:
|
|
88
104
|
_b = _c, files = _b.files, id = _b.id;
|
|
89
105
|
return [4 /*yield*/, getAppVersionId()];
|
|
90
|
-
case
|
|
106
|
+
case 5:
|
|
91
107
|
appVersionId = _d.sent();
|
|
92
|
-
if (!(id !== appVersionId
|
|
108
|
+
if (!(id !== appVersionId)) return [3 /*break*/, 7];
|
|
93
109
|
return [4 /*yield*/, downloadFilesFromURLs(files, id)];
|
|
94
|
-
case
|
|
95
|
-
_d.sent();
|
|
96
|
-
|
|
97
|
-
|
|
110
|
+
case 6:
|
|
111
|
+
allDownloadFiles = _d.sent();
|
|
112
|
+
if (allDownloadFiles) {
|
|
113
|
+
onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess("INSTALLING_UPDATE");
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
throw new HotUpdaterError("HotUpdater failed to download");
|
|
117
|
+
}
|
|
118
|
+
return [2 /*return*/];
|
|
119
|
+
case 7:
|
|
120
|
+
onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess("UP_TO_DATE");
|
|
121
|
+
return [3 /*break*/, 9];
|
|
122
|
+
case 8:
|
|
123
|
+
e_1 = _d.sent();
|
|
124
|
+
if (onFailure) {
|
|
125
|
+
onFailure(e_1);
|
|
126
|
+
return [2 /*return*/];
|
|
127
|
+
}
|
|
128
|
+
throw e_1;
|
|
129
|
+
case 9: return [2 /*return*/];
|
|
98
130
|
}
|
|
99
131
|
});
|
|
100
132
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrapNetworkError.d.ts","sourceRoot":"","sources":["../src/wrapNetworkError.ts"],"names":[],"mappings":"AAEA,wBAAsB,gBAAgB,CAAC,CAAC,EACtC,QAAQ,EAAE,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GACvC,OAAO,CAAC,CAAC,CAAC,CAMZ"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
12
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
import { HotUpdaterError } from "./error";
|
|
38
|
+
export function wrapNetworkError(metadata) {
|
|
39
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
40
|
+
var error_1;
|
|
41
|
+
return __generator(this, function (_a) {
|
|
42
|
+
switch (_a.label) {
|
|
43
|
+
case 0:
|
|
44
|
+
_a.trys.push([0, 2, , 3]);
|
|
45
|
+
return [4 /*yield*/, metadata()];
|
|
46
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
47
|
+
case 2:
|
|
48
|
+
error_1 = _a.sent();
|
|
49
|
+
throw new HotUpdaterError("HotUpdater metadata is not defined");
|
|
50
|
+
case 3: return [2 /*return*/];
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hot-updater/react-native",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.4",
|
|
4
4
|
"description": "React Native OTA solution for self-hosted",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
@@ -48,6 +48,9 @@
|
|
|
48
48
|
"react": "^18.2.0",
|
|
49
49
|
"react-native": "^0.72.6"
|
|
50
50
|
},
|
|
51
|
+
"dependencies": {
|
|
52
|
+
"react-native-url-polyfill": "^2.0.0"
|
|
53
|
+
},
|
|
51
54
|
"scripts": {
|
|
52
55
|
"preinstall": "npx only-allow pnpm",
|
|
53
56
|
"typecheck": "tsc --noEmit",
|