@inversifyjs/core
Version:
InversifyJs core package
72 lines (66 loc) • 4.19 kB
JavaScript
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