@mustafaaksoy41/react-native-offline-queue 0.1.2

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 (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +673 -0
  3. package/lib/commonjs/adapters/index.js +128 -0
  4. package/lib/commonjs/adapters/index.js.map +1 -0
  5. package/lib/commonjs/components/OfflineProvider.js +51 -0
  6. package/lib/commonjs/components/OfflineProvider.js.map +1 -0
  7. package/lib/commonjs/components/OfflineSyncPrompt.js +37 -0
  8. package/lib/commonjs/components/OfflineSyncPrompt.js.map +1 -0
  9. package/lib/commonjs/core/OfflineManager.js +308 -0
  10. package/lib/commonjs/core/OfflineManager.js.map +1 -0
  11. package/lib/commonjs/core/StorageAdapter.js +31 -0
  12. package/lib/commonjs/core/StorageAdapter.js.map +1 -0
  13. package/lib/commonjs/core/types.js +15 -0
  14. package/lib/commonjs/core/types.js.map +1 -0
  15. package/lib/commonjs/global.d.js +2 -0
  16. package/lib/commonjs/global.d.js.map +1 -0
  17. package/lib/commonjs/hooks/useOfflineMutation.js +61 -0
  18. package/lib/commonjs/hooks/useOfflineMutation.js.map +1 -0
  19. package/lib/commonjs/hooks/useOfflineQueue.js +21 -0
  20. package/lib/commonjs/hooks/useOfflineQueue.js.map +1 -0
  21. package/lib/commonjs/hooks/useOfflineSyncInterceptor.js +42 -0
  22. package/lib/commonjs/hooks/useOfflineSyncInterceptor.js.map +1 -0
  23. package/lib/commonjs/hooks/useSyncProgress.js +33 -0
  24. package/lib/commonjs/hooks/useSyncProgress.js.map +1 -0
  25. package/lib/commonjs/index.js +134 -0
  26. package/lib/commonjs/index.js.map +1 -0
  27. package/lib/commonjs/package.json +1 -0
  28. package/lib/module/adapters/index.js +121 -0
  29. package/lib/module/adapters/index.js.map +1 -0
  30. package/lib/module/components/OfflineProvider.js +43 -0
  31. package/lib/module/components/OfflineProvider.js.map +1 -0
  32. package/lib/module/components/OfflineSyncPrompt.js +31 -0
  33. package/lib/module/components/OfflineSyncPrompt.js.map +1 -0
  34. package/lib/module/core/OfflineManager.js +304 -0
  35. package/lib/module/core/OfflineManager.js.map +1 -0
  36. package/lib/module/core/StorageAdapter.js +25 -0
  37. package/lib/module/core/StorageAdapter.js.map +1 -0
  38. package/lib/module/core/types.js +11 -0
  39. package/lib/module/core/types.js.map +1 -0
  40. package/lib/module/global.d.js +2 -0
  41. package/lib/module/global.d.js.map +1 -0
  42. package/lib/module/hooks/useOfflineMutation.js +57 -0
  43. package/lib/module/hooks/useOfflineMutation.js.map +1 -0
  44. package/lib/module/hooks/useOfflineQueue.js +17 -0
  45. package/lib/module/hooks/useOfflineQueue.js.map +1 -0
  46. package/lib/module/hooks/useOfflineSyncInterceptor.js +38 -0
  47. package/lib/module/hooks/useOfflineSyncInterceptor.js.map +1 -0
  48. package/lib/module/hooks/useSyncProgress.js +29 -0
  49. package/lib/module/hooks/useSyncProgress.js.map +1 -0
  50. package/lib/module/index.js +20 -0
  51. package/lib/module/index.js.map +1 -0
  52. package/lib/module/package.json +1 -0
  53. package/lib/typescript/adapters/index.d.ts +12 -0
  54. package/lib/typescript/adapters/index.d.ts.map +1 -0
  55. package/lib/typescript/components/OfflineProvider.d.ts +13 -0
  56. package/lib/typescript/components/OfflineProvider.d.ts.map +1 -0
  57. package/lib/typescript/components/OfflineSyncPrompt.d.ts +11 -0
  58. package/lib/typescript/components/OfflineSyncPrompt.d.ts.map +1 -0
  59. package/lib/typescript/core/OfflineManager.d.ts +53 -0
  60. package/lib/typescript/core/OfflineManager.d.ts.map +1 -0
  61. package/lib/typescript/core/StorageAdapter.d.ts +21 -0
  62. package/lib/typescript/core/StorageAdapter.d.ts.map +1 -0
  63. package/lib/typescript/core/types.d.ts +23 -0
  64. package/lib/typescript/core/types.d.ts.map +1 -0
  65. package/lib/typescript/hooks/useOfflineMutation.d.ts +8 -0
  66. package/lib/typescript/hooks/useOfflineMutation.d.ts.map +1 -0
  67. package/lib/typescript/hooks/useOfflineQueue.d.ts +8 -0
  68. package/lib/typescript/hooks/useOfflineQueue.d.ts.map +1 -0
  69. package/lib/typescript/hooks/useOfflineSyncInterceptor.d.ts +9 -0
  70. package/lib/typescript/hooks/useOfflineSyncInterceptor.d.ts.map +1 -0
  71. package/lib/typescript/hooks/useSyncProgress.d.ts +23 -0
  72. package/lib/typescript/hooks/useSyncProgress.d.ts.map +1 -0
  73. package/lib/typescript/index.d.ts +11 -0
  74. package/lib/typescript/index.d.ts.map +1 -0
  75. package/package.json +73 -0
  76. package/src/adapters/index.ts +141 -0
  77. package/src/components/OfflineProvider.tsx +52 -0
  78. package/src/components/OfflineSyncPrompt.tsx +32 -0
  79. package/src/core/OfflineManager.ts +338 -0
  80. package/src/core/StorageAdapter.ts +42 -0
  81. package/src/core/types.ts +33 -0
  82. package/src/global.d.ts +1 -0
  83. package/src/hooks/useOfflineMutation.ts +63 -0
  84. package/src/hooks/useOfflineQueue.ts +17 -0
  85. package/src/hooks/useOfflineSyncInterceptor.ts +39 -0
  86. package/src/hooks/useSyncProgress.ts +32 -0
  87. package/src/index.ts +17 -0
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useOfflineMutation = useOfflineMutation;
7
+ var _react = require("react");
8
+ var _OfflineManager = require("../core/OfflineManager");
9
+ var _OfflineProvider = require("../components/OfflineProvider");
10
+ function useOfflineMutation(actionName, options) {
11
+ const {
12
+ isOnline
13
+ } = (0, _OfflineProvider.useNetworkStatus)();
14
+ const handlerRef = (0, _react.useRef)(options?.handler);
15
+ handlerRef.current = options?.handler;
16
+
17
+ // Register per-action handler (persists even after unmount)
18
+ (0, _react.useEffect)(() => {
19
+ if (handlerRef.current) {
20
+ _OfflineManager.OfflineManager.registerHandler(actionName, payload => handlerRef.current(payload));
21
+ }
22
+ }, [actionName]);
23
+ const mutateOffline = async payload => {
24
+ // Resolve which handler to use: per-action handler > global onSyncAction
25
+ const handler = handlerRef.current || _OfflineManager.OfflineManager.getHandler(actionName);
26
+ const globalHandler = _OfflineManager.OfflineManager.onSyncAction;
27
+ const hasHandler = handler || globalHandler;
28
+ if (isOnline && hasHandler) {
29
+ // ── ONLINE: Execute directly, skip the queue ──
30
+ if (__DEV__) console.log(`[OfflineQueue] mutate: ${actionName} (direct)`);
31
+ try {
32
+ if (handler) {
33
+ await handler(payload);
34
+ } else if (globalHandler) {
35
+ await globalHandler({
36
+ id: '',
37
+ actionName,
38
+ payload,
39
+ createdAt: Date.now(),
40
+ retryCount: 0
41
+ });
42
+ }
43
+ options?.onOptimisticSuccess?.(payload);
44
+ } catch (error) {
45
+ console.warn(`[OfflineQueue] mutate: ${actionName} failed, falling back to queue`, error);
46
+ await _OfflineManager.OfflineManager.push(actionName, payload);
47
+ options?.onOptimisticSuccess?.(payload);
48
+ options?.onError?.(error, payload);
49
+ }
50
+ } else {
51
+ // ── OFFLINE: Add to queue + optimistic update ──
52
+ if (__DEV__) console.log(`[OfflineQueue] mutate: ${actionName} (queued)`);
53
+ await _OfflineManager.OfflineManager.push(actionName, payload);
54
+ options?.onOptimisticSuccess?.(payload);
55
+ }
56
+ };
57
+ return {
58
+ mutateOffline
59
+ };
60
+ }
61
+ //# sourceMappingURL=useOfflineMutation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_OfflineManager","_OfflineProvider","useOfflineMutation","actionName","options","isOnline","useNetworkStatus","handlerRef","useRef","handler","current","useEffect","OfflineManager","registerHandler","payload","mutateOffline","getHandler","globalHandler","onSyncAction","hasHandler","__DEV__","console","log","id","createdAt","Date","now","retryCount","onOptimisticSuccess","error","warn","push","onError"],"sourceRoot":"../../../src","sources":["hooks/useOfflineMutation.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAF,OAAA;AAEO,SAASG,kBAAkBA,CAChCC,UAAkB,EAClBC,OAIC,EACD;EACA,MAAM;IAAEC;EAAS,CAAC,GAAG,IAAAC,iCAAgB,EAAC,CAAC;EACvC,MAAMC,UAAU,GAAG,IAAAC,aAAM,EAACJ,OAAO,EAAEK,OAAO,CAAC;EAC3CF,UAAU,CAACG,OAAO,GAAGN,OAAO,EAAEK,OAAO;;EAErC;EACA,IAAAE,gBAAS,EAAC,MAAM;IACd,IAAIJ,UAAU,CAACG,OAAO,EAAE;MACtBE,8BAAc,CAACC,eAAe,CAACV,UAAU,EAAGW,OAAY,IACtDP,UAAU,CAACG,OAAO,CAAEI,OAAO,CAC7B,CAAC;IACH;EACF,CAAC,EAAE,CAACX,UAAU,CAAC,CAAC;EAEhB,MAAMY,aAAa,GAAG,MAAOD,OAAiB,IAAK;IACjD;IACA,MAAML,OAAO,GAAGF,UAAU,CAACG,OAAO,IAAIE,8BAAc,CAACI,UAAU,CAACb,UAAU,CAAC;IAC3E,MAAMc,aAAa,GAAGL,8BAAc,CAACM,YAAY;IACjD,MAAMC,UAAU,GAAGV,OAAO,IAAIQ,aAAa;IAE3C,IAAIZ,QAAQ,IAAIc,UAAU,EAAE;MAC1B;MACA,IAAIC,OAAO,EAAEC,OAAO,CAACC,GAAG,CAAC,0BAA0BnB,UAAU,WAAW,CAAC;MACzE,IAAI;QACF,IAAIM,OAAO,EAAE;UACX,MAAMA,OAAO,CAACK,OAAO,CAAC;QACxB,CAAC,MAAM,IAAIG,aAAa,EAAE;UACxB,MAAMA,aAAa,CAAC;YAClBM,EAAE,EAAE,EAAE;YACNpB,UAAU;YACVW,OAAO;YACPU,SAAS,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC;YACrBC,UAAU,EAAE;UACd,CAAC,CAAC;QACJ;QACAvB,OAAO,EAAEwB,mBAAmB,GAAGd,OAAO,CAAC;MACzC,CAAC,CAAC,OAAOe,KAAU,EAAE;QACnBR,OAAO,CAACS,IAAI,CAAC,0BAA0B3B,UAAU,gCAAgC,EAAE0B,KAAK,CAAC;QACzF,MAAMjB,8BAAc,CAACmB,IAAI,CAAC5B,UAAU,EAAEW,OAAO,CAAC;QAC9CV,OAAO,EAAEwB,mBAAmB,GAAGd,OAAO,CAAC;QACvCV,OAAO,EAAE4B,OAAO,GAAGH,KAAK,EAAEf,OAAO,CAAC;MACpC;IACF,CAAC,MAAM;MACL;MACA,IAAIM,OAAO,EAAEC,OAAO,CAACC,GAAG,CAAC,0BAA0BnB,UAAU,WAAW,CAAC;MACzE,MAAMS,8BAAc,CAACmB,IAAI,CAAC5B,UAAU,EAAEW,OAAO,CAAC;MAC9CV,OAAO,EAAEwB,mBAAmB,GAAGd,OAAO,CAAC;IACzC;EACF,CAAC;EAED,OAAO;IAAEC;EAAc,CAAC;AAC1B","ignoreList":[]}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useOfflineQueue = useOfflineQueue;
7
+ var _react = require("react");
8
+ var _OfflineManager = require("../core/OfflineManager");
9
+ const subscribe = listener => _OfflineManager.OfflineManager.subscribe(listener);
10
+ const getSnapshot = () => _OfflineManager.OfflineManager.getQueue();
11
+ function useOfflineQueue() {
12
+ const queue = (0, _react.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
13
+ return {
14
+ queue,
15
+ pendingCount: queue.length,
16
+ isSyncing: _OfflineManager.OfflineManager.isSyncing,
17
+ syncNow: () => _OfflineManager.OfflineManager.flushQueue(),
18
+ clearQueue: () => _OfflineManager.OfflineManager.clear()
19
+ };
20
+ }
21
+ //# sourceMappingURL=useOfflineQueue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_OfflineManager","subscribe","listener","OfflineManager","getSnapshot","getQueue","useOfflineQueue","queue","useSyncExternalStore","pendingCount","length","isSyncing","syncNow","flushQueue","clearQueue","clear"],"sourceRoot":"../../../src","sources":["hooks/useOfflineQueue.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AAEA,MAAME,SAAS,GAAIC,QAAoB,IAAKC,8BAAc,CAACF,SAAS,CAACC,QAAQ,CAAC;AAC9E,MAAME,WAAW,GAAGA,CAAA,KAAMD,8BAAc,CAACE,QAAQ,CAAC,CAAC;AAE5C,SAASC,eAAeA,CAAA,EAAG;EAChC,MAAMC,KAAK,GAAG,IAAAC,2BAAoB,EAACP,SAAS,EAAEG,WAAW,EAAEA,WAAW,CAAC;EAEvE,OAAO;IACLG,KAAK;IACLE,YAAY,EAAEF,KAAK,CAACG,MAAM;IAC1BC,SAAS,EAAER,8BAAc,CAACQ,SAAS;IACnCC,OAAO,EAAEA,CAAA,KAAMT,8BAAc,CAACU,UAAU,CAAC,CAAC;IAC1CC,UAAU,EAAEA,CAAA,KAAMX,8BAAc,CAACY,KAAK,CAAC;EACzC,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useOfflineSyncInterceptor = useOfflineSyncInterceptor;
7
+ var _react = require("react");
8
+ var _OfflineProvider = require("../components/OfflineProvider");
9
+ var _useOfflineQueue = require("./useOfflineQueue");
10
+ function useOfflineSyncInterceptor({
11
+ onPromptNeeded
12
+ }) {
13
+ const {
14
+ isOnline
15
+ } = (0, _OfflineProvider.useNetworkStatus)();
16
+ const {
17
+ pendingCount,
18
+ syncNow,
19
+ clearQueue
20
+ } = (0, _useOfflineQueue.useOfflineQueue)();
21
+ const onPromptNeededRef = (0, _react.useRef)(onPromptNeeded);
22
+ (0, _react.useEffect)(() => {
23
+ onPromptNeededRef.current = onPromptNeeded;
24
+ });
25
+ const [hasPrompted, setHasPrompted] = (0, _react.useState)(false);
26
+ (0, _react.useEffect)(() => {
27
+ if (isOnline && pendingCount > 0 && !hasPrompted) {
28
+ setHasPrompted(true);
29
+ onPromptNeededRef.current({
30
+ pendingCount,
31
+ syncNow: async () => {
32
+ await syncNow();
33
+ },
34
+ discardQueue: clearQueue
35
+ });
36
+ } else if (!isOnline || pendingCount === 0) {
37
+ // Reset prompt state when offline or when queue is cleared
38
+ setHasPrompted(false);
39
+ }
40
+ }, [isOnline, pendingCount, hasPrompted, syncNow, clearQueue]);
41
+ }
42
+ //# sourceMappingURL=useOfflineSyncInterceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_OfflineProvider","_useOfflineQueue","useOfflineSyncInterceptor","onPromptNeeded","isOnline","useNetworkStatus","pendingCount","syncNow","clearQueue","useOfflineQueue","onPromptNeededRef","useRef","useEffect","current","hasPrompted","setHasPrompted","useState","discardQueue"],"sourceRoot":"../../../src","sources":["hooks/useOfflineSyncInterceptor.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAF,OAAA;AAUO,SAASG,yBAAyBA,CAAC;EAAEC;AAAmC,CAAC,EAAE;EAChF,MAAM;IAAEC;EAAS,CAAC,GAAG,IAAAC,iCAAgB,EAAC,CAAC;EACvC,MAAM;IAAEC,YAAY;IAAEC,OAAO;IAAEC;EAAW,CAAC,GAAG,IAAAC,gCAAe,EAAC,CAAC;EAE/D,MAAMC,iBAAiB,GAAG,IAAAC,aAAM,EAACR,cAAc,CAAC;EAChD,IAAAS,gBAAS,EAAC,MAAM;IACdF,iBAAiB,CAACG,OAAO,GAAGV,cAAc;EAC5C,CAAC,CAAC;EAEF,MAAM,CAACW,WAAW,EAAEC,cAAc,CAAC,GAAG,IAAAC,eAAQ,EAAC,KAAK,CAAC;EAErD,IAAAJ,gBAAS,EAAC,MAAM;IACd,IAAIR,QAAQ,IAAIE,YAAY,GAAG,CAAC,IAAI,CAACQ,WAAW,EAAE;MAChDC,cAAc,CAAC,IAAI,CAAC;MACpBL,iBAAiB,CAACG,OAAO,CAAC;QACxBP,YAAY;QACZC,OAAO,EAAE,MAAAA,CAAA,KAAY;UACnB,MAAMA,OAAO,CAAC,CAAC;QACjB,CAAC;QACDU,YAAY,EAAET;MAChB,CAAC,CAAC;IACJ,CAAC,MAAM,IAAI,CAACJ,QAAQ,IAAIE,YAAY,KAAK,CAAC,EAAE;MAC1C;MACAS,cAAc,CAAC,KAAK,CAAC;IACvB;EACF,CAAC,EAAE,CAACX,QAAQ,EAAEE,YAAY,EAAEQ,WAAW,EAAEP,OAAO,EAAEC,UAAU,CAAC,CAAC;AAChE","ignoreList":[]}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useSyncProgress = useSyncProgress;
7
+ var _react = require("react");
8
+ var _OfflineManager = require("../core/OfflineManager");
9
+ const subscribeProgress = listener => _OfflineManager.OfflineManager.subscribeProgress(listener);
10
+ const getProgressSnapshot = () => _OfflineManager.OfflineManager.syncProgress;
11
+
12
+ /**
13
+ * Live sync progress tracker.
14
+ * Use this inside a BottomSheet, Modal, or any UI to show per-item sync status.
15
+ *
16
+ * Returns:
17
+ * - isActive: whether a sync session is currently running
18
+ * - totalCount: total items in this sync batch
19
+ * - completedCount: successfully synced so far
20
+ * - failedCount: items that failed
21
+ * - currentAction: the action currently being synced
22
+ * - items: full list with per-item status (pending | syncing | success | failed)
23
+ * - percentage: 0-100 completion percentage
24
+ */
25
+ function useSyncProgress() {
26
+ const progress = (0, _react.useSyncExternalStore)(subscribeProgress, getProgressSnapshot, getProgressSnapshot);
27
+ const percentage = progress.totalCount > 0 ? Math.round((progress.completedCount + progress.failedCount) / progress.totalCount * 100) : 0;
28
+ return {
29
+ ...progress,
30
+ percentage
31
+ };
32
+ }
33
+ //# sourceMappingURL=useSyncProgress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","require","_OfflineManager","subscribeProgress","listener","OfflineManager","getProgressSnapshot","syncProgress","useSyncProgress","progress","useSyncExternalStore","percentage","totalCount","Math","round","completedCount","failedCount"],"sourceRoot":"../../../src","sources":["hooks/useSyncProgress.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,eAAA,GAAAD,OAAA;AAEA,MAAME,iBAAiB,GAAIC,QAAoB,IAAKC,8BAAc,CAACF,iBAAiB,CAACC,QAAQ,CAAC;AAC9F,MAAME,mBAAmB,GAAGA,CAAA,KAAMD,8BAAc,CAACE,YAAY;;AAE7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,eAAeA,CAAA,EAAG;EAChC,MAAMC,QAAQ,GAAG,IAAAC,2BAAoB,EAACP,iBAAiB,EAAEG,mBAAmB,EAAEA,mBAAmB,CAAC;EAElG,MAAMK,UAAU,GACdF,QAAQ,CAACG,UAAU,GAAG,CAAC,GACnBC,IAAI,CAACC,KAAK,CAAE,CAACL,QAAQ,CAACM,cAAc,GAAGN,QAAQ,CAACO,WAAW,IAAIP,QAAQ,CAACG,UAAU,GAAI,GAAG,CAAC,GAC1F,CAAC;EAEP,OAAO;IACL,GAAGH,QAAQ;IACXE;EACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _exportNames = {
7
+ OfflineManager: true,
8
+ getMMKVAdapter: true,
9
+ getAsyncStorageAdapter: true,
10
+ getRealmAdapter: true
11
+ };
12
+ Object.defineProperty(exports, "OfflineManager", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _OfflineManager.OfflineManager;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "getAsyncStorageAdapter", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _adapters.getAsyncStorageAdapter;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "getMMKVAdapter", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _adapters.getMMKVAdapter;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "getRealmAdapter", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _adapters.getRealmAdapter;
34
+ }
35
+ });
36
+ var _types = require("./core/types");
37
+ Object.keys(_types).forEach(function (key) {
38
+ if (key === "default" || key === "__esModule") return;
39
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
40
+ if (key in exports && exports[key] === _types[key]) return;
41
+ Object.defineProperty(exports, key, {
42
+ enumerable: true,
43
+ get: function () {
44
+ return _types[key];
45
+ }
46
+ });
47
+ });
48
+ var _StorageAdapter = require("./core/StorageAdapter");
49
+ Object.keys(_StorageAdapter).forEach(function (key) {
50
+ if (key === "default" || key === "__esModule") return;
51
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
52
+ if (key in exports && exports[key] === _StorageAdapter[key]) return;
53
+ Object.defineProperty(exports, key, {
54
+ enumerable: true,
55
+ get: function () {
56
+ return _StorageAdapter[key];
57
+ }
58
+ });
59
+ });
60
+ var _OfflineManager = require("./core/OfflineManager");
61
+ var _adapters = require("./adapters");
62
+ var _OfflineProvider = require("./components/OfflineProvider");
63
+ Object.keys(_OfflineProvider).forEach(function (key) {
64
+ if (key === "default" || key === "__esModule") return;
65
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
66
+ if (key in exports && exports[key] === _OfflineProvider[key]) return;
67
+ Object.defineProperty(exports, key, {
68
+ enumerable: true,
69
+ get: function () {
70
+ return _OfflineProvider[key];
71
+ }
72
+ });
73
+ });
74
+ var _OfflineSyncPrompt = require("./components/OfflineSyncPrompt");
75
+ Object.keys(_OfflineSyncPrompt).forEach(function (key) {
76
+ if (key === "default" || key === "__esModule") return;
77
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
78
+ if (key in exports && exports[key] === _OfflineSyncPrompt[key]) return;
79
+ Object.defineProperty(exports, key, {
80
+ enumerable: true,
81
+ get: function () {
82
+ return _OfflineSyncPrompt[key];
83
+ }
84
+ });
85
+ });
86
+ var _useOfflineQueue = require("./hooks/useOfflineQueue");
87
+ Object.keys(_useOfflineQueue).forEach(function (key) {
88
+ if (key === "default" || key === "__esModule") return;
89
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
90
+ if (key in exports && exports[key] === _useOfflineQueue[key]) return;
91
+ Object.defineProperty(exports, key, {
92
+ enumerable: true,
93
+ get: function () {
94
+ return _useOfflineQueue[key];
95
+ }
96
+ });
97
+ });
98
+ var _useOfflineMutation = require("./hooks/useOfflineMutation");
99
+ Object.keys(_useOfflineMutation).forEach(function (key) {
100
+ if (key === "default" || key === "__esModule") return;
101
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
102
+ if (key in exports && exports[key] === _useOfflineMutation[key]) return;
103
+ Object.defineProperty(exports, key, {
104
+ enumerable: true,
105
+ get: function () {
106
+ return _useOfflineMutation[key];
107
+ }
108
+ });
109
+ });
110
+ var _useOfflineSyncInterceptor = require("./hooks/useOfflineSyncInterceptor");
111
+ Object.keys(_useOfflineSyncInterceptor).forEach(function (key) {
112
+ if (key === "default" || key === "__esModule") return;
113
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
114
+ if (key in exports && exports[key] === _useOfflineSyncInterceptor[key]) return;
115
+ Object.defineProperty(exports, key, {
116
+ enumerable: true,
117
+ get: function () {
118
+ return _useOfflineSyncInterceptor[key];
119
+ }
120
+ });
121
+ });
122
+ var _useSyncProgress = require("./hooks/useSyncProgress");
123
+ Object.keys(_useSyncProgress).forEach(function (key) {
124
+ if (key === "default" || key === "__esModule") return;
125
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
126
+ if (key in exports && exports[key] === _useSyncProgress[key]) return;
127
+ Object.defineProperty(exports, key, {
128
+ enumerable: true,
129
+ get: function () {
130
+ return _useSyncProgress[key];
131
+ }
132
+ });
133
+ });
134
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_types","require","Object","keys","forEach","key","prototype","hasOwnProperty","call","_exportNames","exports","defineProperty","enumerable","get","_StorageAdapter","_OfflineManager","_adapters","_OfflineProvider","_OfflineSyncPrompt","_useOfflineQueue","_useOfflineMutation","_useOfflineSyncInterceptor","_useSyncProgress"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+
3
+ // Dynamic require approach so Metro doesn't crash if the user hasn't installed the optional library
4
+
5
+ export const getMMKVAdapter = () => {
6
+ try {
7
+ const {
8
+ MMKV
9
+ } = require('react-native-mmkv');
10
+ const storage = new MMKV();
11
+ return {
12
+ getItem: key => storage.getString(key) || null,
13
+ setItem: (key, value) => storage.set(key, value),
14
+ removeItem: key => storage.delete(key)
15
+ };
16
+ } catch (error) {
17
+ throw new Error("[OfflineQueue] You selected 'mmkv' storage but react-native-mmkv is not installed. Run 'npm install react-native-mmkv' and 'pod install'.");
18
+ }
19
+ };
20
+ export const getAsyncStorageAdapter = () => {
21
+ try {
22
+ const AsyncStorage = require('@react-native-async-storage/async-storage').default;
23
+ return {
24
+ getItem: async key => await AsyncStorage.getItem(key),
25
+ setItem: async (key, value) => await AsyncStorage.setItem(key, value),
26
+ removeItem: async key => await AsyncStorage.removeItem(key)
27
+ };
28
+ } catch (error) {
29
+ throw new Error("[OfflineQueue] You selected 'async-storage' but @react-native-async-storage/async-storage is not installed. Run 'npm install @react-native-async-storage/async-storage' and 'pod install'.");
30
+ }
31
+ };
32
+
33
+ // Default Realm schema for the offline queue
34
+ const OFFLINE_QUEUE_SCHEMA_NAME = 'OfflineQueueItem';
35
+ const OfflineQueueItemSchema = {
36
+ name: OFFLINE_QUEUE_SCHEMA_NAME,
37
+ primaryKey: 'id',
38
+ properties: {
39
+ id: 'string',
40
+ actionName: 'string',
41
+ payload: 'string',
42
+ // JSON-stringified payload
43
+ createdAt: 'int',
44
+ retryCount: {
45
+ type: 'int',
46
+ default: 0
47
+ }
48
+ }
49
+ };
50
+ export const getRealmAdapter = options => {
51
+ try {
52
+ const Realm = require('realm');
53
+ const schemaName = options?.schemaName || OFFLINE_QUEUE_SCHEMA_NAME;
54
+ let realm;
55
+ if (options?.realmInstance) {
56
+ realm = options.realmInstance;
57
+ } else {
58
+ // Open a dedicated Realm with our default schema
59
+ realm = new Realm({
60
+ schema: [schemaName === OFFLINE_QUEUE_SCHEMA_NAME ? OfflineQueueItemSchema : {
61
+ ...OfflineQueueItemSchema,
62
+ name: schemaName
63
+ }],
64
+ path: 'offline-queue.realm',
65
+ schemaVersion: 1
66
+ });
67
+ }
68
+ return {
69
+ insert: action => {
70
+ realm.write(() => {
71
+ realm.create(schemaName, {
72
+ id: action.id,
73
+ actionName: action.actionName,
74
+ payload: JSON.stringify(action.payload),
75
+ createdAt: action.createdAt,
76
+ retryCount: action.retryCount
77
+ });
78
+ });
79
+ return Promise.resolve();
80
+ },
81
+ remove: id => {
82
+ realm.write(() => {
83
+ const record = realm.objectForPrimaryKey(schemaName, id);
84
+ if (record) realm.delete(record);
85
+ });
86
+ return Promise.resolve();
87
+ },
88
+ getAll: () => {
89
+ const records = realm.objects(schemaName).sorted('createdAt');
90
+ return Array.from(records).map(r => ({
91
+ id: r.id,
92
+ actionName: r.actionName,
93
+ payload: JSON.parse(r.payload),
94
+ createdAt: r.createdAt,
95
+ retryCount: r.retryCount
96
+ }));
97
+ },
98
+ clear: () => {
99
+ realm.write(() => {
100
+ const all = realm.objects(schemaName);
101
+ realm.delete(all);
102
+ });
103
+ return Promise.resolve();
104
+ },
105
+ update: (id, partial) => {
106
+ realm.write(() => {
107
+ const record = realm.objectForPrimaryKey(schemaName, id);
108
+ if (record) {
109
+ if (partial.retryCount !== undefined) record.retryCount = partial.retryCount;
110
+ if (partial.payload !== undefined) record.payload = JSON.stringify(partial.payload);
111
+ if (partial.actionName !== undefined) record.actionName = partial.actionName;
112
+ }
113
+ });
114
+ return Promise.resolve();
115
+ }
116
+ };
117
+ } catch (error) {
118
+ throw new Error("[OfflineQueue] You selected 'realm' storage but realm is not installed. Run 'npm install realm' and 'pod install'.");
119
+ }
120
+ };
121
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getMMKVAdapter","MMKV","require","storage","getItem","key","getString","setItem","value","set","removeItem","delete","error","Error","getAsyncStorageAdapter","AsyncStorage","default","OFFLINE_QUEUE_SCHEMA_NAME","OfflineQueueItemSchema","name","primaryKey","properties","id","actionName","payload","createdAt","retryCount","type","getRealmAdapter","options","Realm","schemaName","realm","realmInstance","schema","path","schemaVersion","insert","action","write","create","JSON","stringify","Promise","resolve","remove","record","objectForPrimaryKey","getAll","records","objects","sorted","Array","from","map","r","parse","clear","all","update","partial","undefined"],"sourceRoot":"../../../src","sources":["adapters/index.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+
3
+ import React, { createContext, useContext, useEffect, useRef, useState } from 'react';
4
+ import NetInfo from '@react-native-community/netinfo';
5
+ import { OfflineManager } from '../core/OfflineManager';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ const OfflineContext = /*#__PURE__*/createContext({
8
+ isOnline: true
9
+ });
10
+ export const useNetworkStatus = () => useContext(OfflineContext);
11
+ export const OfflineProvider = ({
12
+ children,
13
+ config
14
+ }) => {
15
+ const [isOnline, setIsOnline] = useState(null);
16
+ const wasOfflineRef = useRef(false);
17
+ useEffect(() => {
18
+ OfflineManager.configure(config);
19
+ }, [config]);
20
+ useEffect(() => {
21
+ const unsubscribe = NetInfo.addEventListener(state => {
22
+ const connected = !!state.isConnected;
23
+ if (__DEV__) console.log('[OfflineQueue] Network:', connected ? 'online' : 'offline', '| type:', state.type);
24
+ setIsOnline(connected);
25
+ if (!connected) {
26
+ wasOfflineRef.current = true;
27
+ }
28
+ if (connected && wasOfflineRef.current) {
29
+ wasOfflineRef.current = false;
30
+ if (__DEV__) console.log('[OfflineQueue] Network restored, triggering sync handler');
31
+ OfflineManager.handleOnlineRestore();
32
+ }
33
+ });
34
+ return () => unsubscribe();
35
+ }, []);
36
+ return /*#__PURE__*/_jsx(OfflineContext.Provider, {
37
+ value: {
38
+ isOnline
39
+ },
40
+ children: children
41
+ });
42
+ };
43
+ //# sourceMappingURL=OfflineProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","createContext","useContext","useEffect","useRef","useState","NetInfo","OfflineManager","jsx","_jsx","OfflineContext","isOnline","useNetworkStatus","OfflineProvider","children","config","setIsOnline","wasOfflineRef","configure","unsubscribe","addEventListener","state","connected","isConnected","__DEV__","console","log","type","current","handleOnlineRestore","Provider","value"],"sourceRoot":"../../../src","sources":["components/OfflineProvider.tsx"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,aAAa,EAAEC,UAAU,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AACrF,OAAOC,OAAO,MAAM,iCAAiC;AACrD,SAASC,cAAc,QAAmC,wBAAwB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAMnF,MAAMC,cAAc,gBAAGT,aAAa,CAAsB;EAAEU,QAAQ,EAAE;AAAK,CAAC,CAAC;AAE7E,OAAO,MAAMC,gBAAgB,GAAGA,CAAA,KAAMV,UAAU,CAACQ,cAAc,CAAC;AAOhE,OAAO,MAAMG,eAA+C,GAAGA,CAAC;EAAEC,QAAQ;EAAEC;AAAO,CAAC,KAAK;EACrF,MAAM,CAACJ,QAAQ,EAAEK,WAAW,CAAC,GAAGX,QAAQ,CAAiB,IAAI,CAAC;EAC9D,MAAMY,aAAa,GAAGb,MAAM,CAAC,KAAK,CAAC;EAEnCD,SAAS,CAAC,MAAM;IACZI,cAAc,CAACW,SAAS,CAACH,MAAM,CAAC;EACpC,CAAC,EAAE,CAACA,MAAM,CAAC,CAAC;EAEZZ,SAAS,CAAC,MAAM;IACZ,MAAMgB,WAAW,GAAGb,OAAO,CAACc,gBAAgB,CAAEC,KAAK,IAAK;MACpD,MAAMC,SAAS,GAAG,CAAC,CAACD,KAAK,CAACE,WAAW;MACrC,IAAIC,OAAO,EAAEC,OAAO,CAACC,GAAG,CAAC,yBAAyB,EAAEJ,SAAS,GAAG,QAAQ,GAAG,SAAS,EAAE,SAAS,EAAED,KAAK,CAACM,IAAI,CAAC;MAE5GX,WAAW,CAACM,SAAS,CAAC;MAEtB,IAAI,CAACA,SAAS,EAAE;QACZL,aAAa,CAACW,OAAO,GAAG,IAAI;MAChC;MAEA,IAAIN,SAAS,IAAIL,aAAa,CAACW,OAAO,EAAE;QACpCX,aAAa,CAACW,OAAO,GAAG,KAAK;QAC7B,IAAIJ,OAAO,EAAEC,OAAO,CAACC,GAAG,CAAC,0DAA0D,CAAC;QACpFnB,cAAc,CAACsB,mBAAmB,CAAC,CAAC;MACxC;IACJ,CAAC,CAAC;IAEF,OAAO,MAAMV,WAAW,CAAC,CAAC;EAC9B,CAAC,EAAE,EAAE,CAAC;EAEN,oBACIV,IAAA,CAACC,cAAc,CAACoB,QAAQ;IAACC,KAAK,EAAE;MAAEpB;IAAS,CAAE;IAAAG,QAAA,EACxCA;EAAQ,CACY,CAAC;AAElC,CAAC","ignoreList":[]}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ import React from 'react';
4
+ import { useNetworkStatus } from './OfflineProvider';
5
+ import { useOfflineQueue } from '../hooks/useOfflineQueue';
6
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
7
+ export const OfflineSyncPrompt = ({
8
+ children
9
+ }) => {
10
+ const {
11
+ isOnline
12
+ } = useNetworkStatus();
13
+ const {
14
+ pendingCount,
15
+ isSyncing,
16
+ syncNow,
17
+ clearQueue
18
+ } = useOfflineQueue();
19
+ if (isOnline && pendingCount > 0) {
20
+ return /*#__PURE__*/_jsx(_Fragment, {
21
+ children: children({
22
+ pendingCount,
23
+ isSyncing,
24
+ syncNow,
25
+ cancel: clearQueue
26
+ })
27
+ });
28
+ }
29
+ return null;
30
+ };
31
+ //# sourceMappingURL=OfflineSyncPrompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","useNetworkStatus","useOfflineQueue","Fragment","_Fragment","jsx","_jsx","OfflineSyncPrompt","children","isOnline","pendingCount","isSyncing","syncNow","clearQueue","cancel"],"sourceRoot":"../../../src","sources":["components/OfflineSyncPrompt.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,gBAAgB,QAAQ,mBAAmB;AACpD,SAASC,eAAe,QAAQ,0BAA0B;AAAC,SAAAC,QAAA,IAAAC,SAAA,EAAAC,GAAA,IAAAC,IAAA;AAW3D,OAAO,MAAMC,iBAAmD,GAAGA,CAAC;EAAEC;AAAS,CAAC,KAAK;EACjF,MAAM;IAAEC;EAAS,CAAC,GAAGR,gBAAgB,CAAC,CAAC;EACvC,MAAM;IAAES,YAAY;IAAEC,SAAS;IAAEC,OAAO;IAAEC;EAAW,CAAC,GAAGX,eAAe,CAAC,CAAC;EAE1E,IAAIO,QAAQ,IAAIC,YAAY,GAAG,CAAC,EAAE;IAC9B,oBACIJ,IAAA,CAAAF,SAAA;MAAAI,QAAA,EACKA,QAAQ,CAAC;QACNE,YAAY;QACZC,SAAS;QACTC,OAAO;QACPE,MAAM,EAAED;MACZ,CAAC;IAAC,CACJ,CAAC;EAEX;EAEA,OAAO,IAAI;AACf,CAAC","ignoreList":[]}