46 lines
1.3 KiB
TypeScript
Raw Normal View History

2026-05-31 13:21:13 +02:00
import { Plugin } from 'vite';
import { Ref } from 'vue';
interface ServerRefOptions<T extends Record<string, unknown>> {
state?: T;
/**
* Milliseconds to debounce the server ref updates.
*
* @default 10
*/
debounce?: number;
/**
* Default value for the client when the data is not presented.
*
* @default () => undefined
*/
defaultValue?: (key: string) => unknown;
/**
* Log info on the client
*/
debug?: boolean;
/**
* The vue entry name for the generated client code.
*
* @default 'vue'
*/
clientVue?: string;
/**
* Callback on server data change
*/
onChanged?: <K extends keyof T>(name: K, data: T[K], patch: Partial<T[K]> | undefined, timestamp: number) => void;
}
interface ServerRefExtend<T> {
$syncDown: boolean;
$syncUp: boolean;
$onChange(fn: (data: T) => void): void;
$onPatch(fn: (patch: Partial<T>) => void): void;
$patch(patch: Partial<T>): Promise<boolean>;
}
type ServerRef<T> = Ref<T> & ServerRefExtend<T>;
type ServerReactive<T> = T & ServerRefExtend<T>;
declare function VitePluginServerRef(options?: ServerRefOptions<any>): Plugin;
export { type ServerReactive, type ServerRef, type ServerRefExtend, type ServerRefOptions, VitePluginServerRef as default };