Glob
Matches /-separated paths without accessing the file system, using the
same pattern syntax as FileSystem.glob.
Constructors
Compiles a glob pattern into a reusable Glob.
Details
Patterns use / as the separator. * matches any run of characters within
one path segment, ? matches one character, and [...] matches one
character from a set, with ! or ^ negating it and POSIX classes such as
[[:digit:]] allowed. {a,b} expands to each alternative and may nest. A
segment that is exactly ** matches zero or more whole segments. A trailing
/ matches only directories, and `` makes the next character literal.
Gotchas
Wildcards and ** skip names that start with . unless the pattern segment
itself starts with . or dot is true; they never match . or ...
x/. is the same as x/, and a . or .. segment after ** makes the
pattern match nothing, as does the empty pattern. UNC patterns and paths
such as //server/share are not supported and never match. Braces and
commas inside [...] are class members. Extended glob syntax and leading
! negation are not interpreted, but ordinary wildcards still apply within
them (for example, ?(a) matches x(a)). Malformed syntax, such as an
unclosed [, matches literally. Braces also stay literal if expansion would
exceed 10,000 alternatives.
Signature
declare function make(pattern: string, options?: { readonly dot?: boolean;}): GlobExample Matching source files
import { Glob } from "effect"
const sources = Glob.make("src/**/*.{ts,tsx}")
Glob.match(sources, "src/index.ts") // => trueGlob.match(sources, "src/ui/Button.tsx") // => trueGlob.match(sources, "src/.cache/index.ts") // => falseGlob.match(sources, "test/index.ts") // => falseModels
A compiled glob pattern.
Details
pattern is the source text and dot records whether wildcards match names
that start with .. Match paths against it with match.
See
- make for compiling a pattern
Signature
interface Glob extends Pipeable, Inspectable { readonly "~effect/Glob": "~effect/Glob"; readonly dot: boolean; readonly pattern: string;}Predicates
Tests whether a /-separated path matches a Glob.
Details
Empty segments and ./ segments in the path are ignored. A trailing /
marks the path as a directory, which a pattern ending in / requires.
Signature
declare const match: { (path: string): (self: Glob) => boolean; (self: Glob, path: string): boolean;}Example Filtering paths
import { Glob, pipe } from "effect"
const tests = Glob.make("**/*.test.ts")const paths = ["src/a.ts", "src/a.test.ts", "test/b.test.ts"]
paths.filter((path) => Glob.match(tests, path)) // => ["src/a.test.ts", "test/b.test.ts"]pipe(tests, Glob.match("./src/a.test.ts")) // => trueUtils
Escapes glob syntax so a string matches only itself.
Signature
declare function escape(input: string): stringExample Matching a literal file name
import { Glob } from "effect"
const name = "report[1].txt"
Glob.match(Glob.make(name), name) // => falseGlob.match(Glob.make(Glob.escape(name)), name) // => true