synapse-storage
Version:
Набор инструментов для управления состоянием и апи-запросами
39 lines (38 loc) • 1.98 kB
TypeScript
import type { MigrateFn } from '../storage.interface';
/**
* Решение о миграции персистентного состояния, принимаемое до записи. Чистая функция —
* не трогает хранилище; применяет результат вызывающий (`initializeWithMiddlewares`),
* т.к. запись отличается в sync/async адаптерах.
*/
export type MigrationDecision<T> =
/** Данных нет — записать `initialState` (если задан) и текущую версию. */
{
kind: 'seed';
}
/** Данные старой версии — записать `state` (результат `migrate`) и текущую версию. */
| {
kind: 'migrate';
state: T;
}
/** Данные актуальной формы, но версию надо обновить (например, поднята без `migrate`). */
| {
kind: 'bump';
}
/** Ничего не делать (версии совпадают либо сохранённая новее текущей). */
| {
kind: 'none';
};
export interface DecideMigrationOptions<T extends Record<string, any>> {
hasExisting: boolean;
existingState: any;
persistedVersion: number | undefined;
targetVersion: number;
migrate?: MigrateFn<T>;
}
/**
* Сравнивает сохранённую версию схемы с текущей (`config.version`) и решает, что делать
* с персистентными данными при инициализации. Dev-предупреждения (в non-production) —
* только при потенциально опасных рассогласованиях (версия поднята без `migrate`,
* сохранённая версия новее текущей).
*/
export declare function decideMigration<T extends Record<string, any>>(options: DecideMigrationOptions<T>): MigrationDecision<T>;