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
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
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))
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user