From 10716a729002d4ad1b19dd91fa3af4bd327755bc Mon Sep 17 00:00:00 2001 From: achingbrain Date: Fri, 18 Sep 2026 10:43:48 +0300 Subject: [PATCH 1/2] fix: add warning for incorrect packed option usage `packed` is only supported by proto2 (and proto3 but protobuf.js ignores it), so show a warning to the user if their `.proto` file needs updating. --- packages/protons/src/fields/field.ts | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/packages/protons/src/fields/field.ts b/packages/protons/src/fields/field.ts index 1f604eb..5f4ed4a 100644 --- a/packages/protons/src/fields/field.ts +++ b/packages/protons/src/fields/field.ts @@ -133,6 +133,30 @@ export class Field implements MessageField { console.info(`[WARN] ${message}`) } } + + if (parent.def.edition === 'proto2') { + if (def.options?.features?.repeated_field_encoding != null) { + const message = `field "${name}" has the features.repeated_field_encoding=${def.options.features.repeated_field_encoding} option, this is unsupported in proto2. Please use packed=${def.options?.features?.repeated_field_encoding === 'PACKED' ? true : false} instead - see https://protobuf.dev/editions/features/#repeated_field_encoding` + + if (parent.flags?.strict === true) { + throw new ParseError(message) + } else { + // eslint-disable-next-line no-console + console.info(`[WARN] ${message}`) + } + } + } else { + if (def.options?.packed != null) { + const message = `field "${name}" has the packed=${def.options.packed} option, this is unsupported in edition="${parent.def.edition}". Please use features.repeated_field_encoding=${def.options?.packed === true ? 'PACKED' : 'EXPANDED'} instead - see https://protobuf.dev/editions/features/#repeated_field_encoding` + + if (parent.flags?.strict === true) { + throw new ParseError(message) + } else { + // eslint-disable-next-line no-console + console.info(`[WARN] ${message}`) + } + } + } } getDecoderInterfaceField (parent: Parent, indent = ''): string { From 6350c11abeda1b08fb7b2413f3ddde9c6d329444 Mon Sep 17 00:00:00 2001 From: achingbrain Date: Fri, 18 Sep 2026 10:45:38 +0300 Subject: [PATCH 2/2] chore: linting --- packages/protons/src/fields/field.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/protons/src/fields/field.ts b/packages/protons/src/fields/field.ts index 5f4ed4a..fa8dfd2 100644 --- a/packages/protons/src/fields/field.ts +++ b/packages/protons/src/fields/field.ts @@ -136,7 +136,7 @@ export class Field implements MessageField { if (parent.def.edition === 'proto2') { if (def.options?.features?.repeated_field_encoding != null) { - const message = `field "${name}" has the features.repeated_field_encoding=${def.options.features.repeated_field_encoding} option, this is unsupported in proto2. Please use packed=${def.options?.features?.repeated_field_encoding === 'PACKED' ? true : false} instead - see https://protobuf.dev/editions/features/#repeated_field_encoding` + const message = `field "${name}" has the features.repeated_field_encoding=${def.options.features.repeated_field_encoding} option, this is unsupported in proto2. Please use packed=${def.options?.features?.repeated_field_encoding === 'PACKED'} instead - see https://protobuf.dev/editions/features/#repeated_field_encoding` if (parent.flags?.strict === true) { throw new ParseError(message)