UNPKG

inversify-binding-decorators

Version:

An utility that allows developers to declare InversifyJS bindings using ES2016 decorators

43 lines (42 loc) 2.1 kB
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; });