
committed by
Miško Hevery

parent
4415855683
commit
e916836261
@ -8,7 +8,7 @@ import {
|
||||
stringify,
|
||||
isArray
|
||||
} from 'angular2/src/core/facade/lang';
|
||||
import {List, MapWrapper, ListWrapper} from 'angular2/src/core/facade/collection';
|
||||
import {MapWrapper, ListWrapper} from 'angular2/src/core/facade/collection';
|
||||
import {reflector} from 'angular2/src/core/reflection/reflection';
|
||||
import {Key} from './key';
|
||||
import {
|
||||
@ -28,7 +28,7 @@ import {resolveForwardRef} from './forward_ref';
|
||||
*/
|
||||
export class Dependency {
|
||||
constructor(public key: Key, public optional: boolean, public lowerBoundVisibility: any,
|
||||
public upperBoundVisibility: any, public properties: List<any>) {}
|
||||
public upperBoundVisibility: any, public properties: any[]) {}
|
||||
|
||||
static fromKey(key: Key): Dependency { return new Dependency(key, false, null, null, []); }
|
||||
}
|
||||
@ -174,12 +174,12 @@ export class Binding {
|
||||
* expect(injector.get(String)).toEqual('Value: 3');
|
||||
* ```
|
||||
*/
|
||||
dependencies: List<any>;
|
||||
dependencies: any[];
|
||||
|
||||
constructor(
|
||||
token,
|
||||
{toClass, toValue, toAlias, toFactory, deps}:
|
||||
{toClass?: Type, toValue?: any, toAlias?: any, toFactory?: Function, deps?: List<any>}) {
|
||||
{toClass?: Type, toValue?: any, toAlias?: any, toFactory?: Function, deps?: any[]}) {
|
||||
this.token = token;
|
||||
this.toClass = toClass;
|
||||
this.toValue = toValue;
|
||||
@ -238,7 +238,7 @@ export class ResolvedBinding {
|
||||
/**
|
||||
* Arguments (dependencies) to the `factory` function.
|
||||
*/
|
||||
public dependencies: List<Dependency>) {}
|
||||
public dependencies: Dependency[]) {}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -365,32 +365,30 @@ export class BindingBuilder {
|
||||
* expect(injector.get(String)).toEqual('Value: 3');
|
||||
* ```
|
||||
*/
|
||||
toFactory(factoryFunction: Function, dependencies?: List<any>): Binding {
|
||||
toFactory(factoryFunction: Function, dependencies?: any[]): Binding {
|
||||
return new Binding(this.token, {toFactory: factoryFunction, deps: dependencies});
|
||||
}
|
||||
}
|
||||
|
||||
function _constructDependencies(factoryFunction: Function, dependencies: List<any>):
|
||||
List<Dependency> {
|
||||
function _constructDependencies(factoryFunction: Function, dependencies: any[]): Dependency[] {
|
||||
if (isBlank(dependencies)) {
|
||||
return _dependenciesFor(factoryFunction);
|
||||
} else {
|
||||
var params: List<List<any>> = ListWrapper.map(dependencies, (t) => [t]);
|
||||
var params: any[][] = ListWrapper.map(dependencies, (t) => [t]);
|
||||
return ListWrapper.map(dependencies, (t) => _extractToken(factoryFunction, t, params));
|
||||
}
|
||||
}
|
||||
|
||||
function _dependenciesFor(typeOrFunc): List<Dependency> {
|
||||
function _dependenciesFor(typeOrFunc): Dependency[] {
|
||||
var params = reflector.parameters(typeOrFunc);
|
||||
if (isBlank(params)) return [];
|
||||
if (ListWrapper.any(params, (p) => isBlank(p))) {
|
||||
throw new NoAnnotationError(typeOrFunc, params);
|
||||
}
|
||||
return ListWrapper.map(params, (p: List<any>) => _extractToken(typeOrFunc, p, params));
|
||||
return ListWrapper.map(params, (p: any[]) => _extractToken(typeOrFunc, p, params));
|
||||
}
|
||||
|
||||
function _extractToken(typeOrFunc, metadata /*List<any> | any*/, params: List<List<any>>):
|
||||
Dependency {
|
||||
function _extractToken(typeOrFunc, metadata /*any[] | any*/, params: any[][]): Dependency {
|
||||
var depProps = [];
|
||||
var token = null;
|
||||
var optional = false;
|
||||
|
@ -1,9 +1,9 @@
|
||||
import {ListWrapper, List} from 'angular2/src/core/facade/collection';
|
||||
import {ListWrapper} from 'angular2/src/core/facade/collection';
|
||||
import {stringify, BaseException, isBlank} from 'angular2/src/core/facade/lang';
|
||||
import {Key} from './key';
|
||||
import {Injector} from './injector';
|
||||
|
||||
function findFirstClosedCycle(keys: List<any>): List<any> {
|
||||
function findFirstClosedCycle(keys: any[]): any[] {
|
||||
var res = [];
|
||||
for (var i = 0; i < keys.length; ++i) {
|
||||
if (ListWrapper.contains(res, keys[i])) {
|
||||
@ -16,7 +16,7 @@ function findFirstClosedCycle(keys: List<any>): List<any> {
|
||||
return res;
|
||||
}
|
||||
|
||||
function constructResolvingPath(keys: List<any>): string {
|
||||
function constructResolvingPath(keys: any[]): string {
|
||||
if (keys.length > 1) {
|
||||
var reversed = findFirstClosedCycle(ListWrapper.reversed(keys));
|
||||
var tokenStrs = ListWrapper.map(reversed, (k) => stringify(k.token));
|
||||
@ -33,8 +33,8 @@ function constructResolvingPath(keys: List<any>): string {
|
||||
export class AbstractBindingError extends BaseException {
|
||||
name: string;
|
||||
message: string;
|
||||
keys: List<Key>;
|
||||
injectors: List<Injector>;
|
||||
keys: Key[];
|
||||
injectors: Injector[];
|
||||
constructResolvingMessage: Function;
|
||||
|
||||
constructor(injector: Injector, key: Key, constructResolvingMessage: Function, originalException?,
|
||||
@ -63,7 +63,7 @@ export class AbstractBindingError extends BaseException {
|
||||
*/
|
||||
export class NoBindingError extends AbstractBindingError {
|
||||
constructor(injector: Injector, key: Key) {
|
||||
super(injector, key, function(keys: List<any>) {
|
||||
super(injector, key, function(keys: any[]) {
|
||||
var first = stringify(ListWrapper.first(keys).token);
|
||||
return `No provider for ${first}!${constructResolvingPath(keys)}`;
|
||||
});
|
||||
@ -88,7 +88,7 @@ export class NoBindingError extends AbstractBindingError {
|
||||
*/
|
||||
export class CyclicDependencyError extends AbstractBindingError {
|
||||
constructor(injector: Injector, key: Key) {
|
||||
super(injector, key, function(keys: List<any>) {
|
||||
super(injector, key, function(keys: any[]) {
|
||||
return `Cannot instantiate cyclic dependency!${constructResolvingPath(keys)}`;
|
||||
});
|
||||
}
|
||||
@ -103,7 +103,7 @@ export class CyclicDependencyError extends AbstractBindingError {
|
||||
export class InstantiationError extends AbstractBindingError {
|
||||
causeKey: Key;
|
||||
constructor(injector: Injector, originalException, originalStack, key: Key) {
|
||||
super(injector, key, function(keys: List<any>) {
|
||||
super(injector, key, function(keys: any[]) {
|
||||
var first = stringify(ListWrapper.first(keys).token);
|
||||
return `Error during instantiation of ${first}!${constructResolvingPath(keys)}.`;
|
||||
}, originalException, originalStack);
|
||||
@ -136,7 +136,7 @@ export class InvalidBindingError extends BaseException {
|
||||
export class NoAnnotationError extends BaseException {
|
||||
name: string;
|
||||
message: string;
|
||||
constructor(typeOrFunc, params: List<List<any>>) {
|
||||
constructor(typeOrFunc, params: any[][]) {
|
||||
super();
|
||||
var signature = [];
|
||||
for (var i = 0, ii = params.length; i < ii; i++) {
|
||||
|
@ -1,4 +1,4 @@
|
||||
import {Map, List, MapWrapper, ListWrapper} from 'angular2/src/core/facade/collection';
|
||||
import {Map, MapWrapper, ListWrapper} from 'angular2/src/core/facade/collection';
|
||||
import {ResolvedBinding, Binding, Dependency, BindingBuilder, bind} from './binding';
|
||||
import {
|
||||
AbstractBindingError,
|
||||
@ -427,7 +427,7 @@ export class Injector {
|
||||
*such as
|
||||
* `fromResolvedBindings` and `createChildFromResolved`.
|
||||
*/
|
||||
static resolve(bindings: List<Type | Binding | List<any>>): List<ResolvedBinding> {
|
||||
static resolve(bindings: Array<Type | Binding | any[]>): ResolvedBinding[] {
|
||||
var resolvedBindings = _resolveBindings(bindings);
|
||||
var flatten = _flattenBindings(resolvedBindings, new Map());
|
||||
return _createListOfBindings(flatten);
|
||||
@ -446,7 +446,7 @@ export class Injector {
|
||||
* bindings.
|
||||
* @param `depProvider`
|
||||
*/
|
||||
static resolveAndCreate(bindings: List<Type | Binding | List<any>>,
|
||||
static resolveAndCreate(bindings: Array<Type | Binding | any[]>,
|
||||
depProvider: DependencyProvider = null): Injector {
|
||||
var resolvedBindings = Injector.resolve(bindings);
|
||||
return Injector.fromResolvedBindings(resolvedBindings, depProvider);
|
||||
@ -460,7 +460,7 @@ export class Injector {
|
||||
* {@link Injector}.
|
||||
* @param `depProvider`
|
||||
*/
|
||||
static fromResolvedBindings(bindings: List<ResolvedBinding>,
|
||||
static fromResolvedBindings(bindings: ResolvedBinding[],
|
||||
depProvider: DependencyProvider = null): Injector {
|
||||
var bd = bindings.map(b => new BindingWithVisibility(b, Visibility.Public));
|
||||
var proto = new ProtoInjector(bd);
|
||||
@ -537,7 +537,7 @@ export class Injector {
|
||||
* recursive list of more bindings.
|
||||
* @param `depProvider`
|
||||
*/
|
||||
resolveAndCreateChild(bindings: List<Type | Binding | List<any>>,
|
||||
resolveAndCreateChild(bindings: Array<Type | Binding | any[]>,
|
||||
depProvider: DependencyProvider = null): Injector {
|
||||
var resovledBindings = Injector.resolve(bindings);
|
||||
return this.createChildFromResolved(resovledBindings, depProvider);
|
||||
@ -551,7 +551,7 @@ export class Injector {
|
||||
* @param `depProvider`
|
||||
* @returns a new child {@link Injector}.
|
||||
*/
|
||||
createChildFromResolved(bindings: List<ResolvedBinding>,
|
||||
createChildFromResolved(bindings: ResolvedBinding[],
|
||||
depProvider: DependencyProvider = null): Injector {
|
||||
var bd = bindings.map(b => new BindingWithVisibility(b, Visibility.Public));
|
||||
var proto = new ProtoInjector(bd);
|
||||
@ -801,7 +801,7 @@ export class Injector {
|
||||
var INJECTOR_KEY = Key.get(Injector);
|
||||
|
||||
|
||||
function _resolveBindings(bindings: List<Type | Binding | List<any>>): List<ResolvedBinding> {
|
||||
function _resolveBindings(bindings: Array<Type | Binding | any[]>): ResolvedBinding[] {
|
||||
var resolvedList = ListWrapper.createFixedSize(bindings.length);
|
||||
for (var i = 0; i < bindings.length; i++) {
|
||||
var unresolved = resolveForwardRef(bindings[i]);
|
||||
@ -812,7 +812,7 @@ function _resolveBindings(bindings: List<Type | Binding | List<any>>): List<Reso
|
||||
resolved = bind(unresolved).toClass(unresolved).resolve();
|
||||
} else if (unresolved instanceof Binding) {
|
||||
resolved = unresolved.resolve();
|
||||
} else if (unresolved instanceof List) {
|
||||
} else if (unresolved instanceof Array) {
|
||||
resolved = _resolveBindings(unresolved);
|
||||
} else if (unresolved instanceof BindingBuilder) {
|
||||
throw new InvalidBindingError(unresolved.token);
|
||||
@ -824,17 +824,16 @@ function _resolveBindings(bindings: List<Type | Binding | List<any>>): List<Reso
|
||||
return resolvedList;
|
||||
}
|
||||
|
||||
function _createListOfBindings(flattenedBindings: Map<number, ResolvedBinding>):
|
||||
List<ResolvedBinding> {
|
||||
function _createListOfBindings(flattenedBindings: Map<number, ResolvedBinding>): ResolvedBinding[] {
|
||||
return MapWrapper.values(flattenedBindings);
|
||||
}
|
||||
|
||||
function _flattenBindings(bindings: List<ResolvedBinding | List<any>>,
|
||||
function _flattenBindings(bindings: Array<ResolvedBinding | any[]>,
|
||||
res: Map<number, ResolvedBinding>): Map<number, ResolvedBinding> {
|
||||
ListWrapper.forEach(bindings, function(b) {
|
||||
if (b instanceof ResolvedBinding) {
|
||||
res.set(b.key.id, b);
|
||||
} else if (b instanceof List) {
|
||||
} else if (b instanceof Array) {
|
||||
_flattenBindings(b, res);
|
||||
}
|
||||
});
|
||||
|
Reference in New Issue
Block a user