glob.ts 951 B

12345678910111213141516171819202122232425262728293031323334
  1. import { glob, globSync, type GlobOptions } from "glob"
  2. import { minimatch } from "minimatch"
  3. export namespace Glob {
  4. export interface Options {
  5. cwd?: string
  6. absolute?: boolean
  7. include?: "file" | "all"
  8. dot?: boolean
  9. symlink?: boolean
  10. }
  11. function toGlobOptions(options: Options): GlobOptions {
  12. return {
  13. cwd: options.cwd,
  14. absolute: options.absolute,
  15. dot: options.dot,
  16. follow: options.symlink ?? false,
  17. nodir: options.include !== "all",
  18. }
  19. }
  20. export async function scan(pattern: string, options: Options = {}): Promise<string[]> {
  21. return glob(pattern, toGlobOptions(options)) as Promise<string[]>
  22. }
  23. export function scanSync(pattern: string, options: Options = {}): string[] {
  24. return globSync(pattern, toGlobOptions(options)) as string[]
  25. }
  26. export function match(pattern: string, filepath: string): boolean {
  27. return minimatch(filepath, pattern, { dot: true })
  28. }
  29. }