@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.
- package/LICENSE +20 -0
- package/README.md +122 -0
- package/SynchroReactNative.podspec +22 -0
- package/android/build.gradle +81 -0
- package/android/src/main/AndroidManifest.xml +3 -0
- package/android/src/main/kotlin/com/trainstar/synchro/rn/SynchroModule.kt +808 -0
- package/android/src/main/kotlin/com/trainstar/synchro/rn/SynchroPackage.kt +32 -0
- package/ios/SynchroModule.mm +368 -0
- package/ios/SynchroModule.swift +970 -0
- package/lib/module/NativeSynchro.js +5 -0
- package/lib/module/NativeSynchro.js.map +1 -0
- package/lib/module/SynchroClient.js +295 -0
- package/lib/module/SynchroClient.js.map +1 -0
- package/lib/module/errors.js +150 -0
- package/lib/module/errors.js.map +1 -0
- package/lib/module/hooks/index.js +6 -0
- package/lib/module/hooks/index.js.map +1 -0
- package/lib/module/hooks/usePendingChanges.js +25 -0
- package/lib/module/hooks/usePendingChanges.js.map +1 -0
- package/lib/module/hooks/useQuery.js +74 -0
- package/lib/module/hooks/useQuery.js.map +1 -0
- package/lib/module/hooks/useSyncStatus.js +15 -0
- package/lib/module/hooks/useSyncStatus.js.map +1 -0
- package/lib/module/index.js +8 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/types.js +2 -0
- package/lib/module/types.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/NativeSynchro.d.ts +84 -0
- package/lib/typescript/src/NativeSynchro.d.ts.map +1 -0
- package/lib/typescript/src/SynchroClient.d.ts +30 -0
- package/lib/typescript/src/SynchroClient.d.ts.map +1 -0
- package/lib/typescript/src/errors.d.ts +61 -0
- package/lib/typescript/src/errors.d.ts.map +1 -0
- package/lib/typescript/src/hooks/index.d.ts +4 -0
- package/lib/typescript/src/hooks/index.d.ts.map +1 -0
- package/lib/typescript/src/hooks/usePendingChanges.d.ts +3 -0
- package/lib/typescript/src/hooks/usePendingChanges.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useQuery.d.ts +12 -0
- package/lib/typescript/src/hooks/useQuery.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useSyncStatus.d.ts +4 -0
- package/lib/typescript/src/hooks/useSyncStatus.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +8 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +55 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/package.json +146 -0
- package/src/NativeSynchro.ts +114 -0
- package/src/SynchroClient.ts +424 -0
- package/src/errors.ts +205 -0
- package/src/hooks/index.ts +3 -0
- package/src/hooks/usePendingChanges.ts +32 -0
- package/src/hooks/useQuery.ts +93 -0
- package/src/hooks/useSyncStatus.ts +17 -0
- package/src/index.ts +41 -0
- package/src/types.ts +71 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { TurboModule } from 'react-native';
|
|
2
|
+
import type { EventEmitter } from 'react-native/Libraries/Types/CodegenTypes';
|
|
3
|
+
type StatusEvent = {
|
|
4
|
+
status: string;
|
|
5
|
+
retryAt: string | null;
|
|
6
|
+
};
|
|
7
|
+
type ConflictEvent = {
|
|
8
|
+
table: string;
|
|
9
|
+
recordID: string;
|
|
10
|
+
clientDataJson: string | null;
|
|
11
|
+
serverDataJson: string | null;
|
|
12
|
+
};
|
|
13
|
+
type AuthRequestEvent = {
|
|
14
|
+
requestID: string;
|
|
15
|
+
};
|
|
16
|
+
type SnapshotRequiredEvent = {
|
|
17
|
+
requestID: string;
|
|
18
|
+
};
|
|
19
|
+
type ChangeEvent = {
|
|
20
|
+
observerID: string;
|
|
21
|
+
};
|
|
22
|
+
type QueryResultEvent = {
|
|
23
|
+
observerID: string;
|
|
24
|
+
rowsJson: string;
|
|
25
|
+
};
|
|
26
|
+
export interface Spec extends TurboModule {
|
|
27
|
+
initialize(config: {
|
|
28
|
+
dbPath: string;
|
|
29
|
+
serverURL: string;
|
|
30
|
+
clientID: string;
|
|
31
|
+
platform: string;
|
|
32
|
+
appVersion: string;
|
|
33
|
+
syncInterval: number;
|
|
34
|
+
pushDebounce: number;
|
|
35
|
+
maxRetryAttempts: number;
|
|
36
|
+
pullPageSize: number;
|
|
37
|
+
pushBatchSize: number;
|
|
38
|
+
snapshotPageSize: number;
|
|
39
|
+
}): Promise<void>;
|
|
40
|
+
close(): Promise<void>;
|
|
41
|
+
getPath(): Promise<string>;
|
|
42
|
+
query(sql: string, paramsJson: string): Promise<string>;
|
|
43
|
+
queryOne(sql: string, paramsJson: string): Promise<string | null>;
|
|
44
|
+
execute(sql: string, paramsJson: string): Promise<{
|
|
45
|
+
rowsAffected: number;
|
|
46
|
+
}>;
|
|
47
|
+
executeBatch(statementsJson: string): Promise<{
|
|
48
|
+
totalRowsAffected: number;
|
|
49
|
+
}>;
|
|
50
|
+
beginWriteTransaction(): Promise<string>;
|
|
51
|
+
beginReadTransaction(): Promise<string>;
|
|
52
|
+
txQuery(txID: string, sql: string, paramsJson: string): Promise<string>;
|
|
53
|
+
txQueryOne(txID: string, sql: string, paramsJson: string): Promise<string | null>;
|
|
54
|
+
txExecute(txID: string, sql: string, paramsJson: string): Promise<{
|
|
55
|
+
rowsAffected: number;
|
|
56
|
+
}>;
|
|
57
|
+
commitTransaction(txID: string): Promise<void>;
|
|
58
|
+
rollbackTransaction(txID: string): Promise<void>;
|
|
59
|
+
createTable(name: string, columnsJson: string, optionsJson: string | null): Promise<void>;
|
|
60
|
+
alterTable(name: string, columnsJson: string): Promise<void>;
|
|
61
|
+
createIndex(table: string, columns: ReadonlyArray<string>, unique: boolean): Promise<void>;
|
|
62
|
+
addChangeObserver(observerID: string, tables: ReadonlyArray<string>): Promise<void>;
|
|
63
|
+
addQueryObserver(observerID: string, sql: string, paramsJson: string, tables: ReadonlyArray<string>): Promise<void>;
|
|
64
|
+
removeObserver(observerID: string): Promise<void>;
|
|
65
|
+
checkpoint(mode: string): Promise<void>;
|
|
66
|
+
start(): Promise<void>;
|
|
67
|
+
stop(): Promise<void>;
|
|
68
|
+
syncNow(): Promise<void>;
|
|
69
|
+
pendingChangeCount(): Promise<number>;
|
|
70
|
+
resolveAuthRequest(requestID: string, token: string): void;
|
|
71
|
+
rejectAuthRequest(requestID: string, error: string): void;
|
|
72
|
+
resolveSnapshotRequest(requestID: string, approved: boolean): void;
|
|
73
|
+
readonly onStatusChange: EventEmitter<StatusEvent>;
|
|
74
|
+
readonly onConflict: EventEmitter<ConflictEvent>;
|
|
75
|
+
readonly onAuthRequest: EventEmitter<AuthRequestEvent>;
|
|
76
|
+
readonly onSnapshotRequired: EventEmitter<SnapshotRequiredEvent>;
|
|
77
|
+
readonly onChange: EventEmitter<ChangeEvent>;
|
|
78
|
+
readonly onQueryResult: EventEmitter<QueryResultEvent>;
|
|
79
|
+
addListener(eventName: string): void;
|
|
80
|
+
removeListeners(count: number): void;
|
|
81
|
+
}
|
|
82
|
+
declare const _default: Spec;
|
|
83
|
+
export default _default;
|
|
84
|
+
//# sourceMappingURL=NativeSynchro.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeSynchro.d.ts","sourceRoot":"","sources":["../../../src/NativeSynchro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAG9E,KAAK,WAAW,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAC9D,KAAK,aAAa,GAAG;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B,CAAC;AACF,KAAK,gBAAgB,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAC9C,KAAK,qBAAqB,GAAG;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AACnD,KAAK,WAAW,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAC1C,KAAK,gBAAgB,GAAG;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjE,MAAM,WAAW,IAAK,SAAQ,WAAW;IAEvC,UAAU,CAAC,MAAM,EAAE;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAG3B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAClE,OAAO,CACL,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrC,YAAY,CACV,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC;QAAE,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAG1C,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxE,UAAU,CACR,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC1B,SAAS,CACP,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGjD,WAAW,CACT,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7D,WAAW,CACT,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,EAC9B,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC,CAAC;IAGjB,iBAAiB,CACf,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,gBAAgB,CACd,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,GAC5B,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAGlD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAGtC,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3D,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1D,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAGnE,QAAQ,CAAC,cAAc,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC;IACjD,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC;IACvD,QAAQ,CAAC,kBAAkB,EAAE,YAAY,CAAC,qBAAqB,CAAC,CAAC;IACjE,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IAC7C,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC;IAGvD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;;AAED,wBAAuE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Row, ExecResult, BatchResult, SQLStatement, ColumnDef, TableOptions, Transaction, CheckpointMode, SyncStatus, ConflictEvent, SynchroConfig, Unsubscribe } from './types';
|
|
2
|
+
export declare class SynchroClient {
|
|
3
|
+
private readonly native;
|
|
4
|
+
private readonly config;
|
|
5
|
+
private authSubscription;
|
|
6
|
+
constructor(config: SynchroConfig);
|
|
7
|
+
initialize(): Promise<void>;
|
|
8
|
+
query(sql: string, params?: unknown[]): Promise<Row[]>;
|
|
9
|
+
queryOne(sql: string, params?: unknown[]): Promise<Row | null>;
|
|
10
|
+
execute(sql: string, params?: unknown[]): Promise<ExecResult>;
|
|
11
|
+
executeBatch(statements: SQLStatement[]): Promise<BatchResult>;
|
|
12
|
+
writeTransaction<T>(callback: (tx: Transaction) => Promise<T>): Promise<T>;
|
|
13
|
+
readTransaction<T>(callback: (tx: Transaction) => Promise<T>): Promise<T>;
|
|
14
|
+
createTable(name: string, columns: ColumnDef[], options?: TableOptions): Promise<void>;
|
|
15
|
+
alterTable(name: string, addColumns: ColumnDef[]): Promise<void>;
|
|
16
|
+
createIndex(table: string, columns: string[], unique?: boolean): Promise<void>;
|
|
17
|
+
onChange(tables: string[], callback: () => void): Unsubscribe;
|
|
18
|
+
watch(sql: string, params: unknown[] | undefined, tables: string[], callback: (rows: Row[]) => void): Unsubscribe;
|
|
19
|
+
checkpoint(mode?: CheckpointMode): Promise<void>;
|
|
20
|
+
close(): Promise<void>;
|
|
21
|
+
getPath(): Promise<string>;
|
|
22
|
+
pendingChangeCount(): Promise<number>;
|
|
23
|
+
start(): Promise<void>;
|
|
24
|
+
stop(): Promise<void>;
|
|
25
|
+
syncNow(): Promise<void>;
|
|
26
|
+
onStatusChange(callback: (status: SyncStatus) => void): Unsubscribe;
|
|
27
|
+
onConflict(callback: (event: ConflictEvent) => void): Unsubscribe;
|
|
28
|
+
onSnapshotRequired(handler: () => Promise<boolean>): Unsubscribe;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=SynchroClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SynchroClient.d.ts","sourceRoot":"","sources":["../../../src/SynchroClient.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,GAAG,EACH,UAAU,EACV,WAAW,EACX,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,WAAW,EACX,cAAc,EACd,UAAU,EAEV,aAAa,EACb,aAAa,EACb,WAAW,EACZ,MAAM,SAAS,CAAC;AAOjB,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,gBAAgB,CAAkC;gBAE9C,MAAM,EAAE,aAAa;IAqB3B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAsB3B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAYtD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAY9D,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IAW7D,YAAY,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IAc9D,gBAAgB,CAAC,CAAC,EACtB,QAAQ,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GACxC,OAAO,CAAC,CAAC,CAAC;IA+CP,eAAe,CAAC,CAAC,EACrB,QAAQ,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GACxC,OAAO,CAAC,CAAC,CAAC;IAiDP,WAAW,CACf,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,SAAS,EAAE,EACpB,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,IAAI,CAAC;IAYV,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhE,WAAW,CACf,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,UAAQ,GACb,OAAO,CAAC,IAAI,CAAC;IAUhB,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,WAAW;IAmB7D,KAAK,CACH,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAC7B,MAAM,EAAE,MAAM,EAAE,EAChB,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAC9B,WAAW;IA0BR,UAAU,CAAC,IAAI,GAAE,cAA0B,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAQ1B,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC;IAUrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAU9B,cAAc,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,GAAG,WAAW;IAYnE,UAAU,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,WAAW;IAuBjE,kBAAkB,CAChB,OAAO,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAC9B,WAAW;CAcf"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export declare class SynchroError extends Error {
|
|
2
|
+
readonly code: string;
|
|
3
|
+
constructor(code: string, message: string);
|
|
4
|
+
}
|
|
5
|
+
export declare class NotConnectedError extends SynchroError {
|
|
6
|
+
constructor();
|
|
7
|
+
}
|
|
8
|
+
export declare class SchemaNotLoadedError extends SynchroError {
|
|
9
|
+
constructor();
|
|
10
|
+
}
|
|
11
|
+
export declare class TableNotSyncedError extends SynchroError {
|
|
12
|
+
readonly table: string;
|
|
13
|
+
constructor(table: string);
|
|
14
|
+
}
|
|
15
|
+
export declare class UpgradeRequiredError extends SynchroError {
|
|
16
|
+
readonly currentVersion: string;
|
|
17
|
+
readonly minimumVersion: string;
|
|
18
|
+
constructor(currentVersion: string, minimumVersion: string);
|
|
19
|
+
}
|
|
20
|
+
export declare class SchemaMismatchError extends SynchroError {
|
|
21
|
+
readonly serverVersion: number;
|
|
22
|
+
readonly serverHash: string;
|
|
23
|
+
constructor(serverVersion: number, serverHash: string);
|
|
24
|
+
}
|
|
25
|
+
export declare class SnapshotRequiredError extends SynchroError {
|
|
26
|
+
constructor();
|
|
27
|
+
}
|
|
28
|
+
export interface PushResultItem {
|
|
29
|
+
recordID: string;
|
|
30
|
+
table: string;
|
|
31
|
+
status: string;
|
|
32
|
+
message?: string;
|
|
33
|
+
}
|
|
34
|
+
export declare class PushRejectedError extends SynchroError {
|
|
35
|
+
readonly results: PushResultItem[];
|
|
36
|
+
constructor(results: PushResultItem[]);
|
|
37
|
+
}
|
|
38
|
+
export declare class NetworkError extends SynchroError {
|
|
39
|
+
constructor(message: string);
|
|
40
|
+
}
|
|
41
|
+
export declare class ServerError extends SynchroError {
|
|
42
|
+
readonly status: number;
|
|
43
|
+
constructor(status: number, message: string);
|
|
44
|
+
}
|
|
45
|
+
export declare class DatabaseError extends SynchroError {
|
|
46
|
+
constructor(message: string);
|
|
47
|
+
}
|
|
48
|
+
export declare class InvalidResponseError extends SynchroError {
|
|
49
|
+
constructor(message: string);
|
|
50
|
+
}
|
|
51
|
+
export declare class AlreadyStartedError extends SynchroError {
|
|
52
|
+
constructor();
|
|
53
|
+
}
|
|
54
|
+
export declare class NotStartedError extends SynchroError {
|
|
55
|
+
constructor();
|
|
56
|
+
}
|
|
57
|
+
export declare class TransactionTimeoutError extends SynchroError {
|
|
58
|
+
constructor();
|
|
59
|
+
}
|
|
60
|
+
export declare function mapNativeError(error: unknown): SynchroError;
|
|
61
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C;AAED,qBAAa,iBAAkB,SAAQ,YAAY;;CAKlD;AAED,qBAAa,oBAAqB,SAAQ,YAAY;;CAKrD;AAED,qBAAa,mBAAoB,SAAQ,YAAY;IACnD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;gBAEX,KAAK,EAAE,MAAM;CAK1B;AAED,qBAAa,oBAAqB,SAAQ,YAAY;IACpD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;gBAEpB,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM;CAS3D;AAED,qBAAa,mBAAoB,SAAQ,YAAY;IACnD,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAEhB,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAStD;AAED,qBAAa,qBAAsB,SAAQ,YAAY;;CAKtD;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC;gBAEvB,OAAO,EAAE,cAAc,EAAE;CAKtC;AAED,qBAAa,YAAa,SAAQ,YAAY;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,WAAY,SAAQ,YAAY;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK5C;AAED,qBAAa,aAAc,SAAQ,YAAY;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,oBAAqB,SAAQ,YAAY;gBACxC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,mBAAoB,SAAQ,YAAY;;CAKpD;AAED,qBAAa,eAAgB,SAAQ,YAAY;;CAKhD;AAED,qBAAa,uBAAwB,SAAQ,YAAY;;CAKxD;AAQD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,YAAY,CA0D3D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePendingChanges.d.ts","sourceRoot":"","sources":["../../../../src/hooks/usePendingChanges.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,aAAa,EACrB,YAAY,SAAO,GAClB,MAAM,CAyBR"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SynchroClient } from '../SynchroClient';
|
|
2
|
+
import type { Row } from '../types';
|
|
3
|
+
import type { SynchroError } from '../errors';
|
|
4
|
+
interface UseQueryResult {
|
|
5
|
+
data: Row[];
|
|
6
|
+
loading: boolean;
|
|
7
|
+
error: SynchroError | null;
|
|
8
|
+
refresh: () => void;
|
|
9
|
+
}
|
|
10
|
+
export declare function useQuery(client: SynchroClient, sql: string, params?: unknown[], tables?: string[]): UseQueryResult;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=useQuery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useQuery.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useQuery.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,UAAU,cAAc;IACtB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAuBD,wBAAgB,QAAQ,CACtB,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,OAAO,EAAE,EAClB,MAAM,CAAC,EAAE,MAAM,EAAE,GAChB,cAAc,CAsDhB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSyncStatus.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useSyncStatus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,UAAU,CAY/D"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { SynchroClient } from './SynchroClient';
|
|
2
|
+
export { useQuery } from './hooks/useQuery';
|
|
3
|
+
export { useSyncStatus } from './hooks/useSyncStatus';
|
|
4
|
+
export { usePendingChanges } from './hooks/usePendingChanges';
|
|
5
|
+
export type { Row, ExecResult, BatchResult, SQLStatement, ColumnDef, TableOptions, Transaction, CheckpointMode, SyncStatus, SyncStatusType, ConflictEvent, SynchroConfig, Unsubscribe, } from './types';
|
|
6
|
+
export { SynchroError, NotConnectedError, SchemaNotLoadedError, TableNotSyncedError, UpgradeRequiredError, SchemaMismatchError, SnapshotRequiredError, PushRejectedError, NetworkError, ServerError, DatabaseError, InvalidResponseError, AlreadyStartedError, NotStartedError, TransactionTimeoutError, mapNativeError, } from './errors';
|
|
7
|
+
export type { PushResultItem } from './errors';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,YAAY,EACV,GAAG,EACH,UAAU,EACV,WAAW,EACX,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,WAAW,EACX,cAAc,EACd,UAAU,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACb,WAAW,GACZ,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,WAAW,EACX,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,uBAAuB,EACvB,cAAc,GACf,MAAM,UAAU,CAAC;AAElB,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export type Row = Record<string, unknown>;
|
|
2
|
+
export interface ExecResult {
|
|
3
|
+
rowsAffected: number;
|
|
4
|
+
}
|
|
5
|
+
export interface BatchResult {
|
|
6
|
+
totalRowsAffected: number;
|
|
7
|
+
}
|
|
8
|
+
export interface SQLStatement {
|
|
9
|
+
sql: string;
|
|
10
|
+
params?: unknown[];
|
|
11
|
+
}
|
|
12
|
+
export interface ColumnDef {
|
|
13
|
+
name: string;
|
|
14
|
+
type: string;
|
|
15
|
+
nullable?: boolean;
|
|
16
|
+
primaryKey?: boolean;
|
|
17
|
+
defaultValue?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface TableOptions {
|
|
20
|
+
ifNotExists?: boolean;
|
|
21
|
+
withoutRowid?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface Transaction {
|
|
24
|
+
query(sql: string, params?: unknown[]): Promise<Row[]>;
|
|
25
|
+
queryOne(sql: string, params?: unknown[]): Promise<Row | null>;
|
|
26
|
+
execute(sql: string, params?: unknown[]): Promise<ExecResult>;
|
|
27
|
+
}
|
|
28
|
+
export type CheckpointMode = 'passive' | 'full' | 'restart' | 'truncate';
|
|
29
|
+
export type SyncStatusType = 'idle' | 'connecting' | 'syncing' | 'error' | 'stopped';
|
|
30
|
+
export interface SyncStatus {
|
|
31
|
+
status: SyncStatusType;
|
|
32
|
+
retryAt: Date | null;
|
|
33
|
+
}
|
|
34
|
+
export interface ConflictEvent {
|
|
35
|
+
table: string;
|
|
36
|
+
recordID: string;
|
|
37
|
+
clientData: Row | null;
|
|
38
|
+
serverData: Row | null;
|
|
39
|
+
}
|
|
40
|
+
export interface SynchroConfig {
|
|
41
|
+
dbPath: string;
|
|
42
|
+
serverURL: string;
|
|
43
|
+
authProvider: () => Promise<string>;
|
|
44
|
+
clientID: string;
|
|
45
|
+
platform?: string;
|
|
46
|
+
appVersion: string;
|
|
47
|
+
syncInterval?: number;
|
|
48
|
+
pushDebounce?: number;
|
|
49
|
+
maxRetryAttempts?: number;
|
|
50
|
+
pullPageSize?: number;
|
|
51
|
+
pushBatchSize?: number;
|
|
52
|
+
snapshotPageSize?: number;
|
|
53
|
+
}
|
|
54
|
+
export type Unsubscribe = () => void;
|
|
55
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1C,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CAC/D;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;AAEzE,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,YAAY,GACZ,SAAS,GACT,OAAO,GACP,SAAS,CAAC;AAEd,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,GAAG,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,GAAG,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@trainstar/synchro-react-native",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "React Native bridge for Synchro sync SDK",
|
|
5
|
+
"source": "./src/index.ts",
|
|
6
|
+
"main": "./lib/module/index.js",
|
|
7
|
+
"types": "./lib/typescript/src/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"source": "./src/index.ts",
|
|
11
|
+
"types": "./lib/typescript/src/index.d.ts",
|
|
12
|
+
"default": "./lib/module/index.js"
|
|
13
|
+
},
|
|
14
|
+
"./package.json": "./package.json"
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"src",
|
|
18
|
+
"lib",
|
|
19
|
+
"android",
|
|
20
|
+
"ios",
|
|
21
|
+
"*.podspec",
|
|
22
|
+
"!ios/build",
|
|
23
|
+
"!android/build",
|
|
24
|
+
"!android/gradle",
|
|
25
|
+
"!android/gradlew",
|
|
26
|
+
"!android/gradlew.bat",
|
|
27
|
+
"!android/local.properties",
|
|
28
|
+
"!**/__tests__",
|
|
29
|
+
"!**/__fixtures__",
|
|
30
|
+
"!**/__mocks__",
|
|
31
|
+
"!**/.*"
|
|
32
|
+
],
|
|
33
|
+
"scripts": {
|
|
34
|
+
"example": "yarn workspace @trainstar/synchro-react-native-example",
|
|
35
|
+
"clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib",
|
|
36
|
+
"prepare": "bob build",
|
|
37
|
+
"pack:dry-run": "npm pack --dry-run",
|
|
38
|
+
"test:unit": "jest --runInBand",
|
|
39
|
+
"typecheck": "tsc",
|
|
40
|
+
"test": "jest"
|
|
41
|
+
},
|
|
42
|
+
"keywords": [
|
|
43
|
+
"react-native",
|
|
44
|
+
"synchro",
|
|
45
|
+
"sync",
|
|
46
|
+
"offline-first"
|
|
47
|
+
],
|
|
48
|
+
"repository": {
|
|
49
|
+
"type": "git",
|
|
50
|
+
"url": "git+https://github.com/trainstar/synchro.git"
|
|
51
|
+
},
|
|
52
|
+
"author": "Trainstar <dev@trainstar.com> (https://trainstar.com)",
|
|
53
|
+
"license": "MIT",
|
|
54
|
+
"bugs": {
|
|
55
|
+
"url": "https://github.com/trainstar/synchro/issues"
|
|
56
|
+
},
|
|
57
|
+
"homepage": "https://github.com/trainstar/synchro#readme",
|
|
58
|
+
"publishConfig": {
|
|
59
|
+
"registry": "https://registry.npmjs.org/"
|
|
60
|
+
},
|
|
61
|
+
"devDependencies": {
|
|
62
|
+
"@react-native/babel-preset": "0.83.0",
|
|
63
|
+
"@testing-library/react-native": "^12.4.0",
|
|
64
|
+
"@types/jest": "^29.5.14",
|
|
65
|
+
"@types/react": "^19.2.0",
|
|
66
|
+
"del-cli": "^6.0.0",
|
|
67
|
+
"jest": "^29.7.0",
|
|
68
|
+
"react": "19.2.0",
|
|
69
|
+
"react-native": "0.83.0",
|
|
70
|
+
"react-native-builder-bob": "^0.40.18",
|
|
71
|
+
"react-test-renderer": "^19.2.0",
|
|
72
|
+
"ts-jest": "^29.1.0",
|
|
73
|
+
"turbo": "^2.5.6",
|
|
74
|
+
"typescript": "^5.9.2"
|
|
75
|
+
},
|
|
76
|
+
"peerDependencies": {
|
|
77
|
+
"react": "*",
|
|
78
|
+
"react-native": "*"
|
|
79
|
+
},
|
|
80
|
+
"workspaces": [
|
|
81
|
+
"example"
|
|
82
|
+
],
|
|
83
|
+
"packageManager": "yarn@4.11.0",
|
|
84
|
+
"react-native-builder-bob": {
|
|
85
|
+
"source": "src",
|
|
86
|
+
"output": "lib",
|
|
87
|
+
"targets": [
|
|
88
|
+
[
|
|
89
|
+
"module",
|
|
90
|
+
{
|
|
91
|
+
"esm": true
|
|
92
|
+
}
|
|
93
|
+
],
|
|
94
|
+
[
|
|
95
|
+
"typescript",
|
|
96
|
+
{
|
|
97
|
+
"project": "tsconfig.build.json"
|
|
98
|
+
}
|
|
99
|
+
]
|
|
100
|
+
]
|
|
101
|
+
},
|
|
102
|
+
"codegenConfig": {
|
|
103
|
+
"name": "SynchroModuleSpec",
|
|
104
|
+
"type": "modules",
|
|
105
|
+
"jsSrcsDir": "src",
|
|
106
|
+
"android": {
|
|
107
|
+
"javaPackageName": "com.trainstar.synchro.rn"
|
|
108
|
+
},
|
|
109
|
+
"ios": {
|
|
110
|
+
"modulesProvider": {
|
|
111
|
+
"SynchroModule": "SynchroModule"
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
"jest": {
|
|
116
|
+
"preset": "react-native",
|
|
117
|
+
"transform": {
|
|
118
|
+
"^.+\\.tsx?$": [
|
|
119
|
+
"ts-jest",
|
|
120
|
+
{
|
|
121
|
+
"tsconfig": "tsconfig.json"
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
},
|
|
125
|
+
"moduleNameMapper": {
|
|
126
|
+
"^react-native$": "<rootDir>/__tests__/__mocks__/react-native"
|
|
127
|
+
},
|
|
128
|
+
"modulePathIgnorePatterns": [
|
|
129
|
+
"<rootDir>/example/node_modules",
|
|
130
|
+
"<rootDir>/lib/"
|
|
131
|
+
],
|
|
132
|
+
"testPathIgnorePatterns": [
|
|
133
|
+
"<rootDir>/example/e2e",
|
|
134
|
+
"<rootDir>/node_modules",
|
|
135
|
+
"<rootDir>/__tests__/__mocks__"
|
|
136
|
+
]
|
|
137
|
+
},
|
|
138
|
+
"create-react-native-library": {
|
|
139
|
+
"type": "turbo-module",
|
|
140
|
+
"languages": "kotlin-objc",
|
|
141
|
+
"tools": [
|
|
142
|
+
"jest"
|
|
143
|
+
],
|
|
144
|
+
"version": "0.57.2"
|
|
145
|
+
}
|
|
146
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import type { TurboModule } from 'react-native';
|
|
2
|
+
import type { EventEmitter } from 'react-native/Libraries/Types/CodegenTypes';
|
|
3
|
+
import { TurboModuleRegistry } from 'react-native';
|
|
4
|
+
|
|
5
|
+
type StatusEvent = { status: string; retryAt: string | null };
|
|
6
|
+
type ConflictEvent = {
|
|
7
|
+
table: string;
|
|
8
|
+
recordID: string;
|
|
9
|
+
clientDataJson: string | null;
|
|
10
|
+
serverDataJson: string | null;
|
|
11
|
+
};
|
|
12
|
+
type AuthRequestEvent = { requestID: string };
|
|
13
|
+
type SnapshotRequiredEvent = { requestID: string };
|
|
14
|
+
type ChangeEvent = { observerID: string };
|
|
15
|
+
type QueryResultEvent = { observerID: string; rowsJson: string };
|
|
16
|
+
|
|
17
|
+
export interface Spec extends TurboModule {
|
|
18
|
+
// -- Lifecycle --
|
|
19
|
+
initialize(config: {
|
|
20
|
+
dbPath: string;
|
|
21
|
+
serverURL: string;
|
|
22
|
+
clientID: string;
|
|
23
|
+
platform: string;
|
|
24
|
+
appVersion: string;
|
|
25
|
+
syncInterval: number;
|
|
26
|
+
pushDebounce: number;
|
|
27
|
+
maxRetryAttempts: number;
|
|
28
|
+
pullPageSize: number;
|
|
29
|
+
pushBatchSize: number;
|
|
30
|
+
snapshotPageSize: number;
|
|
31
|
+
}): Promise<void>;
|
|
32
|
+
close(): Promise<void>;
|
|
33
|
+
getPath(): Promise<string>;
|
|
34
|
+
|
|
35
|
+
// -- Core SQL --
|
|
36
|
+
query(sql: string, paramsJson: string): Promise<string>;
|
|
37
|
+
queryOne(sql: string, paramsJson: string): Promise<string | null>;
|
|
38
|
+
execute(
|
|
39
|
+
sql: string,
|
|
40
|
+
paramsJson: string
|
|
41
|
+
): Promise<{ rowsAffected: number }>;
|
|
42
|
+
executeBatch(
|
|
43
|
+
statementsJson: string
|
|
44
|
+
): Promise<{ totalRowsAffected: number }>;
|
|
45
|
+
|
|
46
|
+
// -- Transactions --
|
|
47
|
+
beginWriteTransaction(): Promise<string>;
|
|
48
|
+
beginReadTransaction(): Promise<string>;
|
|
49
|
+
txQuery(txID: string, sql: string, paramsJson: string): Promise<string>;
|
|
50
|
+
txQueryOne(
|
|
51
|
+
txID: string,
|
|
52
|
+
sql: string,
|
|
53
|
+
paramsJson: string
|
|
54
|
+
): Promise<string | null>;
|
|
55
|
+
txExecute(
|
|
56
|
+
txID: string,
|
|
57
|
+
sql: string,
|
|
58
|
+
paramsJson: string
|
|
59
|
+
): Promise<{ rowsAffected: number }>;
|
|
60
|
+
commitTransaction(txID: string): Promise<void>;
|
|
61
|
+
rollbackTransaction(txID: string): Promise<void>;
|
|
62
|
+
|
|
63
|
+
// -- Schema --
|
|
64
|
+
createTable(
|
|
65
|
+
name: string,
|
|
66
|
+
columnsJson: string,
|
|
67
|
+
optionsJson: string | null
|
|
68
|
+
): Promise<void>;
|
|
69
|
+
alterTable(name: string, columnsJson: string): Promise<void>;
|
|
70
|
+
createIndex(
|
|
71
|
+
table: string,
|
|
72
|
+
columns: ReadonlyArray<string>,
|
|
73
|
+
unique: boolean
|
|
74
|
+
): Promise<void>;
|
|
75
|
+
|
|
76
|
+
// -- Observation --
|
|
77
|
+
addChangeObserver(
|
|
78
|
+
observerID: string,
|
|
79
|
+
tables: ReadonlyArray<string>
|
|
80
|
+
): Promise<void>;
|
|
81
|
+
addQueryObserver(
|
|
82
|
+
observerID: string,
|
|
83
|
+
sql: string,
|
|
84
|
+
paramsJson: string,
|
|
85
|
+
tables: ReadonlyArray<string>
|
|
86
|
+
): Promise<void>;
|
|
87
|
+
removeObserver(observerID: string): Promise<void>;
|
|
88
|
+
|
|
89
|
+
// -- Sync --
|
|
90
|
+
checkpoint(mode: string): Promise<void>;
|
|
91
|
+
start(): Promise<void>;
|
|
92
|
+
stop(): Promise<void>;
|
|
93
|
+
syncNow(): Promise<void>;
|
|
94
|
+
pendingChangeCount(): Promise<number>;
|
|
95
|
+
|
|
96
|
+
// -- Bidirectional responses --
|
|
97
|
+
resolveAuthRequest(requestID: string, token: string): void;
|
|
98
|
+
rejectAuthRequest(requestID: string, error: string): void;
|
|
99
|
+
resolveSnapshotRequest(requestID: string, approved: boolean): void;
|
|
100
|
+
|
|
101
|
+
// -- Typed events --
|
|
102
|
+
readonly onStatusChange: EventEmitter<StatusEvent>;
|
|
103
|
+
readonly onConflict: EventEmitter<ConflictEvent>;
|
|
104
|
+
readonly onAuthRequest: EventEmitter<AuthRequestEvent>;
|
|
105
|
+
readonly onSnapshotRequired: EventEmitter<SnapshotRequiredEvent>;
|
|
106
|
+
readonly onChange: EventEmitter<ChangeEvent>;
|
|
107
|
+
readonly onQueryResult: EventEmitter<QueryResultEvent>;
|
|
108
|
+
|
|
109
|
+
// -- NativeEventEmitter compatibility --
|
|
110
|
+
addListener(eventName: string): void;
|
|
111
|
+
removeListeners(count: number): void;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export default TurboModuleRegistry.getEnforcing<Spec>('SynchroModule');
|