@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,5 @@
1
+ "use strict";
2
+
3
+ import { TurboModuleRegistry } from 'react-native';
4
+ export default TurboModuleRegistry.getEnforcing('SynchroModule');
5
+ //# sourceMappingURL=NativeSynchro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeSynchro.ts"],"mappings":";;AAEA,SAASA,mBAAmB,QAAQ,cAAc;AA+GlD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,eAAe,CAAC","ignoreList":[]}
@@ -0,0 +1,295 @@
1
+ "use strict";
2
+
3
+ import { Platform } from 'react-native';
4
+ import NativeSynchro from "./NativeSynchro.js";
5
+ import { mapNativeError } from "./errors.js";
6
+ let observerCounter = 0;
7
+ function nextObserverID() {
8
+ return `obs_${++observerCounter}_${Date.now()}`;
9
+ }
10
+ export class SynchroClient {
11
+ native = NativeSynchro;
12
+ authSubscription = null;
13
+ constructor(config) {
14
+ this.config = config;
15
+
16
+ // Wire auth callback using Codegen EventEmitter pattern
17
+ this.authSubscription = this.native.onAuthRequest(event => {
18
+ this.config.authProvider().then(token => {
19
+ this.native.resolveAuthRequest(event.requestID, token);
20
+ }).catch(err => {
21
+ this.native.rejectAuthRequest(event.requestID, err instanceof Error ? err.message : String(err));
22
+ });
23
+ });
24
+ }
25
+ async initialize() {
26
+ try {
27
+ await this.native.initialize({
28
+ dbPath: this.config.dbPath,
29
+ serverURL: this.config.serverURL,
30
+ clientID: this.config.clientID,
31
+ platform: this.config.platform ?? Platform.OS,
32
+ appVersion: this.config.appVersion,
33
+ syncInterval: this.config.syncInterval ?? 30,
34
+ pushDebounce: this.config.pushDebounce ?? 0.5,
35
+ maxRetryAttempts: this.config.maxRetryAttempts ?? 5,
36
+ pullPageSize: this.config.pullPageSize ?? 100,
37
+ pushBatchSize: this.config.pushBatchSize ?? 100,
38
+ snapshotPageSize: this.config.snapshotPageSize ?? 100
39
+ });
40
+ } catch (error) {
41
+ throw mapNativeError(error);
42
+ }
43
+ }
44
+
45
+ // -- Core SQL --
46
+
47
+ async query(sql, params) {
48
+ try {
49
+ const json = await this.native.query(sql, JSON.stringify(params ?? []));
50
+ return JSON.parse(json);
51
+ } catch (error) {
52
+ throw mapNativeError(error);
53
+ }
54
+ }
55
+ async queryOne(sql, params) {
56
+ try {
57
+ const json = await this.native.queryOne(sql, JSON.stringify(params ?? []));
58
+ return json ? JSON.parse(json) : null;
59
+ } catch (error) {
60
+ throw mapNativeError(error);
61
+ }
62
+ }
63
+ async execute(sql, params) {
64
+ try {
65
+ return await this.native.execute(sql, JSON.stringify(params ?? []));
66
+ } catch (error) {
67
+ throw mapNativeError(error);
68
+ }
69
+ }
70
+ async executeBatch(statements) {
71
+ try {
72
+ const payload = statements.map(s => ({
73
+ sql: s.sql,
74
+ params: s.params ?? []
75
+ }));
76
+ return await this.native.executeBatch(JSON.stringify(payload));
77
+ } catch (error) {
78
+ throw mapNativeError(error);
79
+ }
80
+ }
81
+
82
+ // -- Transactions --
83
+
84
+ async writeTransaction(callback) {
85
+ let txID;
86
+ try {
87
+ txID = await this.native.beginWriteTransaction();
88
+ } catch (error) {
89
+ throw mapNativeError(error);
90
+ }
91
+ try {
92
+ const tx = {
93
+ query: async (sql, params) => {
94
+ const json = await this.native.txQuery(txID, sql, JSON.stringify(params ?? []));
95
+ return JSON.parse(json);
96
+ },
97
+ queryOne: async (sql, params) => {
98
+ const json = await this.native.txQueryOne(txID, sql, JSON.stringify(params ?? []));
99
+ return json ? JSON.parse(json) : null;
100
+ },
101
+ execute: async (sql, params) => {
102
+ return await this.native.txExecute(txID, sql, JSON.stringify(params ?? []));
103
+ }
104
+ };
105
+ const result = await callback(tx);
106
+ await this.native.commitTransaction(txID);
107
+ return result;
108
+ } catch (error) {
109
+ try {
110
+ await this.native.rollbackTransaction(txID);
111
+ } catch {
112
+ // rollback best-effort
113
+ }
114
+ throw mapNativeError(error);
115
+ }
116
+ }
117
+ async readTransaction(callback) {
118
+ let txID;
119
+ try {
120
+ txID = await this.native.beginReadTransaction();
121
+ } catch (error) {
122
+ throw mapNativeError(error);
123
+ }
124
+ try {
125
+ const tx = {
126
+ query: async (sql, params) => {
127
+ const json = await this.native.txQuery(txID, sql, JSON.stringify(params ?? []));
128
+ return JSON.parse(json);
129
+ },
130
+ queryOne: async (sql, params) => {
131
+ const json = await this.native.txQueryOne(txID, sql, JSON.stringify(params ?? []));
132
+ return json ? JSON.parse(json) : null;
133
+ },
134
+ execute: async (sql, params) => {
135
+ return await this.native.txExecute(txID, sql, JSON.stringify(params ?? []));
136
+ }
137
+ };
138
+ const result = await callback(tx);
139
+ await this.native.commitTransaction(txID);
140
+ return result;
141
+ } catch (error) {
142
+ try {
143
+ await this.native.rollbackTransaction(txID);
144
+ } catch {
145
+ // rollback best-effort
146
+ }
147
+ throw mapNativeError(error);
148
+ }
149
+ }
150
+
151
+ // -- Schema (local-only) --
152
+
153
+ async createTable(name, columns, options) {
154
+ try {
155
+ await this.native.createTable(name, JSON.stringify(columns), options ? JSON.stringify(options) : null);
156
+ } catch (error) {
157
+ throw mapNativeError(error);
158
+ }
159
+ }
160
+ async alterTable(name, addColumns) {
161
+ try {
162
+ await this.native.alterTable(name, JSON.stringify(addColumns));
163
+ } catch (error) {
164
+ throw mapNativeError(error);
165
+ }
166
+ }
167
+ async createIndex(table, columns, unique = false) {
168
+ try {
169
+ await this.native.createIndex(table, columns, unique);
170
+ } catch (error) {
171
+ throw mapNativeError(error);
172
+ }
173
+ }
174
+
175
+ // -- Observation --
176
+
177
+ onChange(tables, callback) {
178
+ const observerID = nextObserverID();
179
+ const subscription = this.native.onChange(event => {
180
+ if (event.observerID === observerID) {
181
+ callback();
182
+ }
183
+ });
184
+ this.native.addChangeObserver(observerID, tables);
185
+ return () => {
186
+ subscription.remove();
187
+ this.native.removeObserver(observerID);
188
+ };
189
+ }
190
+ watch(sql, params, tables, callback) {
191
+ const observerID = nextObserverID();
192
+ const subscription = this.native.onQueryResult(event => {
193
+ if (event.observerID === observerID) {
194
+ callback(JSON.parse(event.rowsJson));
195
+ }
196
+ });
197
+ this.native.addQueryObserver(observerID, sql, JSON.stringify(params ?? []), tables);
198
+ return () => {
199
+ subscription.remove();
200
+ this.native.removeObserver(observerID);
201
+ };
202
+ }
203
+
204
+ // -- WAL --
205
+
206
+ async checkpoint(mode = 'passive') {
207
+ try {
208
+ await this.native.checkpoint(mode);
209
+ } catch (error) {
210
+ throw mapNativeError(error);
211
+ }
212
+ }
213
+
214
+ // -- Lifecycle --
215
+
216
+ async close() {
217
+ try {
218
+ await this.native.close();
219
+ } catch (error) {
220
+ throw mapNativeError(error);
221
+ }
222
+ }
223
+ async getPath() {
224
+ try {
225
+ return await this.native.getPath();
226
+ } catch (error) {
227
+ throw mapNativeError(error);
228
+ }
229
+ }
230
+ async pendingChangeCount() {
231
+ try {
232
+ return await this.native.pendingChangeCount();
233
+ } catch (error) {
234
+ throw mapNativeError(error);
235
+ }
236
+ }
237
+
238
+ // -- Sync --
239
+
240
+ async start() {
241
+ try {
242
+ await this.native.start();
243
+ } catch (error) {
244
+ throw mapNativeError(error);
245
+ }
246
+ }
247
+ async stop() {
248
+ try {
249
+ await this.native.stop();
250
+ } catch (error) {
251
+ throw mapNativeError(error);
252
+ }
253
+ }
254
+ async syncNow() {
255
+ try {
256
+ await this.native.syncNow();
257
+ } catch (error) {
258
+ throw mapNativeError(error);
259
+ }
260
+ }
261
+
262
+ // -- Status & Events --
263
+
264
+ onStatusChange(callback) {
265
+ const subscription = this.native.onStatusChange(event => {
266
+ callback({
267
+ status: event.status,
268
+ retryAt: event.retryAt ? new Date(event.retryAt) : null
269
+ });
270
+ });
271
+ return () => subscription.remove();
272
+ }
273
+ onConflict(callback) {
274
+ const subscription = this.native.onConflict(event => {
275
+ callback({
276
+ table: event.table,
277
+ recordID: event.recordID,
278
+ clientData: event.clientDataJson ? JSON.parse(event.clientDataJson) : null,
279
+ serverData: event.serverDataJson ? JSON.parse(event.serverDataJson) : null
280
+ });
281
+ });
282
+ return () => subscription.remove();
283
+ }
284
+ onSnapshotRequired(handler) {
285
+ const subscription = this.native.onSnapshotRequired(event => {
286
+ handler().then(approved => {
287
+ this.native.resolveSnapshotRequest(event.requestID, approved);
288
+ }).catch(() => {
289
+ this.native.resolveSnapshotRequest(event.requestID, false);
290
+ });
291
+ });
292
+ return () => subscription.remove();
293
+ }
294
+ }
295
+ //# sourceMappingURL=SynchroClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Platform","NativeSynchro","mapNativeError","observerCounter","nextObserverID","Date","now","SynchroClient","native","authSubscription","constructor","config","onAuthRequest","event","authProvider","then","token","resolveAuthRequest","requestID","catch","err","rejectAuthRequest","Error","message","String","initialize","dbPath","serverURL","clientID","platform","OS","appVersion","syncInterval","pushDebounce","maxRetryAttempts","pullPageSize","pushBatchSize","snapshotPageSize","error","query","sql","params","json","JSON","stringify","parse","queryOne","execute","executeBatch","statements","payload","map","s","writeTransaction","callback","txID","beginWriteTransaction","tx","txQuery","txQueryOne","txExecute","result","commitTransaction","rollbackTransaction","readTransaction","beginReadTransaction","createTable","name","columns","options","alterTable","addColumns","createIndex","table","unique","onChange","tables","observerID","subscription","addChangeObserver","remove","removeObserver","watch","onQueryResult","rowsJson","addQueryObserver","checkpoint","mode","close","getPath","pendingChangeCount","start","stop","syncNow","onStatusChange","status","retryAt","onConflict","recordID","clientData","clientDataJson","serverData","serverDataJson","onSnapshotRequired","handler","approved","resolveSnapshotRequest"],"sourceRoot":"../../src","sources":["SynchroClient.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+
3
+ export class SynchroError extends Error {
4
+ constructor(code, message) {
5
+ super(message);
6
+ this.code = code;
7
+ this.name = 'SynchroError';
8
+ }
9
+ }
10
+ export class NotConnectedError extends SynchroError {
11
+ constructor() {
12
+ super('NOT_CONNECTED', 'Not connected to sync server');
13
+ this.name = 'NotConnectedError';
14
+ }
15
+ }
16
+ export class SchemaNotLoadedError extends SynchroError {
17
+ constructor() {
18
+ super('SCHEMA_NOT_LOADED', 'Schema has not been loaded from server');
19
+ this.name = 'SchemaNotLoadedError';
20
+ }
21
+ }
22
+ export class TableNotSyncedError extends SynchroError {
23
+ constructor(table) {
24
+ super('TABLE_NOT_SYNCED', `Table '${table}' is not a synced table`);
25
+ this.name = 'TableNotSyncedError';
26
+ this.table = table;
27
+ }
28
+ }
29
+ export class UpgradeRequiredError extends SynchroError {
30
+ constructor(currentVersion, minimumVersion) {
31
+ super('UPGRADE_REQUIRED', `App version ${currentVersion} is below minimum ${minimumVersion}`);
32
+ this.name = 'UpgradeRequiredError';
33
+ this.currentVersion = currentVersion;
34
+ this.minimumVersion = minimumVersion;
35
+ }
36
+ }
37
+ export class SchemaMismatchError extends SynchroError {
38
+ constructor(serverVersion, serverHash) {
39
+ super('SCHEMA_MISMATCH', `Schema mismatch: server version ${serverVersion}, hash ${serverHash}`);
40
+ this.name = 'SchemaMismatchError';
41
+ this.serverVersion = serverVersion;
42
+ this.serverHash = serverHash;
43
+ }
44
+ }
45
+ export class SnapshotRequiredError extends SynchroError {
46
+ constructor() {
47
+ super('SNAPSHOT_REQUIRED', 'Full snapshot required');
48
+ this.name = 'SnapshotRequiredError';
49
+ }
50
+ }
51
+ export class PushRejectedError extends SynchroError {
52
+ constructor(results) {
53
+ super('PUSH_REJECTED', `Push rejected: ${results.length} record(s)`);
54
+ this.name = 'PushRejectedError';
55
+ this.results = results;
56
+ }
57
+ }
58
+ export class NetworkError extends SynchroError {
59
+ constructor(message) {
60
+ super('NETWORK_ERROR', `Network error: ${message}`);
61
+ this.name = 'NetworkError';
62
+ }
63
+ }
64
+ export class ServerError extends SynchroError {
65
+ constructor(status, message) {
66
+ super('SERVER_ERROR', `Server error ${status}: ${message}`);
67
+ this.name = 'ServerError';
68
+ this.status = status;
69
+ }
70
+ }
71
+ export class DatabaseError extends SynchroError {
72
+ constructor(message) {
73
+ super('DATABASE_ERROR', `Database error: ${message}`);
74
+ this.name = 'DatabaseError';
75
+ }
76
+ }
77
+ export class InvalidResponseError extends SynchroError {
78
+ constructor(message) {
79
+ super('INVALID_RESPONSE', `Invalid response: ${message}`);
80
+ this.name = 'InvalidResponseError';
81
+ }
82
+ }
83
+ export class AlreadyStartedError extends SynchroError {
84
+ constructor() {
85
+ super('ALREADY_STARTED', 'Sync has already been started');
86
+ this.name = 'AlreadyStartedError';
87
+ }
88
+ }
89
+ export class NotStartedError extends SynchroError {
90
+ constructor() {
91
+ super('NOT_STARTED', 'Sync has not been started');
92
+ this.name = 'NotStartedError';
93
+ }
94
+ }
95
+ export class TransactionTimeoutError extends SynchroError {
96
+ constructor() {
97
+ super('TRANSACTION_TIMEOUT', 'Transaction timed out due to inactivity');
98
+ this.name = 'TransactionTimeoutError';
99
+ }
100
+ }
101
+ export function mapNativeError(error) {
102
+ if (error instanceof SynchroError) {
103
+ return error;
104
+ }
105
+ const nativeError = error;
106
+ const code = nativeError?.code;
107
+ const message = nativeError?.message ?? 'Unknown error';
108
+ const userInfo = nativeError?.userInfo ?? {};
109
+ switch (code) {
110
+ case 'NOT_CONNECTED':
111
+ return new NotConnectedError();
112
+ case 'SCHEMA_NOT_LOADED':
113
+ return new SchemaNotLoadedError();
114
+ case 'TABLE_NOT_SYNCED':
115
+ return new TableNotSyncedError(userInfo.table ?? '');
116
+ case 'UPGRADE_REQUIRED':
117
+ return new UpgradeRequiredError(userInfo.currentVersion ?? '', userInfo.minimumVersion ?? '');
118
+ case 'SCHEMA_MISMATCH':
119
+ return new SchemaMismatchError(parseInt(userInfo.serverVersion ?? '0', 10), userInfo.serverHash ?? '');
120
+ case 'SNAPSHOT_REQUIRED':
121
+ return new SnapshotRequiredError();
122
+ case 'PUSH_REJECTED':
123
+ {
124
+ let results = [];
125
+ try {
126
+ results = JSON.parse(userInfo.results ?? '[]');
127
+ } catch {
128
+ // leave empty
129
+ }
130
+ return new PushRejectedError(results);
131
+ }
132
+ case 'NETWORK_ERROR':
133
+ return new NetworkError(userInfo.message ?? message);
134
+ case 'SERVER_ERROR':
135
+ return new ServerError(parseInt(userInfo.status ?? '0', 10), userInfo.message ?? message);
136
+ case 'DATABASE_ERROR':
137
+ return new DatabaseError(userInfo.message ?? message);
138
+ case 'INVALID_RESPONSE':
139
+ return new InvalidResponseError(userInfo.message ?? message);
140
+ case 'ALREADY_STARTED':
141
+ return new AlreadyStartedError();
142
+ case 'NOT_STARTED':
143
+ return new NotStartedError();
144
+ case 'TRANSACTION_TIMEOUT':
145
+ return new TransactionTimeoutError();
146
+ default:
147
+ return new SynchroError(code ?? 'UNKNOWN', message);
148
+ }
149
+ }
150
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SynchroError","Error","constructor","code","message","name","NotConnectedError","SchemaNotLoadedError","TableNotSyncedError","table","UpgradeRequiredError","currentVersion","minimumVersion","SchemaMismatchError","serverVersion","serverHash","SnapshotRequiredError","PushRejectedError","results","length","NetworkError","ServerError","status","DatabaseError","InvalidResponseError","AlreadyStartedError","NotStartedError","TransactionTimeoutError","mapNativeError","error","nativeError","userInfo","parseInt","JSON","parse"],"sourceRoot":"../../src","sources":["errors.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ export { useQuery } from "./useQuery.js";
4
+ export { useSyncStatus } from "./useSyncStatus.js";
5
+ export { usePendingChanges } from "./usePendingChanges.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useQuery","useSyncStatus","usePendingChanges"],"sourceRoot":"../../../src","sources":["hooks/index.ts"],"mappings":";;AAAA,SAASA,QAAQ,QAAQ,eAAY;AACrC,SAASC,aAAa,QAAQ,oBAAiB;AAC/C,SAASC,iBAAiB,QAAQ,wBAAqB","ignoreList":[]}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+
3
+ import { useState, useEffect } from 'react';
4
+ export function usePendingChanges(client, pollInterval = 2000) {
5
+ const [count, setCount] = useState(0);
6
+ useEffect(() => {
7
+ let active = true;
8
+ const poll = async () => {
9
+ try {
10
+ const c = await client.pendingChangeCount();
11
+ if (active) setCount(c);
12
+ } catch {
13
+ // ignore poll errors
14
+ }
15
+ };
16
+ poll();
17
+ const interval = setInterval(poll, pollInterval);
18
+ return () => {
19
+ active = false;
20
+ clearInterval(interval);
21
+ };
22
+ }, [client, pollInterval]);
23
+ return count;
24
+ }
25
+ //# sourceMappingURL=usePendingChanges.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useState","useEffect","usePendingChanges","client","pollInterval","count","setCount","active","poll","c","pendingChangeCount","interval","setInterval","clearInterval"],"sourceRoot":"../../../src","sources":["hooks/usePendingChanges.ts"],"mappings":";;AAAA,SAASA,QAAQ,EAAEC,SAAS,QAAQ,OAAO;AAG3C,OAAO,SAASC,iBAAiBA,CAC/BC,MAAqB,EACrBC,YAAY,GAAG,IAAI,EACX;EACR,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAGN,QAAQ,CAAC,CAAC,CAAC;EAErCC,SAAS,CAAC,MAAM;IACd,IAAIM,MAAM,GAAG,IAAI;IAEjB,MAAMC,IAAI,GAAG,MAAAA,CAAA,KAAY;MACvB,IAAI;QACF,MAAMC,CAAC,GAAG,MAAMN,MAAM,CAACO,kBAAkB,CAAC,CAAC;QAC3C,IAAIH,MAAM,EAAED,QAAQ,CAACG,CAAC,CAAC;MACzB,CAAC,CAAC,MAAM;QACN;MAAA;IAEJ,CAAC;IAEDD,IAAI,CAAC,CAAC;IACN,MAAMG,QAAQ,GAAGC,WAAW,CAACJ,IAAI,EAAEJ,YAAY,CAAC;IAEhD,OAAO,MAAM;MACXG,MAAM,GAAG,KAAK;MACdM,aAAa,CAACF,QAAQ,CAAC;IACzB,CAAC;EACH,CAAC,EAAE,CAACR,MAAM,EAAEC,YAAY,CAAC,CAAC;EAE1B,OAAOC,KAAK;AACd","ignoreList":[]}
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+
3
+ import { useState, useEffect, useCallback, useRef } from 'react';
4
+ function arraysEqual(a, b) {
5
+ if (a === b) return true;
6
+ if (!a || !b) return !a && !b;
7
+ if (a.length !== b.length) return false;
8
+ for (let i = 0; i < a.length; i += 1) {
9
+ if (a[i] !== b[i]) return false;
10
+ }
11
+ return true;
12
+ }
13
+ function useStableArray(value) {
14
+ const ref = useRef(value);
15
+ if (!arraysEqual(ref.current, value)) {
16
+ ref.current = value ? [...value] : value;
17
+ }
18
+ return ref.current;
19
+ }
20
+ export function useQuery(client, sql, params, tables) {
21
+ const [data, setData] = useState([]);
22
+ const [loading, setLoading] = useState(true);
23
+ const [error, setError] = useState(null);
24
+ const refreshCounter = useRef(0);
25
+ const [, setRefreshTrigger] = useState(0);
26
+ const stableParams = useStableArray(params);
27
+ const stableTables = useStableArray(tables);
28
+ const refresh = useCallback(() => {
29
+ refreshCounter.current += 1;
30
+ setRefreshTrigger(refreshCounter.current);
31
+ }, []);
32
+ useEffect(() => {
33
+ if (stableTables && stableTables.length > 0) {
34
+ // Reactive mode: use watch()
35
+ setLoading(true);
36
+ let firstResult = true;
37
+ const unsubscribe = client.watch(sql, stableParams, stableTables, rows => {
38
+ setData(rows);
39
+ setError(null);
40
+ if (firstResult) {
41
+ setLoading(false);
42
+ firstResult = false;
43
+ }
44
+ });
45
+ return unsubscribe;
46
+ } else {
47
+ // One-shot mode: use query()
48
+ let cancelled = false;
49
+ setLoading(true);
50
+ client.query(sql, stableParams).then(rows => {
51
+ if (!cancelled) {
52
+ setData(rows);
53
+ setError(null);
54
+ setLoading(false);
55
+ }
56
+ }).catch(err => {
57
+ if (!cancelled) {
58
+ setError(err);
59
+ setLoading(false);
60
+ }
61
+ });
62
+ return () => {
63
+ cancelled = true;
64
+ };
65
+ }
66
+ }, [client, sql, stableParams, stableTables, refreshCounter.current]);
67
+ return {
68
+ data,
69
+ loading,
70
+ error,
71
+ refresh
72
+ };
73
+ }
74
+ //# sourceMappingURL=useQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useState","useEffect","useCallback","useRef","arraysEqual","a","b","length","i","useStableArray","value","ref","current","useQuery","client","sql","params","tables","data","setData","loading","setLoading","error","setError","refreshCounter","setRefreshTrigger","stableParams","stableTables","refresh","firstResult","unsubscribe","watch","rows","cancelled","query","then","catch","err"],"sourceRoot":"../../../src","sources":["hooks/useQuery.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ import { useState, useEffect } from 'react';
4
+ export function useSyncStatus(client) {
5
+ const [status, setStatus] = useState({
6
+ status: 'idle',
7
+ retryAt: null
8
+ });
9
+ useEffect(() => {
10
+ const unsubscribe = client.onStatusChange(setStatus);
11
+ return unsubscribe;
12
+ }, [client]);
13
+ return status;
14
+ }
15
+ //# sourceMappingURL=useSyncStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useState","useEffect","useSyncStatus","client","status","setStatus","retryAt","unsubscribe","onStatusChange"],"sourceRoot":"../../../src","sources":["hooks/useSyncStatus.ts"],"mappings":";;AAAA,SAASA,QAAQ,EAAEC,SAAS,QAAQ,OAAO;AAI3C,OAAO,SAASC,aAAaA,CAACC,MAAqB,EAAc;EAC/D,MAAM,CAACC,MAAM,EAAEC,SAAS,CAAC,GAAGL,QAAQ,CAAa;IAC/CI,MAAM,EAAE,MAAM;IACdE,OAAO,EAAE;EACX,CAAC,CAAC;EAEFL,SAAS,CAAC,MAAM;IACd,MAAMM,WAAW,GAAGJ,MAAM,CAACK,cAAc,CAACH,SAAS,CAAC;IACpD,OAAOE,WAAW;EACpB,CAAC,EAAE,CAACJ,MAAM,CAAC,CAAC;EAEZ,OAAOC,MAAM;AACf","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ export { SynchroClient } from "./SynchroClient.js";
4
+ export { useQuery } from "./hooks/useQuery.js";
5
+ export { useSyncStatus } from "./hooks/useSyncStatus.js";
6
+ export { usePendingChanges } from "./hooks/usePendingChanges.js";
7
+ export { SynchroError, NotConnectedError, SchemaNotLoadedError, TableNotSyncedError, UpgradeRequiredError, SchemaMismatchError, SnapshotRequiredError, PushRejectedError, NetworkError, ServerError, DatabaseError, InvalidResponseError, AlreadyStartedError, NotStartedError, TransactionTimeoutError, mapNativeError } from "./errors.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SynchroClient","useQuery","useSyncStatus","usePendingChanges","SynchroError","NotConnectedError","SchemaNotLoadedError","TableNotSyncedError","UpgradeRequiredError","SchemaMismatchError","SnapshotRequiredError","PushRejectedError","NetworkError","ServerError","DatabaseError","InvalidResponseError","AlreadyStartedError","NotStartedError","TransactionTimeoutError","mapNativeError"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,aAAa,QAAQ,oBAAiB;AAC/C,SAASC,QAAQ,QAAQ,qBAAkB;AAC3C,SAASC,aAAa,QAAQ,0BAAuB;AACrD,SAASC,iBAAiB,QAAQ,8BAA2B;AAkB7D,SACEC,YAAY,EACZC,iBAAiB,EACjBC,oBAAoB,EACpBC,mBAAmB,EACnBC,oBAAoB,EACpBC,mBAAmB,EACnBC,qBAAqB,EACrBC,iBAAiB,EACjBC,YAAY,EACZC,WAAW,EACXC,aAAa,EACbC,oBAAoB,EACpBC,mBAAmB,EACnBC,eAAe,EACfC,uBAAuB,EACvBC,cAAc,QACT,aAAU","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"module"}