UNPKG

11.5 kBSource Map (JSON)View Raw
1{"version":3,"file":"reflective_errors.js","sourceRoot":"","sources":["../lib/reflective_errors.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { wrappedError } from './facade/errors';\nimport { ERROR_ORIGINAL_ERROR, getOriginalError } from './facade/errors';\nimport { stringify } from './facade/lang';\nimport { Type } from './facade/type';\n\nimport { ReflectiveInjector } from './reflective_injector';\nimport { ReflectiveKey } from './reflective_key';\n\nfunction findFirstClosedCycle(keys: any[]): any[] {\n const res: any[] = [];\n for (let i = 0; i < keys.length; ++i) {\n if (res.indexOf(keys[i]) > -1) {\n res.push(keys[i]);\n return res;\n }\n res.push(keys[i]);\n }\n return res;\n}\n\nfunction constructResolvingPath(keys: any[]): string {\n if (keys.length > 1) {\n const reversed = findFirstClosedCycle(keys.slice().reverse());\n const tokenStrs = reversed.map(k => stringify(k.token));\n return ' (' + tokenStrs.join(' -> ') + ')';\n }\n\n return '';\n}\n\nexport interface InjectionError extends Error {\n keys: ReflectiveKey[];\n injectors: ReflectiveInjector[];\n constructResolvingMessage: (this: InjectionError) => string;\n addKey(injector: ReflectiveInjector, key: ReflectiveKey): void;\n}\n\nfunction injectionError(\n injector: ReflectiveInjector,\n key: ReflectiveKey,\n constructResolvingMessage: (this: InjectionError) => string,\n originalError?: Error\n): InjectionError {\n const error = (originalError ? wrappedError('', originalError) : Error()) as InjectionError;\n error.addKey = addKey;\n error.keys = [key];\n error.injectors = [injector];\n error.constructResolvingMessage = constructResolvingMessage;\n error.message = error.constructResolvingMessage();\n (error as any)[ERROR_ORIGINAL_ERROR] = originalError;\n return error;\n}\n\nfunction addKey(this: InjectionError, injector: ReflectiveInjector, key: ReflectiveKey): void {\n this.injectors.push(injector);\n this.keys.push(key);\n this.message = this.constructResolvingMessage();\n}\n\n/**\n * Thrown when trying to retrieve a dependency by key from {@link Injector}, but the\n * {@link Injector} does not have a {@link Provider} for the given key.\n *\n * ### Example ([live demo](http://plnkr.co/edit/vq8D3FRB9aGbnWJqtEPE?p=preview))\n *\n * ```typescript\n * class A {\n * constructor(b:B) {}\n * }\n *\n * expect(() => Injector.resolveAndCreate([A])).toThrowError();\n * ```\n */\nexport function noProviderError(injector: ReflectiveInjector, key: ReflectiveKey): InjectionError {\n return injectionError(injector, key, function(this: InjectionError) {\n const first = stringify(this.keys[0].token);\n return `No provider for ${first}!${constructResolvingPath(this.keys)}`;\n });\n}\n\n/**\n * Thrown when dependencies form a cycle.\n *\n * ### Example ([live demo](http://plnkr.co/edit/wYQdNos0Tzql3ei1EV9j?p=info))\n *\n * ```typescript\n * var injector = Injector.resolveAndCreate([\n * {provide: \"one\", useFactory: (two) => \"two\", deps: [[new Inject(\"two\")]]},\n * {provide: \"two\", useFactory: (one) => \"one\", deps: [[new Inject(\"one\")]]}\n * ]);\n *\n * expect(() => injector.get(\"one\")).toThrowError();\n * ```\n *\n * Retrieving `A` or `B` throws a `CyclicDependencyError` as the graph above cannot be constructed.\n */\nexport function cyclicDependencyError(injector: ReflectiveInjector, key: ReflectiveKey): InjectionError {\n return injectionError(injector, key, function(this: InjectionError) {\n return `Cannot instantiate cyclic dependency!${constructResolvingPath(this.keys)}`;\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\n * this object to be instantiated.\n *\n * ### Example ([live demo](http://plnkr.co/edit/7aWYdcqTQsP0eNqEdUAf?p=preview))\n *\n * ```typescript\n * class A {\n * constructor() {\n * throw new Error('message');\n * }\n * }\n *\n * var injector = Injector.resolveAndCreate([A]);\n\n * try {\n * injector.get(A);\n * } catch (e) {\n * expect(e instanceof InstantiationError).toBe(true);\n * expect(e.originalException.message).toEqual(\"message\");\n * expect(e.originalStack).toBeDefined();\n * }\n * ```\n */\nexport function instantiationError(\n injector: ReflectiveInjector,\n originalException: any,\n originalStack: any,\n key: ReflectiveKey\n): InjectionError {\n return injectionError(\n injector,\n key,\n function(this: InjectionError) {\n const first = stringify(this.keys[0].token);\n return `${getOriginalError(this).message}: Error during instantiation of ${first}!${constructResolvingPath(this.keys)}.`;\n },\n originalException\n );\n}\n\n/**\n * Thrown when an object other then {@link Provider} (or `Type`) is passed to {@link Injector}\n * creation.\n *\n * ### Example ([live demo](http://plnkr.co/edit/YatCFbPAMCL0JSSQ4mvH?p=preview))\n *\n * ```typescript\n * expect(() => Injector.resolveAndCreate([\"not a type\"])).toThrowError();\n * ```\n */\nexport function invalidProviderError(provider: any) {\n return Error(`Invalid provider - only instances of Provider and Type are allowed, got: ${provider}`);\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\n * need to be injected into the constructor.\n *\n * ### Example ([live demo](http://plnkr.co/edit/rHnZtlNS7vJOPQ6pcVkm?p=preview))\n *\n * ```typescript\n * class A {\n * constructor(b) {}\n * }\n *\n * expect(() => Injector.resolveAndCreate([A])).toThrowError();\n * ```\n *\n * This error is also thrown when the class not marked with {@link Injectable} has parameter types.\n *\n * ```typescript\n * class B {}\n *\n * class A {\n * constructor(b:B) {} // no information about the parameter types of A is available at runtime.\n * }\n *\n * expect(() => Injector.resolveAndCreate([A,B])).toThrowError();\n * ```\n * @stable\n */\nexport function noAnnotationError(typeOrFunc: Type<any> | Function, params: any[][]): Error {\n const signature: string[] = [];\n for (let i = 0, ii = params.length; i < ii; i++) {\n const parameter = params[i];\n if (!parameter || parameter.length === 0) {\n signature.push('?');\n } else {\n signature.push(parameter.map(stringify).join(' '));\n }\n }\n return Error(\n \"Cannot resolve all parameters for '\" +\n stringify(typeOrFunc) +\n \"'(\" +\n signature.join(', ') +\n '). ' +\n \"Make sure that all the parameters are decorated with Inject or have valid type annotations and that '\" +\n stringify(typeOrFunc) +\n \"' is decorated with Injectable.\"\n );\n}\n\n/**\n * Thrown when getting an object by index.\n *\n * ### Example ([live demo](http://plnkr.co/edit/bRs0SX2OTQiJzqvjgl8P?p=preview))\n *\n * ```typescript\n * class A {}\n *\n * var injector = Injector.resolveAndCreate([A]);\n *\n * expect(() => injector.getAt(100)).toThrowError();\n * ```\n * @stable\n */\nexport function outOfBoundsError(index: number) {\n return Error(`Index ${index} is out-of-bounds.`);\n}\n\n// TODO: add a working example after alpha38 is released\n/**\n * Thrown when a multi provider and a regular provider are bound to the same token.\n *\n * ### Example\n *\n * ```typescript\n * expect(() => Injector.resolveAndCreate([\n * { provide: \"Strings\", useValue: \"string1\", multi: true},\n * { provide: \"Strings\", useValue: \"string2\", multi: false}\n * ])).toThrowError();\n * ```\n */\nexport function mixingMultiProvidersWithRegularProvidersError(provider1: any, provider2: any): Error {\n return Error(`Cannot mix multi providers and regular providers, got: ${provider1} ${provider2}`);\n}\n"]}
\No newline at end of file