renderTemplate method

Future<String> renderTemplate(
  1. String name,
  2. Map<String, String> data
)

Implementation

Future<String> renderTemplate(String name, Map<String, String> data) async {
  var templateUri = Uri(
    scheme: 'package',
    path: 'astra_cli/src/templates/$name.template',
  );

  var templateResolvedUri = await Isolate.resolvePackageUri(templateUri);

  if (templateResolvedUri == null) {
    throw CliException('Serve template uri not resolved');
  }

  var template = await File.fromUri(templateResolvedUri).readAsString();

  String replace(Match match) {
    var variable = match.group(1);

    if (variable == null) {
      throw StateError("Template variable '$variable' not found");
    }

    return data[variable] as String;
  }

  return template.replaceAllMapped(RegExp('__([A-Z][0-9A-Z]*)__'), replace);
}