@hot-updater/react-native 0.0.4 → 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/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,kBA+BhB,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
@@ -79,37 +79,46 @@ export var downloadFilesFromURLs = function (urlStrings, prefix) {
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
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 {
@@ -120,7 +129,7 @@ export var init = function (_a) {
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hot-updater/react-native",
3
- "version": "0.0.4",
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",