Categorygithub.com/GermanVor/proto-script
repositorypackage
0.0.0-20240718102543-8184d1af8734
Repository: https://github.com/germanvor/proto-script.git
Documentation: pkg.go.dev

# Packages

No description provided by the author

# README

Про

Скрипт не обрабатывает все возможные proto файлы (по крайней мере сейчас), был написан за пару дней, чтобы покрывать 99 процентов proto файлов консоли.

Скрипт ничего не генерирует и выводить ответ в консоль.

Вывод никак не форматируется - это отдается на откуп локальным линтерам.

Комментарии пока что не сохряняются.

Если в оригинальном proto файле есть вложенности messages или oneof конструкции, то будут сгенерированы соответствующие namespace - это надо понять и принять. Очень удобно и держит код в чистоте. namespace и коллизи имен в ts - это скрытый гем.

config.json - нужен для подмены типов переменных proto файлов. Через флаг -k можно задавать профили, если скрипт используется не в одном проекте - пишешь код для Datasphere, потом переключаештся в Console и используешь подстановки для консоли через -k флаг.

Если в проекте есть коллизии имен типов из разных файлов, то лучше такие подстановки не добавлять в config.json, а делать их самому и вдумчиво (если спрос на скрипт будет большим, то можно будет добавить парсинг import самого proto файла, но пока так).

Про config.json:

  • первый ключ в json объекте - это ключ (задается через -k флаг) профиля импортов, по умолчанию он datasphere и подстановки берутся оттуда (для консоли лучше добавить новый ключ console и заполнить объект самим с учетом ts path aliases, тогда в вызов скрипта нужно будет добавить -k console)
  • каждый ключ внутри профиля - это proto тип, который будет заменен на substitution значение
  • если указан import_source для proto типа, то скрипт добавит импорт для substitution (очень удобно будет добавить alias для ts импортов внутри своего проекта и затем прорастить их в config.json, чтобы оставалось только отформатировать файл и не заниматься менеджментом импортов типов из других proto файлов), но при условии, что в этом же messages не определен уже тип

Самый быстрый запуск:

  • клоним проект
  • устанавливаем версию go из go.mod (пока что никаких сторонних либ не используется и не планируется)
  • cp base.config.json config.json
  • делаем go build, сгенерируется исполняемый файл, копируем его абсолютный путь
  • добавляем в свой ~/.zshrc строку alias pTs='АБСОЛЮТНЫЙ_ПУТЬ_ДО_ФАЙЛА' (pTs - protoTypeScript, можно еще pTTs - protoToTypeScript или как угодно, это ваш скрипт и ваш alias). Альтернативно можно добавить alias pTs='go run АБСОЛЮТНЫЙ_ПУТЬ_ДО_ФАЙЛА_main.go'.
  • используем с удовольствием, оставляем фидбек и пожелания если есть необходимость