in lib/src/common_server_impl.dart [183:241]
Future<proto.CompileResponse> _compileDart2js(
String source, {
bool returnSourceMap = false,
}) async {
try {
final sourceHash = _hashSource(source);
final memCacheKey = '%%COMPILE:v0'
':returnSourceMap:$returnSourceMap:source:$sourceHash';
final result = await _checkCache(memCacheKey);
if (result != null) {
log.info('CACHE: Cache hit for compileDart2js');
final resultObj = json.decode(result) as Map<String, dynamic>;
final response = proto.CompileResponse()
..result = resultObj['compiledJS'] as String;
if (resultObj['sourceMap'] != null) {
response.sourceMap = resultObj['sourceMap'] as String;
}
return response;
}
log.info('CACHE: MISS for compileDart2js');
final watch = Stopwatch()..start();
final results =
await _compiler.compile(source, returnSourceMap: returnSourceMap);
if (results.hasOutput) {
final lineCount = source.split('\n').length;
final outputSize = (results.compiledJS?.length ?? 0 / 1024).ceil();
final ms = watch.elapsedMilliseconds;
log.info('PERF: Compiled $lineCount lines of Dart into '
'${outputSize}kb of JavaScript in ${ms}ms using dart2js.');
final sourceMap = returnSourceMap ? results.sourceMap : null;
final cachedResult = const JsonEncoder().convert(<String, String?>{
'compiledJS': results.compiledJS,
'sourceMap': sourceMap,
});
// Don't block on cache set.
unawaited(_setCache(memCacheKey, cachedResult));
final compileResponse = proto.CompileResponse();
compileResponse.result = results.compiledJS ?? '';
if (sourceMap != null) {
compileResponse.sourceMap = sourceMap;
}
return compileResponse;
} else {
final problems = results.problems;
final errors = problems.map(_printCompileProblem).join('\n');
throw BadRequest(errors);
}
} catch (e, st) {
if (e is! BadRequest) {
log.severe('Error during compile (dart2js) on "$source"', e, st);
}
rethrow;
}
}