import {
  BaseExt,
  BaseParams,
  ConfigArguments,
  expandGlobSync,
  ExtOptions,
  WalkEntry,
} from "./deps.ts";

export type Ext<P extends BaseParams, E extends BaseExt<P>> = [
  ext: E | undefined,
  options: ExtOptions,
  params: P,
];

export type ValidExt = "toml" | "lazy";

export async function getExt<P extends BaseParams, E extends BaseExt<P>>(
  { denops }: ConfigArguments,
  extName: ValidExt,
): Promise<Ext<P, E>> {
  return (await denops.dispatcher.getExt(extName)) as Ext<P, E>;
}

export function gatherCheckFiles(path: string, glob: string): string[] {
  return Array.from(
    expandGlobSync(glob, {
      root: path,
      globstar: true,
    }),
  ).map(({ path }: WalkEntry) => path);
}