getRxDatabase function
Implementation
Future<RxDatabase> getRxDatabase(String jsFilePath, String databaseName) async {
String plainJsCode = await rootBundle.loadString(jsFilePath);
FlutterQjs engine = FlutterQjs(stackSize: 1024 * 1024);
engine.dispatch();
final setToGlobalObject = await patchJavaScriptRuntime(engine);
ReplaySubject<RxChangeEventBulk<dynamic>> events = ReplaySubject();
await setToGlobalObject.invoke([
"sendRxDBEvent",
(String eventJSON) async {
var parsedJSON = jsonDecode(eventJSON);
var eventBulk = RxChangeEventBulk.fromJSON(parsedJSON);
events.add(eventBulk);
}
]);
setToGlobalObject.free();
// run the RxDatabase creation JavaScript code
await engine.evaluate(plainJsCode);
var databaseConfigPlain =
await engine.evaluate('process.init("' + databaseName + '");');
// load the RxDatabase configuration and collection meta data.
var databaseConfig = Map<String, dynamic>.from(databaseConfigPlain);
var configCollectionsMetaJson = databaseConfig['collections'];
if (configCollectionsMetaJson == null) {
throw Exception('no collection meta given');
}
RxDatabase database = RxDatabase(databaseConfig['databaseName'], engine,
events, configCollectionsMetaJson);
return database;
}