Skip to content

fs

Intersect L2 — filesystem (intersect/fs).

The only layer that reads disk and the only one carrying a runtime dependency (a globber, tinyglobby). It enumerates real files with the globber, then filters via the pure path API (L1/L0) — it does not re-implement matching; L0/L1 stay pure questions about patterns. See docs/planning/decisions/D-4FRD-intersect-api/layered-api.md.

Semantics are IDENTICAL to the pure layer: a bare path is an exact match and a subtree needs **, exactly as at L1 — the globber’s own dialect never leaks into the result.

The enumerated names are FILENAMES; the arguments are GLOBS. This layer quotes every enumerated name before handing it to matches, so a file really called pages/[id].vue is compared as that name and not as a character class. The corollary binds callers: to reach such a file you must escape the metacharacters in your pattern too (pages/\[id\].vue) — a literal repo path fed in verbatim silently matches nothing.

tinyglobby is imported ONLY here; the core entries (./index, ./segments, ./parse, ./registry) never reference it, keeping them zero-dependency per [[D-4FRD-intersect-api]] Option C.