UNPKG

inversify

Version:

A powerful and lightweight inversion of control container for JavaScript and Node.js apps powered by TypeScript.

101 lines (100 loc) 3.85 kB
import * as ERROR_MSGS from '../constants/error_msgs'; function getServiceIdentifierAsString(serviceIdentifier) { if (typeof serviceIdentifier === 'function') { var _serviceIdentifier = serviceIdentifier; return _serviceIdentifier.name; } else if (typeof serviceIdentifier === 'symbol') { return serviceIdentifier.toString(); } else { var _serviceIdentifier = serviceIdentifier; return _serviceIdentifier; } } function listRegisteredBindingsForServiceIdentifier(container, serviceIdentifier, getBindings) { var registeredBindingsList = ''; var registeredBindings = getBindings(container, serviceIdentifier); if (registeredBindings.length !== 0) { registeredBindingsList = '\nRegistered bindings:'; registeredBindings.forEach(function (binding) { var name = 'Object'; if (binding.implementationType !== null) { name = getFunctionName(binding.implementationType); } registeredBindingsList = registeredBindingsList + "\n " + name; if (binding.constraint.metaData) { registeredBindingsList = registeredBindingsList + " - " + binding.constraint.metaData; } }); } return registeredBindingsList; } function alreadyDependencyChain(request, serviceIdentifier) { if (request.parentRequest === null) { return false; } else if (request.parentRequest.serviceIdentifier === serviceIdentifier) { return true; } else { return alreadyDependencyChain(request.parentRequest, serviceIdentifier); } } function dependencyChainToString(request) { function _createStringArr(req, result) { if (result === void 0) { result = []; } var serviceIdentifier = getServiceIdentifierAsString(req.serviceIdentifier); result.push(serviceIdentifier); if (req.parentRequest !== null) { return _createStringArr(req.parentRequest, result); } return result; } var stringArr = _createStringArr(request); return stringArr.reverse().join(' --> '); } function circularDependencyToException(request) { request.childRequests.forEach(function (childRequest) { if (alreadyDependencyChain(childRequest, childRequest.serviceIdentifier)) { var services = dependencyChainToString(childRequest); throw new Error(ERROR_MSGS.CIRCULAR_DEPENDENCY + " " + services); } else { circularDependencyToException(childRequest); } }); } function listMetadataForTarget(serviceIdentifierString, target) { if (target.isTagged() || target.isNamed()) { var m_1 = ''; var namedTag = target.getNamedTag(); var otherTags = target.getCustomTags(); if (namedTag !== null) { m_1 += namedTag.toString() + '\n'; } if (otherTags !== null) { otherTags.forEach(function (tag) { m_1 += tag.toString() + '\n'; }); } return " " + serviceIdentifierString + "\n " + serviceIdentifierString + " - " + m_1; } else { return " " + serviceIdentifierString; } } function getFunctionName(func) { if (func.name) { return func.name; } else { var name_1 = func.toString(); var match = name_1.match(/^function\s*([^\s(]+)/); return match ? match[1] : "Anonymous function: " + name_1; } } function getSymbolDescription(symbol) { return symbol.toString().slice(7, -1); } export { getFunctionName, getServiceIdentifierAsString, listRegisteredBindingsForServiceIdentifier, listMetadataForTarget, circularDependencyToException, getSymbolDescription };