UNPKG

benchpress

Version:

Benchpress - a framework for e2e performance tests

1,340 lines (1,339 loc) 297 kB
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ 'use strict';/** * @module * @description * The `di` module provides dependency injection container services. */ "use strict"; function __export(m) { for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; } var metadata_1 = require('./di/metadata'); exports.InjectMetadata = metadata_1.InjectMetadata; exports.OptionalMetadata = metadata_1.OptionalMetadata; exports.InjectableMetadata = metadata_1.InjectableMetadata; exports.SelfMetadata = metadata_1.SelfMetadata; exports.HostMetadata = metadata_1.HostMetadata; exports.SkipSelfMetadata = metadata_1.SkipSelfMetadata; exports.DependencyMetadata = metadata_1.DependencyMetadata; // we have to reexport * because Dart and TS export two different sets of types __export(require('./di/decorators')); var forward_ref_1 = require('./di/forward_ref'); exports.forwardRef = forward_ref_1.forwardRef; exports.resolveForwardRef = forward_ref_1.resolveForwardRef; var injector_1 = require('./di/injector'); exports.Injector = injector_1.Injector; var reflective_injector_1 = require('./di/reflective_injector'); exports.ReflectiveInjector = reflective_injector_1.ReflectiveInjector; var provider_1 = require('./di/provider'); exports.Binding = provider_1.Binding; exports.ProviderBuilder = provider_1.ProviderBuilder; exports.bind = provider_1.bind; exports.Provider = provider_1.Provider; exports.provide = provider_1.provide; var reflective_provider_1 = require('./di/reflective_provider'); exports.ResolvedReflectiveFactory = reflective_provider_1.ResolvedReflectiveFactory; exports.ReflectiveDependency = reflective_provider_1.ReflectiveDependency; var reflective_key_1 = require('./di/reflective_key'); exports.ReflectiveKey = reflective_key_1.ReflectiveKey; var reflective_exceptions_1 = require('./di/reflective_exceptions'); exports.NoProviderError = reflective_exceptions_1.NoProviderError; exports.AbstractProviderError = reflective_exceptions_1.AbstractProviderError; exports.CyclicDependencyError = reflective_exceptions_1.CyclicDependencyError; exports.InstantiationError = reflective_exceptions_1.InstantiationError; exports.InvalidProviderError = reflective_exceptions_1.InvalidProviderError; exports.NoAnnotationError = reflective_exceptions_1.NoAnnotationError; exports.OutOfBoundsError = reflective_exceptions_1.OutOfBoundsError; var opaque_token_1 = require('./di/opaque_token'); exports.OpaqueToken = opaque_token_1.OpaqueToken; },{"./di/decorators":2,"./di/forward_ref":3,"./di/injector":4,"./di/metadata":5,"./di/opaque_token":6,"./di/provider":7,"./di/reflective_exceptions":8,"./di/reflective_injector":9,"./di/reflective_key":10,"./di/reflective_provider":11}],2:[function(require,module,exports){ 'use strict';"use strict"; var metadata_1 = require('./metadata'); var decorators_1 = require('../util/decorators'); /** * Factory for creating {@link InjectMetadata}. */ exports.Inject = decorators_1.makeParamDecorator(metadata_1.InjectMetadata); /** * Factory for creating {@link OptionalMetadata}. */ exports.Optional = decorators_1.makeParamDecorator(metadata_1.OptionalMetadata); /** * Factory for creating {@link InjectableMetadata}. */ exports.Injectable = decorators_1.makeDecorator(metadata_1.InjectableMetadata); /** * Factory for creating {@link SelfMetadata}. */ exports.Self = decorators_1.makeParamDecorator(metadata_1.SelfMetadata); /** * Factory for creating {@link HostMetadata}. */ exports.Host = decorators_1.makeParamDecorator(metadata_1.HostMetadata); /** * Factory for creating {@link SkipSelfMetadata}. */ exports.SkipSelf = decorators_1.makeParamDecorator(metadata_1.SkipSelfMetadata); },{"../util/decorators":16,"./metadata":5}],3:[function(require,module,exports){ 'use strict';"use strict"; var lang_1 = require('angular2/src/facade/lang'); /** * Allows to refer to references which are not yet defined. * * For instance, `forwardRef` is used when the `token` which we need to refer to for the purposes of * DI is declared, * but not yet defined. It is also used when the `token` which we use when creating a query is not * yet defined. * * ### Example * {@example core/di/ts/forward_ref/forward_ref.ts region='forward_ref'} */ function forwardRef(forwardRefFn) { forwardRefFn.__forward_ref__ = forwardRef; forwardRefFn.toString = function () { return lang_1.stringify(this()); }; return forwardRefFn; } exports.forwardRef = forwardRef; /** * Lazily retrieves the reference value from a forwardRef. * * Acts as the identity function when given a non-forward-ref value. * * ### Example ([live demo](http://plnkr.co/edit/GU72mJrk1fiodChcmiDR?p=preview)) * * ```typescript * var ref = forwardRef(() => "refValue"); * expect(resolveForwardRef(ref)).toEqual("refValue"); * expect(resolveForwardRef("regularValue")).toEqual("regularValue"); * ``` * * See: {@link forwardRef} */ function resolveForwardRef(type) { if (lang_1.isFunction(type) && type.hasOwnProperty('__forward_ref__') && type.__forward_ref__ === forwardRef) { return type(); } else { return type; } } exports.resolveForwardRef = resolveForwardRef; },{"angular2/src/facade/lang":22}],4:[function(require,module,exports){ 'use strict';"use strict"; var lang_1 = require('angular2/src/facade/lang'); var exceptions_1 = require('angular2/src/facade/exceptions'); var _THROW_IF_NOT_FOUND = lang_1.CONST_EXPR(new Object()); exports.THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND; var Injector = (function () { function Injector() { } /** * Retrieves an instance from the injector based on the provided token. * If not found: * - Throws {@link NoProviderError} if no `notFoundValue` that is not equal to * Injector.THROW_IF_NOT_FOUND is given * - Returns the `notFoundValue` otherwise * * ### Example ([live demo](http://plnkr.co/edit/HeXSHg?p=preview)) * * ```typescript * var injector = ReflectiveInjector.resolveAndCreate([ * provide("validToken", {useValue: "Value"}) * ]); * expect(injector.get("validToken")).toEqual("Value"); * expect(() => injector.get("invalidToken")).toThrowError(); * ``` * * `Injector` returns itself when given `Injector` as a token. * * ```typescript * var injector = ReflectiveInjector.resolveAndCreate([]); * expect(injector.get(Injector)).toBe(injector); * ``` */ Injector.prototype.get = function (token, notFoundValue) { return exceptions_1.unimplemented(); }; Injector.THROW_IF_NOT_FOUND = _THROW_IF_NOT_FOUND; return Injector; }()); exports.Injector = Injector; },{"angular2/src/facade/exceptions":21,"angular2/src/facade/lang":22}],5:[function(require,module,exports){ 'use strict';"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var lang_1 = require("angular2/src/facade/lang"); /** * A parameter metadata that specifies a dependency. * * ### Example ([live demo](http://plnkr.co/edit/6uHYJK?p=preview)) * * ```typescript * class Engine {} * * @Injectable() * class Car { * engine; * constructor(@Inject("MyEngine") engine:Engine) { * this.engine = engine; * } * } * * var injector = Injector.resolveAndCreate([ * provide("MyEngine", {useClass: Engine}), * Car * ]); * * expect(injector.get(Car).engine instanceof Engine).toBe(true); * ``` * * When `@Inject()` is not present, {@link Injector} will use the type annotation of the parameter. * * ### Example * * ```typescript * class Engine {} * * @Injectable() * class Car { * constructor(public engine: Engine) {} //same as constructor(@Inject(Engine) engine:Engine) * } * * var injector = Injector.resolveAndCreate([Engine, Car]); * expect(injector.get(Car).engine instanceof Engine).toBe(true); * ``` */ var InjectMetadata = (function () { function InjectMetadata(token) { this.token = token; } InjectMetadata.prototype.toString = function () { return "@Inject(" + lang_1.stringify(this.token) + ")"; }; InjectMetadata = __decorate([ lang_1.CONST(), __metadata('design:paramtypes', [Object]) ], InjectMetadata); return InjectMetadata; }()); exports.InjectMetadata = InjectMetadata; /** * A parameter metadata that marks a dependency as optional. {@link Injector} provides `null` if * the dependency is not found. * * ### Example ([live demo](http://plnkr.co/edit/AsryOm?p=preview)) * * ```typescript * class Engine {} * * @Injectable() * class Car { * engine; * constructor(@Optional() engine:Engine) { * this.engine = engine; * } * } * * var injector = Injector.resolveAndCreate([Car]); * expect(injector.get(Car).engine).toBeNull(); * ``` */ var OptionalMetadata = (function () { function OptionalMetadata() { } OptionalMetadata.prototype.toString = function () { return "@Optional()"; }; OptionalMetadata = __decorate([ lang_1.CONST(), __metadata('design:paramtypes', []) ], OptionalMetadata); return OptionalMetadata; }()); exports.OptionalMetadata = OptionalMetadata; /** * `DependencyMetadata` is used by the framework to extend DI. * This is internal to Angular and should not be used directly. */ var DependencyMetadata = (function () { function DependencyMetadata() { } Object.defineProperty(DependencyMetadata.prototype, "token", { get: function () { return null; }, enumerable: true, configurable: true }); DependencyMetadata = __decorate([ lang_1.CONST(), __metadata('design:paramtypes', []) ], DependencyMetadata); return DependencyMetadata; }()); exports.DependencyMetadata = DependencyMetadata; /** * A marker metadata that marks a class as available to {@link Injector} for creation. * * ### Example ([live demo](http://plnkr.co/edit/Wk4DMQ?p=preview)) * * ```typescript * @Injectable() * class UsefulService {} * * @Injectable() * class NeedsService { * constructor(public service:UsefulService) {} * } * * var injector = Injector.resolveAndCreate([NeedsService, UsefulService]); * expect(injector.get(NeedsService).service instanceof UsefulService).toBe(true); * ``` * {@link Injector} will throw {@link NoAnnotationError} when trying to instantiate a class that * does not have `@Injectable` marker, as shown in the example below. * * ```typescript * class UsefulService {} * * class NeedsService { * constructor(public service:UsefulService) {} * } * * var injector = Injector.resolveAndCreate([NeedsService, UsefulService]); * expect(() => injector.get(NeedsService)).toThrowError(); * ``` */ var InjectableMetadata = (function () { function InjectableMetadata() { } InjectableMetadata = __decorate([ lang_1.CONST(), __metadata('design:paramtypes', []) ], InjectableMetadata); return InjectableMetadata; }()); exports.InjectableMetadata = InjectableMetadata; /** * Specifies that an {@link Injector} should retrieve a dependency only from itself. * * ### Example ([live demo](http://plnkr.co/edit/NeagAg?p=preview)) * * ```typescript * class Dependency { * } * * @Injectable() * class NeedsDependency { * dependency; * constructor(@Self() dependency:Dependency) { * this.dependency = dependency; * } * } * * var inj = Injector.resolveAndCreate([Dependency, NeedsDependency]); * var nd = inj.get(NeedsDependency); * * expect(nd.dependency instanceof Dependency).toBe(true); * * var inj = Injector.resolveAndCreate([Dependency]); * var child = inj.resolveAndCreateChild([NeedsDependency]); * expect(() => child.get(NeedsDependency)).toThrowError(); * ``` */ var SelfMetadata = (function () { function SelfMetadata() { } SelfMetadata.prototype.toString = function () { return "@Self()"; }; SelfMetadata = __decorate([ lang_1.CONST(), __metadata('design:paramtypes', []) ], SelfMetadata); return SelfMetadata; }()); exports.SelfMetadata = SelfMetadata; /** * Specifies that the dependency resolution should start from the parent injector. * * ### Example ([live demo](http://plnkr.co/edit/Wchdzb?p=preview)) * * ```typescript * class Dependency { * } * * @Injectable() * class NeedsDependency { * dependency; * constructor(@SkipSelf() dependency:Dependency) { * this.dependency = dependency; * } * } * * var parent = Injector.resolveAndCreate([Dependency]); * var child = parent.resolveAndCreateChild([NeedsDependency]); * expect(child.get(NeedsDependency).dependency instanceof Depedency).toBe(true); * * var inj = Injector.resolveAndCreate([Dependency, NeedsDependency]); * expect(() => inj.get(NeedsDependency)).toThrowError(); * ``` */ var SkipSelfMetadata = (function () { function SkipSelfMetadata() { } SkipSelfMetadata.prototype.toString = function () { return "@SkipSelf()"; }; SkipSelfMetadata = __decorate([ lang_1.CONST(), __metadata('design:paramtypes', []) ], SkipSelfMetadata); return SkipSelfMetadata; }()); exports.SkipSelfMetadata = SkipSelfMetadata; /** * Specifies that an injector should retrieve a dependency from any injector until reaching the * closest host. * * In Angular, a component element is automatically declared as a host for all the injectors in * its view. * * ### Example ([live demo](http://plnkr.co/edit/GX79pV?p=preview)) * * In the following example `App` contains `ParentCmp`, which contains `ChildDirective`. * So `ParentCmp` is the host of `ChildDirective`. * * `ChildDirective` depends on two services: `HostService` and `OtherService`. * `HostService` is defined at `ParentCmp`, and `OtherService` is defined at `App`. * *```typescript * class OtherService {} * class HostService {} * * @Directive({ * selector: 'child-directive' * }) * class ChildDirective { * constructor(@Optional() @Host() os:OtherService, @Optional() @Host() hs:HostService){ * console.log("os is null", os); * console.log("hs is NOT null", hs); * } * } * * @Component({ * selector: 'parent-cmp', * providers: [HostService], * template: ` * Dir: <child-directive></child-directive> * `, * directives: [ChildDirective] * }) * class ParentCmp { * } * * @Component({ * selector: 'app', * providers: [OtherService], * template: ` * Parent: <parent-cmp></parent-cmp> * `, * directives: [ParentCmp] * }) * class App { * } * * bootstrap(App); *``` */ var HostMetadata = (function () { function HostMetadata() { } HostMetadata.prototype.toString = function () { return "@Host()"; }; HostMetadata = __decorate([ lang_1.CONST(), __metadata('design:paramtypes', []) ], HostMetadata); return HostMetadata; }()); exports.HostMetadata = HostMetadata; },{"angular2/src/facade/lang":22}],6:[function(require,module,exports){ 'use strict';"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var lang_1 = require('angular2/src/facade/lang'); /** * Creates a token that can be used in a DI Provider. * * ### Example ([live demo](http://plnkr.co/edit/Ys9ezXpj2Mnoy3Uc8KBp?p=preview)) * * ```typescript * var t = new OpaqueToken("value"); * * var injector = Injector.resolveAndCreate([ * provide(t, {useValue: "bindingValue"}) * ]); * * expect(injector.get(t)).toEqual("bindingValue"); * ``` * * Using an `OpaqueToken` is preferable to using strings as tokens because of possible collisions * caused by multiple providers using the same string as two different tokens. * * Using an `OpaqueToken` is preferable to using an `Object` as tokens because it provides better * error messages. */ var OpaqueToken = (function () { function OpaqueToken(_desc) { this._desc = _desc; } OpaqueToken.prototype.toString = function () { return "Token " + this._desc; }; OpaqueToken = __decorate([ lang_1.CONST(), __metadata('design:paramtypes', [String]) ], OpaqueToken); return OpaqueToken; }()); exports.OpaqueToken = OpaqueToken; },{"angular2/src/facade/lang":22}],7:[function(require,module,exports){ 'use strict';"use strict"; var __extends = (this && this.__extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var lang_1 = require('angular2/src/facade/lang'); var exceptions_1 = require('angular2/src/facade/exceptions'); /** * Describes how the {@link Injector} should instantiate a given token. * * See {@link provide}. * * ### Example ([live demo](http://plnkr.co/edit/GNAyj6K6PfYg2NBzgwZ5?p%3Dpreview&p=preview)) * * ```javascript * var injector = Injector.resolveAndCreate([ * new Provider("message", { useValue: 'Hello' }) * ]); * * expect(injector.get("message")).toEqual('Hello'); * ``` */ var Provider = (function () { function Provider(token, _a) { var useClass = _a.useClass, useValue = _a.useValue, useExisting = _a.useExisting, useFactory = _a.useFactory, deps = _a.deps, multi = _a.multi; this.token = token; this.useClass = useClass; this.useValue = useValue; this.useExisting = useExisting; this.useFactory = useFactory; this.dependencies = deps; this._multi = multi; } Object.defineProperty(Provider.prototype, "multi", { // TODO: Provide a full working example after alpha38 is released. /** * Creates multiple providers matching the same token (a multi-provider). * * Multi-providers are used for creating pluggable service, where the system comes * with some default providers, and the user can register additional providers. * The combination of the default providers and the additional providers will be * used to drive the behavior of the system. * * ### Example * * ```typescript * var injector = Injector.resolveAndCreate([ * new Provider("Strings", { useValue: "String1", multi: true}), * new Provider("Strings", { useValue: "String2", multi: true}) * ]); * * expect(injector.get("Strings")).toEqual(["String1", "String2"]); * ``` * * Multi-providers and regular providers cannot be mixed. The following * will throw an exception: * * ```typescript * var injector = Injector.resolveAndCreate([ * new Provider("Strings", { useValue: "String1", multi: true }), * new Provider("Strings", { useValue: "String2"}) * ]); * ``` */ get: function () { return lang_1.normalizeBool(this._multi); }, enumerable: true, configurable: true }); Provider = __decorate([ lang_1.CONST(), __metadata('design:paramtypes', [Object, Object]) ], Provider); return Provider; }()); exports.Provider = Provider; /** * See {@link Provider} instead. * * @deprecated */ var Binding = (function (_super) { __extends(Binding, _super); function Binding(token, _a) { var toClass = _a.toClass, toValue = _a.toValue, toAlias = _a.toAlias, toFactory = _a.toFactory, deps = _a.deps, multi = _a.multi; _super.call(this, token, { useClass: toClass, useValue: toValue, useExisting: toAlias, useFactory: toFactory, deps: deps, multi: multi }); } Object.defineProperty(Binding.prototype, "toClass", { /** * @deprecated */ get: function () { return this.useClass; }, enumerable: true, configurable: true }); Object.defineProperty(Binding.prototype, "toAlias", { /** * @deprecated */ get: function () { return this.useExisting; }, enumerable: true, configurable: true }); Object.defineProperty(Binding.prototype, "toFactory", { /** * @deprecated */ get: function () { return this.useFactory; }, enumerable: true, configurable: true }); Object.defineProperty(Binding.prototype, "toValue", { /** * @deprecated */ get: function () { return this.useValue; }, enumerable: true, configurable: true }); Binding = __decorate([ lang_1.CONST(), __metadata('design:paramtypes', [Object, Object]) ], Binding); return Binding; }(Provider)); exports.Binding = Binding; /** * Creates a {@link Provider}. * * To construct a {@link Provider}, bind a `token` to either a class, a value, a factory function, * or * to an existing `token`. * See {@link ProviderBuilder} for more details. * * The `token` is most commonly a class or {@link OpaqueToken-class.html}. * * @deprecated */ function bind(token) { return new ProviderBuilder(token); } exports.bind = bind; /** * Helper class for the {@link bind} function. */ var ProviderBuilder = (function () { function ProviderBuilder(token) { this.token = token; } /** * Binds a DI token to a class. * * ### Example ([live demo](http://plnkr.co/edit/ZpBCSYqv6e2ud5KXLdxQ?p=preview)) * * Because `toAlias` and `toClass` are often confused, the example contains * both use cases for easy comparison. * * ```typescript * class Vehicle {} * * class Car extends Vehicle {} * * var injectorClass = Injector.resolveAndCreate([ * Car, * provide(Vehicle, {useClass: Car}) * ]); * var injectorAlias = Injector.resolveAndCreate([ * Car, * provide(Vehicle, {useExisting: Car}) * ]); * * expect(injectorClass.get(Vehicle)).not.toBe(injectorClass.get(Car)); * expect(injectorClass.get(Vehicle) instanceof Car).toBe(true); * * expect(injectorAlias.get(Vehicle)).toBe(injectorAlias.get(Car)); * expect(injectorAlias.get(Vehicle) instanceof Car).toBe(true); * ``` */ ProviderBuilder.prototype.toClass = function (type) { if (!lang_1.isType(type)) { throw new exceptions_1.BaseException("Trying to create a class provider but \"" + lang_1.stringify(type) + "\" is not a class!"); } return new Provider(this.token, { useClass: type }); }; /** * Binds a DI token to a value. * * ### Example ([live demo](http://plnkr.co/edit/G024PFHmDL0cJFgfZK8O?p=preview)) * * ```typescript * var injector = Injector.resolveAndCreate([ * provide('message', {useValue: 'Hello'}) * ]); * * expect(injector.get('message')).toEqual('Hello'); * ``` */ ProviderBuilder.prototype.toValue = function (value) { return new Provider(this.token, { useValue: value }); }; /** * Binds a DI token to an existing token. * * Angular will return the same instance as if the provided token was used. (This is * in contrast to `useClass` where a separate instance of `useClass` will be returned.) * * ### Example ([live demo](http://plnkr.co/edit/uBaoF2pN5cfc5AfZapNw?p=preview)) * * Because `toAlias` and `toClass` are often confused, the example contains * both use cases for easy comparison. * * ```typescript * class Vehicle {} * * class Car extends Vehicle {} * * var injectorAlias = Injector.resolveAndCreate([ * Car, * provide(Vehicle, {useExisting: Car}) * ]); * var injectorClass = Injector.resolveAndCreate([ * Car, * provide(Vehicle, {useClass: Car}) * ]); * * expect(injectorAlias.get(Vehicle)).toBe(injectorAlias.get(Car)); * expect(injectorAlias.get(Vehicle) instanceof Car).toBe(true); * * expect(injectorClass.get(Vehicle)).not.toBe(injectorClass.get(Car)); * expect(injectorClass.get(Vehicle) instanceof Car).toBe(true); * ``` */ ProviderBuilder.prototype.toAlias = function (aliasToken) { if (lang_1.isBlank(aliasToken)) { throw new exceptions_1.BaseException("Can not alias " + lang_1.stringify(this.token) + " to a blank value!"); } return new Provider(this.token, { useExisting: aliasToken }); }; /** * Binds a DI token to a function which computes the value. * * ### Example ([live demo](http://plnkr.co/edit/OejNIfTT3zb1iBxaIYOb?p=preview)) * * ```typescript * var injector = Injector.resolveAndCreate([ * provide(Number, {useFactory: () => { return 1+2; }}), * provide(String, {useFactory: (v) => { return "Value: " + v; }, deps: [Number]}) * ]); * * expect(injector.get(Number)).toEqual(3); * expect(injector.get(String)).toEqual('Value: 3'); * ``` */ ProviderBuilder.prototype.toFactory = function (factory, dependencies) { if (!lang_1.isFunction(factory)) { throw new exceptions_1.BaseException("Trying to create a factory provider but \"" + lang_1.stringify(factory) + "\" is not a function!"); } return new Provider(this.token, { useFactory: factory, deps: dependencies }); }; return ProviderBuilder; }()); exports.ProviderBuilder = ProviderBuilder; /** * Creates a {@link Provider}. * * See {@link Provider} for more details. * * <!-- TODO: improve the docs --> */ function provide(token, _a) { var useClass = _a.useClass, useValue = _a.useValue, useExisting = _a.useExisting, useFactory = _a.useFactory, deps = _a.deps, multi = _a.multi; return new Provider(token, { useClass: useClass, useValue: useValue, useExisting: useExisting, useFactory: useFactory, deps: deps, multi: multi }); } exports.provide = provide; },{"angular2/src/facade/exceptions":21,"angular2/src/facade/lang":22}],8:[function(require,module,exports){ 'use strict';"use strict"; var __extends = (this && this.__extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; var collection_1 = require('angular2/src/facade/collection'); var lang_1 = require('angular2/src/facade/lang'); var exceptions_1 = require('angular2/src/facade/exceptions'); function findFirstClosedCycle(keys) { var res = []; for (var i = 0; i < keys.length; ++i) { if (collection_1.ListWrapper.contains(res, keys[i])) { res.push(keys[i]); return res; } else { res.push(keys[i]); } } return res; } function constructResolvingPath(keys) { if (keys.length > 1) { var reversed = findFirstClosedCycle(collection_1.ListWrapper.reversed(keys)); var tokenStrs = reversed.map(function (k) { return lang_1.stringify(k.token); }); return " (" + tokenStrs.join(' -> ') + ")"; } else { return ""; } } /** * Base class for all errors arising from misconfigured providers. */ var AbstractProviderError = (function (_super) { __extends(AbstractProviderError, _super); function AbstractProviderError(injector, key, constructResolvingMessage) { _super.call(this, "DI Exception"); this.keys = [key]; this.injectors = [injector]; this.constructResolvingMessage = constructResolvingMessage; this.message = this.constructResolvingMessage(this.keys); } AbstractProviderError.prototype.addKey = function (injector, key) { this.injectors.push(injector); this.keys.push(key); this.message = this.constructResolvingMessage(this.keys); }; Object.defineProperty(AbstractProviderError.prototype, "context", { get: function () { return this.injectors[this.injectors.length - 1].debugContext(); }, enumerable: true, configurable: true }); return AbstractProviderError; }(exceptions_1.BaseException)); exports.AbstractProviderError = AbstractProviderError; /** * Thrown when trying to retrieve a dependency by `Key` from {@link Injector}, but the * {@link Injector} does not have a {@link Provider} for {@link Key}. * * ### Example ([live demo](http://plnkr.co/edit/vq8D3FRB9aGbnWJqtEPE?p=preview)) * * ```typescript * class A { * constructor(b:B) {} * } * * expect(() => Injector.resolveAndCreate([A])).toThrowError(); * ``` */ var NoProviderError = (function (_super) { __extends(NoProviderError, _super); function NoProviderError(injector, key) { _super.call(this, injector, key, function (keys) { var first = lang_1.stringify(collection_1.ListWrapper.first(keys).token); return "No provider for " + first + "!" + constructResolvingPath(keys); }); } return NoProviderError; }(AbstractProviderError)); exports.NoProviderError = NoProviderError; /** * Thrown when dependencies form a cycle. * * ### Example ([live demo](http://plnkr.co/edit/wYQdNos0Tzql3ei1EV9j?p=info)) * * ```typescript * var injector = Injector.resolveAndCreate([ * provide("one", {useFactory: (two) => "two", deps: [[new Inject("two")]]}), * provide("two", {useFactory: (one) => "one", deps: [[new Inject("one")]]}) * ]); * * expect(() => injector.get("one")).toThrowError(); * ``` * * Retrieving `A` or `B` throws a `CyclicDependencyError` as the graph above cannot be constructed. */ var CyclicDependencyError = (function (_super) { __extends(CyclicDependencyError, _super); function CyclicDependencyError(injector, key) { _super.call(this, injector, key, function (keys) { return "Cannot instantiate cyclic dependency!" + constructResolvingPath(keys); }); } return CyclicDependencyError; }(AbstractProviderError)); exports.CyclicDependencyError = CyclicDependencyError; /** * Thrown when a constructing type returns with an Error. * * The `InstantiationError` class contains the original error plus the dependency graph which caused * this object to be instantiated. * * ### Example ([live demo](http://plnkr.co/edit/7aWYdcqTQsP0eNqEdUAf?p=preview)) * * ```typescript * class A { * constructor() { * throw new Error('message'); * } * } * * var injector = Injector.resolveAndCreate([A]); * try { * injector.get(A); * } catch (e) { * expect(e instanceof InstantiationError).toBe(true); * expect(e.originalException.message).toEqual("message"); * expect(e.originalStack).toBeDefined(); * } * ``` */ var InstantiationError = (function (_super) { __extends(InstantiationError, _super); function InstantiationError(injector, originalException, originalStack, key) { _super.call(this, "DI Exception", originalException, originalStack, null); this.keys = [key]; this.injectors = [injector]; } InstantiationError.prototype.addKey = function (injector, key) { this.injectors.push(injector); this.keys.push(key); }; Object.defineProperty(InstantiationError.prototype, "wrapperMessage", { get: function () { var first = lang_1.stringify(collection_1.ListWrapper.first(this.keys).token); return "Error during instantiation of " + first + "!" + constructResolvingPath(this.keys) + "."; }, enumerable: true, configurable: true }); Object.defineProperty(InstantiationError.prototype, "causeKey", { get: function () { return this.keys[0]; }, enumerable: true, configurable: true }); Object.defineProperty(InstantiationError.prototype, "context", { get: function () { return this.injectors[this.injectors.length - 1].debugContext(); }, enumerable: true, configurable: true }); return InstantiationError; }(exceptions_1.WrappedException)); exports.InstantiationError = InstantiationError; /** * Thrown when an object other then {@link Provider} (or `Type`) is passed to {@link Injector} * creation. * * ### Example ([live demo](http://plnkr.co/edit/YatCFbPAMCL0JSSQ4mvH?p=preview)) * * ```typescript * expect(() => Injector.resolveAndCreate(["not a type"])).toThrowError(); * ``` */ var InvalidProviderError = (function (_super) { __extends(InvalidProviderError, _super); function InvalidProviderError(provider) { _super.call(this, "Invalid provider - only instances of Provider and Type are allowed, got: " + provider.toString()); } return InvalidProviderError; }(exceptions_1.BaseException)); exports.InvalidProviderError = InvalidProviderError; /** * Thrown when the class has no annotation information. * * Lack of annotation information prevents the {@link Injector} from determining which dependencies * need to be injected into the constructor. * * ### Example ([live demo](http://plnkr.co/edit/rHnZtlNS7vJOPQ6pcVkm?p=preview)) * * ```typescript * class A { * constructor(b) {} * } * * expect(() => Injector.resolveAndCreate([A])).toThrowError(); * ``` * * This error is also thrown when the class not marked with {@link Injectable} has parameter types. * * ```typescript * class B {} * * class A { * constructor(b:B) {} // no information about the parameter types of A is available at runtime. * } * * expect(() => Injector.resolveAndCreate([A,B])).toThrowError(); * ``` */ var NoAnnotationError = (function (_super) { __extends(NoAnnotationError, _super); function NoAnnotationError(typeOrFunc, params) { _super.call(this, NoAnnotationError._genMessage(typeOrFunc, params)); } NoAnnotationError._genMessage = function (typeOrFunc, params) { var signature = []; for (var i = 0, ii = params.length; i < ii; i++) { var parameter = params[i]; if (lang_1.isBlank(parameter) || parameter.length == 0) { signature.push('?'); } else { signature.push(parameter.map(lang_1.stringify).join(' ')); } } return "Cannot resolve all parameters for '" + lang_1.stringify(typeOrFunc) + "'(" + signature.join(', ') + "). " + "Make sure that all the parameters are decorated with Inject or have valid type annotations and that '" + lang_1.stringify(typeOrFunc) + "' is decorated with Injectable."; }; return NoAnnotationError; }(exceptions_1.BaseException)); exports.NoAnnotationError = NoAnnotationError; /** * Thrown when getting an object by index. * * ### Example ([live demo](http://plnkr.co/edit/bRs0SX2OTQiJzqvjgl8P?p=preview)) * * ```typescript * class A {} * * var injector = Injector.resolveAndCreate([A]); * * expect(() => injector.getAt(100)).toThrowError(); * ``` */ var OutOfBoundsError = (function (_super) { __extends(OutOfBoundsError, _super); function OutOfBoundsError(index) { _super.call(this, "Index " + index + " is out-of-bounds."); } return OutOfBoundsError; }(exceptions_1.BaseException)); exports.OutOfBoundsError = OutOfBoundsError; // TODO: add a working example after alpha38 is released /** * Thrown when a multi provider and a regular provider are bound to the same token. * * ### Example * * ```typescript * expect(() => Injector.resolveAndCreate([ * new Provider("Strings", {useValue: "string1", multi: true}), * new Provider("Strings", {useValue: "string2", multi: false}) * ])).toThrowError(); * ``` */ var MixingMultiProvidersWithRegularProvidersError = (function (_super) { __extends(MixingMultiProvidersWithRegularProvidersError, _super); function MixingMultiProvidersWithRegularProvidersError(provider1, provider2) { _super.call(this, "Cannot mix multi providers and regular providers, got: " + provider1.toString() + " " + provider2.toString()); } return MixingMultiProvidersWithRegularProvidersError; }(exceptions_1.BaseException)); exports.MixingMultiProvidersWithRegularProvidersError = MixingMultiProvidersWithRegularProvidersError; },{"angular2/src/facade/collection":19,"angular2/src/facade/exceptions":21,"angular2/src/facade/lang":22}],9:[function(require,module,exports){ 'use strict';"use strict"; var collection_1 = require('angular2/src/facade/collection'); var reflective_provider_1 = require('./reflective_provider'); var reflective_exceptions_1 = require('./reflective_exceptions'); var lang_1 = require('angular2/src/facade/lang'); var exceptions_1 = require('angular2/src/facade/exceptions'); var reflective_key_1 = require('./reflective_key'); var metadata_1 = require('./metadata'); var injector_1 = require('./injector'); var __unused; // avoid unused import when Type union types are erased // Threshold for the dynamic version var _MAX_CONSTRUCTION_COUNTER = 10; var UNDEFINED = lang_1.CONST_EXPR(new Object()); var ReflectiveProtoInjectorInlineStrategy = (function () { function ReflectiveProtoInjectorInlineStrategy(protoEI, providers) { this.provider0 = null; this.provider1 = null; this.provider2 = null; this.provider3 = null; this.provider4 = null; this.provider5 = null; this.provider6 = null; this.provider7 = null; this.provider8 = null; this.provider9 = null; this.keyId0 = null; this.keyId1 = null; this.keyId2 = null; this.keyId3 = null; this.keyId4 = null; this.keyId5 = null; this.keyId6 = null; this.keyId7 = null; this.keyId8 = null; this.keyId9 = null; var length = providers.length; if (length > 0) { this.provider0 = providers[0]; this.keyId0 = providers[0].key.id; } if (length > 1) { this.provider1 = providers[1]; this.keyId1 = providers[1].key.id; } if (length > 2) { this.provider2 = providers[2]; this.keyId2 = providers[2].key.id; } if (length > 3) { this.provider3 = providers[3]; this.keyId3 = providers[3].key.id; } if (length > 4) { this.provider4 = providers[4]; this.keyId4 = providers[4].key.id; } if (length > 5) { this.provider5 = providers[5]; this.keyId5 = providers[5].key.id; } if (length > 6) { this.provider6 = providers[6]; this.keyId6 = providers[6].key.id; } if (length > 7) { this.provider7 = providers[7]; this.keyId7 = providers[7].key.id; } if (length > 8) { this.provider8 = providers[8]; this.keyId8 = providers[8].key.id; } if (length > 9) { this.provider9 = providers[9]; this.keyId9 = providers[9].key.id; } } ReflectiveProtoInjectorInlineStrategy.prototype.getProviderAtIndex = function (index) { if (index == 0) return this.provider0; if (index == 1) return this.provider1; if (index == 2) return this.provider2; if (index == 3) return this.provider3; if (index == 4) return this.provider4; if (index == 5) return this.provider5; if (index == 6) return this.provider6; if (index == 7) return this.provider7; if (index == 8) return this.provider8; if (index == 9) return this.provider9; throw new reflective_exceptions_1.OutOfBoundsError(index); }; ReflectiveProtoInjectorInlineStrategy.prototype.createInjectorStrategy = function (injector) { return new ReflectiveInjectorInlineStrategy(injector, this); }; return ReflectiveProtoInjectorInlineStrategy; }()); exports.ReflectiveProtoInjectorInlineStrategy = ReflectiveProtoInjectorInlineStrategy; var ReflectiveProtoInjectorDynamicStrategy = (function () { function ReflectiveProtoInjectorDynamicStrategy(protoInj, providers) { this.providers = providers; var len = providers.length; this.keyIds = collection_1.ListWrapper.createFixedSize(len); for (var i = 0; i < len; i++) { this.keyIds[i] = providers[i].key.id; } } ReflectiveProtoInjectorDynamicStrategy.prototype.getProviderAtIndex = function (index) { if (index < 0 || index >= this.providers.length) { throw new reflective_exceptions_1.OutOfBoundsError(index); } return this.providers[index]; }; ReflectiveProtoInjectorDynamicStrategy.prototype.createInjectorStrategy = function (ei) { return new ReflectiveInjectorDynamicStrategy(this, ei); }; return ReflectiveProtoInjectorDynamicStrategy; }()); exports.ReflectiveProtoInjectorDynamicStrategy = ReflectiveProtoInjectorDynamicStrategy; var ReflectiveProtoInjector = (function () { function ReflectiveProtoInjector(providers) { this.numberOfProviders = providers.length; this._strategy = providers.length > _MAX_CONSTRUCTION_COUNTER ? new ReflectiveProtoInjectorDynamicStrategy(this, providers) : new ReflectiveProtoInjectorInlineStrategy(this, providers); } ReflectiveProtoInjector.fromResolvedProviders = function (providers) { return new ReflectiveProtoInjector(providers); }; ReflectiveProtoInjector.prototype.getProviderAtIndex = function (index) { return this._strategy.getProviderAtIndex(index); }; return ReflectiveProtoInjector; }()); exports.ReflectiveProtoInjector = ReflectiveProtoInjector; var ReflectiveInjectorInlineStrategy = (function () { function ReflectiveInjectorInlineStrategy(injector, protoStrategy) { this.injector = injector; this.protoStrategy = protoStrategy; this.obj0 = UNDEFINED; this.obj1 = UNDEFINED; this.obj2 = UNDEFINED; this.obj3 = UNDEFINED; this.obj4 = UNDEFINED; this.obj5 = UNDEFINED; this.obj6 = UNDEFINED; this.obj7 = UNDEFINED; this.obj8 = UNDEFINED; this.obj9 = UNDEFINED; } ReflectiveInjectorInlineStrategy.prototype.resetConstructionCounter = function () { this.injector._constructionCounter = 0; }; ReflectiveInjectorInlineStrategy.prototype.instantiateProvider = function (provider) { return this.injector._new(provider); }; ReflectiveInjectorInlineStrategy.prototype.getObjByKeyId = function (keyId) { var p = this.protoStrategy; var inj = this.injector; if (p.keyId0 === keyId) { if (this.obj0 === UNDEFINED) { this.obj0 = inj._new(p.provider0); } return this.obj0; } if (p.keyId1 === keyId) { if (this.obj1 === UNDEFINED) { this.obj1 = inj._new(p.provider1); } return this.obj1; } if (p.keyId2 === keyId) { if (this.obj2 === UNDEFINED) { this.obj2 = inj._new(p.provider2); } return this.obj2; } if (p.keyId3 === keyId) { if (this.obj3 === UNDEFINED) { this.obj3 = inj._new(p.provider3); } return this.obj3; } if (p.keyId4 === keyId) { if (this.obj4 === UNDEFINED) { this.obj4 = inj._new(p.provider4); } return this.obj4; } if (p.keyId5 === keyId) { if (this.obj5 === UNDEFINED) { this.obj5 = inj._new(p.provider5); } return this.obj5; } if (p.keyId6 === keyId) { if (this.obj6 === UNDEFINED) { this.obj6 = inj._new(p.provider6); } return this.obj6; } if (p.keyId7 === keyId) { if (this.obj7 === UNDEFINED) { this.obj7 = inj._new(p.provider7); } return this.obj7; } if (p.keyId8 === keyId) { if (this.obj8 === UNDEFINED) { this.obj8 = inj._new(p.provider8); } return this.obj8; } if (p.keyId9 === keyId) { if (this.obj9 === UNDEFINED) { this.obj9 = inj._new(p.provider9); } return this.obj9; } return UNDEFINED; }; ReflectiveInjectorInlineStrategy.prototype.getObjAtIndex = function (index) { if (index == 0) return this.obj0; if (index == 1) return this.obj1; if (index == 2) return this.obj2; if (index == 3) return this.obj3; if (index == 4) return this.obj4; if (index == 5) return this.obj5; if (index == 6) return this.obj6; if (index == 7) return this.obj7; if (index == 8) return this.obj8; if (index == 9) return this.obj9; throw new reflective_exceptions_1.OutOfBoundsError(index); }; ReflectiveInjectorInlineStrategy.prototype.getMaxNumberOfObjects = function () { return _MAX_CONSTRUCTION_COUNTER; }; return ReflectiveInjectorInlineStrategy; }()); exports.ReflectiveInjectorInlineStrategy = ReflectiveInjectorInlineStrategy; var ReflectiveInjectorDynamicStrategy = (function () { function ReflectiveInjectorDynamicStrategy(protoStrategy, injector) { this.protoStrategy = protoStrategy; this.injector = injector; this.objs = collection_1.ListWrapper.createFixedSize(protoStrategy.providers.length); collection_1.ListWrapper.fill(this.objs, UNDEFINED); } ReflectiveInjectorDynamicStrategy.prototype.resetConstructionCounter = function () { this.injector._constructionCounter = 0; }; ReflectiveInjectorDynamicStrategy.prototype.instantiatePr