Skip to content

Commit 52dc8ef

Browse files
authored
Merge pull request #228 from powersync-ja/feat/enable-controller-without-workers
Web: Enable PowerSync extensions even without worker
2 parents 5cd42bb + a7e0b43 commit 52dc8ef

File tree

4 files changed

+37
-23
lines changed

4 files changed

+37
-23
lines changed

packages/powersync_core/lib/src/open_factory/web/web_open_factory.dart

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,29 @@ import 'dart:async';
33
import 'package:powersync_core/src/open_factory/abstract_powersync_open_factory.dart';
44
import 'package:powersync_core/src/uuid.dart';
55
import 'package:sqlite_async/sqlite3_common.dart';
6+
import 'package:sqlite_async/sqlite3_web.dart';
67
import 'package:sqlite_async/sqlite_async.dart';
8+
import 'package:sqlite_async/web.dart';
9+
10+
import '../../web/worker_utils.dart';
711

812
/// Web implementation for [AbstractPowerSyncOpenFactory]
9-
class PowerSyncOpenFactory extends AbstractPowerSyncOpenFactory {
13+
class PowerSyncOpenFactory extends AbstractPowerSyncOpenFactory
14+
implements WebSqliteOpenFactory {
1015
PowerSyncOpenFactory({
1116
required super.path,
1217
super.sqliteOptions,
1318
});
1419

20+
@override
21+
Future<WebSqlite> openWebSqlite(WebSqliteOptions options) async {
22+
return WebSqlite.open(
23+
wasmModule: Uri.parse(sqliteOptions.webSqliteOptions.wasmUri),
24+
worker: Uri.parse(sqliteOptions.webSqliteOptions.workerUri),
25+
controller: PowerSyncAsyncSqliteController(),
26+
);
27+
}
28+
1529
@override
1630
void enableExtension() {
1731
// No op for web

packages/powersync_core/lib/src/web/powersync_db.worker.dart

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,10 @@
44
55
library;
66

7-
import 'dart:js_interop';
8-
9-
import 'package:sqlite_async/sqlite3_web_worker.dart';
107
import 'package:sqlite_async/sqlite3_web.dart';
11-
import 'package:sqlite_async/sqlite3_wasm.dart';
128

139
import 'worker_utils.dart';
1410

1511
void main() {
1612
WebSqlite.workerEntrypoint(controller: PowerSyncAsyncSqliteController());
1713
}
18-
19-
final class PowerSyncAsyncSqliteController extends AsyncSqliteController {
20-
@override
21-
Future<WorkerDatabase> openDatabase(
22-
WasmSqlite3 sqlite3, String path, String vfs) async {
23-
final asyncDb = await super.openDatabase(sqlite3, path, vfs);
24-
setupPowerSyncDatabase(asyncDb.database);
25-
return asyncDb;
26-
}
27-
28-
@override
29-
Future<JSAny?> handleCustomRequest(
30-
ClientConnection connection, JSAny? request) {
31-
throw UnimplementedError();
32-
}
33-
}

packages/powersync_core/lib/src/web/worker_utils.dart

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,27 @@
1-
import 'package:powersync_core/sqlite3_common.dart';
1+
import 'dart:js_interop';
2+
23
import 'package:powersync_core/src/open_factory/common_db_functions.dart';
4+
import 'package:sqlite_async/sqlite3_wasm.dart';
5+
import 'package:sqlite_async/sqlite3_web.dart';
6+
import 'package:sqlite_async/sqlite3_web_worker.dart';
37
import 'package:uuid/uuid.dart';
48

9+
final class PowerSyncAsyncSqliteController extends AsyncSqliteController {
10+
@override
11+
Future<WorkerDatabase> openDatabase(
12+
WasmSqlite3 sqlite3, String path, String vfs) async {
13+
final asyncDb = await super.openDatabase(sqlite3, path, vfs);
14+
setupPowerSyncDatabase(asyncDb.database);
15+
return asyncDb;
16+
}
17+
18+
@override
19+
Future<JSAny?> handleCustomRequest(
20+
ClientConnection connection, JSAny? request) {
21+
throw UnimplementedError();
22+
}
23+
}
24+
525
// Registers custom SQLite functions for the SQLite connection
626
void setupPowerSyncDatabase(CommonDatabase database) {
727
setupCommonDBFunctions(database);

packages/powersync_core/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ environment:
88
sdk: ^3.4.3
99

1010
dependencies:
11-
sqlite_async: ^0.11.0
11+
sqlite_async: ^0.11.1
1212
# We only use sqlite3 as a transitive dependency,
1313
# but right now we need a minimum of v2.4.6.
1414
sqlite3: ^2.4.6

0 commit comments

Comments
 (0)