@vxrn/vite-native-hmr 0.0.3

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.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/devServerClient.js +132 -0
  3. package/dist/cjs/devServerClient.js.map +6 -0
  4. package/dist/cjs/devServerClient.native.js +132 -0
  5. package/dist/cjs/devServerClient.native.js.map +6 -0
  6. package/dist/cjs/getDevServerLocation.js +49 -0
  7. package/dist/cjs/getDevServerLocation.js.map +6 -0
  8. package/dist/cjs/getDevServerLocation.native.js +50 -0
  9. package/dist/cjs/getDevServerLocation.native.js.map +6 -0
  10. package/dist/cjs/hmr-client.js +130 -0
  11. package/dist/cjs/hmr-client.js.map +6 -0
  12. package/dist/cjs/hmr-client.native.js +129 -0
  13. package/dist/cjs/hmr-client.native.js.map +6 -0
  14. package/dist/cjs/index.js +19 -0
  15. package/dist/cjs/index.js.map +6 -0
  16. package/dist/cjs/index.native.js +20 -0
  17. package/dist/cjs/index.native.js.map +6 -0
  18. package/dist/esm/devServerClient.js +101 -0
  19. package/dist/esm/devServerClient.js.map +6 -0
  20. package/dist/esm/devServerClient.native.js +100 -0
  21. package/dist/esm/devServerClient.native.js.map +6 -0
  22. package/dist/esm/getDevServerLocation.js +21 -0
  23. package/dist/esm/getDevServerLocation.js.map +6 -0
  24. package/dist/esm/getDevServerLocation.native.js +21 -0
  25. package/dist/esm/getDevServerLocation.native.js.map +6 -0
  26. package/dist/esm/hmr-client.js +100 -0
  27. package/dist/esm/hmr-client.js.map +6 -0
  28. package/dist/esm/hmr-client.native.js +98 -0
  29. package/dist/esm/hmr-client.native.js.map +6 -0
  30. package/dist/esm/index.js +2 -0
  31. package/dist/esm/index.js.map +6 -0
  32. package/dist/esm/index.native.js +2 -0
  33. package/dist/esm/index.native.js.map +6 -0
  34. package/package.json +49 -0
  35. package/src/devServerClient.ts +132 -0
  36. package/src/getDevServerLocation.ts +33 -0
  37. package/src/globals.d.ts +33 -0
  38. package/src/hmr-client.ts +206 -0
  39. package/src/index.ts +1 -0
  40. package/types/devServerClient.d.ts +6 -0
  41. package/types/devServerClient.d.ts.map +1 -0
  42. package/types/getDevServerLocation.d.ts +11 -0
  43. package/types/getDevServerLocation.d.ts.map +1 -0
  44. package/types/hmr-client.d.ts +24 -0
  45. package/types/hmr-client.d.ts.map +1 -0
  46. package/types/index.d.ts +2 -0
  47. package/types/index.d.ts.map +1 -0
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: !0 });
9
+ }, __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from == "object" || typeof from == "function")
11
+ for (let key of __getOwnPropNames(from))
12
+ !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ return to;
14
+ };
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
16
+ var hmr_client_exports = {};
17
+ __export(hmr_client_exports, {
18
+ loadHMRClient: () => loadHMRClient
19
+ });
20
+ module.exports = __toCommonJS(hmr_client_exports);
21
+ var import_getDevServerLocation = require("./getDevServerLocation");
22
+ class HMRClient {
23
+ constructor(app) {
24
+ this.app = app;
25
+ this.lastHash = "";
26
+ this.url = `ws://${(0, import_getDevServerLocation.getDevServerLocation)().hostname}:${process.env.REACT_NATIVE_SERVER_PUBLIC_PORT}/__hmr?platform=${process.env.REACT_NATIVE_PLATFORM || "ios"}`, this.socket = new WebSocket(this.url), console.log("[HMRClient] Connecting..."), this.socket.onopen = () => {
27
+ console.log("[HMRClient] Connected");
28
+ }, this.socket.onclose = () => {
29
+ console.log(`[HMRClient] Disconnected ${this.url}`);
30
+ }, this.socket.onerror = (event) => {
31
+ console.log("[HMRClient] Error", event);
32
+ }, this.socket.onmessage = (event) => {
33
+ try {
34
+ const data = JSON.parse(event.data.toString());
35
+ this.processMessage(data);
36
+ } catch (error) {
37
+ console.warn("[HMRClient] Invalid HMR message", error);
38
+ }
39
+ };
40
+ }
41
+ upToDate(hash) {
42
+ return hash && (this.lastHash = hash), this.lastHash === __webpack_hash__;
43
+ }
44
+ processMessage(message) {
45
+ var _a, _b, _c, _d, _e;
46
+ switch (message.action) {
47
+ case "building":
48
+ this.app.LoadingView.showMessage("Rebuilding...", "refresh"), console.log("[HMRClient] Bundle rebuilding", {
49
+ name: (_a = message.body) == null ? void 0 : _a.name
50
+ });
51
+ break;
52
+ case "built":
53
+ console.log("[HMRClient] Bundle rebuilt", {
54
+ name: (_b = message.body) == null ? void 0 : _b.name,
55
+ time: (_c = message.body) == null ? void 0 : _c.time
56
+ });
57
+ case "sync":
58
+ if (!message.body) {
59
+ console.warn("[HMRClient] HMR message body is empty");
60
+ return;
61
+ }
62
+ if ((_d = message.body.errors) != null && _d.length) {
63
+ message.body.errors.forEach((error) => {
64
+ console.error("Cannot apply update due to error:", error);
65
+ }), this.app.LoadingView.hide();
66
+ return;
67
+ }
68
+ (_e = message.body.warnings) != null && _e.length && message.body.warnings.forEach((warning) => {
69
+ console.warn("[HMRClient] Bundle contains warnings:", warning);
70
+ }), this.applyUpdate(message.body);
71
+ }
72
+ }
73
+ applyUpdate(update) {
74
+ if (!module.hot)
75
+ throw new Error("[HMRClient] Hot Module Replacement is disabled.");
76
+ !this.upToDate(update.hash) && module.hot.status() === "idle" && (console.log("[HMRClient] Checking for updates on the server..."), this.checkUpdates(update));
77
+ }
78
+ async checkUpdates(update) {
79
+ var _a, _b, _c, _d;
80
+ try {
81
+ this.app.LoadingView.showMessage("Refreshing...", "refresh");
82
+ const updatedModules = await ((_a = module.hot) == null ? void 0 : _a.check(!1));
83
+ if (!updatedModules) {
84
+ console.warn("[HMRClient] Cannot find update - full reload needed"), this.app.reload();
85
+ return;
86
+ }
87
+ const renewedModules = await ((_b = module.hot) == null ? void 0 : _b.apply({
88
+ ignoreDeclined: !0,
89
+ ignoreUnaccepted: !1,
90
+ ignoreErrored: !1,
91
+ onDeclined: (data) => {
92
+ console.warn("[HMRClient] Ignored an update due to declined module", {
93
+ chain: data.chain
94
+ });
95
+ }
96
+ }));
97
+ this.upToDate() || this.checkUpdates(update);
98
+ const unacceptedModules = updatedModules.filter((moduleId) => renewedModules && renewedModules.indexOf(moduleId) < 0);
99
+ unacceptedModules.length ? (console.warn("[HMRClient] Not every module was accepted - full reload needed", {
100
+ unacceptedModules
101
+ }), this.app.reload()) : (console.log("[HMRClient] Renewed modules - app is up to date", {
102
+ renewedModules
103
+ }), this.app.dismissErrors());
104
+ } catch (error) {
105
+ ((_c = module.hot) == null ? void 0 : _c.status()) === "fail" || ((_d = module.hot) == null ? void 0 : _d.status()) === "abort" ? (console.warn("[HMRClient] Cannot check for update - full reload needed"), console.warn("[HMRClient]", error), this.app.reload()) : console.warn("[HMRClient] Update check failed", { error });
106
+ } finally {
107
+ this.app.LoadingView.hide();
108
+ }
109
+ }
110
+ }
111
+ const loadHMRClient = () => {
112
+ const { DevSettings, Platform } = require("react-native"), LoadingView = require("react-native/Libraries/Utilities/LoadingView"), reload = () => DevSettings.reload(), dismissErrors = () => {
113
+ var _a;
114
+ if (Platform.OS === "ios") {
115
+ const NativeRedBox = require("react-native/Libraries/NativeModules/specs/NativeRedBox").default;
116
+ (_a = NativeRedBox == null ? void 0 : NativeRedBox.dismiss) == null || _a.call(NativeRedBox);
117
+ } else {
118
+ const NativeExceptionsManager = require("react-native/Libraries/Core/NativeExceptionsManager").default;
119
+ NativeExceptionsManager == null || NativeExceptionsManager.dismissRedbox();
120
+ }
121
+ require("react-native/Libraries/LogBox/Data/LogBoxData").clear();
122
+ };
123
+ new HMRClient({ reload, dismissErrors, LoadingView });
124
+ };
125
+ // Annotate the CommonJS export names for ESM import in node:
126
+ 0 && (module.exports = {
127
+ loadHMRClient
128
+ });
129
+ //# sourceMappingURL=hmr-client.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/hmr-client.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }
@@ -0,0 +1,19 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __copyProps = (to, from, except, desc) => {
6
+ if (from && typeof from == "object" || typeof from == "function")
7
+ for (let key of __getOwnPropNames(from))
8
+ !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
9
+ return to;
10
+ }, __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
11
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
12
+ var src_exports = {};
13
+ module.exports = __toCommonJS(src_exports);
14
+ __reExport(src_exports, require("./devServerClient"), module.exports);
15
+ // Annotate the CommonJS export names for ESM import in node:
16
+ 0 && (module.exports = {
17
+ ...require("./devServerClient")
18
+ });
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "mappings": ";;;;;;;;;;;AAAA;AAAA;AAAA,wBAAc,8BAAd;",
5
+ "names": []
6
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from == "object" || typeof from == "function")
8
+ for (let key of __getOwnPropNames(from))
9
+ !__hasOwnProp.call(to, key) && key !== except && __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
+ return to;
11
+ }, __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
12
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: !0 }), mod);
13
+ var src_exports = {};
14
+ module.exports = __toCommonJS(src_exports);
15
+ __reExport(src_exports, require("./devServerClient"), module.exports);
16
+ // Annotate the CommonJS export names for ESM import in node:
17
+ 0 && (module.exports = {
18
+ ...require("./devServerClient")
19
+ });
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "mappings": ";;;;;;;;;;;;AAAA;AAAA;AAAA,wBAAc,8BAAd;",
5
+ "names": []
6
+ }
@@ -0,0 +1,101 @@
1
+ import prettyFormat from "pretty-format";
2
+ import { getDevServerLocation } from "./getDevServerLocation";
3
+ import { loadHMRClient } from "./hmr-client";
4
+ loadHMRClient();
5
+ class DevServerClient {
6
+ socket;
7
+ buffer = [];
8
+ constructor() {
9
+ const initSocket = () => {
10
+ const address = `ws://${getDevServerLocation().host}/__client`;
11
+ this.socket = new WebSocket(address);
12
+ const onClose = (event) => {
13
+ console.warn(
14
+ "Disconnected from the Dev Server:",
15
+ event.message
16
+ ), this.socket = void 0;
17
+ };
18
+ this.socket.onclose = onClose, this.socket.onerror = onClose, this.socket.onopen = () => {
19
+ this.flushBuffer();
20
+ };
21
+ };
22
+ process.env.NODE_ENV === "development" && initSocket();
23
+ }
24
+ send(level, data) {
25
+ try {
26
+ this.socket?.send(
27
+ JSON.stringify({
28
+ type: "client-log",
29
+ level,
30
+ data: data.map(
31
+ (item) => typeof item == "string" ? item : prettyFormat(item, {
32
+ escapeString: !0,
33
+ highlight: !0,
34
+ maxDepth: 3,
35
+ min: !0,
36
+ plugins: [
37
+ // @ts-expect-error
38
+ prettyFormat.plugins.ReactElement
39
+ ]
40
+ })
41
+ )
42
+ })
43
+ );
44
+ } catch {
45
+ try {
46
+ this.socket?.send(
47
+ JSON.stringify({
48
+ type: "client-log",
49
+ level,
50
+ data: data.map(
51
+ (item) => typeof item == "string" ? item : JSON.stringify(item)
52
+ )
53
+ })
54
+ );
55
+ } catch (err) {
56
+ try {
57
+ this.socket?.send(
58
+ JSON.stringify({
59
+ type: "client-log",
60
+ level: "error",
61
+ data: ["error sending client log: " + err]
62
+ })
63
+ );
64
+ } catch {
65
+ }
66
+ }
67
+ }
68
+ }
69
+ flushBuffer() {
70
+ console._tmpLogs && (console._tmpLogs.forEach(({ level, data }) => {
71
+ this.buffer.push({ level, data });
72
+ }), delete console._tmpLogs);
73
+ for (const { level, data } of this.buffer)
74
+ this.send(level, data);
75
+ this.buffer = [];
76
+ }
77
+ log(level, data) {
78
+ if (this.socket && this.socket.readyState === WebSocket.OPEN)
79
+ this.flushBuffer(), this.send(level, data);
80
+ else {
81
+ if (console._tmpLogs)
82
+ return;
83
+ this.buffer.push({ level, data });
84
+ }
85
+ }
86
+ }
87
+ const client = new DevServerClient(), setup = () => {
88
+ }, enable = () => {
89
+ }, disable = () => {
90
+ }, registerBundle = () => {
91
+ }, log = (level, data) => {
92
+ client.log(level, data);
93
+ };
94
+ export {
95
+ disable,
96
+ enable,
97
+ log,
98
+ registerBundle,
99
+ setup
100
+ };
101
+ //# sourceMappingURL=devServerClient.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/devServerClient.ts"],
4
+ "mappings": "AAAA,OAAO,kBAAkB;AAEzB,SAAS,4BAA4B;AACrC,SAAS,qBAAqB;AAG9B,cAAc;AAad,MAAM,gBAAgB;AAAA,EACpB;AAAA,EACA,SAAgD,CAAC;AAAA,EAEjD,cAAc;AACZ,UAAM,aAAa,MAAM;AACvB,YAAM,UAAU,QAAQ,qBAAqB,EAAE,IAAI;AACnD,WAAK,SAAS,IAAI,UAAU,OAAO;AAEnC,YAAM,UAAU,CAAC,UAAiB;AAChC,gBAAQ;AAAA,UACN;AAAA,UACC,MAAgD;AAAA,QACnD,GACA,KAAK,SAAS;AAAA,MAChB;AAEA,WAAK,OAAO,UAAU,SACtB,KAAK,OAAO,UAAU,SACtB,KAAK,OAAO,SAAS,MAAM;AACzB,aAAK,YAAY;AAAA,MACnB;AAAA,IACF;AAEA,IAAI,QAAQ,IAAI,aAAa,iBAC3B,WAAW;AAAA,EAEf;AAAA,EAEA,KAAK,OAAe,MAAa;AAC/B,QAAI;AACF,WAAK,QAAQ;AAAA,QACX,KAAK,UAAU;AAAA,UACb,MAAM;AAAA,UACN;AAAA,UACA,MAAM,KAAK;AAAA,YAAI,CAAC,SACd,OAAO,QAAS,WACZ,OACA,aAAa,MAAM;AAAA,cACjB,cAAc;AAAA,cACd,WAAW;AAAA,cACX,UAAU;AAAA,cACV,KAAK;AAAA,cACL,SAAS;AAAA;AAAA,gBAEP,aAAa,QAAQ;AAAA,cACvB;AAAA,YACF,CAAC;AAAA,UACP;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,QAAQ;AACN,UAAI;AACF,aAAK,QAAQ;AAAA,UACX,KAAK,UAAU;AAAA,YACb,MAAM;AAAA,YACN;AAAA,YACA,MAAM,KAAK;AAAA,cAAI,CAAC,SACd,OAAO,QAAS,WAAW,OAAO,KAAK,UAAU,IAAI;AAAA,YACvD;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF,SAAS,KAAK;AACZ,YAAI;AACF,eAAK,QAAQ;AAAA,YACX,KAAK,UAAU;AAAA,cACb,MAAM;AAAA,cACN,OAAO;AAAA,cACP,MAAM,CAAC,+BAA+B,GAAG;AAAA,YAC3C,CAAC;AAAA,UACH;AAAA,QACF,QAAQ;AAAA,QAER;AAAA,MACF;AAAA,IAEF;AAAA,EACF;AAAA,EAEA,cAAc;AACZ,IAAI,QAAQ,aACV,QAAQ,SAAY,QAAQ,CAAC,EAAE,OAAO,KAAK,MAAM;AAC/C,WAAK,OAAO,KAAK,EAAE,OAAO,KAAK,CAAC;AAAA,IAClC,CAAC,GACD,OAAO,QAAQ;AAGjB,eAAW,EAAE,OAAO,KAAK,KAAK,KAAK;AACjC,WAAK,KAAK,OAAO,IAAI;AAEvB,SAAK,SAAS,CAAC;AAAA,EACjB;AAAA,EAEA,IAAI,OAAe,MAAa;AAC9B,QAAI,KAAK,UAAU,KAAK,OAAO,eAAe,UAAU;AACtD,WAAK,YAAY,GACjB,KAAK,KAAK,OAAO,IAAI;AAAA,SAChB;AACL,UAAI,QAAQ;AAAa;AACzB,WAAK,OAAO,KAAK,EAAE,OAAO,KAAK,CAAC;AAAA,IAClC;AAAA,EACF;AACF;AAEA,MAAM,SAAS,IAAI,gBAAgB,GAEtB,QAAQ,MAAM;AAAC,GACf,SAAS,MAAM;AAAC,GAChB,UAAU,MAAM;AAAC,GACjB,iBAAiB,MAAM;AAAC,GACxB,MAAM,CAAC,OAAe,SAAgB;AACjD,SAAO,IAAI,OAAO,IAAI;AACxB;",
5
+ "names": []
6
+ }
@@ -0,0 +1,100 @@
1
+ import prettyFormat from "pretty-format";
2
+ import { getDevServerLocation } from "./getDevServerLocation";
3
+ import { loadHMRClient } from "./hmr-client";
4
+ loadHMRClient();
5
+ class DevServerClient {
6
+ constructor() {
7
+ this.buffer = [];
8
+ const initSocket = () => {
9
+ const address = `ws://${getDevServerLocation().host}/__client`;
10
+ this.socket = new WebSocket(address);
11
+ const onClose = (event) => {
12
+ console.warn(
13
+ "Disconnected from the Dev Server:",
14
+ event.message
15
+ ), this.socket = void 0;
16
+ };
17
+ this.socket.onclose = onClose, this.socket.onerror = onClose, this.socket.onopen = () => {
18
+ this.flushBuffer();
19
+ };
20
+ };
21
+ process.env.NODE_ENV === "development" && initSocket();
22
+ }
23
+ send(level, data) {
24
+ try {
25
+ this.socket?.send(
26
+ JSON.stringify({
27
+ type: "client-log",
28
+ level,
29
+ data: data.map(
30
+ (item) => typeof item == "string" ? item : prettyFormat(item, {
31
+ escapeString: !0,
32
+ highlight: !0,
33
+ maxDepth: 3,
34
+ min: !0,
35
+ plugins: [
36
+ // @ts-expect-error
37
+ prettyFormat.plugins.ReactElement
38
+ ]
39
+ })
40
+ )
41
+ })
42
+ );
43
+ } catch {
44
+ try {
45
+ this.socket?.send(
46
+ JSON.stringify({
47
+ type: "client-log",
48
+ level,
49
+ data: data.map(
50
+ (item) => typeof item == "string" ? item : JSON.stringify(item)
51
+ )
52
+ })
53
+ );
54
+ } catch (err) {
55
+ try {
56
+ this.socket?.send(
57
+ JSON.stringify({
58
+ type: "client-log",
59
+ level: "error",
60
+ data: ["error sending client log: " + err]
61
+ })
62
+ );
63
+ } catch {
64
+ }
65
+ }
66
+ }
67
+ }
68
+ flushBuffer() {
69
+ console._tmpLogs && (console._tmpLogs.forEach(({ level, data }) => {
70
+ this.buffer.push({ level, data });
71
+ }), delete console._tmpLogs);
72
+ for (const { level, data } of this.buffer)
73
+ this.send(level, data);
74
+ this.buffer = [];
75
+ }
76
+ log(level, data) {
77
+ if (this.socket && this.socket.readyState === WebSocket.OPEN)
78
+ this.flushBuffer(), this.send(level, data);
79
+ else {
80
+ if (console._tmpLogs)
81
+ return;
82
+ this.buffer.push({ level, data });
83
+ }
84
+ }
85
+ }
86
+ const client = new DevServerClient(), setup = () => {
87
+ }, enable = () => {
88
+ }, disable = () => {
89
+ }, registerBundle = () => {
90
+ }, log = (level, data) => {
91
+ client.log(level, data);
92
+ };
93
+ export {
94
+ disable,
95
+ enable,
96
+ log,
97
+ registerBundle,
98
+ setup
99
+ };
100
+ //# sourceMappingURL=devServerClient.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/devServerClient.ts"],
4
+ "mappings": "AAAA,OAAO,kBAAkB;AAEzB,SAAS,4BAA4B;AACrC,SAAS,qBAAqB;AAG9B,cAAc;AAad,MAAM,gBAAgB;AAAA,EAIpB,cAAc;AAFd,kBAAgD,CAAC;AAG/C,UAAM,aAAa,MAAM;AACvB,YAAM,UAAU,QAAQ,qBAAqB,EAAE,IAAI;AACnD,WAAK,SAAS,IAAI,UAAU,OAAO;AAEnC,YAAM,UAAU,CAAC,UAAiB;AAChC,gBAAQ;AAAA,UACN;AAAA,UACC,MAAgD;AAAA,QACnD,GACA,KAAK,SAAS;AAAA,MAChB;AAEA,WAAK,OAAO,UAAU,SACtB,KAAK,OAAO,UAAU,SACtB,KAAK,OAAO,SAAS,MAAM;AACzB,aAAK,YAAY;AAAA,MACnB;AAAA,IACF;AAEA,IAAI,QAAQ,IAAI,aAAa,iBAC3B,WAAW;AAAA,EAEf;AAAA,EAEA,KAAK,OAAe,MAAa;AAC/B,QAAI;AACF,WAAK,QAAQ;AAAA,QACX,KAAK,UAAU;AAAA,UACb,MAAM;AAAA,UACN;AAAA,UACA,MAAM,KAAK;AAAA,YAAI,CAAC,SACd,OAAO,QAAS,WACZ,OACA,aAAa,MAAM;AAAA,cACjB,cAAc;AAAA,cACd,WAAW;AAAA,cACX,UAAU;AAAA,cACV,KAAK;AAAA,cACL,SAAS;AAAA;AAAA,gBAEP,aAAa,QAAQ;AAAA,cACvB;AAAA,YACF,CAAC;AAAA,UACP;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,QAAQ;AACN,UAAI;AACF,aAAK,QAAQ;AAAA,UACX,KAAK,UAAU;AAAA,YACb,MAAM;AAAA,YACN;AAAA,YACA,MAAM,KAAK;AAAA,cAAI,CAAC,SACd,OAAO,QAAS,WAAW,OAAO,KAAK,UAAU,IAAI;AAAA,YACvD;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF,SAAS,KAAK;AACZ,YAAI;AACF,eAAK,QAAQ;AAAA,YACX,KAAK,UAAU;AAAA,cACb,MAAM;AAAA,cACN,OAAO;AAAA,cACP,MAAM,CAAC,+BAA+B,GAAG;AAAA,YAC3C,CAAC;AAAA,UACH;AAAA,QACF,QAAQ;AAAA,QAER;AAAA,MACF;AAAA,IAEF;AAAA,EACF;AAAA,EAEA,cAAc;AACZ,IAAI,QAAQ,aACV,QAAQ,SAAY,QAAQ,CAAC,EAAE,OAAO,KAAK,MAAM;AAC/C,WAAK,OAAO,KAAK,EAAE,OAAO,KAAK,CAAC;AAAA,IAClC,CAAC,GACD,OAAO,QAAQ;AAGjB,eAAW,EAAE,OAAO,KAAK,KAAK,KAAK;AACjC,WAAK,KAAK,OAAO,IAAI;AAEvB,SAAK,SAAS,CAAC;AAAA,EACjB;AAAA,EAEA,IAAI,OAAe,MAAa;AAC9B,QAAI,KAAK,UAAU,KAAK,OAAO,eAAe,UAAU;AACtD,WAAK,YAAY,GACjB,KAAK,KAAK,OAAO,IAAI;AAAA,SAChB;AACL,UAAI,QAAQ;AAAa;AACzB,WAAK,OAAO,KAAK,EAAE,OAAO,KAAK,CAAC;AAAA,IAClC;AAAA,EACF;AACF;AAEA,MAAM,SAAS,IAAI,gBAAgB,GAEtB,QAAQ,MAAM;AAAC,GACf,SAAS,MAAM;AAAC,GAChB,UAAU,MAAM;AAAC,GACjB,iBAAiB,MAAM;AAAC,GACxB,MAAM,CAAC,OAAe,SAAgB;AACjD,SAAO,IAAI,OAAO,IAAI;AACxB;",
5
+ "names": []
6
+ }
@@ -0,0 +1,21 @@
1
+ import getDevServer from "react-native/Libraries/Core/Devtools/getDevServer";
2
+ let location;
3
+ function getDevServerLocation() {
4
+ if (!location) {
5
+ const { url } = getDevServer(), origin = url.replace(/\/$/, ""), host = origin.replace(/https?:\/\//, "");
6
+ location = {
7
+ host,
8
+ hostname: host.split(":")[0],
9
+ href: url,
10
+ origin,
11
+ pathname: url.split(host)[1],
12
+ port: host.split(":")[1],
13
+ protocol: (url.match(/^([a-z])+:\/\//) || [void 0, void 0])[1]
14
+ };
15
+ }
16
+ return location;
17
+ }
18
+ export {
19
+ getDevServerLocation
20
+ };
21
+ //# sourceMappingURL=getDevServerLocation.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/getDevServerLocation.ts"],
4
+ "mappings": "AACA,OAAO,kBAAkB;AAYzB,IAAI;AAEG,SAAS,uBAA0C;AACxD,MAAI,CAAC,UAAU;AACb,UAAM,EAAE,IAAI,IAAI,aAAa,GACvB,SAAS,IAAI,QAAQ,OAAO,EAAE,GAC9B,OAAO,OAAO,QAAQ,eAAe,EAAE;AAC7C,eAAW;AAAA,MACT;AAAA,MACA,UAAU,KAAK,MAAM,GAAG,EAAE,CAAC;AAAA,MAC3B,MAAM;AAAA,MACN;AAAA,MACA,UAAU,IAAI,MAAM,IAAI,EAAE,CAAC;AAAA,MAC3B,MAAM,KAAK,MAAM,GAAG,EAAE,CAAC;AAAA,MACvB,WAAW,IAAI,MAAM,gBAAgB,KAAK,CAAC,QAAW,MAAS,GAAG,CAAC;AAAA,IACrE;AAAA,EACF;AAEA,SAAO;AACT;",
5
+ "names": []
6
+ }
@@ -0,0 +1,21 @@
1
+ import getDevServer from "react-native/Libraries/Core/Devtools/getDevServer";
2
+ let location;
3
+ function getDevServerLocation() {
4
+ if (!location) {
5
+ const { url } = getDevServer(), origin = url.replace(/\/$/, ""), host = origin.replace(/https?:\/\//, "");
6
+ location = {
7
+ host,
8
+ hostname: host.split(":")[0],
9
+ href: url,
10
+ origin,
11
+ pathname: url.split(host)[1],
12
+ port: host.split(":")[1],
13
+ protocol: (url.match(/^([a-z])+:\/\//) || [void 0, void 0])[1]
14
+ };
15
+ }
16
+ return location;
17
+ }
18
+ export {
19
+ getDevServerLocation
20
+ };
21
+ //# sourceMappingURL=getDevServerLocation.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/getDevServerLocation.ts"],
4
+ "mappings": "AACA,OAAO,kBAAkB;AAYzB,IAAI;AAEG,SAAS,uBAA0C;AACxD,MAAI,CAAC,UAAU;AACb,UAAM,EAAE,IAAI,IAAI,aAAa,GACvB,SAAS,IAAI,QAAQ,OAAO,EAAE,GAC9B,OAAO,OAAO,QAAQ,eAAe,EAAE;AAC7C,eAAW;AAAA,MACT;AAAA,MACA,UAAU,KAAK,MAAM,GAAG,EAAE,CAAC;AAAA,MAC3B,MAAM;AAAA,MACN;AAAA,MACA,UAAU,IAAI,MAAM,IAAI,EAAE,CAAC;AAAA,MAC3B,MAAM,KAAK,MAAM,GAAG,EAAE,CAAC;AAAA,MACvB,WAAW,IAAI,MAAM,gBAAgB,KAAK,CAAC,QAAW,MAAS,GAAG,CAAC;AAAA,IACrE;AAAA,EACF;AAEA,SAAO;AACT;",
5
+ "names": []
6
+ }
@@ -0,0 +1,100 @@
1
+ import { getDevServerLocation } from "./getDevServerLocation";
2
+ class HMRClient {
3
+ constructor(app) {
4
+ this.app = app;
5
+ this.url = `ws://${getDevServerLocation().hostname}:${process.env.REACT_NATIVE_SERVER_PUBLIC_PORT}/__hmr?platform=${process.env.REACT_NATIVE_PLATFORM || "ios"}`, this.socket = new WebSocket(this.url), console.log("[HMRClient] Connecting..."), this.socket.onopen = () => {
6
+ console.log("[HMRClient] Connected");
7
+ }, this.socket.onclose = () => {
8
+ console.log(`[HMRClient] Disconnected ${this.url}`);
9
+ }, this.socket.onerror = (event) => {
10
+ console.log("[HMRClient] Error", event);
11
+ }, this.socket.onmessage = (event) => {
12
+ try {
13
+ const data = JSON.parse(event.data.toString());
14
+ this.processMessage(data);
15
+ } catch (error) {
16
+ console.warn("[HMRClient] Invalid HMR message", error);
17
+ }
18
+ };
19
+ }
20
+ url;
21
+ socket;
22
+ lastHash = "";
23
+ upToDate(hash) {
24
+ return hash && (this.lastHash = hash), this.lastHash === __webpack_hash__;
25
+ }
26
+ processMessage(message) {
27
+ switch (message.action) {
28
+ case "building":
29
+ this.app.LoadingView.showMessage("Rebuilding...", "refresh"), console.log("[HMRClient] Bundle rebuilding", {
30
+ name: message.body?.name
31
+ });
32
+ break;
33
+ case "built":
34
+ console.log("[HMRClient] Bundle rebuilt", {
35
+ name: message.body?.name,
36
+ time: message.body?.time
37
+ });
38
+ case "sync":
39
+ if (!message.body) {
40
+ console.warn("[HMRClient] HMR message body is empty");
41
+ return;
42
+ }
43
+ if (message.body.errors?.length) {
44
+ message.body.errors.forEach((error) => {
45
+ console.error("Cannot apply update due to error:", error);
46
+ }), this.app.LoadingView.hide();
47
+ return;
48
+ }
49
+ message.body.warnings?.length && message.body.warnings.forEach((warning) => {
50
+ console.warn("[HMRClient] Bundle contains warnings:", warning);
51
+ }), this.applyUpdate(message.body);
52
+ }
53
+ }
54
+ applyUpdate(update) {
55
+ if (!module.hot)
56
+ throw new Error("[HMRClient] Hot Module Replacement is disabled.");
57
+ !this.upToDate(update.hash) && module.hot.status() === "idle" && (console.log("[HMRClient] Checking for updates on the server..."), this.checkUpdates(update));
58
+ }
59
+ async checkUpdates(update) {
60
+ try {
61
+ this.app.LoadingView.showMessage("Refreshing...", "refresh");
62
+ const updatedModules = await module.hot?.check(!1);
63
+ if (!updatedModules) {
64
+ console.warn("[HMRClient] Cannot find update - full reload needed"), this.app.reload();
65
+ return;
66
+ }
67
+ const renewedModules = await module.hot?.apply({
68
+ ignoreDeclined: !0,
69
+ ignoreUnaccepted: !1,
70
+ ignoreErrored: !1,
71
+ onDeclined: (data) => {
72
+ console.warn("[HMRClient] Ignored an update due to declined module", {
73
+ chain: data.chain
74
+ });
75
+ }
76
+ });
77
+ this.upToDate() || this.checkUpdates(update);
78
+ const unacceptedModules = updatedModules.filter((moduleId) => renewedModules && renewedModules.indexOf(moduleId) < 0);
79
+ unacceptedModules.length ? (console.warn("[HMRClient] Not every module was accepted - full reload needed", {
80
+ unacceptedModules
81
+ }), this.app.reload()) : (console.log("[HMRClient] Renewed modules - app is up to date", {
82
+ renewedModules
83
+ }), this.app.dismissErrors());
84
+ } catch (error) {
85
+ module.hot?.status() === "fail" || module.hot?.status() === "abort" ? (console.warn("[HMRClient] Cannot check for update - full reload needed"), console.warn("[HMRClient]", error), this.app.reload()) : console.warn("[HMRClient] Update check failed", { error });
86
+ } finally {
87
+ this.app.LoadingView.hide();
88
+ }
89
+ }
90
+ }
91
+ const loadHMRClient = () => {
92
+ const { DevSettings, Platform } = require("react-native"), LoadingView = require("react-native/Libraries/Utilities/LoadingView"), reload = () => DevSettings.reload(), dismissErrors = () => {
93
+ Platform.OS === "ios" ? require("react-native/Libraries/NativeModules/specs/NativeRedBox").default?.dismiss?.() : require("react-native/Libraries/Core/NativeExceptionsManager").default?.dismissRedbox(), require("react-native/Libraries/LogBox/Data/LogBoxData").clear();
94
+ };
95
+ new HMRClient({ reload, dismissErrors, LoadingView });
96
+ };
97
+ export {
98
+ loadHMRClient
99
+ };
100
+ //# sourceMappingURL=hmr-client.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/hmr-client.ts"],
4
+ "mappings": "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",
5
+ "names": []
6
+ }