inversify-binding-decorators
Version:
An utility that allows developers to declare InversifyJS bindings using ES2016 decorators
43 lines (42 loc) • 2.1 kB
JavaScript
define(["require", "exports", "inversify", "inversify", "../constants"], function (require, exports, inversify_1, inversify_2, constants_1) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var ProvideDoneSyntax = /** @class */ (function () {
function ProvideDoneSyntax(binding) {
this._binding = binding;
}
ProvideDoneSyntax.prototype.done = function (force) {
var that = this;
return function (target) {
var isAlreadyDecorated = Reflect.hasOwnMetadata(inversify_2.METADATA_KEY.PARAM_TYPES, target);
var redecorateWithInject = force === true;
if (redecorateWithInject === true && isAlreadyDecorated === false) {
inversify_1.decorate(inversify_1.injectable(), target);
}
else if (redecorateWithInject === true && isAlreadyDecorated === true) {
// Do nothing
}
else {
try {
inversify_1.decorate(inversify_1.injectable(), target);
}
catch (e) {
throw new Error("Cannot apply @provideFluent decorator multiple times but is has been used " +
("multiple times in " + target.name + " ") +
"Please use done(true) if you are trying to declare multiple bindings!");
}
}
var currentMetadata = {
constraint: that._binding,
implementationType: target
};
var previousMetadata = Reflect.getMetadata(constants_1.METADATA_KEY.provide, Reflect) || [];
var newMetadata = [currentMetadata].concat(previousMetadata);
Reflect.defineMetadata(constants_1.METADATA_KEY.provide, newMetadata, Reflect);
return target;
};
};
return ProvideDoneSyntax;
}());
exports.default = ProvideDoneSyntax;
});