X Tutup
Skip to content

Commit 6be95ae

Browse files
author
Tim Blasi
committed
fix(dart/transform): Fix issue with deferred in .ng_deps
Fix an issue in the linking step which prevents libraries from being imported as `deferred`.
1 parent 9d0d33f commit 6be95ae

File tree

7 files changed

+50
-20
lines changed

7 files changed

+50
-20
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,9 @@ bool _isNotDartDirective(dynamic model) => !isDartCoreUri(model.uri);
6565
/// associated `.ng_deps.json` file, if one exists.
6666
Future<Map<String, String>> _processNgImports(NgDepsModel model,
6767
AssetReader reader, AssetId assetId, UrlResolver resolver) async {
68-
final importsAndExports = new List.from(model.imports)..addAll(model.exports);
68+
final importsAndExports =
69+
new List.from(model.imports.where((i) => !i.isDeferred))
70+
..addAll(model.exports);
6971
final retVal = <String, String>{};
7072
final assetUri = toAssetUri(assetId);
7173
return Future

modules_dart/transform/test/transform/directive_metadata_linker/all_tests.dart

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,24 @@ void allTests() {
164164
expect(linkedImport.isNgDeps).toBeTrue();
165165
expect(linkedImport.prefix.startsWith('i')).toBeTrue();
166166
});
167+
168+
it('should not chain `deferred` libraries.', () async {
169+
fooNgMeta.ngDeps
170+
..libraryUri = 'test.foo'
171+
..imports.add(new ImportModel()
172+
..uri = 'bar.dart'
173+
..isDeferred = true
174+
..prefix = 'dep');
175+
barNgMeta.ngDeps.libraryUri = 'test.bar';
176+
updateReader();
177+
178+
var linked = (await _testLink(reader, fooAssetId)).ngDeps;
179+
expect(linked).toBeNotNull();
180+
var linkedImport = linked.imports.firstWhere(
181+
(i) => i.uri.endsWith('bar.ng_deps.dart'),
182+
orElse: () => null);
183+
expect(linkedImport).toBeNull();
184+
});
167185
});
168186
}
169187

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,14 +179,15 @@ void allTests() {
179179
void _testDeferredRewriter() {
180180
var inputs = {
181181
'a|web/bar.dart': 'deferred_files/bar.dart',
182+
'a|web/dep.dart': 'deferred_files/dep.dart',
182183
'a|web/index.dart': 'deferred_files/index.dart'
183184
};
184185
inputs.addAll(commonInputs);
185186
inputs.keys.forEach((k) => inputs[k] = _readFile(inputs[k]));
186187
var outputs = {
187188
'a|web/bar.ng_deps.dart':
188189
_readFile('deferred_files/expected/bar.ng_deps.dart'),
189-
'a|web/bar.dart': _readFile('deferred_files/expected/bar.dart'),
190+
'a|web/bar.dart': deferredOuts.barContents,
190191
'a|web/index.dart': deferredOuts.indexContents
191192
};
192193
testPhases(

modules_dart/transform/test/transform/integration/deferred_files/bar.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ library bar;
22

33
import 'package:angular2/src/core/metadata.dart';
44

5-
import 'deps/my_dep.dart' deferred as dep;
5+
import 'dep.dart' deferred as dep;
66

77
@Component(selector: '[soup]')
88
@View(template: '')
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
library dep;
2+
3+
import 'package:angular2/src/core/metadata.dart';
4+
5+
@Injectable()
6+
void doImmediateThing() {}

modules_dart/transform/test/transform/integration/deferred_files/expected/bar.dart

Lines changed: 0 additions & 17 deletions
This file was deleted.

modules_dart/transform/test/transform/integration/deferred_files/expected/output.dart

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,23 @@ void main() {
1616
});
1717
}
1818
''';
19+
20+
const barContents = '''
21+
library bar;
22+
23+
import 'package:angular2/src/core/metadata.dart';
24+
25+
import 'dep.ng_deps.dart' deferred as dep;
26+
27+
@Component(selector: '[soup]')
28+
@View(template: '')
29+
class MyComponent {
30+
void doDeferredThing() {
31+
dep.loadLibrary().then((_) {dep.initReflector();}).then((_) {
32+
dep.doImmediateThing();
33+
});
34+
}
35+
}
36+
37+
void execImmediate() {}
38+
''';

0 commit comments

Comments
 (0)
X Tutup