From 81ba32905b00242f68d3a1ea0a0808b2cac6b0e7 Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Thu, 16 Jan 2025 13:42:21 +0100 Subject: [PATCH 1/2] Web: Enable PowerSync extensions even without worker --- .../open_factory/web/web_open_factory.dart | 16 +++++++++++++- .../lib/src/web/powersync_db.worker.dart | 20 ----------------- .../lib/src/web/worker_utils.dart | 22 ++++++++++++++++++- 3 files changed, 36 insertions(+), 22 deletions(-) diff --git a/packages/powersync_core/lib/src/open_factory/web/web_open_factory.dart b/packages/powersync_core/lib/src/open_factory/web/web_open_factory.dart index bf4cf979..a6dfae51 100644 --- a/packages/powersync_core/lib/src/open_factory/web/web_open_factory.dart +++ b/packages/powersync_core/lib/src/open_factory/web/web_open_factory.dart @@ -3,15 +3,29 @@ import 'dart:async'; import 'package:powersync_core/src/open_factory/abstract_powersync_open_factory.dart'; import 'package:powersync_core/src/uuid.dart'; import 'package:sqlite_async/sqlite3_common.dart'; +import 'package:sqlite_async/sqlite3_web.dart'; import 'package:sqlite_async/sqlite_async.dart'; +import 'package:sqlite_async/web.dart'; + +import '../../web/worker_utils.dart'; /// Web implementation for [AbstractPowerSyncOpenFactory] -class PowerSyncOpenFactory extends AbstractPowerSyncOpenFactory { +class PowerSyncOpenFactory extends AbstractPowerSyncOpenFactory + implements WebSqliteOpenFactory { PowerSyncOpenFactory({ required super.path, super.sqliteOptions, }); + @override + Future openWebSqlite(WebSqliteOptions options) async { + return WebSqlite.open( + wasmModule: Uri.parse(sqliteOptions.webSqliteOptions.wasmUri), + worker: Uri.parse(sqliteOptions.webSqliteOptions.workerUri), + controller: PowerSyncAsyncSqliteController(), + ); + } + @override void enableExtension() { // No op for web diff --git a/packages/powersync_core/lib/src/web/powersync_db.worker.dart b/packages/powersync_core/lib/src/web/powersync_db.worker.dart index 8ce44f4b..4ae79365 100644 --- a/packages/powersync_core/lib/src/web/powersync_db.worker.dart +++ b/packages/powersync_core/lib/src/web/powersync_db.worker.dart @@ -4,30 +4,10 @@ library; -import 'dart:js_interop'; - -import 'package:sqlite_async/sqlite3_web_worker.dart'; import 'package:sqlite_async/sqlite3_web.dart'; -import 'package:sqlite_async/sqlite3_wasm.dart'; import 'worker_utils.dart'; void main() { WebSqlite.workerEntrypoint(controller: PowerSyncAsyncSqliteController()); } - -final class PowerSyncAsyncSqliteController extends AsyncSqliteController { - @override - Future openDatabase( - WasmSqlite3 sqlite3, String path, String vfs) async { - final asyncDb = await super.openDatabase(sqlite3, path, vfs); - setupPowerSyncDatabase(asyncDb.database); - return asyncDb; - } - - @override - Future handleCustomRequest( - ClientConnection connection, JSAny? request) { - throw UnimplementedError(); - } -} diff --git a/packages/powersync_core/lib/src/web/worker_utils.dart b/packages/powersync_core/lib/src/web/worker_utils.dart index da14808d..f2a5ac9a 100644 --- a/packages/powersync_core/lib/src/web/worker_utils.dart +++ b/packages/powersync_core/lib/src/web/worker_utils.dart @@ -1,7 +1,27 @@ -import 'package:powersync_core/sqlite3_common.dart'; +import 'dart:js_interop'; + import 'package:powersync_core/src/open_factory/common_db_functions.dart'; +import 'package:sqlite_async/sqlite3_wasm.dart'; +import 'package:sqlite_async/sqlite3_web.dart'; +import 'package:sqlite_async/sqlite3_web_worker.dart'; import 'package:uuid/uuid.dart'; +final class PowerSyncAsyncSqliteController extends AsyncSqliteController { + @override + Future openDatabase( + WasmSqlite3 sqlite3, String path, String vfs) async { + final asyncDb = await super.openDatabase(sqlite3, path, vfs); + setupPowerSyncDatabase(asyncDb.database); + return asyncDb; + } + + @override + Future handleCustomRequest( + ClientConnection connection, JSAny? request) { + throw UnimplementedError(); + } +} + // Registers custom SQLite functions for the SQLite connection void setupPowerSyncDatabase(CommonDatabase database) { setupCommonDBFunctions(database); From a7e0b439ecc1dafd20c891d57f8d7a1265d71108 Mon Sep 17 00:00:00 2001 From: Simon Binder Date: Thu, 23 Jan 2025 10:20:37 +0100 Subject: [PATCH 2/2] Use released dependency --- packages/powersync_core/pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/powersync_core/pubspec.yaml b/packages/powersync_core/pubspec.yaml index 336e6e0e..dfbe78c2 100644 --- a/packages/powersync_core/pubspec.yaml +++ b/packages/powersync_core/pubspec.yaml @@ -8,7 +8,7 @@ environment: sdk: ^3.4.3 dependencies: - sqlite_async: ^0.11.0 + sqlite_async: ^0.11.1 # We only use sqlite3 as a transitive dependency, # but right now we need a minimum of v2.4.6. sqlite3: ^2.4.6