Skip to main content
Deno 2 is finally here 🎉️
Learn more

globber

Include and excludes files and directories from a deep search of the provided root directory.

Why?

deno already has a great walk function as part of it’s std library. This module adds a few helpful features:

  • Support arrays of globs
import { globber } from "https://deno.land/x/globber@0.1.0/mod.ts";

const iterator = globber({
  cwd: import.meta.url,
  include: ["**/*.ts", "**/*.js"],
  exclude: ["**/node_modules/**"],
});
  • Support negatable globs using the ! prefix
import { globber } from "https://deno.land/x/globber@0.1.0/mod.ts";

const iterator = globber({
  cwd: import.meta.url,
  include: ["!**/ignored.js", "**/*.js"],
  exclude: ["**/node_modules/**"],
});
  • Support regex patterns and predicates which return true to indicate a match.
import { globber } from "https://deno.land/x/globber@0.1.0/mod.ts";

const iterator = globber({
  cwd: import.meta.url,
  include: [/\.js$/, (path) => path.endsWith(".ts")],
});

Usage

This is a deno module which uses async iterators to lazily evaluate all matching files and directories.

import { globber } from "https://deno.land/x/globber@0.1.0/mod.ts";

const iterator = globber({
  cwd: import.meta.url,
  include: ["**/*.ts", "**/*.js"],
  exclude: ["**/node_modules/**"],
});

for await (const entry of iterator) {
  if (entry.isDirectory) {
    console.log("directory", entry.absolute);
  } else if (entry.isFile) {
    console.log("file", entry.absolute);
  }

  if (entry.isSymlink) {
    console.log("symlink", entry.absolute);
    break; // break early is supported
  }
}

More documentation is to come. I’m working on a tool that generates readable documentation from the source code. It’s not ready yet, but it’s coming soon.

Contributing

To contribute first update your cache with

deno task lock

This both generates the lockfile and makes sure the same cache is used for all contributors.

To check that all you code is working as expected, run:

deno task check

This will test, lint and check that formatting is correct.

created with scaffold