Skip to content

Commit 05acbae

Browse files
committed
Better typing and assertions for encryptionKey
1 parent e2c4436 commit 05acbae

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

packages/web/src/db/PowerSyncDatabase.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import {
66
AbstractPowerSyncDatabase,
77
DBAdapter,
88
DEFAULT_POWERSYNC_CLOSE_OPTIONS,
9+
isDBAdapter,
10+
isSQLOpenFactory,
911
PowerSyncDatabaseOptions,
1012
PowerSyncDatabaseOptionsWithDBAdapter,
1113
PowerSyncDatabaseOptionsWithOpenFactory,
@@ -82,9 +84,7 @@ export type WebPowerSyncDatabaseOptionsWithSettings = WithWebSyncOptions<
8284
WithWebFlags<WithWebEncryptionOptions<PowerSyncDatabaseOptionsWithSettings>>
8385
>;
8486

85-
export type WebPowerSyncDatabaseOptions = WithWebSyncOptions<
86-
WithWebFlags<WithWebEncryptionOptions<PowerSyncDatabaseOptions>>
87-
>;
87+
export type WebPowerSyncDatabaseOptions = WithWebSyncOptions<WithWebFlags<PowerSyncDatabaseOptions>>;
8888

8989
export const DEFAULT_POWERSYNC_FLAGS: Required<WebPowerSyncFlags> = {
9090
...DEFAULT_WEB_SQL_FLAGS,
@@ -99,6 +99,20 @@ export const resolveWebPowerSyncFlags = (flags?: WebPowerSyncFlags): Required<We
9999
};
100100
};
101101

102+
/**
103+
* Asserts that the database options are valid for custom database constructors.
104+
*/
105+
function assertValidDatabaseOptions(options: WebPowerSyncDatabaseOptions): void {
106+
if ('database' in options && 'encryptionKey' in options) {
107+
const { database } = options;
108+
if (isSQLOpenFactory(database) || isDBAdapter(database)) {
109+
throw new Error(
110+
`Invalid configuration: 'encryptionKey' should only be included inside the database object when using a custom ${isSQLOpenFactory(database) ? 'WASQLiteOpenFactory' : 'WASQLiteDBAdapter'} constructor.`
111+
);
112+
}
113+
}
114+
}
115+
102116
/**
103117
* A PowerSync database which provides SQLite functionality
104118
* which is automatically synced.
@@ -126,6 +140,8 @@ export class PowerSyncDatabase extends AbstractPowerSyncDatabase {
126140
constructor(protected options: WebPowerSyncDatabaseOptions) {
127141
super(options);
128142

143+
assertValidDatabaseOptions(options);
144+
129145
this.resolvedFlags = resolveWebPowerSyncFlags(options.flags);
130146

131147
if (this.resolvedFlags.enableMultiTabs && !this.resolvedFlags.externallyUnload) {

0 commit comments

Comments
 (0)