@take-out/native-hot-update 0.0.36

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 (50) hide show
  1. package/README.md +171 -0
  2. package/dist/cjs/createHotUpdater.cjs +183 -0
  3. package/dist/cjs/createHotUpdater.js +146 -0
  4. package/dist/cjs/createHotUpdater.js.map +6 -0
  5. package/dist/cjs/createHotUpdater.native.js +213 -0
  6. package/dist/cjs/createHotUpdater.native.js.map +1 -0
  7. package/dist/cjs/index.cjs +26 -0
  8. package/dist/cjs/index.js +21 -0
  9. package/dist/cjs/index.js.map +6 -0
  10. package/dist/cjs/index.native.js +29 -0
  11. package/dist/cjs/index.native.js.map +1 -0
  12. package/dist/cjs/mmkv.cjs +32 -0
  13. package/dist/cjs/mmkv.js +27 -0
  14. package/dist/cjs/mmkv.js.map +6 -0
  15. package/dist/cjs/mmkv.native.js +41 -0
  16. package/dist/cjs/mmkv.native.js.map +1 -0
  17. package/dist/cjs/types.cjs +16 -0
  18. package/dist/cjs/types.js +14 -0
  19. package/dist/cjs/types.js.map +6 -0
  20. package/dist/cjs/types.native.js +19 -0
  21. package/dist/cjs/types.native.js.map +1 -0
  22. package/dist/esm/createHotUpdater.js +129 -0
  23. package/dist/esm/createHotUpdater.js.map +6 -0
  24. package/dist/esm/createHotUpdater.mjs +149 -0
  25. package/dist/esm/createHotUpdater.mjs.map +1 -0
  26. package/dist/esm/createHotUpdater.native.js +176 -0
  27. package/dist/esm/createHotUpdater.native.js.map +1 -0
  28. package/dist/esm/index.js +5 -0
  29. package/dist/esm/index.js.map +6 -0
  30. package/dist/esm/index.mjs +3 -0
  31. package/dist/esm/index.mjs.map +1 -0
  32. package/dist/esm/index.native.js +3 -0
  33. package/dist/esm/index.native.js.map +1 -0
  34. package/dist/esm/mmkv.js +11 -0
  35. package/dist/esm/mmkv.js.map +6 -0
  36. package/dist/esm/mmkv.mjs +9 -0
  37. package/dist/esm/mmkv.mjs.map +1 -0
  38. package/dist/esm/mmkv.native.js +15 -0
  39. package/dist/esm/mmkv.native.js.map +1 -0
  40. package/dist/esm/types.js +1 -0
  41. package/dist/esm/types.js.map +6 -0
  42. package/dist/esm/types.mjs +2 -0
  43. package/dist/esm/types.mjs.map +1 -0
  44. package/dist/esm/types.native.js +2 -0
  45. package/dist/esm/types.native.js.map +1 -0
  46. package/package.json +63 -0
  47. package/src/createHotUpdater.ts +240 -0
  48. package/src/index.ts +2 -0
  49. package/src/mmkv.ts +20 -0
  50. package/src/types.ts +62 -0
