ormed_sqlite_web 0.1.0
ormed_sqlite_web: ^0.1.0 copied to clipboard
Browser SQLite adapter for Ormed using sqlite3_web workers.
ormed_sqlite_web #
Browser SQLite adapter for Ormed.
ormed_sqlite_web uses ormed_sqlite_core to compile SQLite-compatible SQL
and executes statements through sqlite3_web workers. This package is intended
for web and Flutter web apps that want a dedicated browser adapter instead of
overloading the native ormed_sqlite package.
Installation #
dependencies:
ormed: ^0.2.0
ormed_sqlite_web: ^0.1.0
Quick start with Ormed #
import 'package:ormed/ormed.dart';
import 'package:ormed_sqlite_web/ormed_sqlite_web.dart';
Future<void> main() async {
final registry = ModelRegistry();
final ds = DataSource(
registry.sqliteWebDataSourceOptions(
name: 'web',
database: 'app.sqlite',
workerUri: 'worker.dart.js',
wasmUri: 'sqlite3.wasm',
),
);
await ds.init();
final rows = await ds.connection.driver.queryRaw('SELECT 1 AS ok');
print(rows.first['ok']);
await ds.dispose();
}
Worker entrypoint #
Create a dedicated worker entrypoint compiled separately from your main app:
import 'package:ormed_sqlite_web/ormed_sqlite_web.dart';
void main() {
runSqliteWebWorker();
}
Compile that file to JavaScript and serve it alongside your web app.
Using DataSource #
Helper extensions #
import 'package:ormed/ormed.dart';
import 'package:ormed_sqlite_web/ormed_sqlite_web.dart';
Future<void> main() async {
final registry = ModelRegistry();
final dataSource = DataSource(
registry.sqliteWebDataSourceOptions(
name: 'web',
database: 'app.sqlite',
workerUri: 'worker.dart.js',
wasmUri: 'sqlite3.wasm',
implementation: 'recommended',
),
);
await dataSource.init();
await dataSource.dispose();
}
DataSource(DataSourceOptions(...)) direct adapter style #
import 'package:ormed/ormed.dart';
import 'package:ormed_sqlite_web/ormed_sqlite_web.dart';
Future<void> main() async {
final registry = ModelRegistry();
final adapter = SqliteWebDriverAdapter.custom(
config: DatabaseConfig(
driver: 'sqlite_web',
options: {
'database': 'app.sqlite',
'workerUri': 'worker.dart.js',
'wasmUri': 'sqlite3.wasm',
},
),
);
final dataSource = DataSource(
DataSourceOptions(
name: 'web',
driver: adapter,
registry: registry,
),
);
await dataSource.init();
await dataSource.dispose();
}
Connection options #
Required:
databaseordatabaseNameworkerUriorworker_uriwasmUri/wasm_uri/wasmModule
Optional:
implementationormode:recommendedin_memory_localin_memory_sharedindexed_db_unsafe_localindexed_db_unsafe_workerindexed_db_sharedopfs_with_external_locksopfs_atomicsopfs_shared
onlyOpenVfs/only_open_vfs(default:false)- explicit
SqliteWebTransportinjection when constructing the adapter/helper
Notes #
- This package is browser-oriented. VM usage should inject a custom
SqliteWebTransportfor testing. - Transactions are implemented with
sqlite3_webexclusive locks and SQLiteBEGIN/SAVEPOINTstatements. - Schema dump/load helpers are not exposed for browser storage backends.