@cinema-ms/contracts
v1.0.4
Published
Protobuf definitions and generated TypeScript types
Readme
cinema-ms contracts (Protobuf → TypeScript)
Этот пакет содержит .proto контракты и генерацию TypeScript-кода через ts-proto (NestJS-совместимо).
Требования
- Node.js (рекомендуется LTS)
- protoc (Protocol Buffers compiler) установлен в системе и доступен в
PATH - npm (или другой менеджер, но команды ниже — под npm)
Проверка:
protoc --version
node -v
npm -vУстановка зависимостей
В папке contracts:
npm i
# если ts-proto ещё не установлен:
npm i -D ts-protoСтруктура
proto/— исходные.protoфайлыgen/— сгенерированный TypeScript-код (выход генератора)
Рекомендуется добавить
gen/в.gitignore, если вы генерируете код на CI/локально.
Генерация TypeScript (Windows / PowerShell)
Команда, которая работает надёжно на Windows: используем абсолютный путь к плагину protoc-gen-ts_proto.
mkdir -Force .\gen | Out-Null
$plugin = (Resolve-Path .\node_modules\.bin\protoc-gen-ts_proto.cmd).Path
protoc -I .\proto .\proto\*.proto `
--plugin="protoc-gen-ts_proto=$plugin" `
--ts_proto_out=.\gen `
--ts_proto_opt=nestJs=true,package=omitОпции генератора
nestJs=true— включает NestJS-совместимые декораторы/структуры в output ts-protopackage=omit— не создаёт namespace/обёртку по имениpackageиз.proto(удобно для импорта)
Частые проблемы
1) "protoc-gen-ts_proto" не является внутренней или внешней командой...
protoc не нашёл плагин ts-proto в PATH.
Решение: использовать --plugin="protoc-gen-ts_proto=ABSOLUTE_PATH" как в команде выше.
2) --proto_path passed empty directory name
В некоторых сборках protoc на Windows некорректно воспринимает -I=\.proto.
Решение: писать -I .\proto через пробел.
Рекомендуемые npm scripts (опционально)
Можно добавить в contracts/package.json:
{
"scripts": {
"gen": "powershell -NoProfile -ExecutionPolicy Bypass -Command \"mkdir -Force .\\gen | Out-Null; $plugin=(Resolve-Path .\\node_modules\\.bin\\protoc-gen-ts_proto.cmd).Path; protoc -I .\\proto .\\proto\\*.proto --plugin=\\\"protoc-gen-ts_proto=$plugin\\\" --ts_proto_out=.\\gen --ts_proto_opt=nestJs=true,package=omit\""
}
}После этого:
npm run genLicense
Internal / project-specific.
