vite-intlayer
Version:
A Vite plugin for seamless internationalization (i18n), providing locale detection, redirection, and environment-based configuration
86 lines • 2.54 kB
JavaScript
import {
cleanOutputDir,
prepareIntlayer,
runOnce,
watch
} from "@intlayer/chokidar";
import intlayerConfig from "@intlayer/config/built";
import { join, relative, resolve } from "path";
import { IntlayerPrunePlugin } from "./intlayerPrunePlugin.mjs";
cleanOutputDir();
const intlayerPlugin = () => {
const {
mainDir,
configDir,
baseDir,
watch: isWatchMode
} = intlayerConfig.content;
const { optimize } = intlayerConfig.build;
const plugins = [
{
name: "vite-intlayer-plugin",
config: (config) => {
const dictionariesPath = join(mainDir, "dictionaries.mjs");
const relativeDictionariesPath = relative(baseDir, dictionariesPath);
const unmergedDictionariesPath = join(
mainDir,
"unmerged_dictionaries.mjs"
);
const relativeUnmergedDictionariesPath = relative(
baseDir,
unmergedDictionariesPath
);
const configurationPath = join(configDir, "configuration.json");
const relativeConfigurationPath = relative(baseDir, configurationPath);
config.resolve = {
...config.resolve,
alias: {
...config.resolve?.alias,
"@intlayer/dictionaries-entry": resolve(relativeDictionariesPath),
"@intlayer/unmerged-dictionaries-entry": resolve(
relativeUnmergedDictionariesPath
),
"@intlayer/config/built": resolve(relativeConfigurationPath)
}
};
if (isWatchMode) {
config.optimizeDeps = {
...config.optimizeDeps,
exclude: [
...config.optimizeDeps?.exclude ?? [],
"@intlayer/dictionaries-entry",
"@intlayer/unmerged-dictionaries-entry",
"@intlayer/config/built"
]
};
}
return config;
},
configureServer: async (server) => {
if (intlayerConfig.content.watch) {
watch({ configuration: intlayerConfig });
}
},
buildStart: async () => {
const sentinelPath = join(
intlayerConfig.content.baseDir,
".intlayer",
"cache",
"intlayer-prepared.lock"
);
await runOnce(
sentinelPath,
async () => await prepareIntlayer(intlayerConfig)
);
}
}
];
if (optimize) {
plugins.push(IntlayerPrunePlugin(intlayerConfig));
}
return plugins;
};
export {
intlayerPlugin
};
//# sourceMappingURL=intlayerPlugin.mjs.map