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