@trainstar/synchro-react-native 0.1.0

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 (57) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +122 -0
  3. package/SynchroReactNative.podspec +22 -0
  4. package/android/build.gradle +81 -0
  5. package/android/src/main/AndroidManifest.xml +3 -0
  6. package/android/src/main/kotlin/com/trainstar/synchro/rn/SynchroModule.kt +808 -0
  7. package/android/src/main/kotlin/com/trainstar/synchro/rn/SynchroPackage.kt +32 -0
  8. package/ios/SynchroModule.mm +368 -0
  9. package/ios/SynchroModule.swift +970 -0
  10. package/lib/module/NativeSynchro.js +5 -0
  11. package/lib/module/NativeSynchro.js.map +1 -0
  12. package/lib/module/SynchroClient.js +295 -0
  13. package/lib/module/SynchroClient.js.map +1 -0
  14. package/lib/module/errors.js +150 -0
  15. package/lib/module/errors.js.map +1 -0
  16. package/lib/module/hooks/index.js +6 -0
  17. package/lib/module/hooks/index.js.map +1 -0
  18. package/lib/module/hooks/usePendingChanges.js +25 -0
  19. package/lib/module/hooks/usePendingChanges.js.map +1 -0
  20. package/lib/module/hooks/useQuery.js +74 -0
  21. package/lib/module/hooks/useQuery.js.map +1 -0
  22. package/lib/module/hooks/useSyncStatus.js +15 -0
  23. package/lib/module/hooks/useSyncStatus.js.map +1 -0
  24. package/lib/module/index.js +8 -0
  25. package/lib/module/index.js.map +1 -0
  26. package/lib/module/package.json +1 -0
  27. package/lib/module/types.js +2 -0
  28. package/lib/module/types.js.map +1 -0
  29. package/lib/typescript/package.json +1 -0
  30. package/lib/typescript/src/NativeSynchro.d.ts +84 -0
  31. package/lib/typescript/src/NativeSynchro.d.ts.map +1 -0
  32. package/lib/typescript/src/SynchroClient.d.ts +30 -0
  33. package/lib/typescript/src/SynchroClient.d.ts.map +1 -0
  34. package/lib/typescript/src/errors.d.ts +61 -0
  35. package/lib/typescript/src/errors.d.ts.map +1 -0
  36. package/lib/typescript/src/hooks/index.d.ts +4 -0
  37. package/lib/typescript/src/hooks/index.d.ts.map +1 -0
  38. package/lib/typescript/src/hooks/usePendingChanges.d.ts +3 -0
  39. package/lib/typescript/src/hooks/usePendingChanges.d.ts.map +1 -0
  40. package/lib/typescript/src/hooks/useQuery.d.ts +12 -0
  41. package/lib/typescript/src/hooks/useQuery.d.ts.map +1 -0
  42. package/lib/typescript/src/hooks/useSyncStatus.d.ts +4 -0
  43. package/lib/typescript/src/hooks/useSyncStatus.d.ts.map +1 -0
  44. package/lib/typescript/src/index.d.ts +8 -0
  45. package/lib/typescript/src/index.d.ts.map +1 -0
  46. package/lib/typescript/src/types.d.ts +55 -0
  47. package/lib/typescript/src/types.d.ts.map +1 -0
  48. package/package.json +146 -0
  49. package/src/NativeSynchro.ts +114 -0
  50. package/src/SynchroClient.ts +424 -0
  51. package/src/errors.ts +205 -0
  52. package/src/hooks/index.ts +3 -0
  53. package/src/hooks/usePendingChanges.ts +32 -0
  54. package/src/hooks/useQuery.ts +93 -0
  55. package/src/hooks/useSyncStatus.ts +17 -0
  56. package/src/index.ts +41 -0
  57. package/src/types.ts +71 -0
