UNPKG

inversify-binding-decorators

Version:

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

34 lines (33 loc) 1.5 kB
import { decorate, injectable, METADATA_KEY as inversify_METADATA_KEY } from "inversify"; import { METADATA_KEY } from "../constants"; function provide(serviceIdentifier, force) { return function (target) { var isAlreadyDecorated = Reflect.hasOwnMetadata(inversify_METADATA_KEY.PARAM_TYPES, target); var redecorateWithInject = force === true; if (redecorateWithInject === true && isAlreadyDecorated === false) { decorate(injectable(), target); } else if (redecorateWithInject === true && isAlreadyDecorated === true) { // Do nothing } else { try { decorate(injectable(), target); } catch (e) { throw new Error("Cannot apply @provide decorator multiple times but is has been used " + ("multiple times in " + target.name + " ") + "Please use @provide(ID, true) if you are trying to declare multiple bindings!"); } } var currentMetadata = { constraint: function (bind, bindTarget) { return bind(serviceIdentifier).to(bindTarget); }, implementationType: target }; var previousMetadata = Reflect.getMetadata(METADATA_KEY.provide, Reflect) || []; var newMetadata = [currentMetadata].concat(previousMetadata); Reflect.defineMetadata(METADATA_KEY.provide, newMetadata, Reflect); return target; }; } export default provide;