{"version":3,"sources":["exceptions.js"],"names":[],"mappings":"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","file":"angular2/src/di/exceptions.es6","sourcesContent":["import {ListWrapper, List} from 'angular2/src/facade/collection';\nimport {stringify} from 'angular2/src/facade/lang';\n\nfunction findFirstClosedCycle(keys:List) {\n  var res = [];\n  for(var i = 0; i < keys.length; ++i) {\n    if (ListWrapper.contains(res, keys[i])) {\n      ListWrapper.push(res, keys[i]);\n      return res;\n    } else {\n      ListWrapper.push(res, keys[i]);\n    }\n  }\n  return res;\n}\n\nfunction constructResolvingPath(keys:List) {\n  if (keys.length > 1) {\n    var reversed = findFirstClosedCycle(ListWrapper.reversed(keys));\n    var tokenStrs = ListWrapper.map(reversed, (k) => stringify(k.token));\n    return \" (\" + tokenStrs.join(' -> ') + \")\";\n  } else {\n    return \"\";\n  }\n}\n\n\n/**\n * Base class for all errors arising from misconfigured bindings.\n *\n * @exportedAs angular2/di_errors\n */\nexport class AbstractBindingError extends Error {\n  keys:List;\n  constructResolvingMessage:Function;\n  message;\n  // TODO(tbosch): Can't do key:Key as this results in a circular dependency!\n  constructor(key, constructResolvingMessage:Function) {\n    super();\n    this.keys = [key];\n    this.constructResolvingMessage = constructResolvingMessage;\n    this.message = this.constructResolvingMessage(this.keys);\n  }\n\n  // TODO(tbosch): Can't do key:Key as this results in a circular dependency!\n  addKey(key) {\n    ListWrapper.push(this.keys, key);\n    this.message = this.constructResolvingMessage(this.keys);\n  }\n\n  toString() {\n    return this.message;\n  }\n}\n\n/**\n * Thrown when trying to retrieve a dependency by `Key` from {@link Injector}, but the {@link Injector} does not have a\n * {@link Binding} for {@link Key}.\n *\n * @exportedAs angular2/di_errors\n */\nexport class NoBindingError extends AbstractBindingError {\n  // TODO(tbosch): Can't do key:Key as this results in a circular dependency!\n  constructor(key) {\n    super(key, function (keys:List) {\n      var first = stringify(ListWrapper.first(keys).token);\n      return `No provider for ${first}!${constructResolvingPath(keys)}`;\n    });\n  }\n}\n\n/**\n * Thrown when trying to retrieve an async {@link Binding} using the sync API.\n *\n * ## Example\n *\n * ```javascript\n * var injector = Injector.resolveAndCreate([\n *   bind(Number).toAsyncFactory(() => {\n *     return new Promise((resolve) => resolve(1 + 2));\n *   }),\n *   bind(String).toFactory((v) => { return \"Value: \" + v; }, [String])\n * ]);\n *\n * injector.asyncGet(String).then((v) => expect(v).toBe('Value: 3'));\n * expect(() => {\n *   injector.get(String);\n * }).toThrowError(AsycBindingError);\n * ```\n *\n * The above example throws because `String` depends on `Number` which is async. If any binding in the dependency\n * graph is async then the graph can only be retrieved using the `asyncGet` API.\n *\n * @exportedAs angular2/di_errors\n */\nexport class AsyncBindingError extends AbstractBindingError {\n  // TODO(tbosch): Can't do key:Key as this results in a circular dependency!\n  constructor(key) {\n    super(key, function (keys:List) {\n      var first = stringify(ListWrapper.first(keys).token);\n      return `Cannot instantiate ${first} synchronously. ` +\n        `It is provided as a promise!${constructResolvingPath(keys)}`;\n    });\n  }\n}\n\n/**\n * Thrown when dependencies form a cycle.\n *\n * ## Example:\n *\n * ```javascript\n * class A {\n *   constructor(b:B) {}\n * }\n * class B {\n *   constructor(a:A) {}\n * }\n * ```\n *\n * Retrieving `A` or `B` throws a `CyclicDependencyError` as the graph above cannot be constructed.\n *\n * @exportedAs angular2/di_errors\n */\nexport class CyclicDependencyError extends AbstractBindingError {\n  // TODO(tbosch): Can't do key:Key as this results in a circular dependency!\n  constructor(key) {\n    super(key, function (keys:List) {\n      return `Cannot instantiate cyclic dependency!${constructResolvingPath(keys)}`;\n    });\n  }\n}\n\n/**\n * Thrown when a constructing type returns with an Error.\n *\n * The `InstantiationError` class contains the original error plus the dependency graph which caused this object to be\n * instantiated.\n *\n * @exportedAs angular2/di_errors\n */\nexport class InstantiationError extends AbstractBindingError {\n  // TODO(tbosch): Can't do key:Key as this results in a circular dependency!\n  constructor(originalException, key) {\n    super(key, function (keys:List) {\n      var first = stringify(ListWrapper.first(keys).token);\n      return `Error during instantiation of ${first}!${constructResolvingPath(keys)}.` +\n        ` ORIGINAL ERROR: ${originalException}`;\n    });\n  }\n}\n\n/**\n * Thrown when an object other then {@link Binding} (or `Type`) is passed to {@link Injector} creation.\n *\n * @exportedAs angular2/di_errors\n */\nexport class InvalidBindingError extends Error {\n  message:string;\n  constructor(binding) {\n    super();\n    this.message = `Invalid binding ${binding}`;\n  }\n\n  toString() {\n    return this.message;\n  }\n}\n\n/**\n * Thrown when the class has no annotation information.\n *\n * Lack of annotation information prevents the {@link Injector} from determining which dependencies need to be injected into\n * the constructor.\n *\n * @exportedAs angular2/di_errors\n */\nexport class NoAnnotationError extends Error {\n  message:string;\n  constructor(typeOrFunc) {\n    super();\n    this.message = `Cannot resolve all parameters for ${stringify(typeOrFunc)}.` +\n      ` Make sure they all have valid type or annotations.`;\n  }\n\n  toString() {\n    return this.message;\n  }\n}\n"]}