Files
WRNexusJS/packages/csr/src/client-functions.ts
T
2026-08-01 01:09:58 +05:30

24 lines
854 B
TypeScript

export interface ClientModuleScope {
output: Record<string, (payload?: unknown) => void>;
server: Record<string, (...args: unknown[]) => Promise<unknown>>;
props: Readonly<Record<string, unknown>>;
refs: Record<string, Element>;
}
const moduleCache = new Map<string, Promise<any>>();
export async function loadClientFunctions(
url: string,
scope: ClientModuleScope,
): Promise<Record<string, (...args: unknown[]) => unknown>> {
const module = await (moduleCache.get(url) ??
(() => {
const promise = import(/* @vite-ignore */ url);
moduleCache.set(url, promise);
return promise;
})());
if (typeof module.bindClientScope === "function") return module.bindClientScope(scope);
return module.__wrnexusClientFunctions ?? {};
}
export function invalidateClientModule(url: string): void {
moduleCache.delete(url);
}