@inversifyjs/core
Version:
InversifyJs core package
38 lines • 2.3 kB
JavaScript
import { BindingConstraintsImplementation, } from '../../binding/models/BindingConstraintsImplementation.js';
import { ClassElementMetadataKind } from '../../metadata/models/ClassElementMetadataKind.js';
import { buildFilteredServiceBindings } from '../calculations/buildFilteredServiceBindings.js';
import { checkServiceNodeSingleInjectionBindings } from '../calculations/checkServiceNodeSingleInjectionBindings.js';
import { getServiceFromMaybeLazyServiceIdentifier } from '../calculations/getServiceFromMaybeLazyServiceIdentifier.js';
export function curryBuildPlanServiceNodeFromClassElementMetadata(buildServiceNodeBindings) {
return (params, bindingConstraintsList, elementMetadata) => {
const serviceIdentifier = getServiceFromMaybeLazyServiceIdentifier(elementMetadata.value);
const updatedBindingConstraintsList = bindingConstraintsList.concat({
getAncestorsCalled: false,
name: elementMetadata.name,
serviceIdentifier,
tags: elementMetadata.tags,
});
const bindingConstraints = new BindingConstraintsImplementation(updatedBindingConstraintsList.last);
const chained = elementMetadata.kind === ClassElementMetadataKind.multipleInjection &&
elementMetadata.chained;
const filteredServiceBindings = buildFilteredServiceBindings(params, bindingConstraints, {
chained,
});
const serviceNodeBindings = [];
const serviceNode = {
bindings: serviceNodeBindings,
isContextFree: true,
serviceIdentifier,
};
serviceNodeBindings.push(...buildServiceNodeBindings(params, updatedBindingConstraintsList, filteredServiceBindings, serviceNode, chained));
serviceNode.isContextFree =
!updatedBindingConstraintsList.last.elem.getAncestorsCalled;
if (elementMetadata.kind === ClassElementMetadataKind.singleInjection) {
checkServiceNodeSingleInjectionBindings(serviceNode, elementMetadata.optional, updatedBindingConstraintsList.last);
const [planBindingNode] = serviceNodeBindings;
serviceNode.bindings = planBindingNode;
}
return serviceNode;
};
}
//# sourceMappingURL=curryBuildPlanServiceNodeFromClassElementMetadata.js.map