import type { Awaitable } from '@antfu/utils';

export interface ImportInfo {
  as?: string;
  name?: string;
  from: string;
}

export type SideEffectsInfo =
  | (ImportInfo | string)[]
  | ImportInfo
  | string
  | undefined;

export interface ComponentInfo extends ImportInfo {
  sideEffects?: SideEffectsInfo;
}

export type ComponentResolveResult = Awaitable<
  string | ComponentInfo | null | undefined | void
>;

export type ComponentResolverFunction = (
  name: string
) => ComponentResolveResult;
export interface ComponentResolverObject {
  type: 'component' | 'directive';
  resolve: ComponentResolverFunction;
}
export type ComponentResolver =
  | ComponentResolverFunction
  | ComponentResolverObject;
