import { PropertyDescriptorMap } from "./PropertyDescriptorMap.mjs";
import { BaseClassProto, ConstructorLike, InstanceTypeOrSelf, ProtoOrSuperClass, SuperClassLike, WithProto } from "./inheritance.mjs";
import { InstancePropertyDescriptorMap } from "./InstancePropertyDescriptorMap.mjs";
//#region src/utils/reflection/InstanceTypeOrSelfPropertyDescriptorMap.d.ts
/**
 * Variant of {@link InstancePropertyDescriptorMap} with a lesser constraint on {@link T}.
 * If {@link T} and/or {@link __proto__} are instantiable, the resulting
 * property descriptor maps will be of the instances' types.
 * @template T `null` or an `object`-like type.
 * @template __proto__ The `[[Prototype]]` of {@link T}.
 * @since 3.0.0
 */
type InstanceTypeOrSelfPropertyDescriptorMap<T extends object | null, __prototype__ extends ProtoOrSuperClass> = T extends ConstructorLike<T> ? __prototype__ extends SuperClassLike | BaseClassProto ? InstancePropertyDescriptorMap<T & WithProto<__prototype__>> : PropertyDescriptorMap<InstanceType<T>, InstanceTypeOrSelf<__prototype__>> : PropertyDescriptorMap<InstanceTypeOrSelf<T>, InstanceTypeOrSelf<__prototype__>>;
//#endregion
export { InstanceTypeOrSelfPropertyDescriptorMap };
//# sourceMappingURL=InstanceTypeOrSelfPropertyDescriptorMap.d.mts.map