Implement a basic astro integration for @websnacksjs/i18n
This commit is contained in:
parent
dbd45204bb
commit
9def2922cf
8 changed files with 459 additions and 0 deletions
38
packages/i18n-astro/src/virtual-module.ts
Normal file
38
packages/i18n-astro/src/virtual-module.ts
Normal 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();
|
||||
},
|
||||
},
|
||||
};
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue