getRxDatabase function

Future<RxDatabase> getRxDatabase(
  1. String jsFilePath,
  2. String databaseName
)

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;
}