veza/apps/web/src/utils/persistWithMigration.ts

31 lines
710 B
TypeScript
Raw Normal View History

/**
* Helper to create persist config with version and migrate.
* Use when adding new persisted stores to ensure future schema changes are handled.
*
* @example
* ```ts
* persist(
* (set) => ({ ... }),
* persistWithMigration('my-storage', 1, (state, version) => state ?? defaultState)
* )
* ```
*/
export function persistWithMigration<T>(
name: string,
version: number,
migrate: (state: unknown, version: number) => T,
partialize?: (state: T) => Partial<T>,
): {
name: string;
version: number;
migrate: (state: unknown, version: number) => T;
partialize?: (state: T) => Partial<T>;
} {
return {
name,
version,
migrate,
...(partialize && { partialize }),
};
}