Skip to content

Commit

Permalink
Merge pull request #228 from powersync-ja/feat/enable-controller-with…
Browse files Browse the repository at this point in the history
…out-workers

Web: Enable PowerSync extensions even without worker
  • Loading branch information
simolus3 authored Jan 27, 2025
2 parents 5cd42bb + a7e0b43 commit 52dc8ef
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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<WebSqlite> 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
Expand Down
20 changes: 0 additions & 20 deletions packages/powersync_core/lib/src/web/powersync_db.worker.dart
Original file line number Diff line number Diff line change
Expand Up @@ -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<WorkerDatabase> openDatabase(
WasmSqlite3 sqlite3, String path, String vfs) async {
final asyncDb = await super.openDatabase(sqlite3, path, vfs);
setupPowerSyncDatabase(asyncDb.database);
return asyncDb;
}

@override
Future<JSAny?> handleCustomRequest(
ClientConnection connection, JSAny? request) {
throw UnimplementedError();
}
}
22 changes: 21 additions & 1 deletion packages/powersync_core/lib/src/web/worker_utils.dart
Original file line number Diff line number Diff line change
@@ -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<WorkerDatabase> openDatabase(
WasmSqlite3 sqlite3, String path, String vfs) async {
final asyncDb = await super.openDatabase(sqlite3, path, vfs);
setupPowerSyncDatabase(asyncDb.database);
return asyncDb;
}

@override
Future<JSAny?> handleCustomRequest(
ClientConnection connection, JSAny? request) {
throw UnimplementedError();
}
}

// Registers custom SQLite functions for the SQLite connection
void setupPowerSyncDatabase(CommonDatabase database) {
setupCommonDBFunctions(database);
Expand Down
2 changes: 1 addition & 1 deletion packages/powersync_core/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 52dc8ef

Please sign in to comment.