@inversifyjs/core
Version:
InversifyJs core package
28 lines • 1.5 kB
JavaScript
import { isPromise } from '@inversifyjs/common';
import { InversifyCoreError } from '../../error/models/InversifyCoreError.js';
import { InversifyCoreErrorKind } from '../../error/models/InversifyCoreErrorKind.js';
import { ClassElementMetadataKind } from '../../metadata/models/ClassElementMetadataKind.js';
export function setInstanceProperties(resolveServiceNode) {
return (params, instance, node) => {
const propertyAssignmentPromises = [];
for (const [propertyKey, propertyNode] of node.propertyParams) {
const metadata = node.classMetadata.properties.get(propertyKey);
if (metadata === undefined) {
throw new InversifyCoreError(InversifyCoreErrorKind.resolution, `Expecting metadata at property "${propertyKey.toString()}", none found`);
}
if (metadata.kind !== ClassElementMetadataKind.unmanaged &&
propertyNode.bindings !== undefined) {
instance[propertyKey] = resolveServiceNode(params, propertyNode);
if (isPromise(instance[propertyKey])) {
propertyAssignmentPromises.push((async () => {
instance[propertyKey] = await instance[propertyKey];
})());
}
}
}
if (propertyAssignmentPromises.length > 0) {
return Promise.all(propertyAssignmentPromises).then(() => undefined);
}
};
}
//# sourceMappingURL=setInstanceProperties.js.map