Skip to content

Формат ​

Формат це те, що містить бандл: маніфест. Цей розділ описує кожен його елемент, по одній сторінці на кожен.

Ви зустрічаєте його у двох місцях:

  • У конфігурації. manifest.artifacts, manifest.vars, cleanup і rules записані саме в цьому форматі.
  • У бандлі. Якщо ви пишете власний читач або встановлювач, саме це ви розбираєте.

Цілий маніфест ​

json
{
  "vars": { "root": "/games/pack" },
  "artifacts": [
    {
      "path": "${root}/libraries/a/a-1.0.jar",
      "source": { "url": "https://example.com/a-1.0.jar" },
      "integrity": { "sha1": "da39a3ee5e6b4b0d3255bfef95601890afd80709" }
    }
  ],
  "launch": {
    "command": "/usr/bin/java",
    "workdir": "${root}",
    "args": ["-cp", "${root}/libraries/a/a-1.0.jar", "com.example.Main"]
  },
  "cleanup": [{ "includes": ["${root}/mods/*.jar"] }]
}

Елементи ​

Спочатку два будівельні блоки, бо все інше їх використовує:

ЕлементЩо цеСторінка
ЗмінніІменовані значення і ${…} майже в кожному рядку.Змінні
Правила«Лише на Windows», «лише з увімкненим прапорцем».Правила

Далі частини маніфесту:

ПолеЩо цеСторінка
artifactsФайли для встановлення.Артефакти
launchЯк запустити гру.Запуск
cleanupЩо видалити після встановлення.Очищення

Сторінки йдуть у порядку читання.

Кожне поле необов'язкове. Маніфест без launch можна встановити, але не запустити.

Формат має версію, 1. Вона не є полем маніфесту: її називає бандл, поруч із маніфестом.

Одне правило ​

Маніфест повністю складений. Кожен файл має одне точне джерело і, де воно існує, хеш. Ніщо не каже «останній».

Тому встановлювач нічого не вирішує. Якщо вашому треба щось шукати, помилка в тому, що зібрало маніфест.

Що робить встановлювач ​

У такому порядку:

  1. Обчислює змінні для цього комп'ютера.
  2. Перевіряє правила очищення і зупиняється, якщо одне небезпечне.
  3. Залишає ті артефакти, чиї правила проходять.
  4. Пропускає файли, що вже на диску з правильним хешем. Решту завантажує.
  5. Перевіряє завантажене.
  6. Розпаковує артефакти, що мають extract.
  7. Видаляє те, що називає cleanup.

Стабільність ​

Формат це стабільна частина opys. Параметри пакетів, плагінів і прапорці командного рядка можуть змінюватися. Формат змінюється лише навмисно, і тоді число format зростає.

@opys/core це еталонна реалізація маніфесту (decodeManifest), а @opys/bundle файла, в якому він зберігається (readBundle, writeBundle).