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"); // => falseGlob é 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"); // => falseVocê 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"); // => falseEstes 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"); // => falseCompatibilidade 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
excludepara filtrar resultados