Skip to content

Início rápido

Escanear um diretório por arquivos correspondendo a *.ts:

ts
import { Glob } from "bun";

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

// Escaneia o diretório de trabalho atual e cada um de seus subdiretórios recursivamente
for await (const file of glob.scan(".")) {
  console.log(file); // => "index.ts"
}

Corresponder uma string contra um padrão glob:

ts
import { Glob } from "bun";

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

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

Glob é uma classe que implementa a seguinte interface:

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

  match(path: string): boolean;
}

interface ScanOptions {
  /**
   * O diretório raiz para começar a correspondência. Padrão é `process.cwd()`
   */
  cwd?: string;

  /**
   * Permite que padrões correspondam a entradas que começam com um ponto (`.`).
   *
   * @default false
   */
  dot?: boolean;

  /**
   * Retorna o caminho absoluto para as entradas.
   *
   * @default false
   */
  absolute?: boolean;

  /**
   * Indica se deve traversar descendentes de diretórios de link simbólico.
   *
   * @default false
   */
  followSymlinks?: boolean;

  /**
   * Lança um erro quando o link simbólico está quebrado
   *
   * @default false
   */
  throwErrorOnBrokenSymlink?: boolean;

  /**
   * Retorna apenas arquivos.
   *
   * @default true
   */
  onlyFiles?: boolean;
}

Padrões Glob Suportados

O Bun suporta os seguintes padrões glob:

? - Corresponde a qualquer caractere único

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

* - Corresponde a zero ou mais caracteres, exceto separadores de caminho (/ ou \)

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

** - Corresponde a qualquer número de caracteres incluindo /

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

[ab] - Corresponde a um dos caracteres contidos nos colchetes, bem como intervalos 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

Você pode usar intervalos de caracteres (e.g [0-9], [a-z]) bem como os operadores de negação ^ ou ! para corresponder a qualquer coisa exceto os caracteres contidos dentro dos colchetes (e.g [^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} - Corresponde a qualquer um dos padrões 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

Estes padrões de correspondência podem ser profundamente aninhados (até 10 níveis) e conter qualquer um dos wildcards acima.

! - Nega o resultado no início de um padrão

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

\ - Escapa qualquer um dos caracteres especiais acima

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

Compatibilidade com fs.glob() do Node.js

O Bun também implementa as funções fs.glob() do Node.js com recursos adicionais:

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

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

// Padrões de exclusão
const filtered = await promises.glob("**/*", {
  exclude: ["node_modules/**", "*.test.*"],
});

Todas as três funções (fs.glob(), fs.globSync(), fs.promises.glob()) suportam:

  • Array de padrões como primeiro argumento
  • Opção exclude para filtrar resultados

Bun by www.bunjs.com.cn edit