Полные примеры

Last updated: 2026-10-14Полный статичный конфиг и тот же проект в виде живого !active-конфига.

Полные примеры

Перенесено из репозитория формата — docs/spec/SPECIFICATION_RU.md, SYNX 3.7.4. Правки вносятся там.

4.1 Обычный файл (без !active)

Простой статичный конфиг. Никакой магии — просто данные.

synx
# Конфиг игры TotalWario (статичный)

app_name TotalWario
version 2.0.0

server
  host 0.0.0.0
  port 8080
  ssl_enabled false

gameplay
  base_hp 100
  boss_hp 500
  max_players 16
  greeting Prepare to fight.

map_rotation
  - Arena of Doom
  - Crystal Caverns
  - Wario Stadium

rules |
  1. Не читерить.
  2. Уважать Синдикат.
  3. Весело проводить время!

credits
  lead_dev KaiserBerg
  studio APERTURESyndicate
  year 2026

Результат (Synx.parse()):

json
{
  "app_name": "TotalWario",
  "version": "2.0.0",
  "server": {
    "host": "0.0.0.0",
    "port": 8080,
    "ssl_enabled": false
  },
  "gameplay": {
    "base_hp": 100,
    "boss_hp": 500,
    "max_players": 16,
    "greeting": "Prepare to fight."
  },
  "map_rotation": [
    "Arena of Doom",
    "Crystal Caverns",
    "Wario Stadium"
  ],
  "rules": "1. Не читерить.\n2. Уважать Синдикат.\n3. Весело проводить время!",
  "credits": {
    "lead_dev": "KaiserBerg",
    "studio": "APERTURESyndicate",
    "year": 2026
  }
}

4.2 Файл с !active — живой конфиг

Тот же конфиг, но с динамическими функциями и валидацией.

synx
!active
# Живой конфиг проекта TotalWario

app_name[required, min:3, max:30] TotalWario
version[readonly] 2.0.0

server
  // Порт из переменной окружения, если нет — 8080
  port:env:default:8080 PORT
  host 0.0.0.0
  ssl_enabled false

gameplay
  base_hp 100
  // Движок сам посчитает: 100 * 5 = 500
  boss_hp:calc base_hp * 5
  max_players[type:int, min:2, max:64] 16
  difficulty[enum:easy|normal|hard|nightmare] normal

  // Каждый раз при парсинге — случайная фраза
  greeting:random
    - Welcome to the arena!
    - Prepare to fight.
    - Wario time!

  // Взвешенный рандом: обычный дроп 70%, редкий 20%, легенда 10%
  loot_tier:random 70 20 10
    - common
    - rare
    - legendary

map_rotation
  - Arena of Doom
  - Crystal Caverns
  - Wario Stadium

rules |
  1. Не читерить.
  2. Уважать Синдикат.
  3. Весело проводить время!

// Подключить настройки БД из отдельного файла
database:include ./db.synx

// Секреты — не попадут в логи
api_key[required]:secret sk-live-abc123def456

credits
  lead_dev KaiserBerg
  studio APERTURESyndicate
  year 2026
  contact:alias lead_dev

Результат одного из вызовов Synx.parse():

json
{
  "app_name": "TotalWario",
  "version": "2.0.0",
  "server": {
    "port": 8080,
    "host": "0.0.0.0",
    "ssl_enabled": false
  },
  "gameplay": {
    "base_hp": 100,
    "boss_hp": 500,
    "max_players": 16,
    "difficulty": "normal",
    "greeting": "Wario time!",
    "loot_tier": "common"
  },
  "map_rotation": [
    "Arena of Doom",
    "Crystal Caverns",
    "Wario Stadium"
  ],
  "rules": "1. Не читерить.\n2. Уважать Синдикат.\n3. Весело проводить время!",
  "database": {
    "host": "localhost",
    "port": 5432,
    "name": "mydb"
  },
  "api_key": "[SECRET]",
  "credits": {
    "lead_dev": "KaiserBerg",
    "studio": "APERTURESyndicate",
    "year": 2026,
    "contact": "KaiserBerg"
  }
}

При следующем вызове parse() поля greeting и loot_tier будут другими — в этом и смысл :random.

Полные примеры | AS Docs