synapse-storage
Version:
Набор инструментов для управления состоянием и апи-запросами
48 lines (43 loc) • 2.15 kB
JavaScript
import { loggerConsole } from "../../../_utils/index.js";
/**
* Сравнивает сохранённую версию схемы с текущей (`config.version`) и решает, что делать
* с персистентными данными при инициализации. Dev-предупреждения (в non-production) —
* только при потенциально опасных рассогласованиях (версия поднята без `migrate`,
* сохранённая версия новее текущей).
*/ function decideMigration(options) {
const { hasExisting, existingState, targetVersion, migrate } = options;
if (!hasExisting) {
return {
kind: 'seed'
};
}
const persistedVersion = options.persistedVersion ?? 0;
if (persistedVersion === targetVersion) {
return {
kind: 'none'
};
}
if (persistedVersion > targetVersion) {
if (process.env.NODE_ENV !== 'production') {
loggerConsole.warn(`[synapse] persisted state version (${persistedVersion}) новее текущей config.version (${targetVersion}). ` + 'Оставляю данные как есть. Похоже, открыта старая сборка поверх данных новой схемы.');
}
return {
kind: 'none'
};
}
// persistedVersion < targetVersion → нужна миграция
if (migrate) {
return {
kind: 'migrate',
state: migrate(existingState, persistedVersion)
};
}
if (process.env.NODE_ENV !== 'production') {
loggerConsole.warn(`[synapse] config.version поднята до ${targetVersion} (в хранилище версия ${persistedVersion}), но migrate не задан. ` + 'Оставляю сохранённые данные старой схемы как есть — задайте migrate(oldState, oldVersion) для преобразования.');
}
return {
kind: 'bump'
};
}
export { decideMigration };
//# sourceMappingURL=migration.util.js.map