@inversifyjs/core
Version:
InversifyJs core package
25 lines • 1.52 kB
JavaScript
import { updateOwnReflectMetadata } from '@inversifyjs/reflect-metadata-utils';
import { classMetadataReflectKey } from '../../reflectMetadata/data/classMetadataReflectKey.js';
import { getClassMetadata } from '../calculations/getClassMetadata.js';
import { getDefaultClassMetadata } from '../calculations/getDefaultClassMetadata.js';
import { getExtendedConstructorArguments } from '../calculations/getExtendedConstructorArguments.js';
import { getExtendedLifecycle } from '../calculations/getExtendedLifecycle.js';
import { getExtendedProperties } from '../calculations/getExtendedProperties.js';
export function injectFrom(options) {
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
const decorator = (target) => {
const baseTypeClassMetadata = getClassMetadata(options.type);
updateOwnReflectMetadata(target, classMetadataReflectKey, getDefaultClassMetadata, composeUpdateReflectMetadataCallback(options, baseTypeClassMetadata));
};
return decorator;
}
function composeUpdateReflectMetadataCallback(options, baseTypeClassMetadata) {
const callback = (typeMetadata) => ({
constructorArguments: getExtendedConstructorArguments(options, baseTypeClassMetadata, typeMetadata),
lifecycle: getExtendedLifecycle(options, baseTypeClassMetadata, typeMetadata),
properties: getExtendedProperties(options, baseTypeClassMetadata, typeMetadata),
scope: typeMetadata.scope,
});
return callback;
}
//# sourceMappingURL=injectFrom.js.map