UNPKG

angular2

Version:

Angular 2 - a web framework for modern web apps

367 lines (366 loc) 14.1 kB
"use strict"; Object.defineProperties(module.exports, { Injector: {get: function() { return Injector; }}, __esModule: {value: true} }); var $__angular2_47_src_47_facade_47_collection__, $__binding__, $__exceptions__, $__angular2_47_src_47_facade_47_lang__, $__angular2_47_src_47_facade_47_async__, $__key__; var $__0 = ($__angular2_47_src_47_facade_47_collection__ = require("angular2/src/facade/collection"), $__angular2_47_src_47_facade_47_collection__ && $__angular2_47_src_47_facade_47_collection__.__esModule && $__angular2_47_src_47_facade_47_collection__ || {default: $__angular2_47_src_47_facade_47_collection__}), Map = $__0.Map, List = $__0.List, MapWrapper = $__0.MapWrapper, ListWrapper = $__0.ListWrapper; var $__1 = ($__binding__ = require("./binding"), $__binding__ && $__binding__.__esModule && $__binding__ || {default: $__binding__}), ResolvedBinding = $__1.ResolvedBinding, Binding = $__1.Binding, BindingBuilder = $__1.BindingBuilder, bind = $__1.bind; var $__2 = ($__exceptions__ = require("./exceptions"), $__exceptions__ && $__exceptions__.__esModule && $__exceptions__ || {default: $__exceptions__}), AbstractBindingError = $__2.AbstractBindingError, NoBindingError = $__2.NoBindingError, AsyncBindingError = $__2.AsyncBindingError, CyclicDependencyError = $__2.CyclicDependencyError, InstantiationError = $__2.InstantiationError, InvalidBindingError = $__2.InvalidBindingError; var $__3 = ($__angular2_47_src_47_facade_47_lang__ = require("angular2/src/facade/lang"), $__angular2_47_src_47_facade_47_lang__ && $__angular2_47_src_47_facade_47_lang__.__esModule && $__angular2_47_src_47_facade_47_lang__ || {default: $__angular2_47_src_47_facade_47_lang__}), FunctionWrapper = $__3.FunctionWrapper, Type = $__3.Type, isPresent = $__3.isPresent, isBlank = $__3.isBlank; var $__4 = ($__angular2_47_src_47_facade_47_async__ = require("angular2/src/facade/async"), $__angular2_47_src_47_facade_47_async__ && $__angular2_47_src_47_facade_47_async__.__esModule && $__angular2_47_src_47_facade_47_async__ || {default: $__angular2_47_src_47_facade_47_async__}), Promise = $__4.Promise, PromiseWrapper = $__4.PromiseWrapper; var Key = ($__key__ = require("./key"), $__key__ && $__key__.__esModule && $__key__ || {default: $__key__}).Key; var _constructing = new Object(); var _notFound = new Object(); var _Waiting = function _Waiting(promise) { this.promise = promise; }; ($traceurRuntime.createClass)(_Waiting, {}, {}); Object.defineProperty(_Waiting, "parameters", {get: function() { return [[Promise]]; }}); function _isWaiting(obj) { return obj instanceof _Waiting; } var Injector = function Injector(bindings, parent, defaultBindings) { this._bindings = bindings; this._instances = this._createInstances(); this._parent = parent; this._defaultBindings = defaultBindings; this._asyncStrategy = new _AsyncInjectorStrategy(this); this._syncStrategy = new _SyncInjectorStrategy(this); }; var $Injector = Injector; ($traceurRuntime.createClass)(Injector, { get: function(token) { return this._getByKey(Key.get(token), false, false, false); }, getOptional: function(token) { return this._getByKey(Key.get(token), false, false, true); }, asyncGet: function(token) { return this._getByKey(Key.get(token), true, false, false); }, resolveAndCreateChild: function(bindings) { return new $Injector($Injector.resolve(bindings), this, false); }, createChildFromResolved: function(bindings) { return new $Injector(bindings, this, false); }, _createInstances: function() { return ListWrapper.createFixedSize(Key.numberOfKeys + 1); }, _getByKey: function(key, returnPromise, returnLazy, optional) { var $__6 = this; if (returnLazy) { return (function() { return $__6._getByKey(key, returnPromise, false, optional); }); } var strategy = returnPromise ? this._asyncStrategy : this._syncStrategy; var instance = strategy.readFromCache(key); if (instance !== _notFound) return instance; instance = strategy.instantiate(key); if (instance !== _notFound) return instance; if (isPresent(this._parent)) { return this._parent._getByKey(key, returnPromise, returnLazy, optional); } if (optional) { return null; } else { throw new NoBindingError(key); } }, _resolveDependencies: function(key, binding, forceAsync) { var $__6 = this; try { var getDependency = (function(d) { return $__6._getByKey(d.key, forceAsync || d.asPromise, d.lazy, d.optional); }); return ListWrapper.map(binding.dependencies, getDependency); } catch (e) { this._clear(key); if (e instanceof AbstractBindingError) e.addKey(key); throw e; } }, _getInstance: function(key) { if (this._instances.length <= key.id) return null; return ListWrapper.get(this._instances, key.id); }, _setInstance: function(key, obj) { ListWrapper.set(this._instances, key.id, obj); }, _getBinding: function(key) { var binding = this._bindings.length <= key.id ? null : ListWrapper.get(this._bindings, key.id); if (isBlank(binding) && this._defaultBindings) { return bind(key.token).toClass(key.token).resolve(); } else { return binding; } }, _markAsConstructing: function(key) { this._setInstance(key, _constructing); }, _clear: function(key) { this._setInstance(key, null); } }, { resolve: function(bindings) { var resolvedBindings = _resolveBindings(bindings); var flatten = _flattenBindings(resolvedBindings, MapWrapper.create()); return _createListOfBindings(flatten); }, resolveAndCreate: function(bindings) { var $__9; var $__8 = arguments[1] !== (void 0) ? arguments[1] : {}, defaultBindings = ($__9 = $__8.defaultBindings) === void 0 ? false : $__9; return new $Injector($Injector.resolve(bindings), null, defaultBindings); }, fromResolvedBindings: function(bindings) { var $__9; var $__8 = arguments[1] !== (void 0) ? arguments[1] : {}, defaultBindings = ($__9 = $__8.defaultBindings) === void 0 ? false : $__9; return new $Injector(bindings, null, defaultBindings); } }); Object.defineProperty(Injector, "parameters", {get: function() { return [[$traceurRuntime.genericType(List, ResolvedBinding)], [Injector], [$traceurRuntime.type.boolean]]; }}); Object.defineProperty(Injector.resolve, "parameters", {get: function() { return [[List]]; }}); Object.defineProperty(Injector.resolveAndCreate, "parameters", {get: function() { return [[List], []]; }}); Object.defineProperty(Injector.fromResolvedBindings, "parameters", {get: function() { return [[$traceurRuntime.genericType(List, ResolvedBinding)], []]; }}); Object.defineProperty(Injector.prototype.resolveAndCreateChild, "parameters", {get: function() { return [[List]]; }}); Object.defineProperty(Injector.prototype.createChildFromResolved, "parameters", {get: function() { return [[$traceurRuntime.genericType(List, ResolvedBinding)]]; }}); Object.defineProperty(Injector.prototype._getByKey, "parameters", {get: function() { return [[Key], [$traceurRuntime.type.boolean], [$traceurRuntime.type.boolean], [$traceurRuntime.type.boolean]]; }}); Object.defineProperty(Injector.prototype._resolveDependencies, "parameters", {get: function() { return [[Key], [ResolvedBinding], [$traceurRuntime.type.boolean]]; }}); Object.defineProperty(Injector.prototype._getInstance, "parameters", {get: function() { return [[Key]]; }}); Object.defineProperty(Injector.prototype._setInstance, "parameters", {get: function() { return [[Key], []]; }}); Object.defineProperty(Injector.prototype._getBinding, "parameters", {get: function() { return [[Key]]; }}); Object.defineProperty(Injector.prototype._markAsConstructing, "parameters", {get: function() { return [[Key]]; }}); Object.defineProperty(Injector.prototype._clear, "parameters", {get: function() { return [[Key]]; }}); var _SyncInjectorStrategy = function _SyncInjectorStrategy(injector) { this.injector = injector; }; ($traceurRuntime.createClass)(_SyncInjectorStrategy, { readFromCache: function(key) { if (key.token === Injector) { return this.injector; } var instance = this.injector._getInstance(key); if (instance === _constructing) { throw new CyclicDependencyError(key); } else if (isPresent(instance) && !_isWaiting(instance)) { return instance; } else { return _notFound; } }, instantiate: function(key) { var binding = this.injector._getBinding(key); if (isBlank(binding)) return _notFound; if (binding.providedAsPromise) throw new AsyncBindingError(key); this.injector._markAsConstructing(key); var deps = this.injector._resolveDependencies(key, binding, false); return this._createInstance(key, binding, deps); }, _createInstance: function(key, binding, deps) { try { var instance = FunctionWrapper.apply(binding.factory, deps); this.injector._setInstance(key, instance); return instance; } catch (e) { this.injector._clear(key); throw new InstantiationError(e, key); } } }, {}); Object.defineProperty(_SyncInjectorStrategy, "parameters", {get: function() { return [[Injector]]; }}); Object.defineProperty(_SyncInjectorStrategy.prototype.readFromCache, "parameters", {get: function() { return [[Key]]; }}); Object.defineProperty(_SyncInjectorStrategy.prototype.instantiate, "parameters", {get: function() { return [[Key]]; }}); Object.defineProperty(_SyncInjectorStrategy.prototype._createInstance, "parameters", {get: function() { return [[Key], [ResolvedBinding], [List]]; }}); var _AsyncInjectorStrategy = function _AsyncInjectorStrategy(injector) { this.injector = injector; }; ($traceurRuntime.createClass)(_AsyncInjectorStrategy, { readFromCache: function(key) { if (key.token === Injector) { return PromiseWrapper.resolve(this.injector); } var instance = this.injector._getInstance(key); if (instance === _constructing) { throw new CyclicDependencyError(key); } else if (_isWaiting(instance)) { return instance.promise; } else if (isPresent(instance)) { return PromiseWrapper.resolve(instance); } else { return _notFound; } }, instantiate: function(key) { var $__6 = this; var binding = this.injector._getBinding(key); if (isBlank(binding)) return _notFound; this.injector._markAsConstructing(key); var deps = this.injector._resolveDependencies(key, binding, true); var depsPromise = PromiseWrapper.all(deps); var promise = PromiseWrapper.then(depsPromise, null, (function(e) { return $__6._errorHandler(key, e); })).then((function(deps) { return $__6._findOrCreate(key, binding, deps); })).then((function(instance) { return $__6._cacheInstance(key, instance); })); this.injector._setInstance(key, new _Waiting(promise)); return promise; }, _errorHandler: function(key, e) { if (e instanceof AbstractBindingError) e.addKey(key); return PromiseWrapper.reject(e); }, _findOrCreate: function(key, binding, deps) { try { var instance = this.injector._getInstance(key); if (!_isWaiting(instance)) return instance; return FunctionWrapper.apply(binding.factory, deps); } catch (e) { this.injector._clear(key); throw new InstantiationError(e, key); } }, _cacheInstance: function(key, instance) { this.injector._setInstance(key, instance); return instance; } }, {}); Object.defineProperty(_AsyncInjectorStrategy, "parameters", {get: function() { return [[Injector]]; }}); Object.defineProperty(_AsyncInjectorStrategy.prototype.readFromCache, "parameters", {get: function() { return [[Key]]; }}); Object.defineProperty(_AsyncInjectorStrategy.prototype.instantiate, "parameters", {get: function() { return [[Key]]; }}); Object.defineProperty(_AsyncInjectorStrategy.prototype._errorHandler, "parameters", {get: function() { return [[Key], []]; }}); Object.defineProperty(_AsyncInjectorStrategy.prototype._findOrCreate, "parameters", {get: function() { return [[Key], [ResolvedBinding], [List]]; }}); function _resolveBindings(bindings) { var resolvedList = ListWrapper.createFixedSize(bindings.length); for (var i = 0; i < bindings.length; i++) { var unresolved = bindings[i]; var resolved = void 0; if (unresolved instanceof ResolvedBinding) { resolved = unresolved; } else if (unresolved instanceof Type) { resolved = bind(unresolved).toClass(unresolved).resolve(); } else if (unresolved instanceof Binding) { resolved = unresolved.resolve(); } else if (unresolved instanceof List) { resolved = _resolveBindings(unresolved); } else if (unresolved instanceof BindingBuilder) { throw new InvalidBindingError(unresolved.token); } else { throw new InvalidBindingError(unresolved); } resolvedList[i] = resolved; } return resolvedList; } Object.defineProperty(_resolveBindings, "parameters", {get: function() { return [[List]]; }}); function _createListOfBindings(flattenedBindings) { var bindings = ListWrapper.createFixedSize(Key.numberOfKeys + 1); MapWrapper.forEach(flattenedBindings, (function(v, keyId) { return bindings[keyId] = v; })); return bindings; } function _flattenBindings(bindings, res) { ListWrapper.forEach(bindings, function(b) { if (b instanceof ResolvedBinding) { MapWrapper.set(res, b.key.id, b); } else if (b instanceof List) { _flattenBindings(b, res); } }); return res; } Object.defineProperty(_flattenBindings, "parameters", {get: function() { return [[List], [Map]]; }}); //# sourceMappingURL=injector.js.map //# sourceMappingURL=./injector.map