@@ -0,0 +1,149 @@
1
+ import { getUpdateSource, HotUpdater, useHotUpdaterStore } from "@hot-updater/react-native";
2
+ import * as Application from "expo-application";
3
+ import { useEffect, useRef, useState } from "react";
4
+ import { Alert } from "react-native-web";
5
+ const INITIAL_OTA_ID = "00000000-0000-0000-0000-000000000000",
6
+ BUNDLE_ID_KEY_PREFIX = "hotUpdater.bundleId",
7
+ PRE_RELEASE_BUNDLE_ID_KEY = "hotUpdater.preReleaseBundleId";
8
+ function createHotUpdater(config) {
9
+ const {
10
+ serverUrl,
11
+ storage,
12
+ updateStrategy = "appVersion"
13
+ } = config;
14
+ let isUpdatePending = !1;
15
+ const getAppliedOta = () => {
16
+ const id = HotUpdater.getBundleId();
17
+ return id === INITIAL_OTA_ID || id === HotUpdater.getMinBundleId() ? null : id;
18
+ },
19
+ getShortOtaId = () => {
20
+ const fullId = getAppliedOta();
21
+ return fullId ? fullId.slice(24) : null;
22
+ },
23
+ getIsUpdatePending = () => isUpdatePending,
24
+ getPreReleaseBundleId = () => storage.get(PRE_RELEASE_BUNDLE_ID_KEY),
25
+ handleUpdateDownloaded = (id, options = {}) => {
26
+ const appVersion = Application.nativeApplicationVersion;
27
+ appVersion && storage.set(`${BUNDLE_ID_KEY_PREFIX}.${appVersion}`, id), options.isPreRelease ? storage.set(PRE_RELEASE_BUNDLE_ID_KEY, id) : storage.delete(PRE_RELEASE_BUNDLE_ID_KEY), isUpdatePending = !0;
28
+ };
29
+ return {
30
+ useOtaUpdater: (options = {}) => {
31
+ const {
32
+ enabled = !0,
33
+ onUpdateDownloaded: onUpdateDownloadedCallback,
34
+ onError
35
+ } = options,
36
+ progress = useHotUpdaterStore(state => state.progress),
37
+ isUpdating = progress > 0.01,
38
+ [isUserClearedForAccess, setIsUserClearedForAccess] = useState(!1),
39
+ isUserClearedForAccessRef = useRef(isUserClearedForAccess);
40
+ return isUserClearedForAccessRef.current = isUserClearedForAccess, useEffect(() => {
41
+ if (!isUpdating) {
42
+ const timer = setTimeout(() => {
43
+ isUserClearedForAccessRef.current || setIsUserClearedForAccess(!0);
44
+ }, 5e3);
45
+ return () => clearTimeout(timer);
46
+ }
47
+ }, [isUpdating]), useEffect(() => {
48
+ const timer = setTimeout(() => {
49
+ isUserClearedForAccessRef.current || setIsUserClearedForAccess(!0);
50
+ }, 2e4);
51
+ return () => clearTimeout(timer);
52
+ }, []), useEffect(() => {
53
+ let shouldContinue = !0;
54
+ return (async () => {
55
+ try {
56
+ if (!enabled) {
57
+ setIsUserClearedForAccess(!0);
58
+ return;
59
+ }
60
+ if (!shouldContinue) return;
61
+ const updateInfo = await HotUpdater.checkForUpdate({
62
+ source: getUpdateSource(serverUrl, {
63
+ updateStrategy
64
+ })
65
+ });
66
+ if (!updateInfo) {
67
+ setIsUserClearedForAccess(!0);
68
+ return;
69
+ }
70
+ if (!shouldContinue) return;
71
+ if (updateInfo.status === "ROLLBACK") {
72
+ const preReleaseBundleId = getPreReleaseBundleId(),
73
+ currentBundleId = HotUpdater.getBundleId();
74
+ if (preReleaseBundleId && preReleaseBundleId === currentBundleId && currentBundleId > updateInfo.id) {
75
+ Alert.alert("Update Skipped", "Skipped rollback because you are using a newer pre-release bundle."), setIsUserClearedForAccess(!0);
76
+ return;
77
+ }
78
+ }
79
+ if (updateInfo.shouldForceUpdate || setIsUserClearedForAccess(!0), !shouldContinue) return;
80
+ await updateInfo.updateBundle(), handleUpdateDownloaded(updateInfo.id);
81
+ const info = {
82
+ id: updateInfo.id,
83
+ isCriticalUpdate: updateInfo.shouldForceUpdate,
84
+ fileUrl: updateInfo.fileUrl,
85
+ message: updateInfo.message
86
+ };
87
+ if (onUpdateDownloadedCallback?.(info), !shouldContinue) return;
88
+ if (updateInfo.shouldForceUpdate) {
89
+ if (!isUserClearedForAccessRef.current) {
90
+ HotUpdater.reload();
91
+ return;
92
+ }
93
+ Alert.alert("Update Downloaded", "An important update has been downloaded. Reload now to apply it?", [{
94
+ text: "Later",
95
+ style: "cancel"
96
+ }, {
97
+ text: "Reload Now",
98
+ onPress: () => HotUpdater.reload()
99
+ }]);
100
+ }
101
+ } catch (error) {
102
+ onError?.(error), setIsUserClearedForAccess(!0);
103
+ } finally {
104
+ isUserClearedForAccessRef.current || setIsUserClearedForAccess(!0);
105
+ }
106
+ })(), () => {
107
+ shouldContinue = !1;
108
+ };
109
+ }, [enabled, onUpdateDownloadedCallback, onError]), {
110
+ userClearedForAccess: isUserClearedForAccess,
111
+ progress,
112
+ isUpdatePending: getIsUpdatePending()
113
+ };
114
+ },
115
+ checkForUpdate: async (options = {}) => {
116
+ const {
117
+ channel,
118
+ isPreRelease = !1
119
+ } = options,
120
+ updateSource = getUpdateSource(serverUrl, {
121
+ updateStrategy
122
+ }),
123
+ finalSource = channel ? params => updateSource({
124
+ ...params,
125
+ channel
126
+ }) : updateSource,
127
+ updateInfo = await HotUpdater.checkForUpdate({
128
+ source: finalSource
129
+ });
130
+ return updateInfo ? (await updateInfo.updateBundle(), handleUpdateDownloaded(updateInfo.id, {
131
+ isPreRelease
132
+ }), {
133
+ id: updateInfo.id,
134
+ isCriticalUpdate: updateInfo.shouldForceUpdate,
135
+ fileUrl: updateInfo.fileUrl,
136
+ message: updateInfo.message
137
+ }) : null;
138
+ },
139
+ getAppliedOta,
140
+ getShortOtaId,
141
+ getIsUpdatePending,
142
+ reload: () => HotUpdater.reload(),
143
+ getBundleId: () => HotUpdater.getBundleId(),
144
+ getMinBundleId: () => HotUpdater.getMinBundleId(),
145
+ getChannel: () => HotUpdater.getChannel()
146
+ };
147
+ }
148
+ export { createHotUpdater };
149
+ //# sourceMappingURL=createHotUpdater.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getUpdateSource","HotUpdater","useHotUpdaterStore","Application","useEffect","useRef","useState","Alert","INITIAL_OTA_ID","BUNDLE_ID_KEY_PREFIX","PRE_RELEASE_BUNDLE_ID_KEY","createHotUpdater","config","serverUrl","storage","updateStrategy","isUpdatePending","getAppliedOta","id","getBundleId","getMinBundleId","getShortOtaId","fullId","slice","getIsUpdatePending","getPreReleaseBundleId","get","handleUpdateDownloaded","options","appVersion","nativeApplicationVersion","set","isPreRelease","delete","useOtaUpdater","enabled","onUpdateDownloaded","onUpdateDownloadedCallback","onError","progress","state","isUpdating","isUserClearedForAccess","setIsUserClearedForAccess","isUserClearedForAccessRef","current","timer","setTimeout","clearTimeout","shouldContinue","updateInfo","checkForUpdate","source","status","preReleaseBundleId","currentBundleId","alert","shouldForceUpdate","updateBundle","info","isCriticalUpdate","fileUrl","message","reload","text","style","onPress","error","userClearedForAccess","channel","updateSource","finalSource","params","getChannel"],"sources":["../../src/createHotUpdater.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,176 @@
1
+ import { getUpdateSource, HotUpdater, useHotUpdaterStore } from "@hot-updater/react-native";
2
+ import * as Application from "expo-application";
3
+ import { useEffect, useRef, useState } from "react";
4
+ import { Alert } from "react-native";
5
+ var INITIAL_OTA_ID = "00000000-0000-0000-0000-000000000000",
6
+ BUNDLE_ID_KEY_PREFIX = "hotUpdater.bundleId",
7
+ PRE_RELEASE_BUNDLE_ID_KEY = "hotUpdater.preReleaseBundleId";
8
+ function createHotUpdater(config) {
9
+ var {
10
+ serverUrl,
11
+ storage,
12
+ updateStrategy = "appVersion"
13
+ } = config,
14
+ isUpdatePending = !1,
15
+ getAppliedOta = function () {
16
+ var id = HotUpdater.getBundleId();
17
+ return id === INITIAL_OTA_ID || id === HotUpdater.getMinBundleId() ? null : id;
18
+ },
19
+ getShortOtaId = function () {
20
+ var fullId = getAppliedOta();
21
+ return fullId ? fullId.slice(24) : null;
22
+ },
23
+ getIsUpdatePending = function () {
24
+ return isUpdatePending;
25
+ },
26
+ getPreReleaseBundleId = function () {
27
+ return storage.get(PRE_RELEASE_BUNDLE_ID_KEY);
28
+ },
29
+ handleUpdateDownloaded = function (id) {
30
+ var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {},
31
+ appVersion = Application.nativeApplicationVersion;
32
+ appVersion && storage.set(`${BUNDLE_ID_KEY_PREFIX}.${appVersion}`, id), options.isPreRelease ? storage.set(PRE_RELEASE_BUNDLE_ID_KEY, id) : storage.delete(PRE_RELEASE_BUNDLE_ID_KEY), isUpdatePending = !0;
33
+ },
34
+ useOtaUpdater = function () {
35
+ var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {},
36
+ {
37
+ enabled = !0,
38
+ onUpdateDownloaded: onUpdateDownloadedCallback,
39
+ onError
40
+ } = options,
41
+ progress = useHotUpdaterStore(function (state) {
42
+ return state.progress;
43
+ }),
44
+ isUpdating = progress > 0.01,
45
+ [isUserClearedForAccess, setIsUserClearedForAccess] = useState(!1),
46
+ isUserClearedForAccessRef = useRef(isUserClearedForAccess);
47
+ return isUserClearedForAccessRef.current = isUserClearedForAccess, useEffect(function () {
48
+ if (!isUpdating) {
49
+ var timer = setTimeout(function () {
50
+ isUserClearedForAccessRef.current || setIsUserClearedForAccess(!0);
51
+ }, 5e3);
52
+ return function () {
53
+ return clearTimeout(timer);
54
+ };
55
+ }
56
+ }, [isUpdating]), useEffect(function () {
57
+ var timer = setTimeout(function () {
58
+ isUserClearedForAccessRef.current || setIsUserClearedForAccess(!0);
59
+ }, 2e4);
60
+ return function () {
61
+ return clearTimeout(timer);
62
+ };
63
+ }, []), useEffect(function () {
64
+ var shouldContinue = !0;
65
+ return async function () {
66
+ try {
67
+ if (!enabled) {
68
+ setIsUserClearedForAccess(!0);
69
+ return;
70
+ }
71
+ if (!shouldContinue) return;
72
+ var updateInfo = await HotUpdater.checkForUpdate({
73
+ source: getUpdateSource(serverUrl, {
74
+ updateStrategy
75
+ })
76
+ });
77
+ if (!updateInfo) {
78
+ setIsUserClearedForAccess(!0);
79
+ return;
80
+ }
81
+ if (!shouldContinue) return;
82
+ if (updateInfo.status === "ROLLBACK") {
83
+ var preReleaseBundleId = getPreReleaseBundleId(),
84
+ currentBundleId = HotUpdater.getBundleId();
85
+ if (preReleaseBundleId && preReleaseBundleId === currentBundleId && currentBundleId > updateInfo.id) {
86
+ Alert.alert("Update Skipped", "Skipped rollback because you are using a newer pre-release bundle."), setIsUserClearedForAccess(!0);
87
+ return;
88
+ }
89
+ }
90
+ if (updateInfo.shouldForceUpdate || setIsUserClearedForAccess(!0), !shouldContinue) return;
91
+ await updateInfo.updateBundle(), handleUpdateDownloaded(updateInfo.id);
92
+ var info = {
93
+ id: updateInfo.id,
94
+ isCriticalUpdate: updateInfo.shouldForceUpdate,
95
+ fileUrl: updateInfo.fileUrl,
96
+ message: updateInfo.message
97
+ };
98
+ if (onUpdateDownloadedCallback?.(info), !shouldContinue) return;
99
+ if (updateInfo.shouldForceUpdate) {
100
+ if (!isUserClearedForAccessRef.current) {
101
+ HotUpdater.reload();
102
+ return;
103
+ }
104
+ Alert.alert("Update Downloaded", "An important update has been downloaded. Reload now to apply it?", [{
105
+ text: "Later",
106
+ style: "cancel"
107
+ }, {
108
+ text: "Reload Now",
109
+ onPress: function () {
110
+ return HotUpdater.reload();
111
+ }
112
+ }]);
113
+ }
114
+ } catch (error) {
115
+ onError?.(error), setIsUserClearedForAccess(!0);
116
+ } finally {
117
+ isUserClearedForAccessRef.current || setIsUserClearedForAccess(!0);
118
+ }
119
+ }(), function () {
120
+ shouldContinue = !1;
121
+ };
122
+ }, [enabled, onUpdateDownloadedCallback, onError]), {
123
+ userClearedForAccess: isUserClearedForAccess,
124
+ progress,
125
+ isUpdatePending: getIsUpdatePending()
126
+ };
127
+ },
128
+ checkForUpdate = async function () {
129
+ var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {},
130
+ {
131
+ channel,
132
+ isPreRelease = !1
133
+ } = options,
134
+ updateSource = getUpdateSource(serverUrl, {
135
+ updateStrategy
136
+ }),
137
+ finalSource = channel ? function (params) {
138
+ return updateSource({
139
+ ...params,
140
+ channel
141
+ });
142
+ } : updateSource,
143
+ updateInfo = await HotUpdater.checkForUpdate({
144
+ source: finalSource
145
+ });
146
+ return updateInfo ? (await updateInfo.updateBundle(), handleUpdateDownloaded(updateInfo.id, {
147
+ isPreRelease
148
+ }), {
149
+ id: updateInfo.id,
150
+ isCriticalUpdate: updateInfo.shouldForceUpdate,
151
+ fileUrl: updateInfo.fileUrl,
152
+ message: updateInfo.message
153
+ }) : null;
154
+ };
155
+ return {
156
+ useOtaUpdater,
157
+ checkForUpdate,
158
+ getAppliedOta,
159
+ getShortOtaId,
160
+ getIsUpdatePending,
161
+ reload: function () {
162
+ return HotUpdater.reload();
163
+ },
164
+ getBundleId: function () {
165
+ return HotUpdater.getBundleId();
166
+ },
167
+ getMinBundleId: function () {
168
+ return HotUpdater.getMinBundleId();
169
+ },
170
+ getChannel: function () {
171
+ return HotUpdater.getChannel();
172
+ }
173
+ };
174
+ }
175
+ export { createHotUpdater };
176
+ //# sourceMappingURL=createHotUpdater.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getUpdateSource","HotUpdater","useHotUpdaterStore","Application","useEffect","useRef","useState","Alert","INITIAL_OTA_ID","BUNDLE_ID_KEY_PREFIX","PRE_RELEASE_BUNDLE_ID_KEY","createHotUpdater","config","serverUrl","storage","updateStrategy","isUpdatePending","getAppliedOta","id","getBundleId","getMinBundleId","getShortOtaId","fullId","slice","getIsUpdatePending","getPreReleaseBundleId","get","handleUpdateDownloaded","options","arguments","length","appVersion","nativeApplicationVersion","set","isPreRelease","delete","useOtaUpdater","enabled","onUpdateDownloaded","onUpdateDownloadedCallback","onError","progress","state","isUpdating","isUserClearedForAccess","setIsUserClearedForAccess","isUserClearedForAccessRef","current","timer","setTimeout","clearTimeout","shouldContinue","updateInfo","checkForUpdate","source","status","preReleaseBundleId","currentBundleId","alert","shouldForceUpdate","updateBundle","info","isCriticalUpdate","fileUrl","message","reload","text","style","onPress","error","userClearedForAccess","channel","updateSource","finalSource","params"],"sources":["../../src/createHotUpdater.ts"],"sourcesContent":[null],"mappings":"AAAA,SAAAA,eAAA,EAAAC,UAAA,EAAAC,kBAAA;AAAA,OACE,KAAAC,WAAA;AAAA,SACAC,SAAA,EAAAC,MAAA,EAAAC,QAAA;AAAA,SACAC,KAAA;AAAA,IAAAC,cACK;EAAAC,oBAAA;EAAAC,yBAAA;AACP,SAAAC,gBAAYA,CAAAC,MAAiB;EAC7B;MAAAC,SAAS;MAAAC,OAAW;MAAQC,cAAA,GAAgB;IAAA,IAAAH,MAAA;IAAAI,eAAA;IAAAC,aAAA,YAAAA,CAAA;MAC5C,IAAAC,EAAS,GAAAjB,UAAa,CAAAkB,WAAA;MAItB,OAAMD,EAAA,KAAAV,cAAiB,IAAAU,EAAA,KAAAjB,UAAA,CAAAmB,cACjB,YAAAF,EAAA;IAGC;IAAAG,aAAS,YAAAA,CAAA,EAAiB;MAC/B,IAAMC,MAAE,GAAAL,aAAoB;MAE5B,OAAIK,MAAA,GAAAA,MAAkB,CAAAC,KAAA;IAEtB;IAAAC,kBAAM,GAAgB,SAAAA,CAAA,EAAqB;MACzC,OAAMR,eAAgB;IAEtB;IAAAS,qBADW,YAAAA,CAAA,EACP;MAEN,OAEMX,OAAA,CAAAY,GAAgB,CAAAhB,yBAAqB;IACzC;IAAAiB,sBAAe,YAAAA,CAAcT,EAAA;MAC7B,IAAAU,OAAO,GAAAC,SAAgB,CAAAC,MAAM,GAAE,KAAID,SAAA,iBAAAA,SAAA;QAAAE,UAAA,GAAA5B,WAAA,CAAA6B,wBAAA;MACrCD,UAEM,IAAAjB,OAAA,CAAqBmB,GAAA,IAClBxB,oBAGH,IAAAsB,UAAA,IAAAb,EAAwB,GAAAU,OACrB,CAAAM,YAAY,GAAApB,OAAA,CAAAmB,GAAA,CAAAvB,yBAGf,EAAAQ,EAAA,IAAyBJ,OAE7B,CAAAqB,MAAA,CAAsCzB,yBACnC,GAAAM,eAAA;IACH;IAAAoB,aAAM,YAAAA,CAAA,EAAa;MACf,IAAAR,OAAA,GACFC,SAAQ,CAAAC,MAAO,QAAAD,SAAA,EAAoB,MAAI,SAAUA,SAG/C,OAAQ;QAAA;UAAAQ,OAAA,GACV;UAAAC,kBAAY,EAAAC,0BAEZ;UAAAC;QAAe,IAAAZ,OAAA;QAAAa,QAAA,GAAAvC,kBAGjB,WAAkBwC,KAAA;UACpB,OAAAA,KAAA,CAAAD,QAAA;QA4KA;QAAAE,UAAO,GAAAF,QAAA;QAAA,CAAAG,sBAAA,EAAAC,yBAAA,IAAAvC,QAAA;QAAAwC,yBAAA,GAAAzC,MAAA,CAAAuC,sBAAA;MACL,OAAAE,yBAtKK,CACFC,OAAA,GAAAH,sBAAA,EAAAxC,SAAA;QACH,KAAAuC,UAAM;UACJ,IAAAK,KAAA,GAAUC,UAAA;YACVH,yBAAoB,CAAAC,OAAA,IAAAF,yBAAA;UACpB;UACF,OAAI,YAEE;YAKN,OAAAK,YAAA,CAAAF,KAAA;UAIE;QACE;MACE,IACgCL,UAE3B,CACP,GAAAvC,SAAO,aAAM;QAAkB,IACjC4C,KAAA,GAAAC,UAAA;UACFH,yBAGA,CAAUC,OAAM,IAAAF,yBAAA;QACd;QACE,OAAK;UAGP,OAAQK,YAAA,CAAAF,KAAA;QACR;MAA+B,GACjC,EAAG,CAAC,EAAC5C,SAGL,aAAgB;QACd,IAAA+C,cAAI,KAAiB;QAEpB,yBAAa;UACZ;YACE,KAAAd,OAAK;cACHQ,yBAAA,GAA0B;cAC1B;YAAA;YAGF,KAAAM,cAAK;YAEL,IAAAC,UAAM,SAAanD,UAAM,CAAAoD,cAAW;cAAeC,MACjD,EAAAtD,eAAQ,CAAAa,SAAgB;gBACzBE;cAED;YACE;YACA,KAAAqC,UAAA;cACFP,yBAAA;cAEA;YAGA;YACE,KAAAM,cAAM;YAGN,IAAAC,UACE,CAAAG,MAAA,eACA;cAGA,IAAAC,kBAAM,GAAA/B,qBAAA;gBAAAgC,eAAA,GAAAxD,UAAA,CAAAkB,WAAA;cAAA,IAAAqC,kBACJ,IAAAA,kBAAA,KAAAC,eAAA,IAAAA,eAAA,GAAAL,UAAA,CAAAlC,EAAA;gBAAAX,KACA,CAAAmD,KAAA,0FAAAb,yBAAA;gBAAA;cAGF;YAAA;YACF,IACFO,UAAA,CAAAO,iBAAA,IAAAd,yBAAA,OAAAM,cAAA;YAMA,MAJKC,UAAA,CAAWQ,YAAA,IAAAjC,sBACd,CAAAyB,UAA8B,CAAAlC,EAG5B,CAAC;YAEL,IAAA2C,IAAM;cAGN3C,EAAA,EAAAkC,UAAyB,CAAAlC,EAAA;cAAA4C,gBACnB,EAAWV,UAAA,CAAAO,iBAAA;cAAAI,OACf,EAAAX,UAAA,CAAkBW,OAAA;cAAWC,OAC7B,EAAAZ,UAAS,CAAAY;YAAW;YACA,IACtBzB,0BAAA,GAAAsB,IAAA,IAAAV,cAAA;YAGA,IAAAC,UAFA,CAAAO,iBAAA;cAIA,IAAI,CAAAb,yBAAW,CAAAC,OAAmB;gBAChC9C,UAAK,CAAAgE,MAAA;gBACH;cACA;cAAA1D,KACF,CAAAmD,KAAA,2FACA;gBACEQ,IAAA;gBACAC,KAAA;cAAA,GACA;gBACmCD,IAC/B,cAAM;gBACVE,OAAA,WAAAA,CAAA;kBACF,OAAAnE,UAAA,CAAAgE,MAAA;gBACF;cACF,EACE;YAEF;UACE,SAAKI,KAAA;YAGP7B,OAAA,GAAA6B,KAAA,GAAAxB,yBAAA;UACF,UAEO;YACLC,yBAAiB,CAAAC,OAAA,IAAAF,yBAAA;UACnB;QACF,EAAG,CAAC,cAAS;UAGXM,cAAA;QAAsB;MACtB,IAEFd,OAAA,EACFE,0BAAA,EAkCEC,OAAA,CA7BA;QAQmD8B,oBACzC,EAAA1B,sBAAA;QACVH,QAAC;QAEDzB,eAAI,EAAAQ,kBACI;MAGC;IACU;IAAA6B,cACf,kBAAAA,CAAA,EAA6B;MAAA,IAC7BzB,OAAA,GAASC,SAAA,CAAWC,MAAA,QAAAD,SAAA,iBAAAA,SAAA;QAAA;UAAA0C,OAAA;UAAArC,YAAA;QAAA,IAAAN,OAAA;QAAA4C,YAAA,GAAAxE,eAAA,CAAAa,SAAA;UAAAE;QACA,EACtB;QAAA0D,WAGK,GAAAF,OAAA,aAAAG,MAAA;UACT,OAAAF,YAAA;YAKE,GAAAE,MAAA;YACAH;UACA;QACA,IAAAC,YAAc;QAAApB,UAAW,SAAOnD,UAAA,CAAAoD,cAAA;UAChCC,MAAA,EAAAmB;QACA;MACA,OAAArB,UAAY,IAAM,MAAAA,UAAW,CAAAQ,YAAW,IAAAjC,sBAAA,CAAAyB,UAAA,CAAAlC,EAAA;QAC1CgB;MACF","ignoreList":[]}
@@ -0,0 +1,5 @@
1
+ import { createHotUpdater } from "./createHotUpdater";
2
+ export {
3
+ createHotUpdater
4
+ };
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/index.ts"],
4
+ "mappings": "AAAA,SAAS,wBAAwB;",
5
+ "names": []
6
+ }
@@ -0,0 +1,3 @@
1
+ import { createHotUpdater } from "./createHotUpdater.mjs";
2
+ export { createHotUpdater };
3
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createHotUpdater"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,gBAAA,QAAwB","ignoreList":[]}
@@ -0,0 +1,3 @@
1
+ import { createHotUpdater } from "./createHotUpdater.native.js";
2
+ export { createHotUpdater };
3
+ //# sourceMappingURL=index.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createHotUpdater"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAAA,SAASA,gBAAA,QAAwB","ignoreList":[]}
@@ -0,0 +1,11 @@
1
+ function createMMKVStorage(mmkv) {
2
+ return {
3
+ get: (key) => mmkv.getString(key),
4
+ set: (key, value) => mmkv.set(key, value),
5
+ delete: (key) => mmkv.delete(key)
6
+ };
7
+ }
8
+ export {
9
+ createMMKVStorage
10
+ };
11
+ //# sourceMappingURL=mmkv.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/mmkv.ts"],
4
+ "mappings": "AAaO,SAAS,kBAAkB,MAA8B;AAC9D,SAAO;AAAA,IACL,KAAK,CAAC,QAAgB,KAAK,UAAU,GAAG;AAAA,IACxC,KAAK,CAAC,KAAa,UAAkB,KAAK,IAAI,KAAK,KAAK;AAAA,IACxD,QAAQ,CAAC,QAAgB,KAAK,OAAO,GAAG;AAAA,EAC1C;AACF;",
5
+ "names": []
6
+ }
@@ -0,0 +1,9 @@
1
+ function createMMKVStorage(mmkv) {
2
+ return {
3
+ get: key => mmkv.getString(key),
4
+ set: (key, value) => mmkv.set(key, value),
5
+ delete: key => mmkv.delete(key)
6
+ };
7
+ }
8
+ export { createMMKVStorage };
9
+ //# sourceMappingURL=mmkv.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createMMKVStorage","mmkv","get","key","getString","set","value","delete"],"sources":["../../src/mmkv.ts"],"sourcesContent":[null],"mappings":"AAaO,SAASA,kBAAkBC,IAAA,EAA8B;EAC9D,OAAO;IACLC,GAAA,EAAMC,GAAA,IAAgBF,IAAA,CAAKG,SAAA,CAAUD,GAAG;IACxCE,GAAA,EAAKA,CAACF,GAAA,EAAaG,KAAA,KAAkBL,IAAA,CAAKI,GAAA,CAAIF,GAAA,EAAKG,KAAK;IACxDC,MAAA,EAASJ,GAAA,IAAgBF,IAAA,CAAKM,MAAA,CAAOJ,GAAG;EAC1C;AACF","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ function createMMKVStorage(mmkv) {
2
+ return {
3
+ get: function (key) {
4
+ return mmkv.getString(key);
5
+ },
6
+ set: function (key, value) {
7
+ return mmkv.set(key, value);
8
+ },
9
+ delete: function (key) {
10
+ return mmkv.delete(key);
11
+ }
12
+ };
13
+ }
14
+ export { createMMKVStorage };
15
+ //# sourceMappingURL=mmkv.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createMMKVStorage","mmkv","get","key","getString","set","value"],"sources":["../../src/mmkv.ts"],"sourcesContent":[null],"mappings":"AAaO,SAASA,kBAAkBC,IAAA,EAA8B;EAC9D,OAAO;IACLC,GAAA,EAAK,SAAAA,CAAiBC,GAAA,EAAK;MAC3B,OAAMF,IAAa,CAAAG,SAAkB,CAAAD,GAAK;IAC1C;IACFE,GAAA,WAAAA,CAAAF,GAAA,EAAAG,KAAA;MACF,OAAAL,IAAA,CAAAI,GAAA,CAAAF,GAAA,EAAAG,KAAA","ignoreList":[]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "mappings": "",
5
+ "names": []
6
+ }
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":[],"sourcesContent":[],"mappings":"","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+
2
+ //# sourceMappingURL=types.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":[],"sourcesContent":[],"mappings":"","ignoreList":[]}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@take-out/native-hot-update",
3
+ "version": "0.0.36",
4
+ "type": "module",
5
+ "sideEffects": false,
6
+ "source": "src/index.ts",
7
+ "main": "dist/cjs",
8
+ "module": "dist/esm",
9
+ "publishConfig": {
10
+ "access": "public"
11
+ },
12
+ "types": "./src/index.ts",
13
+ "exports": {
14
+ "./package.json": "./package.json",
15
+ ".": {
16
+ "react-native": {
17
+ "import": "./dist/esm/index.native.js",
18
+ "require": "./dist/cjs/index.native.js"
19
+ },
20
+ "types": "./src/index.ts",
21
+ "import": "./dist/esm/index.mjs",
22
+ "require": "./dist/cjs/index.cjs"
23
+ },
24
+ "./mmkv": {
25
+ "types": "./src/mmkv.ts",
26
+ "import": "./dist/esm/mmkv.mjs",
27
+ "require": "./dist/cjs/mmkv.cjs"
28
+ }
29
+ },
30
+ "files": [
31
+ "dist",
32
+ "src"
33
+ ],
34
+ "scripts": {
35
+ "build": "tamagui-build --skip-types",
36
+ "watch": "tamagui-build --skip-types --watch",
37
+ "clean": "tamagui-build clean",
38
+ "typecheck": "tko run typecheck",
39
+ "lint": "oxlint src",
40
+ "check": "tsc --noEmit"
41
+ },
42
+ "dependencies": {
43
+ "@hot-updater/react-native": "^0.20.11"
44
+ },
45
+ "peerDependencies": {
46
+ "expo-application": "*",
47
+ "react": "*",
48
+ "react-native": "*"
49
+ },
50
+ "peerDependenciesMeta": {
51
+ "react-native-mmkv": {
52
+ "optional": true
53
+ }
54
+ },
55
+ "devDependencies": {
56
+ "@tamagui/build": "*",
57
+ "@types/react": "^18.3.18",
58
+ "react": "*",
59
+ "react-native": "*",
60
+ "react-native-mmkv": "^3.1.0",
61
+ "typescript": "^5.7.3"
62
+ }
63
+ }