@glimmer/di
Version:
Dependency injection support for Glimmer applications.
96 lines (83 loc) • 10.9 kB
JavaScript
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;
}();
export default Registry;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlZ2lzdHJ5LmpzIl0sIm5hbWVzIjpbIlJlZ2lzdHJ5Iiwib3B0aW9ucyIsIl9yZWdpc3RyYXRpb25zIiwiX3JlZ2lzdGVyZWRPcHRpb25zIiwiX3JlZ2lzdGVyZWRJbmplY3Rpb25zIiwiZmFsbGJhY2siLCJfZmFsbGJhY2siLCJyZWdpc3RlciIsInNwZWNpZmllciIsImZhY3RvcnlEZWZpbml0aW9uIiwicmVnaXN0cmF0aW9uIiwidW5kZWZpbmVkIiwidW5yZWdpc3RlciIsInJlZ2lzdGVyT3B0aW9uIiwib3B0aW9uIiwidmFsdWUiLCJyZWdpc3RlcmVkT3B0aW9uIiwicmVzdWx0IiwicmVnaXN0ZXJlZE9wdGlvbnMiLCJ0eXBlIiwic3BsaXQiLCJ1bnJlZ2lzdGVyT3B0aW9uIiwicmVnaXN0ZXJJbmplY3Rpb24iLCJwcm9wZXJ0eSIsInNvdXJjZSIsImluamVjdGlvbnMiLCJwdXNoIiwicmVnaXN0ZXJlZEluamVjdGlvbnMiLCJBcnJheSIsInByb3RvdHlwZSIsImFwcGx5Il0sIm1hcHBpbmdzIjoiOztJQUFxQkEsUTtBQUNqQixzQkFBWUMsT0FBWixFQUFxQjtBQUFBOztBQUNqQixhQUFLQyxjQUFMLEdBQXNCLEVBQXRCO0FBQ0EsYUFBS0Msa0JBQUwsR0FBMEIsRUFBMUI7QUFDQSxhQUFLQyxxQkFBTCxHQUE2QixFQUE3QjtBQUNBLFlBQUlILFdBQVdBLFFBQVFJLFFBQXZCLEVBQWlDO0FBQzdCLGlCQUFLQyxTQUFMLEdBQWlCTCxRQUFRSSxRQUF6QjtBQUNIO0FBQ0o7O3VCQUNERSxRLHFCQUFTQyxTLEVBQVdDLGlCLEVBQW1CUixPLEVBQVM7QUFDNUMsYUFBS0MsY0FBTCxDQUFvQk0sU0FBcEIsSUFBaUNDLGlCQUFqQztBQUNBLFlBQUlSLE9BQUosRUFBYTtBQUNULGlCQUFLRSxrQkFBTCxDQUF3QkssU0FBeEIsSUFBcUNQLE9BQXJDO0FBQ0g7QUFDSixLOzt1QkFDRFMsWSx5QkFBYUYsUyxFQUFXO0FBQ3BCLFlBQUlFLGVBQWUsS0FBS1IsY0FB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Q0FBdkM7QUFDQSxlQUFPaUIsVUFBUDtBQUNILEs7Ozs7O2VBNUVnQnpCLFEiLCJmaWxlIjoicmVnaXN0cnkuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBjbGFzcyBSZWdpc3RyeSB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgICAgICB0aGlzLl9yZWdpc3RyYXRpb25zID0ge307XG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyZWRPcHRpb25zID0ge307XG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyZWRJbmplY3Rpb25zID0ge307XG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZmFsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMuX2ZhbGxiYWNrID0gb3B0aW9ucy5mYWxsYmFjaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWdpc3RlcihzcGVjaWZpZXIsIGZhY3RvcnlEZWZpbml0aW9uLCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX3JlZ2lzdHJhdGlvbnNbc3BlY2lmaWVyXSA9IGZhY3RvcnlEZWZpbml0aW9uO1xuICAgICAgICBpZiAob3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJlZE9wdGlvbnNbc3BlY2lmaWVyXSA9IG9wdGlvbnM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVnaXN0cmF0aW9uKHNwZWNpZmllcikge1xuICAgICAgICBsZXQgcmVnaXN0cmF0aW9uID0gdGhpcy5fcmVnaXN0cmF0aW9uc1tzcGVjaWZpZXJdO1xuICAgICAgICBpZiAocmVnaXN0cmF0aW9uID09PSB1bmRlZmluZWQgJiYgdGhpcy5fZmFsbGJhY2spIHtcbiAgICAgICAgICAgIHJlZ2lzdHJhdGlvbiA9IHRoaXMuX2ZhbGxiYWNrLnJlZ2lzdHJhdGlvbihzcGVjaWZpZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWdpc3RyYXRpb247XG4gICAgfVxuICAgIHVucmVnaXN0ZXIoc3BlY2lmaWVyKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9yZWdpc3RyYXRpb25zW3NwZWNpZmllcl07XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9yZWdpc3RlcmVkT3B0aW9uc1tzcGVjaWZpZXJdO1xuICAgICAgICBkZWxldGUgdGhpcy5fcmVnaXN0ZXJlZEluamVjdGlvbnNbc3BlY2lmaWVyXTtcbiAgICB9XG4gICAgcmVnaXN0ZXJPcHRpb24oc3BlY2lmaWVyLCBvcHRpb24sIHZhbHVlKSB7XG4gICAgICAgIGxldCBvcHRpb25zID0gdGhpcy5fcmVnaXN0ZXJlZE9wdGlvbnNbc3BlY2lmaWVyXTtcbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgICAgICB0aGlzLl9yZWdpc3RlcmVkT3B0aW9uc1tzcGVjaWZpZXJdID0gb3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zW29wdGlvbl0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmVnaXN0ZXJlZE9wdGlvbihzcGVjaWZpZXIsIG9wdGlvbikge1xuICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHRoaXMucmVnaXN0ZXJlZE9wdGlvbnMoc3BlY2lmaWVyKTtcbiAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG9wdGlvbnNbb3B0aW9uXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQgJiYgdGhpcy5fZmFsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5fZmFsbGJhY2sucmVnaXN0ZXJlZE9wdGlvbihzcGVjaWZpZXIsIG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcmVnaXN0ZXJlZE9wdGlvbnMoc3BlY2lmaWVyKSB7XG4gICAgICAgIGxldCBvcHRpb25zID0gdGhpcy5fcmVnaXN0ZXJlZE9wdGlvbnNbc3BlY2lmaWVyXTtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGV0IHR5cGUgPSBzcGVjaWZpZXIuc3BsaXQoJzonKVswXTtcbiAgICAgICAgICAgIG9wdGlvbnMgPSB0aGlzLl9yZWdpc3RlcmVkT3B0aW9uc1t0eXBlXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gICAgdW5yZWdpc3Rlck9wdGlvbihzcGVjaWZpZXIsIG9wdGlvbikge1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHRoaXMuX3JlZ2lzdGVyZWRPcHRpb25zW3NwZWNpZmllcl07XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICBkZWxldGUgb3B0aW9uc1tvcHRpb25dO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlZ2lzdGVySW5qZWN0aW9uKHNwZWNpZmllciwgcHJvcGVydHksIHNvdXJjZSkge1xuICAgICAgICBsZXQgaW5qZWN0aW9ucyA9IHRoaXMuX3JlZ2lzdGVyZWRJbmplY3Rpb25zW3NwZWNpZmllcl07XG4gICAgICAgIGlmIChpbmplY3Rpb25zID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdGVyZWRJbmplY3Rpb25zW3NwZWNpZmllcl0gPSBpbmplY3Rpb25zID0gW107XG4gICAgICAgIH1cbiAgICAgICAgaW5qZWN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgc291cmNlXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZWdpc3RlcmVkSW5qZWN0aW9ucyhzcGVjaWZpZXIpIHtcbiAgICAgICAgbGV0IHR5cGUgPSBzcGVjaWZpZXIuc3BsaXQoJzonKVswXTtcbiAgICAgICAgbGV0IGluamVjdGlvbnMgPSB0aGlzLl9mYWxsYmFjayA/IHRoaXMuX2ZhbGxiYWNrLnJlZ2lzdGVyZWRJbmplY3Rpb25zKHNwZWNpZmllcikgOiBbXTtcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoaW5qZWN0aW9ucywgdGhpcy5fcmVnaXN0ZXJlZEluamVjdGlvbnNbdHlwZV0pO1xuICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShpbmplY3Rpb25zLCB0aGlzLl9yZWdpc3RlcmVkSW5qZWN0aW9uc1tzcGVjaWZpZXJdKTtcbiAgICAgICAgcmV0dXJuIGluamVjdGlvbnM7XG4gICAgfVxufSJdfQ==