inversify
Version:
A powerful and lightweight inversion of control container for JavaScript and Node.js apps powered by TypeScript.
70 lines (69 loc) • 2.31 kB
JavaScript
import Metadata from "../planning/metadata";
import QueryableString from "./queryable_string";
import * as METADATA_KEY from "../constants/metadata_keys";
import guid from "../utils/guid";
var Target = (function () {
function Target(type, name, serviceIdentifier, namedOrTagged) {
this.guid = guid();
this.type = type;
this.serviceIdentifier = serviceIdentifier;
this.name = new QueryableString(name || "");
this.metadata = new Array();
var metadataItem = null;
if (typeof namedOrTagged === "string") {
metadataItem = new Metadata(METADATA_KEY.NAMED_TAG, namedOrTagged);
}
else if (namedOrTagged instanceof Metadata) {
metadataItem = namedOrTagged;
}
if (metadataItem !== null) {
this.metadata.push(metadataItem);
}
}
Target.prototype.hasTag = function (key) {
for (var i = 0; i < this.metadata.length; i++) {
var m = this.metadata[i];
if (m.key === key) {
return true;
}
}
return false;
};
Target.prototype.isArray = function () {
return this.hasTag(METADATA_KEY.MULTI_INJECT_TAG);
};
Target.prototype.matchesArray = function (name) {
return this.matchesTag(METADATA_KEY.MULTI_INJECT_TAG)(name);
};
Target.prototype.isNamed = function () {
return this.hasTag(METADATA_KEY.NAMED_TAG);
};
Target.prototype.isTagged = function () {
if (this.metadata.length > 1) {
return true;
}
else if (this.metadata.length === 1) {
return !this.hasTag(METADATA_KEY.NAMED_TAG);
}
else {
return false;
}
};
Target.prototype.matchesNamedTag = function (name) {
return this.matchesTag(METADATA_KEY.NAMED_TAG)(name);
};
Target.prototype.matchesTag = function (key) {
var _this = this;
return function (value) {
for (var i = 0; i < _this.metadata.length; i++) {
var m = _this.metadata[i];
if (m.key === key && m.value === value) {
return true;
}
}
return false;
};
};
return Target;
}());
export default Target;