Skip to content

Commit a46af9c

Browse files
marclavalmhevery
authored andcommitted
feat(build): check circular depencies in Node.js
Closes angular#980
1 parent d10df7d commit a46af9c

File tree

6 files changed

+32
-10
lines changed

6 files changed

+32
-10
lines changed

gulpfile.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
var gulp = require('gulp');
22
var gulpPlugins = require('gulp-load-plugins')();
33
var runSequence = require('run-sequence');
4+
var madge = require('madge');
45
var merge = require('merge');
56
var gulpTraceur = require('./tools/transpiler/gulp-traceur');
67

@@ -465,6 +466,25 @@ gulp.task('build/format.dart', rundartpackage(gulp, gulpPlugins, {
465466
args: CONFIG.formatDart.args
466467
}));
467468

469+
// ------------
470+
// check circular dependencies in Node.js context
471+
gulp.task('build/checkCircularDependencies', function (done) {
472+
var dependencyObject = madge(CONFIG.dest.js.dev.es6, {
473+
format: 'es6',
474+
paths: [CONFIG.dest.js.dev.es6],
475+
extensions: ['.js', '.es6'],
476+
onParseFile: function(data) {
477+
data.src = data.src.replace(/import \* as/g, "//import * as");
478+
}
479+
});
480+
var circularDependencies = dependencyObject.circular().getArray();
481+
if (circularDependencies.length > 0) {
482+
console.log(circularDependencies);
483+
process.exit(1);
484+
}
485+
done();
486+
});
487+
468488
// ------------------
469489
// web servers
470490
gulp.task('serve.js.dev', jsserve(gulp, gulpPlugins, {
@@ -642,6 +662,7 @@ gulp.task('build.dart', function(done) {
642662
gulp.task('build.js.dev', function(done) {
643663
runSequence(
644664
['build/transpile.js.dev', 'build/html.js.dev', 'build/copy.js.dev', 'build/multicopy.js.dev.es6'],
665+
'build/checkCircularDependencies',
645666
done
646667
);
647668
});

modules/angular2/src/core/compiler/element_binder.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ import {int, isBlank, BaseException} from 'angular2/src/facade/lang';
22
import * as eiModule from './element_injector';
33
import {DirectiveMetadata} from './directive_metadata';
44
import {List, StringMap} from 'angular2/src/facade/collection';
5-
import {ProtoView} from './view';
5+
import * as viewModule from './view';
66

77
export class ElementBinder {
88
protoElementInjector:eiModule.ProtoElementInjector;
99
componentDirective:DirectiveMetadata;
1010
viewportDirective:DirectiveMetadata;
1111
textNodeIndices:List<int>;
1212
hasElementPropertyBindings:boolean;
13-
nestedProtoView: ProtoView;
13+
nestedProtoView: viewModule.ProtoView;
1414
events:StringMap;
1515
contentTagSelector:string;
1616
parent:ElementBinder;

modules/angular2/src/core/compiler/pipeline/compile_element.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {DirectiveMetadata} from '../directive_metadata';
55
import {Decorator, Component, Viewport, DynamicComponent} from '../../annotations/annotations';
66
import {ElementBinder} from '../element_binder';
77
import {ProtoElementInjector} from '../element_injector';
8-
import {ProtoView} from '../view';
8+
import * as viewModule from '../view';
99
import {dashCaseToCamelCase} from './util';
1010

1111
import {AST} from 'angular2/change_detection';
@@ -34,7 +34,7 @@ export class CompileElement {
3434
_allDirectives:List<DirectiveMetadata>;
3535
isViewRoot:boolean;
3636
hasBindings:boolean;
37-
inheritedProtoView:ProtoView;
37+
inheritedProtoView:viewModule.ProtoView;
3838
inheritedProtoElementInjector:ProtoElementInjector;
3939
inheritedElementBinder:ElementBinder;
4040
distanceToParentInjector:int;
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import {CompileElement} from './compile_element';
2-
import {CompileControl} from './compile_control';
2+
import * as ccModule from './compile_control';
33

44
/**
55
* One part of the compile process.
66
* Is guaranteed to be called in depth first order
77
*/
88
export class CompileStep {
9-
process(parent:CompileElement, current:CompileElement, control:CompileControl) {}
9+
process(parent:CompileElement, current:CompileElement, control:ccModule.CompileControl) {}
1010
}

modules/angular2/src/core/compiler/view_container.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {Injector} from 'angular2/di';
66
import * as eiModule from 'angular2/src/core/compiler/element_injector';
77
import {isPresent, isBlank} from 'angular2/src/facade/lang';
88
import {EventManager} from 'angular2/src/core/events/event_manager';
9-
import * as ldModule from './shadow_dom_emulation/light_dom';
9+
import {LightDom} from './shadow_dom_emulation/light_dom';
1010

1111
/**
1212
* @publicModule angular2/angular2
@@ -16,12 +16,12 @@ export class ViewContainer {
1616
templateElement;
1717
defaultProtoView: viewModule.ProtoView;
1818
_views: List<viewModule.View>;
19-
_lightDom: ldModule.LightDom;
19+
_lightDom: LightDom;
2020
_eventManager: EventManager;
2121
elementInjector: eiModule.ElementInjector;
2222
appInjector: Injector;
2323
hostElementInjector: eiModule.ElementInjector;
24-
hostLightDom: ldModule.LightDom;
24+
hostLightDom: LightDom;
2525

2626
constructor(parentView: viewModule.View,
2727
templateElement,
@@ -43,7 +43,7 @@ export class ViewContainer {
4343
this._eventManager = eventManager;
4444
}
4545

46-
hydrate(appInjector: Injector, hostElementInjector: eiModule.ElementInjector, hostLightDom: ldModule.LightDom) {
46+
hydrate(appInjector: Injector, hostElementInjector: eiModule.ElementInjector, hostLightDom: LightDom) {
4747
this.appInjector = appInjector;
4848
this.hostElementInjector = hostElementInjector;
4949
this.hostLightDom = hostLightDom;

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
"karma-dart": "^0.2.8",
6565
"karma-jasmine": "^0.2.2",
6666
"lodash": "^2.4.1",
67+
"madge": "mlaval/madge#es6",
6768
"merge": "^1.2.0",
6869
"minimatch": "^2.0.1",
6970
"minimist": "1.1.x",

0 commit comments

Comments
 (0)