Files
Maksim Totmin c398045664
ci / test (push) Failing after 5s
ci / lint (push) Failing after 4s
chore: initial release v0.1.0
forge-toolkit: хелперы для разработки MCP-серверов на Go.

- toolkit: args/schema/result/env/probe/server
- toolkit/validate: валидаторы синтаксиса
- configreload: live-reload конфига по контент-хэшу
- docs: ARCHITECTURE, quickstart, mcp-contract
- template/ и examples/hello-tool/
- CI (Gitea Actions), лицензия Apache-2.0
2026-09-14 00:23:08 +07:00

23 lines
1.0 KiB
Go

package toolkit
import (
"os"
"regexp"
)
// envVarRe — плейсхолдер ${VAR} (та же конвенция, что в config.json сервера).
var envVarRe = regexp.MustCompile(`\$\{([A-Za-z_][A-Za-z0-9_]*)\}`)
// Expand разворачивает ${VAR} в сырых байтах конфига. Отсутствующая
// переменная заменяется пустой строкой: дальнейшая валидация отвергнет
// пустое обязательное поле (fail-closed), а не подставит мусор.
//
// Это lax-вариант. Для строгих случаев (DSN с доменными ошибками) сервер
// держит собственный strict-экспандер — не обобщаем преждевременно.
func Expand(data []byte) []byte {
return envVarRe.ReplaceAllFunc(data, func(m []byte) []byte {
name := string(m[2 : len(m)-1]) // вырезаем имя из "${...}"
return []byte(os.Getenv(name))
})
}