Implement a basic astro integration for @websnacksjs/i18n

This commit is contained in:
M. George Hansen 2025-08-15 14:12:49 +12:00
parent dbd45204bb
commit 9def2922cf
8 changed files with 459 additions and 0 deletions

View file

@ -0,0 +1,38 @@
import type { Code } from "ts-poet";
import type { Plugin } from "vite";
export type VirtualModuleOptions = {
moduleId: string;
content: Code;
};
export type VirtualModule = {
moduleId: string;
plugin: Plugin;
};
export const defineVirtualModule = ({
moduleId,
content,
}: VirtualModuleOptions): VirtualModule => {
moduleId = `@websnacksjs/i18n-astro:${moduleId}`;
const resolvedModuleId = `\0${moduleId}`;
return {
moduleId,
plugin: {
name: moduleId,
resolveId(id) {
if (id !== moduleId) {
return;
}
return resolvedModuleId;
},
load(id) {
if (id !== resolvedModuleId) {
return;
}
return content.toString();
},
},
};
};