Настройки модуля

Хранение настроек в JSON, миграции версий и сохранение изменений.

Включение настроек

В module.json задайте options.settingsVersion — положительный номер схемы. Без него встроенная загрузка и запись настроек отключены.

{
    "name": "settings-example",
    "disableAutoUpdate": true,
    "options": {
        "settingsVersion": 1,
        "settingsFile": "module_settings.json",
        "settingsMigrator": "module_settings_migrator.js",
        "settingsAutosaveOnClose": true
    }
}

Последние три значения — значения по умолчанию. Пути разрешаются относительно папки модуля. Настройки доступны как mod.settings и разделяются экземплярами одного загруженного модуля.

Мигратор

Экспортируйте функцию (fromVersion, toVersion, settings), возвращающую объект новой схемы. При отсутствии файла fromVersion равен null; для старого файла без оболочки версии он может быть undefined.

// module_settings_migrator.js
module.exports = function migrate(fromVersion, toVersion, settings) {
    const result = { enabled: true, message: 'Hello' };
    if (settings && typeof settings.enabled === 'boolean') {
        result.enabled = settings.enabled;
    }
    if (settings && typeof settings.message === 'string') {
        result.message = settings.message;
    }
    return result;
};

Это пример одной схемы. При расширении формата увеличивайте номер и явно переносите старые значения. Мигратор вызывается при несовпадении версий, а не при каждом чтении файла. Обрабатывайте как переход вперед, так и возможный откат, если распространяете несколько сборок.

Чтение и сохранение

Настройки загружаются до создания экземпляров. Файл имеет оболочку:

{
    "version": 1,
    "data": {
        "enabled": true,
        "message": "Hello"
    }
}

mod.loadSettings() перечитывает файл. mod.saveSettings() записывает текущий mod.settings. Автосохранение по умолчанию происходит при выгрузке модуля; для важного изменения можно сохранить сразу:

mod.settings.enabled = !mod.settings.enabled;
mod.saveSettings();

Ошибки записи логируются внутри Toolbox: возвращаемое значение saveSettings не является подтверждением успеха. Не делайте запись на каждый сетевой пакет. В текущей сборке BigInt кодируется строкой с префиксом BIGINT: и восстанавливается при чтении. Не используйте такие строки для обычного текста, который должен оставаться строкой.

Источник: bin/mod.js, методы loadSettings и saveSettings.