UNPKG

@glimmer/di

Version:

Dependency injection support for Glimmer applications.

105 lines (91 loc) 10.7 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Registry = function () { function Registry(options) { _classCallCheck(this, Registry); this._registrations = {}; this._registeredOptions = {}; this._registeredInjections = {}; if (options && options.fallback) { this._fallback = options.fallback; } } Registry.prototype.register = function register(specifier, factoryDefinition, options) { this._registrations[specifier] = factoryDefinition; if (options) { this._registeredOptions[specifier] = options; } }; Registry.prototype.registration = function registration(specifier) { var registration = this._registrations[specifier]; if (registration === undefined && this._fallback) { registration = this._fallback.registration(specifier); } return registration; }; Registry.prototype.unregister = function unregister(specifier) { delete this._registrations[specifier]; delete this._registeredOptions[specifier]; delete this._registeredInjections[specifier]; }; Registry.prototype.registerOption = function registerOption(specifier, option, value) { var options = this._registeredOptions[specifier]; if (!options) { options = {}; this._registeredOptions[specifier] = options; } options[option] = value; }; Registry.prototype.registeredOption = function registeredOption(specifier, option) { var result = void 0; var options = this.registeredOptions(specifier); if (options) { result = options[option]; } if (result === undefined && this._fallback !== undefined) { result = this._fallback.registeredOption(specifier, option); } return result; }; Registry.prototype.registeredOptions = function registeredOptions(specifier) { var options = this._registeredOptions[specifier]; if (options === undefined) { var type = specifier.split(':')[0]; options = this._registeredOptions[type]; } return options; }; Registry.prototype.unregisterOption = function unregisterOption(specifier, option) { var options = this._registeredOptions[specifier]; if (options) { delete options[option]; } }; Registry.prototype.registerInjection = function registerInjection(specifier, property, source) { var injections = this._registeredInjections[specifier]; if (injections === undefined) { this._registeredInjections[specifier] = injections = []; } injections.push({ property: property, source: source }); }; Registry.prototype.registeredInjections = function registeredInjections(specifier) { var type = specifier.split(':')[0]; var injections = this._fallback ? this._fallback.registeredInjections(specifier) : []; Array.prototype.push.apply(injections, this._registeredInjections[type]); Array.prototype.push.apply(injections, this._registeredInjections[specifier]); return injections; }; return Registry; }(); exports.default = Registry; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlZ2lzdHJ5LmpzIl0sIm5hbWVzIjpbIlJlZ2lzdHJ5Iiwib3B0aW9ucyIsInJlZ2lzdGVyIiwic3BlY2lmaWVyIiwiZmFjdG9yeURlZmluaXRpb24iLCJyZWdpc3RyYXRpb24iLCJ1bnJlZ2lzdGVyIiwicmVnaXN0ZXJPcHRpb24iLCJvcHRpb24iLCJ2YWx1ZSIsInJlZ2lzdGVyZWRPcHRpb24iLCJyZXN1bHQiLCJyZWdpc3RlcmVkT3B0aW9ucyIsInR5cGUiLCJ1bnJlZ2lzdGVyT3B0aW9uIiwicmVnaXN0ZXJJbmplY3Rpb24iLCJwcm9wZXJ0eSIsInNvdXJjZSIsImluamVjdGlvbnMiLCJyZWdpc3RlcmVkSW5qZWN0aW9ucyIsIkFycmF5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQUFxQkEsVztBQUNqQixhQUFBLFFBQUEsQ0FBQSxPQUFBLEVBQXFCO0FBQUEsd0JBQUEsSUFBQSxFQUFBLFFBQUE7O0FBQ2pCLGFBQUEsY0FBQSxHQUFBLEVBQUE7QUFDQSxhQUFBLGtCQUFBLEdBQUEsRUFBQTtBQUNBLGFBQUEscUJBQUEsR0FBQSxFQUFBO0FBQ0EsWUFBSUMsV0FBV0EsUUFBZixRQUFBLEVBQWlDO0FBQzdCLGlCQUFBLFNBQUEsR0FBaUJBLFFBQWpCLFFBQUE7QUFDSDtBQUNKOzt1QkFDREMsUSxxQkFBU0MsUyxFQUFXQyxpQixFQUFtQkgsTyxFQUFTO0FBQzVDLGFBQUEsY0FBQSxDQUFBLFNBQUEsSUFBQSxpQkFBQTtBQUNBLFlBQUEsT0FBQSxFQUFhO0FBQ1QsaUJBQUEsa0JBQUEsQ0FBQSxTQUFBLElBQUEsT0FBQTtBQUNIOzs7dUJBRUxJLFkseUJBQWFGLFMsRUFBVztBQUNwQixZQUFJRSxlQUFlLEtBQUEsY0FBQSxDQUFuQixTQUFtQixDQUFuQjtBQUNBLFlBQUlBLGlCQUFBQSxTQUFBQSxJQUE4QixLQUFsQyxTQUFBLEVBQWtEO0FBQzlDQSwyQkFBZSxLQUFBLFNBQUEsQ0FBQSxZQUFBLENBQWZBLFNBQWUsQ0FBZkE7QUFDSDtBQUNELGVBQUEsWUFBQTs7O3VCQUVKQyxVLHVCQUFXSCxTLEVBQVc7QUFDbEIsZUFBTyxLQUFBLGNBQUEsQ0FBUCxTQUFPLENBQVA7QUFDQSxlQUFPLEtBQUEsa0JBQUEsQ0FBUCxTQUFPLENBQVA7QUFDQSxlQUFPLEtBQUEscUJBQUEsQ0FBUCxTQUFPLENBQVA7Ozt1QkFFSkksYywyQkFBZUosUyxFQUFXSyxNLEVBQVFDLEssRUFBTztBQUNyQyxZQUFJUixVQUFVLEtBQUEsa0JBQUEsQ0FBZCxTQUFjLENBQWQ7QUFDQSxZQUFJLENBQUosT0FBQSxFQUFjO0FBQ1ZBLHNCQUFBQSxFQUFBQTtBQUNBLGlCQUFBLGtCQUFBLENBQUEsU0FBQSxJQUFBLE9BQUE7QUFDSDtBQUNEQSxnQkFBQUEsTUFBQUEsSUFBQUEsS0FBQUE7Ozt1QkFFSlMsZ0IsNkJBQWlCUCxTLEVBQVdLLE0sRUFBUTtBQUNoQyxZQUFJRyxTQUFBQSxLQUFKLENBQUE7QUFDQSxZQUFJVixVQUFVLEtBQUEsaUJBQUEsQ0FBZCxTQUFjLENBQWQ7QUFDQSxZQUFBLE9BQUEsRUFBYTtBQUNUVSxxQkFBU1YsUUFBVFUsTUFBU1YsQ0FBVFU7QUFDSDtBQUNELFlBQUlBLFdBQUFBLFNBQUFBLElBQXdCLEtBQUEsU0FBQSxLQUE1QixTQUFBLEVBQTBEO0FBQ3REQSxxQkFBUyxLQUFBLFNBQUEsQ0FBQSxnQkFBQSxDQUFBLFNBQUEsRUFBVEEsTUFBUyxDQUFUQTtBQUNIO0FBQ0QsZUFBQSxNQUFBOzs7dUJBRUpDLGlCLDhCQUFrQlQsUyxFQUFXO0FBQ3pCLFlBQUlGLFVBQVUsS0FBQSxrQkFBQSxDQUFkLFNBQWMsQ0FBZDtBQUNBLFlBQUlBLFlBQUosU0FBQSxFQUEyQjtBQUN2QixnQkFBSVksT0FBT1YsVUFBQUEsS0FBQUEsQ0FBQUEsR0FBQUEsRUFBWCxDQUFXQSxDQUFYO0FBQ0FGLHNCQUFVLEtBQUEsa0JBQUEsQ0FBVkEsSUFBVSxDQUFWQTtBQUNIO0FBQ0QsZUFBQSxPQUFBOzs7dUJBRUphLGdCLDZCQUFpQlgsUyxFQUFXSyxNLEVBQVE7QUFDaEMsWUFBSVAsVUFBVSxLQUFBLGtCQUFBLENBQWQsU0FBYyxDQUFkO0FBQ0EsWUFBQSxPQUFBLEVBQWE7QUFDVCxtQkFBT0EsUUFBUCxNQUFPQSxDQUFQO0FBQ0g7Ozt1QkFFTGMsaUIsOEJBQWtCWixTLEVBQVdhLFEsRUFBVUMsTSxFQUFRO0FBQzNDLFlBQUlDLGFBQWEsS0FBQSxxQkFBQSxDQUFqQixTQUFpQixDQUFqQjtBQUNBLFlBQUlBLGVBQUosU0FBQSxFQUE4QjtBQUMxQixpQkFBQSxxQkFBQSxDQUFBLFNBQUEsSUFBd0NBLGFBQXhDLEVBQUE7QUFDSDtBQUNEQSxtQkFBQUEsSUFBQUEsQ0FBZ0I7QUFDWkYsc0JBRFksUUFBQTtBQUVaQyxvQkFBQUE7QUFGWSxTQUFoQkM7Ozt1QkFLSkMsb0IsaUNBQXFCaEIsUyxFQUFXO0FBQzVCLFlBQUlVLE9BQU9WLFVBQUFBLEtBQUFBLENBQUFBLEdBQUFBLEVBQVgsQ0FBV0EsQ0FBWDtBQUNBLFlBQUllLGFBQWEsS0FBQSxTQUFBLEdBQWlCLEtBQUEsU0FBQSxDQUFBLG9CQUFBLENBQWpCLFNBQWlCLENBQWpCLEdBQWpCLEVBQUE7QUFDQUUsY0FBQUEsU0FBQUEsQ0FBQUEsSUFBQUEsQ0FBQUEsS0FBQUEsQ0FBQUEsVUFBQUEsRUFBdUMsS0FBQSxxQkFBQSxDQUF2Q0EsSUFBdUMsQ0FBdkNBO0FBQ0FBLGNBQUFBLFNBQUFBLENBQUFBLElBQUFBLENBQUFBLEtBQUFBLENBQUFBLFVBQUFBLEVBQXVDLEtBQUEscUJBQUEsQ0FBdkNBLFNBQXVDLENBQXZDQTtBQUNBLGVBQUEsVUFBQTs7Ozs7O2tCQTNFYXBCLFEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWdpc3RyeSB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB0aGlzLl9yZWdpc3RyYXRpb25zID0ge307XG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyZWRPcHRpb25zID0ge307XG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyZWRJbmplY3Rpb25zID0ge307XG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZmFsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMuX2ZhbGxiYWNrID0gb3B0aW9ucy5mYWxsYmFjaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWdpc3RlcihzcGVjaWZpZXIsIGZhY3RvcnlEZWZpbml0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX3JlZ2lzdHJhdGlvbnNbc3BlY2lmaWVyXSA9IGZhY3RvcnlEZWZpbml0aW9uO1xuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJlZE9wdGlvbnNbc3BlY2lmaWVyXSA9IG9wdGlvbnM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVnaXN0cmF0aW9uKHNwZWNpZmllcikge1xuICAgICAgICBsZXQgcmVnaXN0cmF0aW9uID0gdGhpcy5fcmVnaXN0cmF0aW9uc1tzcGVjaWZpZXJdO1xuICAgICAgICBpZiAocmVnaXN0cmF0aW9uID09PSB1bmRlZmluZWQgJiYgdGhpcy5fZmFsbGJhY2spIHtcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbiA9IHRoaXMuX2ZhbGxiYWNrLnJlZ2lzdHJhdGlvbihzcGVjaWZpZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWdpc3RyYXRpb247XG4gICAgfVxuICAgIHVucmVnaXN0ZXIoc3BlY2lmaWVyKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9yZWdpc3RyYXRpb25zW3NwZWNpZmllcl07XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9yZWdpc3RlcmVkT3B0aW9uc1tzcGVjaWZpZXJdO1xuICAgICAgICBkZWxldGUgdGhpcy5fcmVnaXN0ZXJlZEluamVjdGlvbnNbc3BlY2lmaWVyXTtcbiAgICB9XG4gICAgcmVnaXN0ZXJPcHRpb24oc3BlY2lmaWVyLCBvcHRpb24sIHZhbHVlKSB7XG4gICAgICAgIGxldCBvcHRpb25zID0gdGhpcy5fcmVnaXN0ZXJlZE9wdGlvbnNbc3BlY2lmaWVyXTtcbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICB0aGlzLl9yZWdpc3RlcmVkT3B0aW9uc1tzcGVjaWZpZXJdID0gb3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zW29wdGlvbl0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmVnaXN0ZXJlZE9wdGlvbihzcGVjaWZpZXIsIG9wdGlvbikge1xuICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHRoaXMucmVnaXN0ZXJlZE9wdGlvbnMoc3BlY2lmaWVyKTtcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQgJiYgdGhpcy5fZmFsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5fZmFsbGJhY2sucmVnaXN0ZXJlZE9wdGlvbihzcGVjaWZpZXIsIG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcmVnaXN0ZXJlZE9wdGlvbnMoc3BlY2lmaWVyKSB7XG4gICAgICAgIGxldCBvcHRpb25zID0gdGhpcy5fcmVnaXN0ZXJlZE9wdGlvbnNbc3BlY2lmaWVyXTtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IHR5cGUgPSBzcGVjaWZpZXIuc3BsaXQoJzonKVswXTtcbiAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLl9yZWdpc3RlcmVkT3B0aW9uc1t0eXBlXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gICAgdW5yZWdpc3Rlck9wdGlvbihzcGVjaWZpZXIsIG9wdGlvbikge1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHRoaXMuX3JlZ2lzdGVyZWRPcHRpb25zW3NwZWNpZmllcl07XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBkZWxldGUgb3B0aW9uc1tvcHRpb25dO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlZ2lzdGVySW5qZWN0aW9uKHNwZWNpZmllciwgcHJvcGVydHksIHNvdXJjZSkge1xuICAgICAgICBsZXQgaW5qZWN0aW9ucyA9IHRoaXMuX3JlZ2lzdGVyZWRJbmplY3Rpb25zW3NwZWNpZmllcl07XG4gICAgICAgIGlmIChpbmplY3Rpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdGVyZWRJbmplY3Rpb25zW3NwZWNpZmllcl0gPSBpbmplY3Rpb25zID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaW5qZWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgc291cmNlXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZWdpc3RlcmVkSW5qZWN0aW9ucyhzcGVjaWZpZXIpIHtcbiAgICAgICAgbGV0IHR5cGUgPSBzcGVjaWZpZXIuc3BsaXQoJzonKVswXTtcbiAgICAgICAgbGV0IGluamVjdGlvbnMgPSB0aGlzLl9mYWxsYmFjayA/IHRoaXMuX2ZhbGxiYWNrLnJlZ2lzdGVyZWRJbmplY3Rpb25zKHNwZWNpZmllcikgOiBbXTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoaW5qZWN0aW9ucywgdGhpcy5fcmVnaXN0ZXJlZEluamVjdGlvbnNbdHlwZV0pO1xuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShpbmplY3Rpb25zLCB0aGlzLl9yZWdpc3RlcmVkSW5qZWN0aW9uc1tzcGVjaWZpZXJdKTtcbiAgICAgICAgcmV0dXJuIGluamVjdGlvbnM7XG4gICAgfVxufSJdfQ==