Skip to content

Inicio Rápido

Escanear un directorio para archivos que coincidan con *.ts:

ts
import { Glob } from "bun";

const glob = new Glob("**/*.ts");

// Escanea el directorio de trabajo actual y cada uno de sus subdirectorios recursivamente
for await (const file of glob.scan(".")) {
  console.log(file); // => "index.ts"
}

Coincidir una cadena con un patrón glob:

ts
import { Glob } from "bun";

const glob = new Glob("*.ts");

glob.match("index.ts"); // => true
glob.match("index.js"); // => false

Glob es una clase que implementa la siguiente interfaz:

ts
class Glob {
  scan(root: string | ScanOptions): AsyncIterable<string>;
  scanSync(root: string | ScanOptions): Iterable<string>;

  match(path: string): boolean;
}

interface ScanOptions {
  /**
   * El directorio raíz desde donde comenzar a buscar. Por defecto es `process.cwd()`
   */
  cwd?: string;

  /**
   * Permitir que los patrones coincidan con entradas que comienzan con un punto (`.`).
   *
   * @default false
   */
  dot?: boolean;

  /**
   * Devolver la ruta absoluta para las entradas.
   *
   * @default false
   */
  absolute?: boolean;

  /**
   * Indica si se deben recorrer los descendientes de directorios de enlaces simbólicos.
   *
   * @default false
   */
  followSymlinks?: boolean;

  /**
   * Lanzar un error cuando el enlace simbólico está roto
   *
   * @default false
   */
  throwErrorOnBrokenSymlink?: boolean;

  /**
   * Devolver solo archivos.
   *
   * @default true
   */
  onlyFiles?: boolean;
}

Patrones Glob Soportados

Bun soporta los siguientes patrones glob:

? - Coincide con cualquier carácter individual

ts
const glob = new Glob("???.ts");
glob.match("foo.ts"); // => true
glob.match("foobar.ts"); // => false

* - Coincide con cero o más caracteres, excepto separadores de ruta (/ o \)

ts
const glob = new Glob("*.ts");
glob.match("index.ts"); // => true
glob.match("src/index.ts"); // => false

** - Coincide con cualquier número de caracteres incluyendo /

ts
const glob = new Glob("**/*.ts");
glob.match("index.ts"); // => true
glob.match("src/index.ts"); // => true
glob.match("src/index.js"); // => false

[ab] - Coincide con uno de los caracteres contenidos en los corchetes, así como rangos de caracteres

ts
const glob = new Glob("ba[rz].ts");
glob.match("bar.ts"); // => true
glob.match("baz.ts"); // => true
glob.match("bat.ts"); // => false

Puedes usar rangos de caracteres (ej. [0-9], [a-z]) así como los operadores de negación ^ o ! para coincidir con cualquier cosa excepto los caracteres contenidos dentro de las llaves (ej. [^ab], [!a-z])

ts
const glob = new Glob("ba[a-z][0-9][^4-9].ts");
glob.match("bar01.ts"); // => true
glob.match("baz83.ts"); // => true
glob.match("bat22.ts"); // => true
glob.match("bat24.ts"); // => false
glob.match("ba0a8.ts"); // => false

{a,b,c} - Coincide con cualquiera de los patrones dados

ts
const glob = new Glob("{a,b,c}.ts");
glob.match("a.ts"); // => true
glob.match("b.ts"); // => true
glob.match("c.ts"); // => true
glob.match("d.ts"); // => false

Estos patrones de coincidencia pueden estar profundamente anidados (hasta 10 niveles), y contener cualquiera de los comodines anteriores.

! - Niega el resultado al inicio de un patrón

ts
const glob = new Glob("!index.ts");
glob.match("index.ts"); // => false
glob.match("foo.ts"); // => true

\ - Escapa cualquiera de los caracteres especiales anteriores

ts
const glob = new Glob("\\!index.ts");
glob.match("!index.ts"); // => true
glob.match("index.ts"); // => false

Compatibilidad con fs.glob() de Node.js

Bun también implementa las funciones fs.glob() de Node.js con características adicionales:

ts
import { glob, globSync, promises } from "node:fs";

// Array de patrones
const files = await promises.glob(["**/*.ts", "**/*.js"]);

// Excluir patrones
const filtered = await promises.glob("**/*", {
  exclude: ["node_modules/**", "*.test.*"],
});

Las tres funciones (fs.glob(), fs.globSync(), fs.promises.glob()) soportan:

  • Array de patrones como primer argumento
  • Opción exclude para filtrar resultados

Bun por www.bunjs.com.cn editar