hub.oscript.io
hub.oscript.io

engine-configпакет

Построение, изменение и экспорт конфигурации OneScript

автор: Dmitry Ivanovскачиваний: 2репозиторий: github.com/Stivo182/oscript-engine-config

Пакет лежит в основном пуле хаба, а opm знает этот хаб по умолчанию: короткой формы достаточно.

opm install engine-config

Скачанный файл ставится командой opm install -f <файл> — сеть для этого уже не нужна.

Описание

engine-config

engine-config - библиотека для построения, изменения и экспорта конфигурации OneScript.

Она может объединять настройки из oscript.cfg и OSCRIPT_CONFIG, изменять их в памяти, экспортировать в CFG или окружение и выполнять статический поиск каталогов библиотек.

Возможности

  • Построение конфигурации из файлов oscript.cfg и переменной окружения OSCRIPT_CONFIG с объединением настроек в заданном порядке.
  • Программное управление настройками: чтение, изменение, удаление и дополнение конфигурации.
  • Экспорт в CFG с поддержкой абсолютных и относительных путей библиотек.
  • Экспорт в OSCRIPT_CONFIG с возможностью получить строковое представление или установить переменную окружения текущего процесса.
  • Поиск библиотек по каталогам lib.additional и lib.system, включая поиск первого или всех совпадений.

Требования

  • OneScript 2.0.0 или новее.

Установка

Установите пакет из OPM:

opm install engine-config

Для проекта с packagedef добавьте зависимость:

Описание.ЗависитОт("engine-config");

Подключите библиотеку в сценарии:

#Использовать engine-config

Быстрый старт

Постройте конфигурацию из стандартных источников OneScript:

#Использовать engine-config

Конфигурация = ФабрикаКонфигурацийИнтерпретатора.СоздатьИзСтандартныхИсточников();

Источники применяются в порядке добавления: каждый следующий источник перекрывает предыдущий для одноименных настроек:

  1. <КаталогДвижка>/bin/oscript.cfg;
  2. oscript.cfg рядом с точкой входа;
  3. OSCRIPT_CONFIG.

Отсутствующие CFG из стандартных источников пропускаются. Построение конфигурации не изменяет файлы, текущий каталог или переменные окружения процесса. Дополнительные источники можно задать явно:

Конфигурация = Новый ПостроительКонфигурацииИнтерпретатора()
    .ДобавитьФайлКонфигурации("config/base.cfg")
    .ДобавитьНастройкиОкружения("lib.additional=./lib", ТекущийКаталог())
    .Построить();

Подробнее: Построение конфигурации.

Изменение и экспорт конфигурации

Конфигурация = Новый КонфигурацияИнтерпретатора();

Конфигурация.УстановитьРежимЯвныхИмпортов("warn");
Конфигурация.УстановитьСистемныйКаталогБиблиотек("./lib/system");
Конфигурация.ДобавитьДополнительныйКаталогБиблиотек("./lib/project");

РежимИмпортов = Конфигурация.ПолучитьРежимЯвныхИмпортов();

Ключи регистронезависимы. Повторная установка заменяет значение и сохраняет последнее написание ключа.

Запись полностью заменяет целевой файл каноническим CFG: UTF-8 без BOM, окончания строк LF, пары Ключ=Значение в стабильном порядке. Каталог назначения должен существовать.

Конфигурация.ЗаписатьВФайл(
    "build/oscript.cfg",
    ПреобразованияПутейКонфигурацииИнтерпретатора.ОтносительноФайла()
);

ВСтрокуОкружения() возвращает OSCRIPT_CONFIG с абсолютными библиотечными путями и не меняет процесс. УстановитьВПеременнуюОкружения() формирует ту же строку и изменяет окружение текущего процесса:

СтрокаОкружения = Конфигурация.ВСтрокуОкружения();
Конфигурация.УстановитьВПеременнуюОкружения();

Подробнее: Изменение и экспорт конфигурации.

Поиск библиотек

Локатор = Новый ЛокаторБиблиотекПоКонфигурации(Конфигурация);

Каталоги = Локатор.ПолучитьКаталогиПоиска();
КаталогБиблиотеки = Локатор.НайтиКаталогБиблиотеки("my-library");
ВсеКаталогиБиблиотеки = Локатор.НайтиВсеКаталогиБиблиотеки("my-library");

В конструктор можно передать одну конфигурацию или массив. Для каждой конфигурации сначала проверяются дополнительные каталоги в исходном порядке, затем системный. Локатор фиксирует снимок библиотечных настроек при создании. Можно получить первый найденный каталог или все совпадения в порядке поиска. Поиск не запускает package-loader.os и не проверяет наличие исполняемого кода библиотеки.

Подробнее: Поиск библиотек.

Публичный API

API Назначение
КонфигурацияИнтерпретатора Изменение и экспорт конфигурации
ЛокаторБиблиотекПоКонфигурации Расчёт каталогов поиска и статический поиск библиотек
ПостроительКонфигурацииИнтерпретатора Объединение CFG и окружения
ФабрикаКонфигурацийИнтерпретатора Готовые конфигурации из типовых источников
ПреобразованияПутейКонфигурацииИнтерпретатора Преобразования библиотечных путей при записи
КодыОшибокКонфигурацииИнтерпретатора Стабильные машинные коды ошибок

Полный обзор: документация API.

Разработка

# Установка зависимостей проекта
opm install -l --dev

# Запуск всех тестов
oneunit e

# Сборка OPM-пакета
opm build .