2014-09-30 14:56:33 -04:00
|
|
|
import {ListWrapper, List} from 'facade/collection';
|
2014-10-03 16:29:59 -04:00
|
|
|
import {stringify} from 'facade/lang';
|
2014-10-03 17:26:49 -04:00
|
|
|
import {Key} from './key';
|
2014-09-30 14:56:33 -04:00
|
|
|
|
2014-10-07 10:34:07 -04:00
|
|
|
function constructResolvingPath(keys:List) {
|
2014-09-30 14:56:33 -04:00
|
|
|
if (keys.length > 1) {
|
2014-10-03 17:26:49 -04:00
|
|
|
var reversed = ListWrapper.reversed(keys);
|
|
|
|
var tokenStrs = ListWrapper.map(reversed, (k) => stringify(k.token));
|
2014-09-30 14:56:33 -04:00
|
|
|
return " (" + tokenStrs.join(' -> ') + ")";
|
|
|
|
} else {
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-10-07 09:21:00 -04:00
|
|
|
export class ProviderError extends Error {
|
2014-10-07 10:34:07 -04:00
|
|
|
constructor(key:Key, constructResolvingMessage:Function) {
|
2014-10-03 17:26:49 -04:00
|
|
|
this.keys = [key];
|
|
|
|
this.constructResolvingMessage = constructResolvingMessage;
|
|
|
|
this.message = this.constructResolvingMessage(this.keys);
|
2014-09-30 14:56:33 -04:00
|
|
|
}
|
|
|
|
|
2014-10-07 10:34:07 -04:00
|
|
|
addKey(key:Key) {
|
2014-10-03 17:26:49 -04:00
|
|
|
ListWrapper.push(this.keys, key);
|
|
|
|
this.message = this.constructResolvingMessage(this.keys);
|
2014-09-30 14:56:33 -04:00
|
|
|
}
|
2014-10-07 09:21:00 -04:00
|
|
|
|
|
|
|
toString() {
|
|
|
|
return this.message;
|
|
|
|
}
|
2014-09-30 14:56:33 -04:00
|
|
|
}
|
|
|
|
|
2014-10-03 17:26:49 -04:00
|
|
|
export class NoProviderError extends ProviderError {
|
2014-10-07 10:34:07 -04:00
|
|
|
constructor(key:Key) {
|
|
|
|
super(key, function (keys:List) {
|
2014-10-03 17:26:49 -04:00
|
|
|
var first = stringify(ListWrapper.first(keys).token);
|
|
|
|
return `No provider for ${first}!${constructResolvingPath(keys)}`;
|
|
|
|
});
|
2014-09-30 14:56:33 -04:00
|
|
|
}
|
2014-10-03 17:26:49 -04:00
|
|
|
}
|
2014-09-30 14:56:33 -04:00
|
|
|
|
2014-10-05 16:25:42 -04:00
|
|
|
export class AsyncBindingError extends ProviderError {
|
2014-10-07 10:34:07 -04:00
|
|
|
constructor(key:Key) {
|
|
|
|
super(key, function (keys:List) {
|
2014-10-03 17:26:49 -04:00
|
|
|
var first = stringify(ListWrapper.first(keys).token);
|
|
|
|
return `Cannot instantiate ${first} synchronously. ` +
|
|
|
|
`It is provided as a future!${constructResolvingPath(keys)}`;
|
|
|
|
});
|
2014-09-30 14:56:33 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-10-06 10:13:33 -04:00
|
|
|
export class CyclicDependencyError extends ProviderError {
|
2014-10-07 10:34:07 -04:00
|
|
|
constructor(key:Key) {
|
|
|
|
super(key, function (keys:List) {
|
2014-10-06 10:13:33 -04:00
|
|
|
return `Cannot instantiate cyclic dependency!${constructResolvingPath(keys)}`;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export class InstantiationError extends ProviderError {
|
2014-10-07 10:34:07 -04:00
|
|
|
constructor(originalException, key:Key) {
|
|
|
|
super(key, function (keys:List) {
|
2014-10-06 10:13:33 -04:00
|
|
|
var first = stringify(ListWrapper.first(keys).token);
|
2014-10-07 10:34:07 -04:00
|
|
|
return `Error during instantiation of ${first}!${constructResolvingPath(keys)}.` +
|
2014-10-06 10:13:33 -04:00
|
|
|
` ORIGINAL ERROR: ${originalException}`;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-10-07 09:21:00 -04:00
|
|
|
export class InvalidBindingError extends Error {
|
2014-10-07 10:34:07 -04:00
|
|
|
constructor(binding) {
|
2014-09-30 14:56:33 -04:00
|
|
|
this.message = `Invalid binding ${binding}`;
|
|
|
|
}
|
2014-10-07 09:21:00 -04:00
|
|
|
|
|
|
|
toString() {
|
|
|
|
return this.message;
|
|
|
|
}
|
2014-10-05 16:25:42 -04:00
|
|
|
}
|
2014-09-30 14:56:33 -04:00
|
|
|
|
2014-10-07 09:21:00 -04:00
|
|
|
export class NoAnnotationError extends Error {
|
2014-10-07 10:34:07 -04:00
|
|
|
constructor(type) {
|
2014-10-05 16:25:42 -04:00
|
|
|
this.message = `Cannot resolve all parameters for ${stringify(type)}`;
|
2014-09-30 14:56:33 -04:00
|
|
|
}
|
2014-10-07 09:21:00 -04:00
|
|
|
|
|
|
|
toString() {
|
|
|
|
return this.message;
|
|
|
|
}
|
2014-09-30 14:56:33 -04:00
|
|
|
}
|