fix(transformer): Don't hang on bad urls and log better errors

closes https://github.com/angular/angular/issues/2605
This commit is contained in:
Jacob MacDonald
2015-06-25 08:47:28 -07:00
parent 9c768501c4
commit d037c082fb
5 changed files with 99 additions and 4 deletions

View File

@ -16,9 +16,14 @@ class XhrImpl implements XHR {
Future<String> get(String url) async {
var assetId = uriToAssetId(_entryPoint, url, logger, null /* span */,
errorOnAbsolute: false);
if (assetId == null) {
logger.error(
'Uri $url not supported from $_entryPoint, could not build AssetId');
return null;
}
var templateExists = await _reader.hasInput(assetId);
if (!templateExists) {
logger.error('Could not read template at uri $url from $_entryPoint');
logger.error('Could not read asset at uri $url from $_entryPoint');
return null;
}
return await _reader.readAsString(assetId);

View File

@ -1,5 +1,6 @@
library angular2.transform.directive_processor.visitors;
import 'dart:async';
import 'package:analyzer/analyzer.dart';
import 'package:analyzer/src/generated/java_core.dart';
import 'package:angular2/src/render/xhr.dart' show XHR;
@ -263,7 +264,7 @@ class AnnotationsTransformVisitor extends ToSourceVisitor {
var url = node.expression.accept(_evaluator);
if (url is String) {
writer.print("template: r'''");
writer.asyncPrint(_xhr.get(url));
writer.asyncPrint(_readOrEmptyString(url));
writer.print("'''");
return null;
} else {
@ -276,7 +277,7 @@ class AnnotationsTransformVisitor extends ToSourceVisitor {
for (var url in urls) {
if (url is String) {
writer.print("r'''");
writer.asyncPrint(_xhr.get(url));
writer.asyncPrint(_readOrEmptyString(url));
writer.print("''', ");
} else {
logger.warning('style url is not a String ${url}');
@ -287,4 +288,14 @@ class AnnotationsTransformVisitor extends ToSourceVisitor {
}
return super.visitNamedExpression(node);
}
/// Attempts to read the content from {@link url}, if it returns null then
/// just return the empty string.
Future<String> _readOrEmptyString(String url) async {
var content = await _xhr.get(url);
if (content == null) {
content = '';
}
return content;
}
}