Skip to content

Commit 9022788

Browse files
committed
WIP: improve the virtual modules resolution
1 parent 9cecef5 commit 9022788

1 file changed

Lines changed: 41 additions & 25 deletions

File tree

cmp/compiler/src/plugin/unplugin.ts

Lines changed: 41 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)