@hot-updater/react-native 0.0.3 → 0.0.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.
@@ -1,8 +1,11 @@
1
1
  #import <React/RCTBridgeModule.h>
2
+
2
3
  #import <React/RCTBundleURLProvider.h>
4
+ #import <React/RCTReloadCommand.h>
3
5
 
4
6
  @interface HotUpdater : NSObject <RCTBridgeModule>
5
7
 
6
8
  + (NSURL *)bundleURL;
9
+ + (NSURL *)bundleURLWithoutFallback;
7
10
 
8
- @end
11
+ @end
@@ -8,6 +8,12 @@ static NSURL *_bundleURL = nil;
8
8
 
9
9
  #pragma mark - Bundle URL Management
10
10
 
11
+ + (void)reload {
12
+ dispatch_async(dispatch_get_main_queue(), ^{
13
+ RCTTriggerReloadCommandListeners(@"HotUpdater requested a reload");
14
+ });
15
+ }
16
+
11
17
  + (void)setVersionId:(NSString*)versionId {
12
18
  static dispatch_once_t onceToken;
13
19
  dispatch_once(&onceToken, ^{
@@ -66,6 +72,10 @@ static NSURL *_bundleURL = nil;
66
72
  return [self cachedURLFromBundle] ?: [self fallbackURL];
67
73
  }
68
74
 
75
+ + (NSURL *)bundleURLWithoutFallback {
76
+ return [self cachedURLFromBundle];
77
+ }
78
+
69
79
  #pragma mark - Utility Methods
70
80
 
71
81
  + (NSString *)convertFileSystemPathFromBasePath:(NSString *)basePath {
@@ -141,6 +151,10 @@ static NSURL *_bundleURL = nil;
141
151
 
142
152
  #pragma mark - React Native Exports
143
153
 
154
+ RCT_EXPORT_METHOD(reload) {
155
+ [HotUpdater reload];
156
+ }
157
+
144
158
  RCT_EXPORT_METHOD(getAppVersionId:(RCTResponseSenderBlock)callback) {
145
159
  NSString *versionId = [HotUpdater getVersionId];
146
160
  callback(@[versionId ?: [NSNull null]]);
package/lib/error.d.ts CHANGED
@@ -1,10 +1,4 @@
1
- export declare class HotUpdaterDownloadError extends Error {
2
- constructor();
3
- }
4
- export declare class HotUpdaterPlatformError extends Error {
5
- constructor();
6
- }
7
- export declare class HotUpdaterMetadataError extends Error {
8
- constructor();
1
+ export declare class HotUpdaterError extends Error {
2
+ constructor(message: string);
9
3
  }
10
4
  //# sourceMappingURL=error.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,qBAAa,uBAAwB,SAAQ,KAAK;;CAKjD;AAED,qBAAa,uBAAwB,SAAQ,KAAK;;CAKjD;AAED,qBAAa,uBAAwB,SAAQ,KAAK;;CAKjD"}
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 CHANGED
@@ -13,33 +13,13 @@ var __extends = (this && this.__extends) || (function () {
13
13
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
14
14
  };
15
15
  })();
16
- var HotUpdaterDownloadError = /** @class */ (function (_super) {
17
- __extends(HotUpdaterDownloadError, _super);
18
- function HotUpdaterDownloadError() {
19
- var _this = _super.call(this, "HotUpdater failed to download") || this;
20
- _this.name = "HotUpdaterDownloadError";
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
21
  return _this;
22
22
  }
23
- return HotUpdaterDownloadError;
23
+ return HotUpdaterError;
24
24
  }(Error));
25
- export { HotUpdaterDownloadError };
26
- var HotUpdaterPlatformError = /** @class */ (function (_super) {
27
- __extends(HotUpdaterPlatformError, _super);
28
- function HotUpdaterPlatformError() {
29
- var _this = _super.call(this, "HotUpdater is only supported on iOS and Android") || this;
30
- _this.name = "HotUpdaterPlatformError";
31
- return _this;
32
- }
33
- return HotUpdaterPlatformError;
34
- }(Error));
35
- export { HotUpdaterPlatformError };
36
- var HotUpdaterMetadataError = /** @class */ (function (_super) {
37
- __extends(HotUpdaterMetadataError, _super);
38
- function HotUpdaterMetadataError() {
39
- var _this = _super.call(this, "HotUpdater metadata is not defined") || this;
40
- _this.name = "HotUpdaterMetadataError";
41
- return _this;
42
- }
43
- return HotUpdaterMetadataError;
44
- }(Error));
45
- export { HotUpdaterMetadataError };
25
+ export { HotUpdaterError };
package/lib/index.d.ts CHANGED
@@ -15,6 +15,10 @@ 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
+ /**
19
+ * Reloads the app.
20
+ */
21
+ export declare const reload: () => void;
18
22
  export type HotUpdaterStatus = "INSTALLING_UPDATE" | "UP_TO_DATE";
19
23
  export interface HotUpdaterInit {
20
24
  metadata: HotUpdaterMetaData | (() => HotUpdaterMetaData) | (() => Promise<HotUpdaterMetaData>);
@@ -1 +1 @@
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,kBA6BhB,CAAC"}
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;;GAEG;AACH,eAAO,MAAM,MAAM,YAElB,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,kBAqChB,CAAC"}
package/lib/index.js CHANGED
@@ -36,7 +36,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
36
36
  };
37
37
  import { URL } from "react-native-url-polyfill";
38
38
  import { NativeModules, Platform } from "react-native";
39
- import { HotUpdaterDownloadError, HotUpdaterPlatformError } from "./error";
39
+ import { HotUpdaterError } from "./error";
40
40
  import { wrapNetworkError } from "./wrapNetworkError";
41
41
  var HotUpdater = NativeModules.HotUpdater;
42
42
  /**
@@ -67,60 +67,69 @@ export var downloadFilesFromURLs = function (urlStrings, prefix) {
67
67
  var encodedURLs = urlStrings.map(function (urlString) {
68
68
  var url = new URL(urlString);
69
69
  return [
70
- url.host,
70
+ url.origin,
71
71
  url.pathname
72
72
  .split("/")
73
73
  .map(function (pathname) { return encodeURIComponent(pathname); })
74
74
  .join("/"),
75
- ].join("/");
75
+ ].join("");
76
76
  });
77
77
  HotUpdater.downloadFilesFromURLs(encodedURLs, prefix, function (success) {
78
78
  resolve(success);
79
79
  });
80
80
  });
81
81
  };
82
+ /**
83
+ * Reloads the app.
84
+ */
85
+ export var reload = function () {
86
+ HotUpdater.reload();
87
+ };
82
88
  export var init = function (_a) {
83
89
  var metadata = _a.metadata, onSuccess = _a.onSuccess, onFailure = _a.onFailure;
84
90
  return __awaiter(void 0, void 0, void 0, function () {
85
- var _b, files, id, _c, appVersionId, allDownloadFiles, e_1;
86
- return __generator(this, function (_d) {
87
- switch (_d.label) {
91
+ var _b, files, id, _c, reloadAfterUpdate, _d, appVersionId, allDownloadFiles, e_1;
92
+ return __generator(this, function (_e) {
93
+ switch (_e.label) {
88
94
  case 0:
89
95
  if (!["ios", "android"].includes(Platform.OS)) {
90
- throw new HotUpdaterPlatformError();
96
+ throw new HotUpdaterError("HotUpdater is only supported on iOS and Android");
91
97
  }
92
- _d.label = 1;
98
+ _e.label = 1;
93
99
  case 1:
94
- _d.trys.push([1, 8, , 9]);
100
+ _e.trys.push([1, 8, , 9]);
95
101
  if (!(typeof metadata === "function")) return [3 /*break*/, 3];
96
102
  return [4 /*yield*/, wrapNetworkError(metadata)];
97
103
  case 2:
98
- _c = _d.sent();
104
+ _d = _e.sent();
99
105
  return [3 /*break*/, 4];
100
106
  case 3:
101
- _c = metadata;
102
- _d.label = 4;
107
+ _d = metadata;
108
+ _e.label = 4;
103
109
  case 4:
104
- _b = _c, files = _b.files, id = _b.id;
110
+ _b = _d, files = _b.files, id = _b.id, _c = _b.reloadAfterUpdate, reloadAfterUpdate = _c === void 0 ? false : _c;
105
111
  return [4 /*yield*/, getAppVersionId()];
106
112
  case 5:
107
- appVersionId = _d.sent();
113
+ appVersionId = _e.sent();
108
114
  if (!(id !== appVersionId)) return [3 /*break*/, 7];
109
115
  return [4 /*yield*/, downloadFilesFromURLs(files, id)];
110
116
  case 6:
111
- allDownloadFiles = _d.sent();
117
+ allDownloadFiles = _e.sent();
112
118
  if (allDownloadFiles) {
119
+ if (reloadAfterUpdate) {
120
+ reload();
121
+ }
113
122
  onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess("INSTALLING_UPDATE");
114
123
  }
115
124
  else {
116
- throw new HotUpdaterDownloadError();
125
+ throw new HotUpdaterError("HotUpdater failed to download");
117
126
  }
118
127
  return [2 /*return*/];
119
128
  case 7:
120
129
  onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess("UP_TO_DATE");
121
130
  return [3 /*break*/, 9];
122
131
  case 8:
123
- e_1 = _d.sent();
132
+ e_1 = _e.sent();
124
133
  if (onFailure) {
125
134
  onFailure(e_1);
126
135
  return [2 /*return*/];
package/lib/types.d.ts CHANGED
@@ -1,7 +1,23 @@
1
1
  export type Version = `${number}.${number}.${number}` | `${number}.${number}` | `${number}`;
2
+ /**
3
+ * Metadata associated with a hot update.
4
+ */
2
5
  export type HotUpdaterMetaData = {
6
+ /**
7
+ * List of files associated with the update.
8
+ */
3
9
  files: string[];
10
+ /**
11
+ * Version information for the update.
12
+ */
4
13
  version: Version;
14
+ /**
15
+ * Unique identifier for the update. This is used as a prefix when downloading files.
16
+ */
5
17
  id: string;
18
+ /**
19
+ * Indicates whether the application should reload after the update is applied.
20
+ */
21
+ reloadAfterUpdate?: boolean;
6
22
  };
7
23
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GACf,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,GAC/B,GAAG,MAAM,IAAI,MAAM,EAAE,GACrB,GAAG,MAAM,EAAE,CAAC;AAEhB,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GACf,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,GAC/B,GAAG,MAAM,IAAI,MAAM,EAAE,GACrB,GAAG,MAAM,EAAE,CAAC;AAEhB;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;OAEG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;OAEG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC"}
@@ -34,7 +34,7 @@ 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 { HotUpdaterMetadataError } from "./error";
37
+ import { HotUpdaterError } from "./error";
38
38
  export function wrapNetworkError(metadata) {
39
39
  return __awaiter(this, void 0, void 0, function () {
40
40
  var error_1;
@@ -46,7 +46,7 @@ export function wrapNetworkError(metadata) {
46
46
  case 1: return [2 /*return*/, _a.sent()];
47
47
  case 2:
48
48
  error_1 = _a.sent();
49
- throw new HotUpdaterMetadataError();
49
+ throw new HotUpdaterError("HotUpdater metadata is not defined");
50
50
  case 3: return [2 /*return*/];
51
51
  }
52
52
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hot-updater/react-native",
3
- "version": "0.0.3",
3
+ "version": "0.0.5",
4
4
  "description": "React Native OTA solution for self-hosted",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",