@powersync/react-native 0.0.0-dev-20260525085311 → 0.0.0-dev-20260630141119
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/README.md +72 -6
- package/android/build.gradle +90 -0
- package/android/gradle.properties +4 -0
- package/android/src/main/AndroidManifest.xml +3 -0
- package/android/src/main/AndroidManifestNew.xml +2 -0
- package/android/src/main/java/com/powersync/opsqlite/PowerSyncOpSqlitePackage.kt +46 -0
- package/ios/PowerSyncOpSqlite.h +5 -0
- package/ios/PowerSyncOpSqlite.mm +6 -0
- package/lib/db/PowerSyncDatabase.d.ts +9 -10
- package/lib/db/PowerSyncDatabase.js +33 -25
- package/lib/db/PowerSyncDatabase.js.map +1 -1
- package/lib/db/adapters/op-sqlite/OPSQLiteConnection.d.ts +25 -0
- package/lib/db/adapters/op-sqlite/OPSQLiteConnection.js +63 -0
- package/lib/db/adapters/op-sqlite/OPSQLiteConnection.js.map +1 -0
- package/lib/db/adapters/op-sqlite/OPSqliteAdapter.d.ts +32 -0
- package/lib/db/adapters/op-sqlite/OPSqliteAdapter.js +203 -0
- package/lib/db/adapters/op-sqlite/OPSqliteAdapter.js.map +1 -0
- package/lib/db/adapters/op-sqlite/OPSqliteDBOpenFactory.d.ts +11 -0
- package/lib/db/adapters/op-sqlite/OPSqliteDBOpenFactory.js +21 -0
- package/lib/db/adapters/op-sqlite/OPSqliteDBOpenFactory.js.map +1 -0
- package/lib/db/adapters/op-sqlite/SqliteOptions.d.ts +68 -0
- package/lib/db/adapters/op-sqlite/SqliteOptions.js +37 -0
- package/lib/db/adapters/op-sqlite/SqliteOptions.js.map +1 -0
- package/lib/index.d.ts +1 -3
- package/lib/index.js +0 -3
- package/lib/index.js.map +1 -1
- package/lib/sync/bucket/ReactNativeBucketStorageAdapter.d.ts +1 -1
- package/lib/sync/bucket/ReactNativeBucketStorageAdapter.js +1 -1
- package/lib/sync/bucket/ReactNativeBucketStorageAdapter.js.map +1 -1
- package/lib/sync/stream/ReactNativeRemote.d.ts +11 -11
- package/lib/sync/stream/ReactNativeRemote.js +42 -66
- package/lib/sync/stream/ReactNativeRemote.js.map +1 -1
- package/lib/sync/stream/ReactNativeStreamingSyncImplementation.d.ts +2 -1
- package/lib/sync/stream/ReactNativeStreamingSyncImplementation.js +2 -1
- package/lib/sync/stream/ReactNativeStreamingSyncImplementation.js.map +1 -1
- package/lib/sync/stream/fetch.d.ts +13 -0
- package/lib/sync/stream/fetch.js +31 -0
- package/lib/sync/stream/fetch.js.map +1 -0
- package/package.json +20 -33
- package/powersync-react-native.podspec +32 -0
- package/src/db/PowerSyncDatabase.ts +58 -31
- package/src/db/adapters/op-sqlite/OPSQLiteConnection.ts +95 -0
- package/src/db/adapters/op-sqlite/OPSqliteAdapter.ts +245 -0
- package/src/db/adapters/op-sqlite/OPSqliteDBOpenFactory.ts +25 -0
- package/src/db/adapters/op-sqlite/SqliteOptions.ts +93 -0
- package/src/index.ts +1 -3
- package/src/sync/bucket/ReactNativeBucketStorageAdapter.ts +1 -1
- package/src/sync/stream/ReactNativeRemote.ts +49 -86
- package/src/sync/stream/ReactNativeStreamingSyncImplementation.ts +4 -4
- package/src/sync/stream/fetch.ts +45 -0
- package/dist/index.js +0 -8741
- package/dist/index.js.map +0 -1
- package/lib/db/adapters/react-native-quick-sqlite/RNQSDBAdapter.d.ts +0 -55
- package/lib/db/adapters/react-native-quick-sqlite/RNQSDBAdapter.js +0 -66
- package/lib/db/adapters/react-native-quick-sqlite/RNQSDBAdapter.js.map +0 -1
- package/lib/db/adapters/react-native-quick-sqlite/RNQSDBOpenFactory.d.ts +0 -19
- package/lib/db/adapters/react-native-quick-sqlite/RNQSDBOpenFactory.js +0 -34
- package/lib/db/adapters/react-native-quick-sqlite/RNQSDBOpenFactory.js.map +0 -1
- package/lib/db/adapters/react-native-quick-sqlite/ReactNativeQuickSQLiteOpenFactory.d.ts +0 -9
- package/lib/db/adapters/react-native-quick-sqlite/ReactNativeQuickSQLiteOpenFactory.js +0 -45
- package/lib/db/adapters/react-native-quick-sqlite/ReactNativeQuickSQLiteOpenFactory.js.map +0 -1
- package/src/db/adapters/react-native-quick-sqlite/RNQSDBAdapter.ts +0 -85
- package/src/db/adapters/react-native-quick-sqlite/RNQSDBOpenFactory.ts +0 -44
- package/src/db/adapters/react-native-quick-sqlite/ReactNativeQuickSQLiteOpenFactory.ts +0 -43
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import { BaseObserver, DBAdapter, DBAdapterListener, LockContext as PowerSyncLockContext, DBLockOptions, ConnectionPool, LockContext, Transaction } from '@powersync/common';
|
|
2
|
-
import type { QuickSQLiteConnection, LockContext as RNQSLockContext } from '@journeyapps/react-native-quick-sqlite';
|
|
3
|
-
import { QueryResult, SqlExecutor } from '@powersync/common/dist/index.cjs';
|
|
4
|
-
declare class RNQSConnectionPool extends BaseObserver<DBAdapterListener> implements ConnectionPool {
|
|
5
|
-
protected baseDB: QuickSQLiteConnection;
|
|
6
|
-
name: string;
|
|
7
|
-
constructor(baseDB: QuickSQLiteConnection, name: string);
|
|
8
|
-
close(): void;
|
|
9
|
-
readLock<T>(fn: (tx: PowerSyncLockContext) => Promise<T>, options?: DBLockOptions): Promise<T>;
|
|
10
|
-
writeLock<T>(fn: (tx: PowerSyncLockContext) => Promise<T>, options?: DBLockOptions): Promise<T>;
|
|
11
|
-
generateContext<T extends RNQSLockContext>(ctx: T): QuickSqliteContext;
|
|
12
|
-
refreshSchema(): Promise<void>;
|
|
13
|
-
}
|
|
14
|
-
declare class QuickSqliteExecutor implements Omit<SqlExecutor, 'executeBatch'> {
|
|
15
|
-
readonly context: RNQSLockContext;
|
|
16
|
-
constructor(context: RNQSLockContext);
|
|
17
|
-
execute(query: string, params?: any[]): Promise<import("@journeyapps/react-native-quick-sqlite").QueryResult>;
|
|
18
|
-
/**
|
|
19
|
-
* 'executeRaw' is not implemented in RNQS, this falls back to 'execute'.
|
|
20
|
-
*/
|
|
21
|
-
executeRaw(query: string, params?: any[]): Promise<any[][]>;
|
|
22
|
-
}
|
|
23
|
-
declare const QuickSqliteContext_base: (new (...args: any[]) => {
|
|
24
|
-
getAll<T>(sql: string, parameters?: any[]): Promise<T[]>;
|
|
25
|
-
getOptional<T>(sql: string, parameters?: any[]): Promise<T | null>;
|
|
26
|
-
get<T>(sql: string, parameters?: any[]): Promise<T>;
|
|
27
|
-
executeBatch(query: string, params?: any[][]): Promise<import("@powersync/common").QueryResult>;
|
|
28
|
-
execute: (query: string, params?: any[] | undefined) => Promise<import("@powersync/common").QueryResult>;
|
|
29
|
-
executeRaw: (query: string, params?: any[] | undefined) => Promise<any[][]>;
|
|
30
|
-
}) & typeof QuickSqliteExecutor;
|
|
31
|
-
declare class QuickSqliteContext extends QuickSqliteContext_base implements LockContext {
|
|
32
|
-
}
|
|
33
|
-
declare const RNQSDBAdapter_base: (new (...args: any[]) => {
|
|
34
|
-
readTransaction<T>(fn: (tx: Transaction) => Promise<T>, options?: DBLockOptions): Promise<T>;
|
|
35
|
-
writeTransaction<T>(fn: (tx: Transaction) => Promise<T>, options?: DBLockOptions): Promise<T>;
|
|
36
|
-
getAll<T>(sql: string, parameters?: any[]): Promise<T[]>;
|
|
37
|
-
getOptional<T>(sql: string, parameters?: any[]): Promise<T | null>;
|
|
38
|
-
get<T>(sql: string, parameters?: any[]): Promise<T>;
|
|
39
|
-
execute(query: string, params?: any[]): Promise<import("@powersync/common").QueryResult>;
|
|
40
|
-
executeRaw(query: string, params?: any[]): Promise<any[][]>;
|
|
41
|
-
executeBatch(query: string, params?: any[][]): Promise<import("@powersync/common").QueryResult>;
|
|
42
|
-
name: string;
|
|
43
|
-
close: () => void | Promise<void>;
|
|
44
|
-
readLock: <T>(fn: (tx: LockContext) => Promise<T>, options?: DBLockOptions) => Promise<T>;
|
|
45
|
-
writeLock: <T>(fn: (tx: LockContext) => Promise<T>, options?: DBLockOptions) => Promise<T>;
|
|
46
|
-
refreshSchema: () => Promise<void>;
|
|
47
|
-
registerListener(listener: Partial<DBAdapterListener>): () => void;
|
|
48
|
-
}) & typeof RNQSConnectionPool;
|
|
49
|
-
/**
|
|
50
|
-
* Adapter for React Native Quick SQLite
|
|
51
|
-
*/
|
|
52
|
-
export declare class RNQSDBAdapter extends RNQSDBAdapter_base implements DBAdapter {
|
|
53
|
-
executeBatch(query: string, params?: any[][]): Promise<QueryResult>;
|
|
54
|
-
}
|
|
55
|
-
export {};
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { BaseObserver, DBGetUtilsDefaultMixin, DBAdapterDefaultMixin } from '@powersync/common';
|
|
2
|
-
class RNQSConnectionPool extends BaseObserver {
|
|
3
|
-
baseDB;
|
|
4
|
-
name;
|
|
5
|
-
constructor(baseDB, name) {
|
|
6
|
-
super();
|
|
7
|
-
this.baseDB = baseDB;
|
|
8
|
-
this.name = name;
|
|
9
|
-
// link table update commands
|
|
10
|
-
baseDB.registerTablesChangedHook((update) => {
|
|
11
|
-
this.iterateListeners((cb) => cb.tablesUpdated?.(update));
|
|
12
|
-
});
|
|
13
|
-
}
|
|
14
|
-
close() {
|
|
15
|
-
return this.baseDB.close();
|
|
16
|
-
}
|
|
17
|
-
readLock(fn, options) {
|
|
18
|
-
return this.baseDB.readLock((dbTx) => fn(this.generateContext(dbTx)), options);
|
|
19
|
-
}
|
|
20
|
-
writeLock(fn, options) {
|
|
21
|
-
return this.baseDB.writeLock((dbTx) => fn(this.generateContext(dbTx)), options);
|
|
22
|
-
}
|
|
23
|
-
generateContext(ctx) {
|
|
24
|
-
return new QuickSqliteContext(ctx);
|
|
25
|
-
}
|
|
26
|
-
async refreshSchema() {
|
|
27
|
-
await this.baseDB.refreshSchema();
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
class QuickSqliteExecutor {
|
|
31
|
-
context;
|
|
32
|
-
constructor(context) {
|
|
33
|
-
this.context = context;
|
|
34
|
-
}
|
|
35
|
-
execute(query, params) {
|
|
36
|
-
return this.context.execute(query, params);
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* 'executeRaw' is not implemented in RNQS, this falls back to 'execute'.
|
|
40
|
-
*/
|
|
41
|
-
async executeRaw(query, params) {
|
|
42
|
-
const result = await this.context.execute(query, params);
|
|
43
|
-
const rows = result.rows?._array ?? [];
|
|
44
|
-
return rows.map((row) => Object.values(row));
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
class QuickSqliteContext extends DBGetUtilsDefaultMixin(QuickSqliteExecutor) {
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Adapter for React Native Quick SQLite
|
|
51
|
-
*/
|
|
52
|
-
export class RNQSDBAdapter extends DBAdapterDefaultMixin(RNQSConnectionPool) {
|
|
53
|
-
// We don't want the default implementation here, RNQS does not support executeBatch for lock contexts so that would
|
|
54
|
-
// be less efficient.
|
|
55
|
-
async executeBatch(query, params = []) {
|
|
56
|
-
const commands = [];
|
|
57
|
-
for (let i = 0; i < params.length; i++) {
|
|
58
|
-
commands.push([query, params[i]]);
|
|
59
|
-
}
|
|
60
|
-
const result = await this.baseDB.executeBatch(commands);
|
|
61
|
-
return {
|
|
62
|
-
rowsAffected: result.rowsAffected ? result.rowsAffected : 0
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
//# sourceMappingURL=RNQSDBAdapter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RNQSDBAdapter.js","sourceRoot":"","sources":["../../../../src/db/adapters/react-native-quick-sqlite/RNQSDBAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { AbstractPowerSyncDatabase, AbstractPowerSyncDatabaseOpenFactory, DBAdapter, PowerSyncDatabaseOptions, PowerSyncOpenFactoryOptions, SQLOpenFactory } from '@powersync/common';
|
|
2
|
-
/**
|
|
3
|
-
* @deprecated {@link PowerSyncDatabase} can now be constructed directly
|
|
4
|
-
* @example
|
|
5
|
-
* ```typescript
|
|
6
|
-
* const powersync = new PowerSyncDatabase({
|
|
7
|
-
* database: {
|
|
8
|
-
* dbFileName: 'powersync.db'
|
|
9
|
-
* }
|
|
10
|
-
* });
|
|
11
|
-
* ```
|
|
12
|
-
*/
|
|
13
|
-
export declare class RNQSPowerSyncDatabaseOpenFactory extends AbstractPowerSyncDatabaseOpenFactory {
|
|
14
|
-
protected instanceGenerated: boolean;
|
|
15
|
-
protected sqlOpenFactory: SQLOpenFactory;
|
|
16
|
-
constructor(options: PowerSyncOpenFactoryOptions);
|
|
17
|
-
protected openDB(): DBAdapter;
|
|
18
|
-
generateInstance(options: PowerSyncDatabaseOptions): AbstractPowerSyncDatabase;
|
|
19
|
-
}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import { AbstractPowerSyncDatabaseOpenFactory } from '@powersync/common';
|
|
2
|
-
import { PowerSyncDatabase } from '../../../db/PowerSyncDatabase';
|
|
3
|
-
import { ReactNativeQuickSqliteOpenFactory } from './ReactNativeQuickSQLiteOpenFactory';
|
|
4
|
-
/**
|
|
5
|
-
* @deprecated {@link PowerSyncDatabase} can now be constructed directly
|
|
6
|
-
* @example
|
|
7
|
-
* ```typescript
|
|
8
|
-
* const powersync = new PowerSyncDatabase({
|
|
9
|
-
* database: {
|
|
10
|
-
* dbFileName: 'powersync.db'
|
|
11
|
-
* }
|
|
12
|
-
* });
|
|
13
|
-
* ```
|
|
14
|
-
*/
|
|
15
|
-
export class RNQSPowerSyncDatabaseOpenFactory extends AbstractPowerSyncDatabaseOpenFactory {
|
|
16
|
-
instanceGenerated;
|
|
17
|
-
sqlOpenFactory;
|
|
18
|
-
constructor(options) {
|
|
19
|
-
super(options);
|
|
20
|
-
this.instanceGenerated = false;
|
|
21
|
-
this.sqlOpenFactory = new ReactNativeQuickSqliteOpenFactory(options);
|
|
22
|
-
}
|
|
23
|
-
openDB() {
|
|
24
|
-
return this.sqlOpenFactory.openDB();
|
|
25
|
-
}
|
|
26
|
-
generateInstance(options) {
|
|
27
|
-
if (this.instanceGenerated) {
|
|
28
|
-
this.options.logger?.warn('Generating multiple PowerSync instances can sometimes cause unexpected results.');
|
|
29
|
-
}
|
|
30
|
-
this.instanceGenerated = true;
|
|
31
|
-
return new PowerSyncDatabase(options);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=RNQSDBOpenFactory.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RNQSDBOpenFactory.js","sourceRoot":"","sources":["../../../../src/db/adapters/react-native-quick-sqlite/RNQSDBOpenFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,oCAAoC,EAKrC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAC;AAExF;;;;;;;;;;GAUG;AACH,MAAM,OAAO,gCAAiC,SAAQ,oCAAoC;IAC9E,iBAAiB,CAAU;IAC3B,cAAc,CAAiB;IAEzC,YAAY,OAAoC;QAC9C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,cAAc,GAAG,IAAI,iCAAiC,CAAC,OAAO,CAAC,CAAC;IACvE,CAAC;IAES,MAAM;QACd,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;IACtC,CAAC;IAED,gBAAgB,CAAC,OAAiC;QAChD,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,iFAAiF,CAAC,CAAC;QAC/G,CAAC;QACD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,OAAO,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;CACF"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { DBAdapter, SQLOpenFactory, SQLOpenOptions } from '@powersync/common';
|
|
2
|
-
/**
|
|
3
|
-
* Opens a SQLite connection using React Native Quick SQLite
|
|
4
|
-
*/
|
|
5
|
-
export declare class ReactNativeQuickSqliteOpenFactory implements SQLOpenFactory {
|
|
6
|
-
protected options: SQLOpenOptions;
|
|
7
|
-
constructor(options: SQLOpenOptions);
|
|
8
|
-
openDB(): DBAdapter;
|
|
9
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { RNQSDBAdapter } from './RNQSDBAdapter';
|
|
2
|
-
/**
|
|
3
|
-
* Opens a SQLite connection using React Native Quick SQLite
|
|
4
|
-
*/
|
|
5
|
-
export class ReactNativeQuickSqliteOpenFactory {
|
|
6
|
-
options;
|
|
7
|
-
constructor(options) {
|
|
8
|
-
this.options = options;
|
|
9
|
-
}
|
|
10
|
-
openDB() {
|
|
11
|
-
/**
|
|
12
|
-
* React Native Quick SQLite opens files relative to the `Documents`dir on iOS and the `Files`
|
|
13
|
-
* dir on Android. Locations need to be relative to those dirs using with dot ("../") notation
|
|
14
|
-
* to navigate up the directory tree.
|
|
15
|
-
* This simple adapter assumes any platform specific relative directory is already catered for
|
|
16
|
-
* in the options (if provided)
|
|
17
|
-
* https://github.com/margelo/react-native-quick-sqlite/blob/main/README.md#loading-existing-dbs
|
|
18
|
-
*/
|
|
19
|
-
try {
|
|
20
|
-
var rnqs = require('@journeyapps/react-native-quick-sqlite');
|
|
21
|
-
}
|
|
22
|
-
catch (e) {
|
|
23
|
-
throw new Error(`Could not resolve @journeyapps/react-native-quick-sqlite.
|
|
24
|
-
To open databases with React Native Quick SQLite please install @journeyapps/react-native-quick-sqlite.`);
|
|
25
|
-
}
|
|
26
|
-
const { dbFilename } = this.options;
|
|
27
|
-
const openOptions = { location: this.options.dbLocation };
|
|
28
|
-
let DB;
|
|
29
|
-
try {
|
|
30
|
-
// Hot reloads can sometimes clear global JS state, but not close DB on native side
|
|
31
|
-
DB = rnqs.open(dbFilename, openOptions);
|
|
32
|
-
}
|
|
33
|
-
catch (ex) {
|
|
34
|
-
if (ex.message.includes('already open')) {
|
|
35
|
-
rnqs.QuickSQLite.close(dbFilename);
|
|
36
|
-
DB = rnqs.open(dbFilename, openOptions);
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
throw ex;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return new RNQSDBAdapter(DB, this.options.dbFilename);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=ReactNativeQuickSQLiteOpenFactory.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ReactNativeQuickSQLiteOpenFactory.js","sourceRoot":"","sources":["../../../../src/db/adapters/react-native-quick-sqlite/ReactNativeQuickSQLiteOpenFactory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD;;GAEG;AACH,MAAM,OAAO,iCAAiC;IACtB;IAAtB,YAAsB,OAAuB;QAAvB,YAAO,GAAP,OAAO,CAAgB;IAAG,CAAC;IAEjD,MAAM;QACJ;;;;;;;WAOG;QAEH,IAAI,CAAC;YACH,IAAI,IAAI,GAAG,OAAO,CAAC,wCAAwC,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC;wGACkF,CAAC,CAAC;QACtG,CAAC;QACD,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACpC,MAAM,WAAW,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAC1D,IAAI,EAAE,CAAC;QACP,IAAI,CAAC;YACH,mFAAmF;YACnF,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACZ,IAAI,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBACxC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBACnC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YAC1C,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,CAAC;YACX,CAAC;QACH,CAAC;QAED,OAAO,IAAI,aAAa,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACxD,CAAC;CACF"}
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
BaseObserver,
|
|
3
|
-
DBAdapter,
|
|
4
|
-
DBAdapterListener,
|
|
5
|
-
LockContext as PowerSyncLockContext,
|
|
6
|
-
DBLockOptions,
|
|
7
|
-
ConnectionPool,
|
|
8
|
-
DBGetUtilsDefaultMixin,
|
|
9
|
-
LockContext,
|
|
10
|
-
DBAdapterDefaultMixin,
|
|
11
|
-
Transaction
|
|
12
|
-
} from '@powersync/common';
|
|
13
|
-
import type { QuickSQLiteConnection, LockContext as RNQSLockContext } from '@journeyapps/react-native-quick-sqlite';
|
|
14
|
-
import { QueryResult, SqlExecutor } from '@powersync/common/dist/index.cjs';
|
|
15
|
-
|
|
16
|
-
class RNQSConnectionPool extends BaseObserver<DBAdapterListener> implements ConnectionPool {
|
|
17
|
-
constructor(
|
|
18
|
-
protected baseDB: QuickSQLiteConnection,
|
|
19
|
-
public name: string
|
|
20
|
-
) {
|
|
21
|
-
super();
|
|
22
|
-
// link table update commands
|
|
23
|
-
baseDB.registerTablesChangedHook((update) => {
|
|
24
|
-
this.iterateListeners((cb) => cb.tablesUpdated?.(update));
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
close() {
|
|
29
|
-
return this.baseDB.close();
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
readLock<T>(fn: (tx: PowerSyncLockContext) => Promise<T>, options?: DBLockOptions): Promise<T> {
|
|
33
|
-
return this.baseDB.readLock((dbTx) => fn(this.generateContext(dbTx)), options);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
writeLock<T>(fn: (tx: PowerSyncLockContext) => Promise<T>, options?: DBLockOptions): Promise<T> {
|
|
37
|
-
return this.baseDB.writeLock((dbTx) => fn(this.generateContext(dbTx)), options);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
generateContext<T extends RNQSLockContext>(ctx: T) {
|
|
41
|
-
return new QuickSqliteContext(ctx);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
async refreshSchema() {
|
|
45
|
-
await this.baseDB.refreshSchema();
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
class QuickSqliteExecutor implements Omit<SqlExecutor, 'executeBatch'> {
|
|
50
|
-
constructor(readonly context: RNQSLockContext) {}
|
|
51
|
-
|
|
52
|
-
execute(query: string, params?: any[]) {
|
|
53
|
-
return this.context.execute(query, params);
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* 'executeRaw' is not implemented in RNQS, this falls back to 'execute'.
|
|
57
|
-
*/
|
|
58
|
-
async executeRaw(query: string, params?: any[]): Promise<any[][]> {
|
|
59
|
-
const result = await this.context.execute(query, params);
|
|
60
|
-
const rows = result.rows?._array ?? [];
|
|
61
|
-
return rows.map((row) => Object.values(row));
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
class QuickSqliteContext extends DBGetUtilsDefaultMixin(QuickSqliteExecutor) implements LockContext {}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Adapter for React Native Quick SQLite
|
|
69
|
-
*/
|
|
70
|
-
export class RNQSDBAdapter extends DBAdapterDefaultMixin(RNQSConnectionPool) implements DBAdapter {
|
|
71
|
-
// We don't want the default implementation here, RNQS does not support executeBatch for lock contexts so that would
|
|
72
|
-
// be less efficient.
|
|
73
|
-
async executeBatch(query: string, params: any[][] = []): Promise<QueryResult> {
|
|
74
|
-
const commands: any[] = [];
|
|
75
|
-
|
|
76
|
-
for (let i = 0; i < params.length; i++) {
|
|
77
|
-
commands.push([query, params[i]]);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const result = await this.baseDB.executeBatch(commands);
|
|
81
|
-
return {
|
|
82
|
-
rowsAffected: result.rowsAffected ? result.rowsAffected : 0
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
AbstractPowerSyncDatabase,
|
|
3
|
-
AbstractPowerSyncDatabaseOpenFactory,
|
|
4
|
-
DBAdapter,
|
|
5
|
-
PowerSyncDatabaseOptions,
|
|
6
|
-
PowerSyncOpenFactoryOptions,
|
|
7
|
-
SQLOpenFactory
|
|
8
|
-
} from '@powersync/common';
|
|
9
|
-
import { PowerSyncDatabase } from '../../../db/PowerSyncDatabase';
|
|
10
|
-
import { ReactNativeQuickSqliteOpenFactory } from './ReactNativeQuickSQLiteOpenFactory';
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* @deprecated {@link PowerSyncDatabase} can now be constructed directly
|
|
14
|
-
* @example
|
|
15
|
-
* ```typescript
|
|
16
|
-
* const powersync = new PowerSyncDatabase({
|
|
17
|
-
* database: {
|
|
18
|
-
* dbFileName: 'powersync.db'
|
|
19
|
-
* }
|
|
20
|
-
* });
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
export class RNQSPowerSyncDatabaseOpenFactory extends AbstractPowerSyncDatabaseOpenFactory {
|
|
24
|
-
protected instanceGenerated: boolean;
|
|
25
|
-
protected sqlOpenFactory: SQLOpenFactory;
|
|
26
|
-
|
|
27
|
-
constructor(options: PowerSyncOpenFactoryOptions) {
|
|
28
|
-
super(options);
|
|
29
|
-
this.instanceGenerated = false;
|
|
30
|
-
this.sqlOpenFactory = new ReactNativeQuickSqliteOpenFactory(options);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
protected openDB(): DBAdapter {
|
|
34
|
-
return this.sqlOpenFactory.openDB();
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
generateInstance(options: PowerSyncDatabaseOptions): AbstractPowerSyncDatabase {
|
|
38
|
-
if (this.instanceGenerated) {
|
|
39
|
-
this.options.logger?.warn('Generating multiple PowerSync instances can sometimes cause unexpected results.');
|
|
40
|
-
}
|
|
41
|
-
this.instanceGenerated = true;
|
|
42
|
-
return new PowerSyncDatabase(options);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import { DBAdapter, SQLOpenFactory, SQLOpenOptions } from '@powersync/common';
|
|
2
|
-
import { RNQSDBAdapter } from './RNQSDBAdapter';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Opens a SQLite connection using React Native Quick SQLite
|
|
6
|
-
*/
|
|
7
|
-
export class ReactNativeQuickSqliteOpenFactory implements SQLOpenFactory {
|
|
8
|
-
constructor(protected options: SQLOpenOptions) {}
|
|
9
|
-
|
|
10
|
-
openDB(): DBAdapter {
|
|
11
|
-
/**
|
|
12
|
-
* React Native Quick SQLite opens files relative to the `Documents`dir on iOS and the `Files`
|
|
13
|
-
* dir on Android. Locations need to be relative to those dirs using with dot ("../") notation
|
|
14
|
-
* to navigate up the directory tree.
|
|
15
|
-
* This simple adapter assumes any platform specific relative directory is already catered for
|
|
16
|
-
* in the options (if provided)
|
|
17
|
-
* https://github.com/margelo/react-native-quick-sqlite/blob/main/README.md#loading-existing-dbs
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
try {
|
|
21
|
-
var rnqs = require('@journeyapps/react-native-quick-sqlite');
|
|
22
|
-
} catch (e) {
|
|
23
|
-
throw new Error(`Could not resolve @journeyapps/react-native-quick-sqlite.
|
|
24
|
-
To open databases with React Native Quick SQLite please install @journeyapps/react-native-quick-sqlite.`);
|
|
25
|
-
}
|
|
26
|
-
const { dbFilename } = this.options;
|
|
27
|
-
const openOptions = { location: this.options.dbLocation };
|
|
28
|
-
let DB;
|
|
29
|
-
try {
|
|
30
|
-
// Hot reloads can sometimes clear global JS state, but not close DB on native side
|
|
31
|
-
DB = rnqs.open(dbFilename, openOptions);
|
|
32
|
-
} catch (ex) {
|
|
33
|
-
if (ex.message.includes('already open')) {
|
|
34
|
-
rnqs.QuickSQLite.close(dbFilename);
|
|
35
|
-
DB = rnqs.open(dbFilename, openOptions);
|
|
36
|
-
} else {
|
|
37
|
-
throw ex;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
return new RNQSDBAdapter(DB, this.options.dbFilename);
|
|
42
|
-
}
|
|
43
|
-
}
|