diff --git a/src/signals/path-matchers.ts b/src/signals/path-matchers.ts index da30bd1e84..7fdc27c673 100644 --- a/src/signals/path-matchers.ts +++ b/src/signals/path-matchers.ts @@ -74,6 +74,9 @@ function isGeneratedFileFrom(parts: NormalizedPath): boolean { /_pb\.nim$/.test(norm) || // Lua protobuf: message stubs are `*_pb.lua`. /_pb\.lua$/.test(norm) || + // JavaScript/TypeScript grpc-node protobuf: message stubs are `*_pb.{js,ts}`; gRPC emits + // sibling `*_grpc_pb.{js,ts}` service stubs (underscore form, not `.pb.js`). + /_pb\.(js|ts)$/.test(norm) || // Dart codegen: build_runner (`.g.dart`), freezed (`.freezed.dart`), and // retrofit/injectable (`.gr.dart`) all emit generated part files. /\.(g|freezed|gr)\.dart$/.test(norm) || diff --git a/test/unit/path-matchers.test.ts b/test/unit/path-matchers.test.ts index c4d4c3c27c..2be934735e 100644 --- a/test/unit/path-matchers.test.ts +++ b/test/unit/path-matchers.test.ts @@ -144,6 +144,17 @@ describe("isGeneratedFile", () => { expect(classifyChangedFile("gen/GreeterGrpcKt.kt")).toBe("generated"); }); + it("matches JavaScript and TypeScript grpc-node protobuf stubs alongside the other protoc plugins", () => { + expect(isGeneratedFile("gen/service_pb.js")).toBe(true); + expect(isGeneratedFile("gen/service_grpc_pb.js")).toBe(true); + expect(isGeneratedFile("gen/service_pb.ts")).toBe(true); + expect(isGeneratedFile("gen/service_grpc_pb.ts")).toBe(true); + expect(isGeneratedFile("src/app.js")).toBe(false); + expect(isGeneratedFile("src/app.ts")).toBe(false); + expect(classifyChangedFile("gen/service_grpc_pb.js")).toBe("generated"); + expect(classifyChangedFile("gen/service_pb.ts")).toBe("generated"); + }); + it("matches Swift protobuf, Dart freezed/retrofit, C# designer/XAML, and Objective-C protoc output", () => { for (const path of [ "proto/messages.pb.swift", @@ -474,6 +485,8 @@ describe("classifyChangedFile", () => { ["gen/service_pb.nim", "generated"], ["gen/service_pb.lua", "generated"], ["gen/GreeterGrpcKt.kt", "generated"], + ["gen/service_grpc_pb.js", "generated"], + ["gen/service_pb.ts", "generated"], ["vendor/lib.go", "vendored"], ["package-lock.json", "lockfile"], ["bun.lock", "lockfile"],