@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,128 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getRealmAdapter = exports.getMMKVAdapter = exports.getAsyncStorageAdapter = void 0;
7
+ // Dynamic require approach so Metro doesn't crash if the user hasn't installed the optional library
8
+
9
+ const getMMKVAdapter = () => {
10
+ try {
11
+ const {
12
+ MMKV
13
+ } = require('react-native-mmkv');
14
+ const storage = new MMKV();
15
+ return {
16
+ getItem: key => storage.getString(key) || null,
17
+ setItem: (key, value) => storage.set(key, value),
18
+ removeItem: key => storage.delete(key)
19
+ };
20
+ } catch (error) {
21
+ throw new Error("[OfflineQueue] You selected 'mmkv' storage but react-native-mmkv is not installed. Run 'npm install react-native-mmkv' and 'pod install'.");
22
+ }
23
+ };
24
+ exports.getMMKVAdapter = getMMKVAdapter;
25
+ const getAsyncStorageAdapter = () => {
26
+ try {
27
+ const AsyncStorage = require('@react-native-async-storage/async-storage').default;
28
+ return {
29
+ getItem: async key => await AsyncStorage.getItem(key),
30
+ setItem: async (key, value) => await AsyncStorage.setItem(key, value),
31
+ removeItem: async key => await AsyncStorage.removeItem(key)
32
+ };
33
+ } catch (error) {
34
+ 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'.");
35
+ }
36
+ };
37
+
38
+ // Default Realm schema for the offline queue
39
+ exports.getAsyncStorageAdapter = getAsyncStorageAdapter;
40
+ const OFFLINE_QUEUE_SCHEMA_NAME = 'OfflineQueueItem';
41
+ const OfflineQueueItemSchema = {
42
+ name: OFFLINE_QUEUE_SCHEMA_NAME,
43
+ primaryKey: 'id',
44
+ properties: {
45
+ id: 'string',
46
+ actionName: 'string',
47
+ payload: 'string',
48
+ // JSON-stringified payload
49
+ createdAt: 'int',
50
+ retryCount: {
51
+ type: 'int',
52
+ default: 0
53
+ }
54
+ }
55
+ };
56
+ const getRealmAdapter = options => {
57
+ try {
58
+ const Realm = require('realm');
59
+ const schemaName = options?.schemaName || OFFLINE_QUEUE_SCHEMA_NAME;
60
+ let realm;
61
+ if (options?.realmInstance) {
62
+ realm = options.realmInstance;
63
+ } else {
64
+ // Open a dedicated Realm with our default schema
65
+ realm = new Realm({
66
+ schema: [schemaName === OFFLINE_QUEUE_SCHEMA_NAME ? OfflineQueueItemSchema : {
67
+ ...OfflineQueueItemSchema,
68
+ name: schemaName
69
+ }],
70
+ path: 'offline-queue.realm',
71
+ schemaVersion: 1
72
+ });
73
+ }
74
+ return {
75
+ insert: action => {
76
+ realm.write(() => {
77
+ realm.create(schemaName, {
78
+ id: action.id,
79
+ actionName: action.actionName,
80
+ payload: JSON.stringify(action.payload),
81
+ createdAt: action.createdAt,
82
+ retryCount: action.retryCount
83
+ });
84
+ });
85
+ return Promise.resolve();
86
+ },
87
+ remove: id => {
88
+ realm.write(() => {
89
+ const record = realm.objectForPrimaryKey(schemaName, id);
90
+ if (record) realm.delete(record);
91
+ });
92
+ return Promise.resolve();
93
+ },
94
+ getAll: () => {
95
+ const records = realm.objects(schemaName).sorted('createdAt');
96
+ return Array.from(records).map(r => ({
97
+ id: r.id,
98
+ actionName: r.actionName,
99
+ payload: JSON.parse(r.payload),
100
+ createdAt: r.createdAt,
101
+ retryCount: r.retryCount
102
+ }));
103
+ },
104
+ clear: () => {
105
+ realm.write(() => {
106
+ const all = realm.objects(schemaName);
107
+ realm.delete(all);
108
+ });
109
+ return Promise.resolve();
110
+ },
111
+ update: (id, partial) => {
112
+ realm.write(() => {
113
+ const record = realm.objectForPrimaryKey(schemaName, id);
114
+ if (record) {
115
+ if (partial.retryCount !== undefined) record.retryCount = partial.retryCount;
116
+ if (partial.payload !== undefined) record.payload = JSON.stringify(partial.payload);
117
+ if (partial.actionName !== undefined) record.actionName = partial.actionName;
118
+ }
119
+ });
120
+ return Promise.resolve();
121
+ }
122
+ };
123
+ } catch (error) {
124
+ throw new Error("[OfflineQueue] You selected 'realm' storage but realm is not installed. Run 'npm install realm' and 'pod install'.");
125
+ }
126
+ };
127
+ exports.getRealmAdapter = getRealmAdapter;
128
+ //# 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","exports","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,51 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useNetworkStatus = exports.OfflineProvider = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _netinfo = _interopRequireDefault(require("@react-native-community/netinfo"));
9
+ var _OfflineManager = require("../core/OfflineManager");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
13
+ const OfflineContext = /*#__PURE__*/(0, _react.createContext)({
14
+ isOnline: true
15
+ });
16
+ const useNetworkStatus = () => (0, _react.useContext)(OfflineContext);
17
+ exports.useNetworkStatus = useNetworkStatus;
18
+ const OfflineProvider = ({
19
+ children,
20
+ config
21
+ }) => {
22
+ const [isOnline, setIsOnline] = (0, _react.useState)(null);
23
+ const wasOfflineRef = (0, _react.useRef)(false);
24
+ (0, _react.useEffect)(() => {
25
+ _OfflineManager.OfflineManager.configure(config);
26
+ }, [config]);
27
+ (0, _react.useEffect)(() => {
28
+ const unsubscribe = _netinfo.default.addEventListener(state => {
29
+ const connected = !!state.isConnected;
30
+ if (__DEV__) console.log('[OfflineQueue] Network:', connected ? 'online' : 'offline', '| type:', state.type);
31
+ setIsOnline(connected);
32
+ if (!connected) {
33
+ wasOfflineRef.current = true;
34
+ }
35
+ if (connected && wasOfflineRef.current) {
36
+ wasOfflineRef.current = false;
37
+ if (__DEV__) console.log('[OfflineQueue] Network restored, triggering sync handler');
38
+ _OfflineManager.OfflineManager.handleOnlineRestore();
39
+ }
40
+ });
41
+ return () => unsubscribe();
42
+ }, []);
43
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(OfflineContext.Provider, {
44
+ value: {
45
+ isOnline
46
+ },
47
+ children: children
48
+ });
49
+ };
50
+ exports.OfflineProvider = OfflineProvider;
51
+ //# sourceMappingURL=OfflineProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_netinfo","_interopRequireDefault","_OfflineManager","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","OfflineContext","createContext","isOnline","useNetworkStatus","useContext","exports","OfflineProvider","children","config","setIsOnline","useState","wasOfflineRef","useRef","useEffect","OfflineManager","configure","unsubscribe","NetInfo","addEventListener","state","connected","isConnected","__DEV__","console","log","type","current","handleOnlineRestore","jsx","Provider","value"],"sourceRoot":"../../../src","sources":["components/OfflineProvider.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.OfflineSyncPrompt = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _OfflineProvider = require("./OfflineProvider");
9
+ var _useOfflineQueue = require("../hooks/useOfflineQueue");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
+ const OfflineSyncPrompt = ({
13
+ children
14
+ }) => {
15
+ const {
16
+ isOnline
17
+ } = (0, _OfflineProvider.useNetworkStatus)();
18
+ const {
19
+ pendingCount,
20
+ isSyncing,
21
+ syncNow,
22
+ clearQueue
23
+ } = (0, _useOfflineQueue.useOfflineQueue)();
24
+ if (isOnline && pendingCount > 0) {
25
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
26
+ children: children({
27
+ pendingCount,
28
+ isSyncing,
29
+ syncNow,
30
+ cancel: clearQueue
31
+ })
32
+ });
33
+ }
34
+ return null;
35
+ };
36
+ exports.OfflineSyncPrompt = OfflineSyncPrompt;
37
+ //# sourceMappingURL=OfflineSyncPrompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_OfflineProvider","_useOfflineQueue","_jsxRuntime","e","__esModule","default","OfflineSyncPrompt","children","isOnline","useNetworkStatus","pendingCount","isSyncing","syncNow","clearQueue","useOfflineQueue","jsx","Fragment","cancel","exports"],"sourceRoot":"../../../src","sources":["components/OfflineSyncPrompt.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,gBAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAF,OAAA;AAA2D,IAAAG,WAAA,GAAAH,OAAA;AAAA,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAWpD,MAAMG,iBAAmD,GAAGA,CAAC;EAAEC;AAAS,CAAC,KAAK;EACjF,MAAM;IAAEC;EAAS,CAAC,GAAG,IAAAC,iCAAgB,EAAC,CAAC;EACvC,MAAM;IAAEC,YAAY;IAAEC,SAAS;IAAEC,OAAO;IAAEC;EAAW,CAAC,GAAG,IAAAC,gCAAe,EAAC,CAAC;EAE1E,IAAIN,QAAQ,IAAIE,YAAY,GAAG,CAAC,EAAE;IAC9B,oBACI,IAAAR,WAAA,CAAAa,GAAA,EAAAb,WAAA,CAAAc,QAAA;MAAAT,QAAA,EACKA,QAAQ,CAAC;QACNG,YAAY;QACZC,SAAS;QACTC,OAAO;QACPK,MAAM,EAAEJ;MACZ,CAAC;IAAC,CACJ,CAAC;EAEX;EAEA,OAAO,IAAI;AACf,CAAC;AAACK,OAAA,CAAAZ,iBAAA,GAAAA,iBAAA","ignoreList":[]}
@@ -0,0 +1,308 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.OfflineManager = void 0;
7
+ var _StorageAdapter = require("./StorageAdapter");
8
+ var _types = require("./types");
9
+ var _adapters = require("../adapters");
10
+ // Simple UUID string generator
11
+ function generateUUID() {
12
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
13
+ const r = Math.random() * 16 | 0,
14
+ v = c === 'x' ? r : r & 0x3 | 0x8;
15
+ return v.toString(16);
16
+ });
17
+ }
18
+ class OfflineManagerClass {
19
+ queue = [];
20
+ storage = new _StorageAdapter.MemoryStorageAdapter();
21
+ storageKey = 'REACT_NATIVE_OFFLINE_QUEUE_STATE';
22
+ useRecordAdapter = false;
23
+
24
+ // Queue listeners (for useOfflineQueue / useSyncExternalStore)
25
+ queueListeners = new Set();
26
+
27
+ // Progress listeners (for useSyncProgress)
28
+ progressListeners = new Set();
29
+
30
+ // Per-action handler registry
31
+ actionHandlers = new Map();
32
+ isInitialized = false;
33
+ syncMode = 'manual';
34
+ isSyncing = false;
35
+
36
+ // ─── Sync Progress State ───
37
+ _syncProgress = {
38
+ ..._types.INITIAL_SYNC_PROGRESS
39
+ };
40
+ get syncProgress() {
41
+ return this._syncProgress;
42
+ }
43
+
44
+ // ─── Configuration ───
45
+ async configure(config) {
46
+ if (config.storageType) {
47
+ if (config.storageType === 'mmkv') {
48
+ this.storage = (0, _adapters.getMMKVAdapter)();
49
+ this.useRecordAdapter = false;
50
+ } else if (config.storageType === 'async-storage') {
51
+ this.storage = (0, _adapters.getAsyncStorageAdapter)();
52
+ this.useRecordAdapter = false;
53
+ } else if (config.storageType === 'realm') {
54
+ this.storage = (0, _adapters.getRealmAdapter)(config.realmOptions);
55
+ this.useRecordAdapter = true;
56
+ } else {
57
+ this.storage = new _StorageAdapter.MemoryStorageAdapter();
58
+ this.useRecordAdapter = false;
59
+ }
60
+ } else if (config.storage) {
61
+ this.storage = config.storage;
62
+ this.useRecordAdapter = (0, _StorageAdapter.isRecordAdapter)(config.storage);
63
+ }
64
+ if (config.storageKey) {
65
+ this.storageKey = config.storageKey;
66
+ }
67
+ if (config.syncMode) {
68
+ this.syncMode = config.syncMode;
69
+ }
70
+ if (config.onSyncAction) {
71
+ this.onSyncAction = config.onSyncAction;
72
+ }
73
+ if (config.onOnlineRestore) {
74
+ this.onOnlineRestore = config.onOnlineRestore;
75
+ }
76
+ await this.loadQueue();
77
+ this.isInitialized = true;
78
+ }
79
+
80
+ // ─── Storage (supports both adapter types) ───
81
+ async loadQueue() {
82
+ try {
83
+ if (this.useRecordAdapter) {
84
+ const adapter = this.storage;
85
+ this.queue = await adapter.getAll();
86
+ } else {
87
+ const adapter = this.storage;
88
+ const data = await adapter.getItem(this.storageKey);
89
+ if (data) {
90
+ this.queue = JSON.parse(data) || [];
91
+ }
92
+ }
93
+ this.notifyQueueListeners();
94
+ } catch (e) {
95
+ console.warn('[OfflineManager] Failed to load queue from storage', e);
96
+ }
97
+ }
98
+ async saveQueue() {
99
+ try {
100
+ if (!this.useRecordAdapter) {
101
+ const adapter = this.storage;
102
+ await adapter.setItem(this.storageKey, JSON.stringify(this.queue));
103
+ }
104
+ // Record adapter saves per-operation, no need for full queue write
105
+ } catch (e) {
106
+ console.warn('[OfflineManager] Failed to save queue to storage', e);
107
+ }
108
+ }
109
+
110
+ // ─── Queue Subscriptions (useSyncExternalStore) ───
111
+ subscribeQueue = listener => {
112
+ this.queueListeners.add(listener);
113
+ return () => this.queueListeners.delete(listener);
114
+ };
115
+
116
+ // Backward compatibility alias
117
+ subscribe = this.subscribeQueue;
118
+ notifyQueueListeners() {
119
+ this.queueListeners.forEach(l => l());
120
+ }
121
+
122
+ // ─── Progress Subscriptions (useSyncExternalStore) ───
123
+ subscribeProgress = listener => {
124
+ this.progressListeners.add(listener);
125
+ return () => this.progressListeners.delete(listener);
126
+ };
127
+ updateProgress(partial) {
128
+ this._syncProgress = {
129
+ ...this._syncProgress,
130
+ ...partial
131
+ };
132
+ this.progressListeners.forEach(l => l());
133
+ }
134
+ updateProgressItem(id, update) {
135
+ this._syncProgress = {
136
+ ...this._syncProgress,
137
+ items: this._syncProgress.items.map(item => item.action.id === id ? {
138
+ ...item,
139
+ ...update
140
+ } : item)
141
+ };
142
+ this.progressListeners.forEach(l => l());
143
+ }
144
+
145
+ // ─── Queue CRUD ───
146
+ async push(actionName, payload) {
147
+ const action = {
148
+ id: generateUUID(),
149
+ actionName,
150
+ payload,
151
+ createdAt: Date.now(),
152
+ retryCount: 0
153
+ };
154
+ this.queue = [...this.queue, action];
155
+ if (this.useRecordAdapter) {
156
+ await this.storage.insert(action);
157
+ } else {
158
+ await this.saveQueue();
159
+ }
160
+ this.notifyQueueListeners();
161
+ return action;
162
+ }
163
+ async remove(id) {
164
+ this.queue = this.queue.filter(a => a.id !== id);
165
+ if (this.useRecordAdapter) {
166
+ await this.storage.remove(id);
167
+ } else {
168
+ await this.saveQueue();
169
+ }
170
+ this.notifyQueueListeners();
171
+ }
172
+ async clear() {
173
+ this.queue = [];
174
+ if (this.useRecordAdapter) {
175
+ await this.storage.clear();
176
+ } else {
177
+ await this.saveQueue();
178
+ }
179
+ this.notifyQueueListeners();
180
+ this.updateProgress({
181
+ ..._types.INITIAL_SYNC_PROGRESS
182
+ });
183
+ }
184
+ getQueue() {
185
+ return this.queue;
186
+ }
187
+
188
+ // ─── Per-Action Handler Registry ───
189
+ registerHandler(actionName, handler) {
190
+ this.actionHandlers.set(actionName, handler);
191
+ }
192
+ unregisterHandler(actionName) {
193
+ this.actionHandlers.delete(actionName);
194
+ }
195
+ getHandler(actionName) {
196
+ return this.actionHandlers.get(actionName);
197
+ }
198
+
199
+ // ─── The Central Sync Mechanism (with progress tracking) ───
200
+ async flushQueue() {
201
+ if (this.queue.length === 0 || this.isSyncing) {
202
+ return;
203
+ }
204
+ const hasAnyHandler = this.onSyncAction || this.actionHandlers.size > 0;
205
+ if (!hasAnyHandler) {
206
+ console.warn('[OfflineManager] No handlers registered and no onSyncAction configured.');
207
+ return;
208
+ }
209
+ this.isSyncing = true;
210
+ this.notifyQueueListeners();
211
+ const currentQueue = [...this.queue];
212
+
213
+ // Initialize progress tracking for this sync session
214
+ const progressItems = currentQueue.map(action => ({
215
+ action,
216
+ status: 'pending'
217
+ }));
218
+ this.updateProgress({
219
+ isActive: true,
220
+ totalCount: currentQueue.length,
221
+ completedCount: 0,
222
+ failedCount: 0,
223
+ currentAction: null,
224
+ items: progressItems
225
+ });
226
+ let completedCount = 0;
227
+ let failedCount = 0;
228
+ for (const action of currentQueue) {
229
+ // Mark current item as "syncing"
230
+ this.updateProgress({
231
+ currentAction: action
232
+ });
233
+ this.updateProgressItem(action.id, {
234
+ status: 'syncing'
235
+ });
236
+ try {
237
+ // Per-action handler takes priority, then fallback to onSyncAction
238
+ const handler = this.actionHandlers.get(action.actionName);
239
+ if (handler) {
240
+ await handler(action.payload);
241
+ } else if (this.onSyncAction) {
242
+ await this.onSyncAction(action);
243
+ } else {
244
+ throw new Error(`No handler registered for action: ${action.actionName}`);
245
+ }
246
+
247
+ // Success → remove from queue + mark in progress
248
+ await this.remove(action.id);
249
+ completedCount++;
250
+ this.updateProgressItem(action.id, {
251
+ status: 'success'
252
+ });
253
+ this.updateProgress({
254
+ completedCount
255
+ });
256
+ } catch (error) {
257
+ console.warn(`[OfflineManager] Action ${action.actionName} failed to sync.`, error);
258
+
259
+ // Mark as failed in progress
260
+ failedCount++;
261
+ this.updateProgressItem(action.id, {
262
+ status: 'failed',
263
+ error: error?.message || 'Unknown error'
264
+ });
265
+ this.updateProgress({
266
+ failedCount
267
+ });
268
+
269
+ // Update retry count on the queue item
270
+ const target = this.queue.find(a => a.id === action.id);
271
+ if (target) {
272
+ target.retryCount += 1;
273
+ }
274
+ if (this.useRecordAdapter) {
275
+ await this.storage.update(action.id, {
276
+ retryCount: target?.retryCount || 0
277
+ });
278
+ } else {
279
+ await this.saveQueue();
280
+ }
281
+ this.notifyQueueListeners();
282
+ }
283
+ }
284
+ this.isSyncing = false;
285
+ this.updateProgress({
286
+ isActive: false,
287
+ currentAction: null
288
+ });
289
+ this.notifyQueueListeners();
290
+ }
291
+
292
+ // ─── Called by OfflineProvider when internet restores ───
293
+ handleOnlineRestore() {
294
+ if (this.queue.length === 0) return;
295
+ if (this.syncMode === 'auto') {
296
+ this.flushQueue();
297
+ } else if (this.syncMode === 'manual' && this.onOnlineRestore) {
298
+ this.onOnlineRestore({
299
+ pendingCount: this.queue.length,
300
+ syncNow: () => this.flushQueue(),
301
+ discardQueue: () => this.clear()
302
+ });
303
+ }
304
+ // If manual + no onOnlineRestore → silent (nothing happens)
305
+ }
306
+ }
307
+ const OfflineManager = exports.OfflineManager = new OfflineManagerClass();
308
+ //# sourceMappingURL=OfflineManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_StorageAdapter","require","_types","_adapters","generateUUID","replace","c","r","Math","random","v","toString","OfflineManagerClass","queue","storage","MemoryStorageAdapter","storageKey","useRecordAdapter","queueListeners","Set","progressListeners","actionHandlers","Map","isInitialized","syncMode","isSyncing","_syncProgress","INITIAL_SYNC_PROGRESS","syncProgress","configure","config","storageType","getMMKVAdapter","getAsyncStorageAdapter","getRealmAdapter","realmOptions","isRecordAdapter","onSyncAction","onOnlineRestore","loadQueue","adapter","getAll","data","getItem","JSON","parse","notifyQueueListeners","e","console","warn","saveQueue","setItem","stringify","subscribeQueue","listener","add","delete","subscribe","forEach","l","subscribeProgress","updateProgress","partial","updateProgressItem","id","update","items","map","item","action","push","actionName","payload","createdAt","Date","now","retryCount","insert","remove","filter","a","clear","getQueue","registerHandler","handler","set","unregisterHandler","getHandler","get","flushQueue","length","hasAnyHandler","size","currentQueue","progressItems","status","isActive","totalCount","completedCount","failedCount","currentAction","Error","error","message","target","find","handleOnlineRestore","pendingCount","syncNow","discardQueue","OfflineManager","exports"],"sourceRoot":"../../../src","sources":["core/OfflineManager.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.MemoryStorageAdapter = void 0;
7
+ exports.isRecordAdapter = isRecordAdapter;
8
+ // Key-Value adapter (MMKV, AsyncStorage, Memory)
9
+ // Stores entire queue as a single JSON string
10
+
11
+ // Record-based adapter (Realm, SQLite, WatermelonDB)
12
+ // Each queue item is a separate database record — much faster for large queues
13
+
14
+ // Type guard to check which adapter type is being used
15
+ function isRecordAdapter(adapter) {
16
+ return 'insert' in adapter && 'getAll' in adapter;
17
+ }
18
+ class MemoryStorageAdapter {
19
+ store = {};
20
+ getItem(key) {
21
+ return this.store[key] || null;
22
+ }
23
+ setItem(key, value) {
24
+ this.store[key] = value;
25
+ }
26
+ removeItem(key) {
27
+ delete this.store[key];
28
+ }
29
+ }
30
+ exports.MemoryStorageAdapter = MemoryStorageAdapter;
31
+ //# sourceMappingURL=StorageAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isRecordAdapter","adapter","MemoryStorageAdapter","store","getItem","key","setItem","value","removeItem","exports"],"sourceRoot":"../../../src","sources":["core/StorageAdapter.ts"],"mappings":";;;;;;;AAEA;AACA;;AAOA;AACA;;AASA;AACO,SAASA,eAAeA,CAC7BC,OAA8C,EACb;EACjC,OAAO,QAAQ,IAAIA,OAAO,IAAI,QAAQ,IAAIA,OAAO;AACnD;AAEO,MAAMC,oBAAoB,CAA2B;EAClDC,KAAK,GAA2B,CAAC,CAAC;EAE1CC,OAAOA,CAACC,GAAW,EAAiB;IAClC,OAAO,IAAI,CAACF,KAAK,CAACE,GAAG,CAAC,IAAI,IAAI;EAChC;EAEAC,OAAOA,CAACD,GAAW,EAAEE,KAAa,EAAQ;IACxC,IAAI,CAACJ,KAAK,CAACE,GAAG,CAAC,GAAGE,KAAK;EACzB;EAEAC,UAAUA,CAACH,GAAW,EAAQ;IAC5B,OAAO,IAAI,CAACF,KAAK,CAACE,GAAG,CAAC;EACxB;AACF;AAACI,OAAA,CAAAP,oBAAA,GAAAA,oBAAA","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.INITIAL_SYNC_PROGRESS = void 0;
7
+ const INITIAL_SYNC_PROGRESS = exports.INITIAL_SYNC_PROGRESS = {
8
+ isActive: false,
9
+ totalCount: 0,
10
+ completedCount: 0,
11
+ failedCount: 0,
12
+ currentAction: null,
13
+ items: []
14
+ };
15
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["INITIAL_SYNC_PROGRESS","exports","isActive","totalCount","completedCount","failedCount","currentAction","items"],"sourceRoot":"../../../src","sources":["core/types.ts"],"mappings":";;;;;;AAyBO,MAAMA,qBAAmC,GAAAC,OAAA,CAAAD,qBAAA,GAAG;EACjDE,QAAQ,EAAE,KAAK;EACfC,UAAU,EAAE,CAAC;EACbC,cAAc,EAAE,CAAC;EACjBC,WAAW,EAAE,CAAC;EACdC,aAAa,EAAE,IAAI;EACnBC,KAAK,EAAE;AACT,CAAC","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=global.d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../src","sources":["global.d.ts"],"mappings":"","ignoreList":[]}