run method

FutureOr<int> run({
  1. required Directory directoryBase,
  2. required Directory? directoryOutputBuildServerUniverse,
  3. required String? inputFileName,
  4. required ServerUniverseBuildType server_universeDartBuildType,
  5. required ServerUniversePlatformType server_universeDartPlatformType,
  6. required FutureOr<void> onBuild(
    1. ServerUniverseApiStatus serverUniverseApiStatus
    ),
})

Server Universe

Implementation

FutureOr<int> run({
  required Directory directoryBase,
  required Directory? directoryOutputBuildServerUniverse,
  required String? inputFileName,
  required ServerUniverseBuildType server_universeDartBuildType,
  required ServerUniversePlatformType server_universeDartPlatformType,
  required FutureOr<void> Function(ServerUniverseApiStatus serverUniverseApiStatus) onBuild,
}) async {
  if (Dart.isWeb) {
    return 1;
  }
  File file_pubspec = File(path.join(directoryBase.path, "pubspec.yaml"));
  if (!file_pubspec.existsSync()) {
    print("pubspec not found");
    return 1;
  }
  // build platform supabase
  if (server_universeDartPlatformType == ServerUniversePlatformType.supabase) {
    Process? procces = await Future(() async {
      if (Dart.isLinux) {
        return await Process.start(
          "sudo",
          [
            "supabase",
            "functions",
            "serve",
            "--no-verify-jwt",
          ],
          workingDirectory: directoryBase.path,
        );
      }
      return null;
    });
    if (procces == null) {
      return 1;
    }
    procces.stderr.listen((event) {
      stderr.add(event);
    });
    procces.stdout.listen((event) {
      stdout.add(event);
    });
    Directory directory_bin = Directory(path.join(directoryBase.path, "bin"));
    Directory directory_lib = Directory(path.join(directoryBase.path, "lib"));
    bool is_pending_update = false;
    DateTime dateTime_expired = DateTime.now();
    void onUpdate(FileSystemEvent event) async {
      if (RegExp(r"([.]dart)$", caseSensitive: false).hasMatch(path.basename(event.path))) {
        if (is_pending_update) {
          if (dateTime_expired.isExpired() == false) {
            return;
          }
        }
        is_pending_update = true;
        dateTime_expired = DateTime.now().add(Duration(seconds: 30));
        var strm = build(
          directoryBase: directoryBase,
          inputFileName: inputFileName,
          directoryOutputBuildServerUniverse: directoryOutputBuildServerUniverse,
          server_universeDartBuildType: server_universeDartBuildType,
          server_universeDartPlatformType: server_universeDartPlatformType,
        );

        await for (var event in strm) {
          await onBuild(event);
        }
        is_pending_update = false;
      }
    }

    // old
    directory_bin.watch(recursive: true).listen(onUpdate);
    directory_lib.watch(recursive: true).listen(onUpdate);
    directory_lib.listSync().watchRecursive(onData: onUpdate);
    return await (procces.exitCode);
  }
  return 1;
}