Implementation
Future<String> get scriptSource async {
final typeSource = (await _getClass(executableType)).toSource();
final builder = StringBuffer();
builder.writeln("import 'dart:async';");
builder.writeln("import 'dart:isolate';");
builder.writeln("import 'dart:mirrors';");
for (final anImport in imports) {
builder.writeln("import '$anImport';");
}
builder.writeln(
"""
Future main (List<String> args, Map<String, dynamic> message) async {
final sendPort = message['_sendPort'];
final executable = $typeName(message);
final result = await executable.execute();
sendPort.send({"_result": result});
}
""",
);
builder.writeln(typeSource);
builder.writeln((await _getClass(Executable)).toSource());
for (final type in additionalTypes) {
final source = await _getClass(type);
builder.writeln(source.toSource());
}
if (additionalContents != null) {
builder.writeln(additionalContents);
}
return builder.toString();
}