X Tutup
Skip to content

Commit a187c78

Browse files
author
Tim Blasi
committed
feat(dart/transform): Allow absolute urls in templates
Allow `templateUrl` to be specified as an absolute `package:` import.
1 parent 950f2a3 commit a187c78

File tree

11 files changed

+106
-9
lines changed

11 files changed

+106
-9
lines changed

modules/angular2/src/transform/common/xhr_impl.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ class XhrImpl implements XHR {
1414
XhrImpl(this._reader, this._entryPoint);
1515

1616
Future<String> get(String url) async {
17-
var assetId = uriToAssetId(_entryPoint, url, logger, null);
17+
var assetId = uriToAssetId(_entryPoint, url, logger, null /* span */,
18+
errorOnAbsolute: false);
1819
var templateExists = await _reader.hasInput(assetId);
1920
if (!templateExists) {
2021
logger.error('Could not read template at uri $url from $_entryPoint');

modules/angular2/src/transform/directive_linker/linker.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,8 @@ Future<Map<UriBasedDirective, String>> _processNgImports(AssetReader reader,
113113
.map((UriBasedDirective directive) {
114114
var ngDepsUri = _toDepsUri(stringLiteralToString(directive.uri));
115115
var spanArg = null;
116-
var ngDepsAsset = uriToAssetId(entryPoint, ngDepsUri, logger, spanArg);
116+
var ngDepsAsset = uriToAssetId(entryPoint, ngDepsUri, logger, spanArg,
117+
errorOnAbsolute: false);
117118
if (ngDepsAsset == entryPoint) return nullFuture;
118119
return reader.hasInput(ngDepsAsset).then((hasInput) {
119120
if (hasInput) {

modules/angular2/src/transform/directive_metadata_extractor/extractor.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ Future<Map<String, DirectiveMetadata>> _extractDirectiveMetadataRecursive(
3737
if (uri.startsWith('dart:')) return _nullFuture;
3838

3939
uri = toDepsExtension(uri);
40-
var assetId = uriToAssetId(entryPoint, uri, logger, null /* span */);
40+
var assetId = uriToAssetId(entryPoint, uri, logger, null /* span */,
41+
errorOnAbsolute: false);
4142
if (assetId == entryPoint) return _nullFuture;
4243
return _extractDirectiveMetadataRecursive(reader, assetId)
4344
.then((exportMap) {

modules/angular2/src/transform/template_compiler/view_definition_creator.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,9 @@ class _ViewDefinitionCreator {
9797
var prefix = node.prefix != null && node.prefix.name != null
9898
? '${node.prefix.name}'
9999
: null;
100-
importAssetToPrefix[
101-
uriToAssetId(entryPoint, uri, logger, null /* span */)] = prefix;
100+
importAssetToPrefix[uriToAssetId(
101+
entryPoint, uri, logger, null /* span */,
102+
errorOnAbsolute: false)] = prefix;
102103
}
103104
}
104105
return importAssetToPrefix;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
library foo.ng_deps.dart;
2+
3+
import 'bar.dart';
4+
import 'package:angular2/src/core/annotations/annotations.dart';
5+
6+
var _visited = false;
7+
void initReflector(reflector) {
8+
if (_visited) return;
9+
_visited = true;
10+
reflector
11+
..registerType(BarComponent, {
12+
'factory': () => new BarComponent(),
13+
'parameters': const [],
14+
'annotations': const [const Component(selector: '[bar]')]
15+
});
16+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
library foo.ng_deps.dart;
2+
3+
import 'foo.dart';
4+
import 'package:angular2/src/core/annotations/annotations.dart';
5+
6+
export 'package:bar/bar.dart';
7+
import 'package:bar/bar.ng_deps.dart' as i0;
8+
9+
var _visited = false;
10+
void initReflector(reflector) {
11+
if (_visited) return;
12+
_visited = true;
13+
reflector
14+
..registerType(FooComponent, {
15+
'factory': () => new FooComponent(),
16+
'parameters': const [],
17+
'annotations': const [const Component(selector: '[foo]')]
18+
});
19+
i0.initReflector(reflector);
20+
}

modules/angular2/test/transform/directive_metadata_extractor/all_tests.dart

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,12 @@ import '../common/read_file.dart';
1717
var formatter = new DartFormatter();
1818

1919
void allTests() {
20-
var reader = new TestAssetReader();
20+
TestAssetReader reader = null;
2121

22-
beforeEach(() => setLogger(new PrintLogger()));
22+
beforeEach(() {
23+
setLogger(new PrintLogger());
24+
reader = new TestAssetReader();
25+
});
2326

2427
Future<DirectiveMetadata> readMetadata(inputPath) async {
2528
var ngDeps = await NgDeps.parse(reader, new AssetId('a', inputPath));
@@ -147,5 +150,19 @@ void allTests() {
147150
expect(extracted['BarComponent'].selector).toEqual('[bar]');
148151
expect(extracted['BazComponent'].selector).toEqual('[baz]');
149152
});
153+
154+
it('should include `DirectiveMetadata` from exported files '
155+
'expressed as absolute uris', () async {
156+
reader.addAsset(new AssetId('bar', 'lib/bar.ng_deps.dart'), readFile(
157+
'directive_metadata_extractor/absolute_export_files/bar.ng_deps.dart'));
158+
159+
var extracted = await extractDirectiveMetadata(reader, new AssetId('a',
160+
'directive_metadata_extractor/absolute_export_files/foo.ng_deps.dart'));
161+
expect(extracted).toContain('FooComponent');
162+
expect(extracted).toContain('BarComponent');
163+
164+
expect(extracted['FooComponent'].selector).toEqual('[foo]');
165+
expect(extracted['BarComponent'].selector).toEqual('[bar]');
166+
});
150167
});
151168
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
library examples.src.hello_world.index_common_dart.ng_deps.dart;
2+
3+
import 'hello.dart';
4+
import 'package:angular2/angular2.dart'
5+
show bootstrap, Component, Directive, View, NgElement;
6+
7+
var _visited = false;
8+
void initReflector(reflector) {
9+
if (_visited) return;
10+
_visited = true;
11+
reflector
12+
..registerType(HelloCmp, {
13+
'factory': () => new HelloCmp(),
14+
'parameters': const [],
15+
'annotations': const [
16+
const Component(selector: 'hello-app'),
17+
const View(template: r'''{{greeting}}''')
18+
]
19+
});
20+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
library examples.src.hello_world.index_common_dart;
2+
3+
import 'package:angular2/angular2.dart'
4+
show bootstrap, Component, Directive, View, NgElement;
5+
6+
@Component(selector: 'hello-app')
7+
@View(templateUrl: 'package:other_package/template.html')
8+
class HelloCmp {}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{{greeting}}

0 commit comments

Comments
 (0)
X Tutup