X Tutup
Skip to content

Commit 5a50597

Browse files
author
Tim Blasi
committed
fix(dart/transform): Handle empty .ng_deps.dart files
Handle the situation where a `.dart` file generates a `.ng_meta.json` file but does not register any reflective information. An example of this would be a file that defines a const list that looks like a directive alias. The transformer keeps track of this, and creates a `.ng_meta.json` file but never creates a `.ng_deps.dart` file, which can result in other files being linked to it and it not defining an `initReflector` method.
1 parent 115ad4d commit 5a50597

File tree

6 files changed

+53
-1
lines changed

6 files changed

+53
-1
lines changed

modules_dart/transform/lib/src/transform/directive_metadata_linker/transformer.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ class DirectiveMetadataLinker extends Transformer
6464
transform
6565
.addOutput(new Asset.fromString(depsAssetId, formattedCode));
6666
} else {
67-
transform.addOutput(new Asset.fromString(depsAssetId, ''));
67+
transform.addOutput(
68+
new Asset.fromString(depsAssetId, _emptyNgDepsContents));
6869
}
6970
}
7071
});
@@ -74,3 +75,5 @@ class DirectiveMetadataLinker extends Transformer
7475

7576
AssetId _depsAssetId(AssetId primaryId) =>
7677
new AssetId(primaryId.package, toDepsExtension(primaryId.path));
78+
79+
const _emptyNgDepsContents = 'initReflector() {}';

modules_dart/transform/test/transform/integration/all_tests.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,16 @@ void allTests() {
130130
outputs: {
131131
'a|web/bar.ng_deps.dart':
132132
'directive_chain_files/expected/bar.ng_deps.dart'
133+
}),
134+
new IntegrationTestConfig(
135+
'should handle empty ng_deps files that define directive aliases.',
136+
inputs: {
137+
'a|web/foo.dart': 'empty_ng_deps_files/foo.dart',
138+
'a|web/bar.dart': 'empty_ng_deps_files/bar.dart'
139+
},
140+
outputs: {
141+
'a|web/foo.ng_deps.dart': 'empty_ng_deps_files/expected/foo.ng_deps.dart',
142+
'a|web/bar.ng_deps.dart': 'empty_ng_deps_files/expected/bar.ng_deps.dart'
133143
})
134144
];
135145

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
library bar;
2+
3+
const directiveAlias = const [];
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
initReflector() {}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
library bar.ng_deps.dart;
2+
3+
import 'foo.template.dart' as _templates;
4+
5+
import 'foo.dart';
6+
import 'package:angular2/src/core/reflection/reflection.dart' as _ngRef;
7+
import 'package:angular2/src/core/metadata.dart';
8+
import 'package:angular2/src/core/metadata.ng_deps.dart' as i0;
9+
import 'bar.dart';
10+
import 'bar.ng_deps.dart' as i1;
11+
export 'foo.dart';
12+
13+
var _visited = false;
14+
void initReflector() {
15+
if (_visited) return;
16+
_visited = true;
17+
_ngRef.reflector
18+
..registerType(
19+
MyComponent,
20+
new _ngRef.ReflectionInfo(const [
21+
const Component(selector: '[soup]'),
22+
const View(directives: const [directiveAlias], template: ''),
23+
_templates.HostMyComponentTemplate
24+
], const [], () => new MyComponent()));
25+
i0.initReflector();
26+
i1.initReflector();
27+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
library bar;
2+
3+
import 'package:angular2/src/core/metadata.dart';
4+
import 'bar.dart';
5+
6+
@Component(selector: '[soup]')
7+
@View(template: '', directives: const [directiveAlias])
8+
class MyComponent {}

0 commit comments

Comments
 (0)
X Tutup