run method

  1. @override
Future<int>? run()
override

Runs this command.

The return value is wrapped in a Future if necessary and returned by CommandRunner.runCommand.

Implementation

@override
Future<int>? run() async {
  final runInRelease = release && !debug;

  final mode = switch ((debug, profile, release)) {
    (true, _, _) => Mode.debug,
    (_, true, _) => Mode.profile,
    (_, _, true) => Mode.release,
    _ => Mode.debug,
  };

  final generator = ConstructGenerator(
    flavor: flavor,
    routesHandler: routesHandler,
    makers: constructs,
    logger: logger,
    fs: fs,
    rootPath: rootPath,
    mode: mode,
  );

  final root = await generator.root;

  if (profile || generateOnly) {
    await generator.clean();

    final progress = logger.progress('Generating server code');

    await generator.generate(logger.delayed);

    progress.complete('Generated server code');

    return 0;
  }

  final serverHandler = VMServiceHandler(
    root: root,
    serverFile: (await root.getServer())
        .childFile(ServerFile.nameWithExtension)
        .path,
    codeGenerator: generator.generate,
    logger: logger,
    canHotReload: !runInRelease,
    dartDefine: defines,
    dartVmServicePort: dartVmServicePort,
    serverArgs: argResults?.rest ?? [],
    mode: mode,
    onFilesChange: analyzer.refresh,
    onFileRemove: analyzer.remove,
    errors: generator.getErrors,
  );

  await generator.clean();

  await serverHandler.start(enableHotReload: !runInRelease);
  return serverHandler.exitCode;
}