~/tools/toml/merge

TOML

TOML Merge

Объединить два TOML-файла в один.

Как это работает

Базовый конфиг приложения в TOML один, а для локальной разработки или конкретного окружения нужно переопределить пару значений, не трогая основной файл целиком? Toml merge online объединяет два TOML документа в один, где значения из второго файла переопределяют совпадающие ключи первого.

Слияние происходит рекурсивно: если поле в обоих файлах является вложенной таблицей, ее содержимое объединяется тоже рекурсивно, а не заменяется целиком, простые значения вроде строк и чисел из второго файла просто перезаписывают значения из первого при совпадении ключа.

Полезно применять при управлении конфигурацией с базовым файлом под git и локальным файлом переопределений вне системы контроля версий, похоже на то, как docker compose работает с override файлами, только применительно к формату TOML.

Частые вопросы

Что происходит с массивами при слиянии, если ключ есть в обоих файлах?

Массивы в текущей реализации не объединяются поэлементно, значение массива из второго файла полностью заменяет значение массива из первого при совпадении имени ключа.

Можно ли объединить больше двух TOML файлов за раз?

Этот инструмент рассчитан на два файла за одну операцию, для трех и более файлов можно выполнить объединение последовательно, взяв результат первого слияния как базу для следующего.

Что если ключ есть только в одном из двух файлов?

Такой ключ переносится в результат без изменений из того файла, где он присутствует, отсутствие ключа во втором файле не удаляет его из итогового результата.

Подходит ли этот подход для управления секретами через отдельный override файл?

Да, это довольно частый паттерн: базовый конфиг в git с плейсхолдерами, а локальный override файл с реальными секретами вне системы контроля версий, который на месте объединяется с базовым перед запуском приложения.