import { isBinding } from '../binding-utils/type-utils.js'; import type { TypeOrBindingType, TypeOrDeferredType, TypeOrDeferredTypeOrBindingType, TypeOrDeferredTypeWithArgs } from './types'; /** Resolves the value out of a TypeOrBindingType */ export const resolveTypeOrBindingType = (value: TypeOrBindingType) => (isBinding(value) ? value.get() : value); /** Resolves the value out of a TypeOrDeferredType */ export const resolveTypeOrDeferredType = (value: TypeOrDeferredType): T => typeof value === 'function' ? (value as () => T)() : (value as T); /** Resolves the value out of a TypeOrDeferredTypeOrBindingType */ export const resolveTypeOrDeferredTypeOrBindingType = (value: TypeOrDeferredTypeOrBindingType) => isBinding(value) ? value.get() : typeof value === 'function' ? (value as () => T)() : (value as T); /** Resolves the value out of a TypeOrDeferredType */ export const resolveTypeOrDeferredTypeWithArgs = (value: TypeOrDeferredTypeWithArgs, args: ArgsT): T => typeof value === 'function' ? (value as (...args: ArgsT) => T)(...args) : (value as T);