Пакетный режим объединяет обычные модули Topaz с корнем проекта, зависимостями, lock-файлом и локальными копиями внешних пакетов. Он не добавляет новый синтаксис и не ослабляет правила видимости, циклов и инициализации модулей.
Контракт и компоненты
topaz.toml задаёт имя пакета, версию языка, точку входа и зависимости. topaz.lock фиксирует выбранные версии и данные для проверки содержимого. Локальные зависимости задаются путём, а внешние копируются в vendor/<name>/<version>. Если у команды проверки, запуска или сборки не указан файл, используется точка входа пакета.
Рабочий процесс
init создаёт пакет, add добавляет зависимость, lock обновляет lock-файл, а fetch и vendor сохраняют внешние зависимости локально. Храните topaz.toml и topaz.lock в репозитории и используйте --locked для воспроизводимых сборок.
При запуске topaz lsp редактор должен передать каталог пакета в initialize.rootUri. Если lock-файл действителен, диагностика разрешает локальные модули и зависимости из vendor по тому же графу пакета, что и topaz check; содержимое открытых документов имеет приоритет над сохранёнными файлами.
Topaz 5.7.0 добавляет topaz init --target web-app, делает [build].target фактической целью package build по умолчанию и допускает строгую таблицу [web] только с title, нормализованными styles/*.css и assets/**. В таблицах стилей запрещены CSS @import и удалённые либо экранированные ссылки url(); каждый файл стилей нужно объявлять явно, а его ресурсы поставлять как управляемые assets. topaz dev работает лишь для этой цели и привязывается только к loopback.
Для файлов приложения объявите разрешённые корни в [capabilities.fs] и запускайте готовый продукт из каталога с его data и выходными каталогами. Нативный исполняемый файл и Python-сборка пакетного режима отсчитывают эти корни от рабочего каталога запуска, поэтому исходный пакет во время выполнения не требуется. Python-сборке нужен Python 3.11 или новее; она работает как обычное CLI-приложение с прямыми stdout/stderr, аргументами, stdin и кодом завершения явной функции main.
Текущая поддержка
Topaz v5.7 поддерживает создание пакетов, добавление зависимостей, блокировку версий, vendoring, компиляцию пакетов и автономные сборки. Публичный пакет topaz-lang@5.7.0 устанавливает подходящий исполняемый файл Topaz для текущей платформы.
Границы и ограничения
Зависимость пакета не даёт дополнительных прав среды и не импортирует синтаксис другого языка. Исходные зависимости Topaz используют topaz.toml, topaz.lock и локально сохранённые файлы; npm-пакет служит только установщиком CLI. Для автономной сборки все зафиксированные зависимости должны находиться локально.
topaz emit --target python остаётся поверхностью для просмотра исходного кода и trace-интеграции. Для приложения с физической файловой системой используйте topaz build --target python в пакетном режиме.
Справочник команд
topaz init --root my-app
topaz add utility@1.2.0 --root my-app
topaz lock --root my-app
topaz vendor --root my-app --from ./registry
topaz check --root my-app --locked
topaz build --root my-app --locked --out-dir ./dist/native
topaz build --target python --root my-app --locked --out-dir ./dist/python