renderTinkerScript function

String renderTinkerScript(
  1. List<String> imports,
  2. String expression
)

The program tinker runs for expression, importing imports.

Implementation

String renderTinkerScript(List<String> imports, String expression) {
  final buffer = StringBuffer()
    ..writeln('// Generated by `dartisan tinker`; safe to delete.')
    ..writeln("import 'dart:convert';")
    ..writeln()
    ..writeln("import 'package:daravel/daravel.dart';")
    ..writeln();
  for (final import in imports) {
    buffer.writeln("import '$import';");
  }
  buffer
    ..writeln("import '../../bootstrap/app.dart';")
    ..writeln()
    ..writeln('Future<void> main() async {')
    ..writeln('  final app = createApp();')
    ..writeln('  await app.boot();')
    ..writeln('  try {')
    ..writeln('    final Object? result = await app.run<Object?>(')
    ..writeln('      () async => $expression,')
    ..writeln('    );')
    ..writeln('    print(')
    ..writeln('      result is String')
    ..writeln('          ? result')
    ..writeln("          : JsonEncoder.withIndent('  ', (Object? value) {")
    ..writeln('              return value is JsonSerializable')
    ..writeln('                  ? value.toJson()')
    ..writeln("                  : '\$value';")
    ..writeln('            }).convert(result),')
    ..writeln('    );')
    ..writeln('  } finally {')
    ..writeln('    await app.shutdown();')
    ..writeln('  }')
    ..writeln('}');
  return buffer.toString();
}