runSqliteWebWorker function
void
runSqliteWebWorker()
Serves SQLite requests inside a dedicated Web worker.
Call once from a custom worker entrypoint. Normal applications use the verified worker bundled by the package instead of starting this directly.
Implementation
void runSqliteWebWorker() {
final self = globalContext as web.DedicatedWorkerGlobalScope;
final server = _WorkerDatabase();
Future<void> tail = Future.value();
self.onmessage = ((web.MessageEvent event) {
tail = tail.then((_) async {
final message = event.data! as JSArray<JSAny?>;
final id = message[0];
try {
final result = await server.handle(
(message[1]! as JSString).toDart,
message[2],
);
self.postMessage([id, true.toJS, server.active?.toJS, result].toJS);
} catch (error) {
final JSArray<JSAny?> details;
if (error is sqlite.SqliteException) {
details = [
'sqlite'.toJS,
error.message.toJS,
error.resultCode.toJS,
error.extendedResultCode.toJS,
].toJS;
} else {
details = [
(error is OrmException ? error.code : 'DRIVER.SQLITE').toJS,
error.toString().toJS,
].toJS;
}
self.postMessage([id, false.toJS, server.active?.toJS, details].toJS);
}
});
}).toJS;
}