UNPKG

@inversifyjs/core

Version:

InversifyJs core package

72 lines (66 loc) 4.19 kB
import { stringifyServiceIdentifier, } from '@inversifyjs/common'; import { stringifyBinding } from '../../binding/calculations/stringifyBinding.js'; import { InversifyCoreError } from '../../error/models/InversifyCoreError.js'; import { InversifyCoreErrorKind } from '../../error/models/InversifyCoreErrorKind.js'; export function throwErrorWhenUnexpectedBindingsAmountFound(bindingNodes, isOptional, bindingConstraintNode, serviceRedirections) { const serviceIdentifier = bindingConstraintNode.elem.serviceIdentifier; const parentServiceIdentifier = bindingConstraintNode.previous?.elem.serviceIdentifier; if (Array.isArray(bindingNodes)) { throwErrorWhenMultipleUnexpectedBindingsAmountFound(bindingNodes, isOptional, serviceIdentifier, parentServiceIdentifier, bindingConstraintNode.elem, serviceRedirections); } else { throwErrorWhenSingleUnexpectedBindingFound(bindingNodes, isOptional, serviceIdentifier, parentServiceIdentifier, bindingConstraintNode.elem, serviceRedirections); } } function throwBindingNotFoundError(serviceIdentifier, parentServiceIdentifier, bindingConstraints, serviceRedirections) { const lastResolvedServiceIdentifier = serviceRedirections[serviceRedirections.length - 1] ?? serviceIdentifier; const errorMessage = `No bindings found for service: "${stringifyServiceIdentifier(lastResolvedServiceIdentifier)}". Trying to resolve bindings for "${stringifyParentServiceIdentifier(serviceIdentifier, parentServiceIdentifier)}".${stringifyServiceRedirections(serviceRedirections)}${stringifyBindingConstraints(bindingConstraints)}`; throw new InversifyCoreError(InversifyCoreErrorKind.planning, errorMessage); } function throwErrorWhenMultipleUnexpectedBindingsAmountFound(bindingNodes, isOptional, serviceIdentifier, parentServiceIdentifier, bindingConstraints, serviceRedirections) { if (bindingNodes.length === 0) { if (!isOptional) { throwBindingNotFoundError(serviceIdentifier, parentServiceIdentifier, bindingConstraints, serviceRedirections); } } else { const lastResolvedServiceIdentifier = serviceRedirections[serviceRedirections.length - 1] ?? serviceIdentifier; const errorMessage = `Ambiguous bindings found for service: "${stringifyServiceIdentifier(lastResolvedServiceIdentifier)}".${stringifyServiceRedirections(serviceRedirections)} Registered bindings: ${bindingNodes.map((bindingNode) => stringifyBinding(bindingNode.binding)).join('\n')} Trying to resolve bindings for "${stringifyParentServiceIdentifier(serviceIdentifier, parentServiceIdentifier)}".${stringifyBindingConstraints(bindingConstraints)}`; throw new InversifyCoreError(InversifyCoreErrorKind.planning, errorMessage); } } function throwErrorWhenSingleUnexpectedBindingFound(bindingNode, isOptional, serviceIdentifier, parentServiceIdentifier, bindingConstraints, serviceRedirections) { if (bindingNode === undefined && !isOptional) { throwBindingNotFoundError(serviceIdentifier, parentServiceIdentifier, bindingConstraints, serviceRedirections); } } function stringifyParentServiceIdentifier(serviceIdentifier, parentServiceIdentifier) { return parentServiceIdentifier === undefined ? `${stringifyServiceIdentifier(serviceIdentifier)} (Root service)` : stringifyServiceIdentifier(parentServiceIdentifier); } function stringifyBindingConstraints(bindingConstraints) { const stringifiedTags = bindingConstraints.tags.size === 0 ? '' : ` - tags: - ${[...bindingConstraints.tags.keys()].map((key) => key.toString()).join('\n - ')}`; return ` Binding constraints: - service identifier: ${stringifyServiceIdentifier(bindingConstraints.serviceIdentifier)} - name: ${bindingConstraints.name?.toString() ?? '-'}${stringifiedTags}`; } function stringifyServiceRedirections(serviceRedirections) { return serviceRedirections.length === 0 ? '' : ` - service redirections: - ${serviceRedirections .map((serviceIdentifier) => stringifyServiceIdentifier(serviceIdentifier)) .join('\n - ')}`; } //# sourceMappingURL=throwErrorWhenUnexpectedBindingsAmountFound.js.map