Expand description
Language adapters.
Each supported language is a single self-contained [LanguageAdapter]: it
declares the file extensions it owns, parses source into the shared
ModuleFacts, and resolves its own import specifiers against the shared
ResolveCtx. The registry below is the one place languages are enumerated
— discovery (fs), parse dispatch (parse), and import resolution
(resolve) all derive from it, so adding a language is a single new adapter
plus one registry line.