@@ -56,32 +56,48 @@ function tryLocalOrReturnVirtual(
5656 return virtualName ;
5757}
5858
59- // TODO (AleksandrSl 14/12/2025): Could we type this so we are sure we match the virtual model names
60- const virtualModulesResolvers = {
61- "@lingo.dev/compiler/dev-config" : ( config : LingoConfig ) =>
62- "\0virtual:lingo-dev-config" ,
63- "@lingo.dev/compiler/locale/server" : ( config : LingoConfig ) =>
64- tryLocalOrReturnVirtual (
65- config ,
66- "locale-resolver.server.ts" ,
67- "\0virtual:locale-resolver.server" ,
68- ) ,
69- "@lingo.dev/compiler/locale/client" : ( config : LingoConfig ) =>
70- tryLocalOrReturnVirtual (
71- config ,
72- "locale-resolver.client.ts" ,
73- "\0virtual:locale-resolver.client" ,
74- ) ,
75- } satisfies Record < string , ( config : LingoConfig ) => string > ;
59+ /**
60+ * Single source of truth for virtual modules
61+ * Each entry defines both resolver (import path → virtual ID) and loader (virtual ID → code)
62+ */
63+ const virtualModules = {
64+ "@lingo.dev/compiler/dev-config" : {
65+ virtualId : "\0virtual:lingo-dev-config" ,
66+ loader : ( config : LingoConfig ) => generateDevConfigModule ( config ) ,
67+ customFileCheck : undefined ,
68+ } ,
69+ "@lingo.dev/compiler/locale/server" : {
70+ virtualId : "\0virtual:locale-resolver.server" as const ,
71+ loader : ( config : LingoConfig ) => generateServerLocaleModule ( config ) ,
72+ // Custom file resolver - allows user overrides
73+ customFileCheck : "locale-resolver.server.ts" as const ,
74+ } ,
75+ "@lingo.dev/compiler/locale/client" : {
76+ virtualId : "\0virtual:locale-resolver.client" as const ,
77+ loader : ( config : LingoConfig ) => generateClientLocaleModule ( config ) ,
78+ // Custom file resolver - allows user overrides
79+ customFileCheck : "locale-resolver.client.ts" as const ,
80+ } ,
81+ } as const ;
82+
83+ // Derive resolver and loader maps from the single source
84+ const virtualModulesResolvers = Object . fromEntries (
85+ Object . entries ( virtualModules ) . map ( ( [ importPath , module ] ) => [
86+ importPath ,
87+ ( config : LingoConfig ) =>
88+ module . customFileCheck
89+ ? tryLocalOrReturnVirtual (
90+ config ,
91+ module . customFileCheck ,
92+ module . virtualId ,
93+ )
94+ : module . virtualId ,
95+ ] ) ,
96+ ) ;
7697
77- const virtualModulesLoaders = {
78- "\0virtual:lingo-dev-config" : ( config : LingoConfig ) =>
79- generateDevConfigModule ( config ) ,
80- "\0virtual:locale-resolver.server" : ( config : LingoConfig ) =>
81- generateServerLocaleModule ( config ) ,
82- "\0virtual:locale-resolver.client" : ( config : LingoConfig ) =>
83- generateClientLocaleModule ( config ) ,
84- } satisfies Record < string , ( config : LingoConfig ) => string > ;
98+ const virtualModulesLoaders = Object . fromEntries (
99+ Object . values ( virtualModules ) . map ( ( value ) => [ value . virtualId , value . loader ] ) ,
100+ ) ;
85101
86102/**
87103 * Universal plugin for Lingo.dev compiler
0 commit comments