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:
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user