@@ -0,0 +1,32 @@
1
+ package com.trainstar.synchro.rn
2
+
3
+ import com.facebook.react.BaseReactPackage
4
+ import com.facebook.react.bridge.NativeModule
5
+ import com.facebook.react.bridge.ReactApplicationContext
6
+ import com.facebook.react.module.model.ReactModuleInfo
7
+ import com.facebook.react.module.model.ReactModuleInfoProvider
8
+
9
+ class SynchroPackage : BaseReactPackage() {
10
+ override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
11
+ return if (name == NativeSynchroSpec.NAME) {
12
+ SynchroModule(reactContext)
13
+ } else {
14
+ null
15
+ }
16
+ }
17
+
18
+ override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
19
+ return ReactModuleInfoProvider {
20
+ mapOf(
21
+ NativeSynchroSpec.NAME to ReactModuleInfo(
22
+ NativeSynchroSpec.NAME,
23
+ NativeSynchroSpec.NAME,
24
+ false, // canOverrideExistingModule
25
+ false, // needsEagerInit
26
+ false, // isCxxModule
27
+ true // isTurboModule
28
+ )
29
+ )
30
+ }
31
+ }
32
+ }
@@ -0,0 +1,368 @@
1
+ #import <React/RCTBridgeModule.h>
2
+ #import <React/RCTEventEmitter.h>
3
+
4
+ #ifdef RCT_NEW_ARCH_ENABLED
5
+ #import <SynchroModuleSpec/SynchroModuleSpec.h>
6
+ #endif
7
+
8
+ // Auto-generated Swift bridging header
9
+ #if __has_include("SynchroReactNative-Swift.h")
10
+ #import "SynchroReactNative-Swift.h"
11
+ #else
12
+ #import <SynchroReactNative/SynchroReactNative-Swift.h>
13
+ #endif
14
+
15
+ #ifdef RCT_NEW_ARCH_ENABLED
16
+
17
+ // ──────────────────────────────────────────────────────────────
18
+ // New Architecture: TurboModule conforming to Codegen spec
19
+ // ──────────────────────────────────────────────────────────────
20
+
21
+ @interface SynchroModule : NativeSynchroSpecBase <NativeSynchroSpec, SynchroEventEmitting>
22
+ @property (nonatomic, strong) SynchroModuleImpl *impl;
23
+ @end
24
+
25
+ @implementation SynchroModule
26
+
27
+ + (NSString *)moduleName {
28
+ return @"SynchroModule";
29
+ }
30
+
31
+ - (instancetype)init {
32
+ self = [super init];
33
+ if (self) {
34
+ _impl = [[SynchroModuleImpl alloc] init];
35
+ _impl.eventDelegate = self;
36
+ }
37
+ return self;
38
+ }
39
+
40
+ + (BOOL)requiresMainQueueSetup {
41
+ return NO;
42
+ }
43
+
44
+ - (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const facebook::react::ObjCTurboModule::InitParams &)params {
45
+ return std::make_shared<facebook::react::NativeSynchroSpecJSI>(params);
46
+ }
47
+
48
+ // MARK: - SynchroEventEmitting (event delegation from Swift impl)
49
+
50
+ - (void)emitEvent:(NSString *)name body:(NSDictionary *)body {
51
+ if ([name isEqualToString:@"onStatusChange"]) {
52
+ [self emitOnStatusChange:body];
53
+ } else if ([name isEqualToString:@"onConflict"]) {
54
+ [self emitOnConflict:body];
55
+ } else if ([name isEqualToString:@"onAuthRequest"]) {
56
+ [self emitOnAuthRequest:body];
57
+ } else if ([name isEqualToString:@"onSnapshotRequired"]) {
58
+ [self emitOnSnapshotRequired:body];
59
+ } else if ([name isEqualToString:@"onChange"]) {
60
+ [self emitOnChange:body];
61
+ } else if ([name isEqualToString:@"onQueryResult"]) {
62
+ [self emitOnQueryResult:body];
63
+ }
64
+ }
65
+
66
+ // MARK: - NativeSynchroSpec protocol methods
67
+
68
+ - (void)initialize:(JS::NativeSynchro::SpecInitializeConfig &)config
69
+ resolve:(RCTPromiseResolveBlock)resolve
70
+ reject:(RCTPromiseRejectBlock)reject {
71
+ NSDictionary *configDict = @{
72
+ @"dbPath": config.dbPath(),
73
+ @"serverURL": config.serverURL(),
74
+ @"clientID": config.clientID(),
75
+ @"platform": config.platform(),
76
+ @"appVersion": config.appVersion(),
77
+ @"syncInterval": @(config.syncInterval()),
78
+ @"pushDebounce": @(config.pushDebounce()),
79
+ @"maxRetryAttempts": @(config.maxRetryAttempts()),
80
+ @"pullPageSize": @(config.pullPageSize()),
81
+ @"pushBatchSize": @(config.pushBatchSize()),
82
+ @"snapshotPageSize": @(config.snapshotPageSize()),
83
+ };
84
+ [self.impl initialize:configDict resolve:resolve reject:reject];
85
+ }
86
+
87
+ - (void)close:(RCTPromiseResolveBlock)resolve
88
+ reject:(RCTPromiseRejectBlock)reject {
89
+ [self.impl close:resolve reject:reject];
90
+ }
91
+
92
+ - (void)getPath:(RCTPromiseResolveBlock)resolve
93
+ reject:(RCTPromiseRejectBlock)reject {
94
+ [self.impl getPath:resolve reject:reject];
95
+ }
96
+
97
+ - (void)query:(NSString *)sql
98
+ paramsJson:(NSString *)paramsJson
99
+ resolve:(RCTPromiseResolveBlock)resolve
100
+ reject:(RCTPromiseRejectBlock)reject {
101
+ [self.impl query:sql paramsJson:paramsJson resolve:resolve reject:reject];
102
+ }
103
+
104
+ - (void)queryOne:(NSString *)sql
105
+ paramsJson:(NSString *)paramsJson
106
+ resolve:(RCTPromiseResolveBlock)resolve
107
+ reject:(RCTPromiseRejectBlock)reject {
108
+ [self.impl queryOne:sql paramsJson:paramsJson resolve:resolve reject:reject];
109
+ }
110
+
111
+ - (void)execute:(NSString *)sql
112
+ paramsJson:(NSString *)paramsJson
113
+ resolve:(RCTPromiseResolveBlock)resolve
114
+ reject:(RCTPromiseRejectBlock)reject {
115
+ [self.impl execute:sql paramsJson:paramsJson resolve:resolve reject:reject];
116
+ }
117
+
118
+ - (void)executeBatch:(NSString *)statementsJson
119
+ resolve:(RCTPromiseResolveBlock)resolve
120
+ reject:(RCTPromiseRejectBlock)reject {
121
+ [self.impl executeBatch:statementsJson resolve:resolve reject:reject];
122
+ }
123
+
124
+ - (void)beginWriteTransaction:(RCTPromiseResolveBlock)resolve
125
+ reject:(RCTPromiseRejectBlock)reject {
126
+ [self.impl beginWriteTransaction:resolve reject:reject];
127
+ }
128
+
129
+ - (void)beginReadTransaction:(RCTPromiseResolveBlock)resolve
130
+ reject:(RCTPromiseRejectBlock)reject {
131
+ [self.impl beginReadTransaction:resolve reject:reject];
132
+ }
133
+
134
+ - (void)txQuery:(NSString *)txID
135
+ sql:(NSString *)sql
136
+ paramsJson:(NSString *)paramsJson
137
+ resolve:(RCTPromiseResolveBlock)resolve
138
+ reject:(RCTPromiseRejectBlock)reject {
139
+ [self.impl txQuery:txID sql:sql paramsJson:paramsJson resolve:resolve reject:reject];
140
+ }
141
+
142
+ - (void)txQueryOne:(NSString *)txID
143
+ sql:(NSString *)sql
144
+ paramsJson:(NSString *)paramsJson
145
+ resolve:(RCTPromiseResolveBlock)resolve
146
+ reject:(RCTPromiseRejectBlock)reject {
147
+ [self.impl txQueryOne:txID sql:sql paramsJson:paramsJson resolve:resolve reject:reject];
148
+ }
149
+
150
+ - (void)txExecute:(NSString *)txID
151
+ sql:(NSString *)sql
152
+ paramsJson:(NSString *)paramsJson
153
+ resolve:(RCTPromiseResolveBlock)resolve
154
+ reject:(RCTPromiseRejectBlock)reject {
155
+ [self.impl txExecute:txID sql:sql paramsJson:paramsJson resolve:resolve reject:reject];
156
+ }
157
+
158
+ - (void)commitTransaction:(NSString *)txID
159
+ resolve:(RCTPromiseResolveBlock)resolve
160
+ reject:(RCTPromiseRejectBlock)reject {
161
+ [self.impl commitTransaction:txID resolve:resolve reject:reject];
162
+ }
163
+
164
+ - (void)rollbackTransaction:(NSString *)txID
165
+ resolve:(RCTPromiseResolveBlock)resolve
166
+ reject:(RCTPromiseRejectBlock)reject {
167
+ [self.impl rollbackTransaction:txID resolve:resolve reject:reject];
168
+ }
169
+
170
+ - (void)createTable:(NSString *)name
171
+ columnsJson:(NSString *)columnsJson
172
+ optionsJson:(NSString *)optionsJson
173
+ resolve:(RCTPromiseResolveBlock)resolve
174
+ reject:(RCTPromiseRejectBlock)reject {
175
+ [self.impl createTable:name columnsJson:columnsJson optionsJson:optionsJson resolve:resolve reject:reject];
176
+ }
177
+
178
+ - (void)alterTable:(NSString *)name
179
+ columnsJson:(NSString *)columnsJson
180
+ resolve:(RCTPromiseResolveBlock)resolve
181
+ reject:(RCTPromiseRejectBlock)reject {
182
+ [self.impl alterTable:name columnsJson:columnsJson resolve:resolve reject:reject];
183
+ }
184
+
185
+ - (void)createIndex:(NSString *)table
186
+ columns:(NSArray *)columns
187
+ unique:(BOOL)unique
188
+ resolve:(RCTPromiseResolveBlock)resolve
189
+ reject:(RCTPromiseRejectBlock)reject {
190
+ [self.impl createIndex:table columns:columns unique:unique resolve:resolve reject:reject];
191
+ }
192
+
193
+ - (void)addChangeObserver:(NSString *)observerID
194
+ tables:(NSArray *)tables
195
+ resolve:(RCTPromiseResolveBlock)resolve
196
+ reject:(RCTPromiseRejectBlock)reject {
197
+ [self.impl addChangeObserver:observerID tables:tables resolve:resolve reject:reject];
198
+ }
199
+
200
+ - (void)addQueryObserver:(NSString *)observerID
201
+ sql:(NSString *)sql
202
+ paramsJson:(NSString *)paramsJson
203
+ tables:(NSArray *)tables
204
+ resolve:(RCTPromiseResolveBlock)resolve
205
+ reject:(RCTPromiseRejectBlock)reject {
206
+ [self.impl addQueryObserver:observerID sql:sql paramsJson:paramsJson tables:tables resolve:resolve reject:reject];
207
+ }
208
+
209
+ - (void)removeObserver:(NSString *)observerID
210
+ resolve:(RCTPromiseResolveBlock)resolve
211
+ reject:(RCTPromiseRejectBlock)reject {
212
+ [self.impl removeObserver:observerID resolve:resolve reject:reject];
213
+ }
214
+
215
+ - (void)checkpoint:(NSString *)mode
216
+ resolve:(RCTPromiseResolveBlock)resolve
217
+ reject:(RCTPromiseRejectBlock)reject {
218
+ [self.impl checkpoint:mode resolve:resolve reject:reject];
219
+ }
220
+
221
+ - (void)start:(RCTPromiseResolveBlock)resolve
222
+ reject:(RCTPromiseRejectBlock)reject {
223
+ [self.impl start:resolve reject:reject];
224
+ }
225
+
226
+ - (void)stop:(RCTPromiseResolveBlock)resolve
227
+ reject:(RCTPromiseRejectBlock)reject {
228
+ [self.impl stop:resolve reject:reject];
229
+ }
230
+
231
+ - (void)syncNow:(RCTPromiseResolveBlock)resolve
232
+ reject:(RCTPromiseRejectBlock)reject {
233
+ [self.impl syncNow:resolve reject:reject];
234
+ }
235
+
236
+ - (void)pendingChangeCount:(RCTPromiseResolveBlock)resolve
237
+ reject:(RCTPromiseRejectBlock)reject {
238
+ [self.impl pendingChangeCount:resolve reject:reject];
239
+ }
240
+
241
+ - (void)resolveAuthRequest:(NSString *)requestID
242
+ token:(NSString *)token {
243
+ [self.impl resolveAuthRequest:requestID token:token];
244
+ }
245
+
246
+ - (void)rejectAuthRequest:(NSString *)requestID
247
+ error:(NSString *)error {
248
+ [self.impl rejectAuthRequest:requestID error:error];
249
+ }
250
+
251
+ - (void)resolveSnapshotRequest:(NSString *)requestID
252
+ approved:(BOOL)approved {
253
+ [self.impl resolveSnapshotRequest:requestID approved:approved];
254
+ }
255
+
256
+ - (void)addListener:(NSString *)eventName {
257
+ // No-op: event delivery handled by Codegen EventEmitter
258
+ }
259
+
260
+ - (void)removeListeners:(double)count {
261
+ // No-op: event delivery handled by Codegen EventEmitter
262
+ }
263
+
264
+ @end
265
+
266
+ #else
267
+
268
+ // ──────────────────────────────────────────────────────────────
269
+ // Old Architecture fallback: RCT_EXTERN_MODULE bridge
270
+ // ──────────────────────────────────────────────────────────────
271
+
272
+ @interface RCT_EXTERN_MODULE(SynchroModule, RCTEventEmitter)
273
+
274
+ RCT_EXTERN_METHOD(initialize:(NSDictionary *)config
275
+ resolve:(RCTPromiseResolveBlock)resolve
276
+ reject:(RCTPromiseRejectBlock)reject)
277
+ RCT_EXTERN_METHOD(close:(RCTPromiseResolveBlock)resolve
278
+ reject:(RCTPromiseRejectBlock)reject)
279
+ RCT_EXTERN_METHOD(getPath:(RCTPromiseResolveBlock)resolve
280
+ reject:(RCTPromiseRejectBlock)reject)
281
+ RCT_EXTERN_METHOD(query:(NSString *)sql
282
+ paramsJson:(NSString *)paramsJson
283
+ resolve:(RCTPromiseResolveBlock)resolve
284
+ reject:(RCTPromiseRejectBlock)reject)
285
+ RCT_EXTERN_METHOD(queryOne:(NSString *)sql
286
+ paramsJson:(NSString *)paramsJson
287
+ resolve:(RCTPromiseResolveBlock)resolve
288
+ reject:(RCTPromiseRejectBlock)reject)
289
+ RCT_EXTERN_METHOD(execute:(NSString *)sql
290
+ paramsJson:(NSString *)paramsJson
291
+ resolve:(RCTPromiseResolveBlock)resolve
292
+ reject:(RCTPromiseRejectBlock)reject)
293
+ RCT_EXTERN_METHOD(executeBatch:(NSString *)statementsJson
294
+ resolve:(RCTPromiseResolveBlock)resolve
295
+ reject:(RCTPromiseRejectBlock)reject)
296
+ RCT_EXTERN_METHOD(beginWriteTransaction:(RCTPromiseResolveBlock)resolve
297
+ reject:(RCTPromiseRejectBlock)reject)
298
+ RCT_EXTERN_METHOD(beginReadTransaction:(RCTPromiseResolveBlock)resolve
299
+ reject:(RCTPromiseRejectBlock)reject)
300
+ RCT_EXTERN_METHOD(txQuery:(NSString *)txID
301
+ sql:(NSString *)sql
302
+ paramsJson:(NSString *)paramsJson
303
+ resolve:(RCTPromiseResolveBlock)resolve
304
+ reject:(RCTPromiseRejectBlock)reject)
305
+ RCT_EXTERN_METHOD(txQueryOne:(NSString *)txID
306
+ sql:(NSString *)sql
307
+ paramsJson:(NSString *)paramsJson
308
+ resolve:(RCTPromiseResolveBlock)resolve
309
+ reject:(RCTPromiseRejectBlock)reject)
310
+ RCT_EXTERN_METHOD(txExecute:(NSString *)txID
311
+ sql:(NSString *)sql
312
+ paramsJson:(NSString *)paramsJson
313
+ resolve:(RCTPromiseResolveBlock)resolve
314
+ reject:(RCTPromiseRejectBlock)reject)
315
+ RCT_EXTERN_METHOD(commitTransaction:(NSString *)txID
316
+ resolve:(RCTPromiseResolveBlock)resolve
317
+ reject:(RCTPromiseRejectBlock)reject)
318
+ RCT_EXTERN_METHOD(rollbackTransaction:(NSString *)txID
319
+ resolve:(RCTPromiseResolveBlock)resolve
320
+ reject:(RCTPromiseRejectBlock)reject)
321
+ RCT_EXTERN_METHOD(createTable:(NSString *)name
322
+ columnsJson:(NSString *)columnsJson
323
+ optionsJson:(NSString *)optionsJson
324
+ resolve:(RCTPromiseResolveBlock)resolve
325
+ reject:(RCTPromiseRejectBlock)reject)
326
+ RCT_EXTERN_METHOD(alterTable:(NSString *)name
327
+ columnsJson:(NSString *)columnsJson
328
+ resolve:(RCTPromiseResolveBlock)resolve
329
+ reject:(RCTPromiseRejectBlock)reject)
330
+ RCT_EXTERN_METHOD(createIndex:(NSString *)table
331
+ columns:(NSArray<NSString *> *)columns
332
+ unique:(BOOL)unique
333
+ resolve:(RCTPromiseResolveBlock)resolve
334
+ reject:(RCTPromiseRejectBlock)reject)
335
+ RCT_EXTERN_METHOD(addChangeObserver:(NSString *)observerID
336
+ tables:(NSArray<NSString *> *)tables
337
+ resolve:(RCTPromiseResolveBlock)resolve
338
+ reject:(RCTPromiseRejectBlock)reject)
339
+ RCT_EXTERN_METHOD(addQueryObserver:(NSString *)observerID
340
+ sql:(NSString *)sql
341
+ paramsJson:(NSString *)paramsJson
342
+ tables:(NSArray<NSString *> *)tables
343
+ resolve:(RCTPromiseResolveBlock)resolve
344
+ reject:(RCTPromiseRejectBlock)reject)
345
+ RCT_EXTERN_METHOD(removeObserver:(NSString *)observerID
346
+ resolve:(RCTPromiseResolveBlock)resolve
347
+ reject:(RCTPromiseRejectBlock)reject)
348
+ RCT_EXTERN_METHOD(checkpoint:(NSString *)mode
349
+ resolve:(RCTPromiseResolveBlock)resolve
350
+ reject:(RCTPromiseRejectBlock)reject)
351
+ RCT_EXTERN_METHOD(start:(RCTPromiseResolveBlock)resolve
352
+ reject:(RCTPromiseRejectBlock)reject)
353
+ RCT_EXTERN_METHOD(stop:(RCTPromiseResolveBlock)resolve
354
+ reject:(RCTPromiseRejectBlock)reject)
355
+ RCT_EXTERN_METHOD(syncNow:(RCTPromiseResolveBlock)resolve
356
+ reject:(RCTPromiseRejectBlock)reject)
357
+ RCT_EXTERN_METHOD(pendingChangeCount:(RCTPromiseResolveBlock)resolve
358
+ reject:(RCTPromiseRejectBlock)reject)
359
+ RCT_EXTERN_METHOD(resolveAuthRequest:(NSString *)requestID
360
+ token:(NSString *)token)
361
+ RCT_EXTERN_METHOD(rejectAuthRequest:(NSString *)requestID
362
+ error:(NSString *)error)
363
+ RCT_EXTERN_METHOD(resolveSnapshotRequest:(NSString *)requestID
364
+ approved:(BOOL)approved)
365
+
366
+ @end
367
+
368
+ #endif