Files
medusa-store/packages/admin/admin-vite-plugin/src/vmod.ts
Leonardo Benini 226984cf0f feat(admin-*,dashboard): add dashboard i18n extensions (#13763)
* virtual i18n module

* changeset

* fallback ns

fallback to the default "translation" ns if the key isnt found. Allows to use a single "useTranslation("customNs")" hook for both custom and medusa-provided keys

* simplify merges

* optional for backward compat

* fix HMR

* fix generated deepMerge

* test
2025-10-23 15:16:43 -04:00

88 lines
2.5 KiB
TypeScript

import {
DISPLAY_VIRTUAL_MODULE,
FORM_VIRTUAL_MODULE,
I18N_VIRTUAL_MODULE,
LINK_VIRTUAL_MODULE,
MENU_ITEM_VIRTUAL_MODULE,
ROUTE_VIRTUAL_MODULE,
WIDGET_VIRTUAL_MODULE,
} from "@medusajs/admin-shared"
const RESOLVED_LINK_VIRTUAL_MODULE = `\0${LINK_VIRTUAL_MODULE}`
const RESOLVED_FORM_VIRTUAL_MODULE = `\0${FORM_VIRTUAL_MODULE}`
const RESOLVED_DISPLAY_VIRTUAL_MODULE = `\0${DISPLAY_VIRTUAL_MODULE}`
const RESOLVED_ROUTE_VIRTUAL_MODULE = `\0${ROUTE_VIRTUAL_MODULE}`
const RESOLVED_MENU_ITEM_VIRTUAL_MODULE = `\0${MENU_ITEM_VIRTUAL_MODULE}`
const RESOLVED_WIDGET_VIRTUAL_MODULE = `\0${WIDGET_VIRTUAL_MODULE}`
const RESOLVED_I18N_VIRTUAL_MODULE = `\0${I18N_VIRTUAL_MODULE}`
const VIRTUAL_MODULES = [
LINK_VIRTUAL_MODULE,
FORM_VIRTUAL_MODULE,
DISPLAY_VIRTUAL_MODULE,
ROUTE_VIRTUAL_MODULE,
MENU_ITEM_VIRTUAL_MODULE,
WIDGET_VIRTUAL_MODULE,
I18N_VIRTUAL_MODULE,
] as const
const RESOLVED_VIRTUAL_MODULES = [
RESOLVED_LINK_VIRTUAL_MODULE,
RESOLVED_FORM_VIRTUAL_MODULE,
RESOLVED_DISPLAY_VIRTUAL_MODULE,
RESOLVED_ROUTE_VIRTUAL_MODULE,
RESOLVED_MENU_ITEM_VIRTUAL_MODULE,
RESOLVED_WIDGET_VIRTUAL_MODULE,
RESOLVED_I18N_VIRTUAL_MODULE,
] as const
export function resolveVirtualId(id: string) {
return `\0${id}`
}
export function isVirtualModuleId(id: string): id is VirtualModule {
return VIRTUAL_MODULES.includes(id as VirtualModule)
}
export function isResolvedVirtualModuleId(
id: string
): id is (typeof RESOLVED_VIRTUAL_MODULES)[number] {
return RESOLVED_VIRTUAL_MODULES.includes(
id as (typeof RESOLVED_VIRTUAL_MODULES)[number]
)
}
export type VirtualModule =
| typeof LINK_VIRTUAL_MODULE
| typeof FORM_VIRTUAL_MODULE
| typeof DISPLAY_VIRTUAL_MODULE
| typeof ROUTE_VIRTUAL_MODULE
| typeof MENU_ITEM_VIRTUAL_MODULE
| typeof WIDGET_VIRTUAL_MODULE
| typeof I18N_VIRTUAL_MODULE
const resolvedVirtualModuleIds = {
link: RESOLVED_LINK_VIRTUAL_MODULE,
form: RESOLVED_FORM_VIRTUAL_MODULE,
display: RESOLVED_DISPLAY_VIRTUAL_MODULE,
route: RESOLVED_ROUTE_VIRTUAL_MODULE,
menuItem: RESOLVED_MENU_ITEM_VIRTUAL_MODULE,
widget: RESOLVED_WIDGET_VIRTUAL_MODULE,
i18n: RESOLVED_I18N_VIRTUAL_MODULE,
} as const
const virtualModuleIds = {
link: LINK_VIRTUAL_MODULE,
form: FORM_VIRTUAL_MODULE,
display: DISPLAY_VIRTUAL_MODULE,
route: ROUTE_VIRTUAL_MODULE,
menuItem: MENU_ITEM_VIRTUAL_MODULE,
widget: WIDGET_VIRTUAL_MODULE,
i18n: I18N_VIRTUAL_MODULE,
} as const
export const vmod = {
resolved: resolvedVirtualModuleIds,
virtual: virtualModuleIds,
}