-
Notifications
You must be signed in to change notification settings - Fork 69
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support extensions #666
Support extensions #666
Conversation
@@ -1,3 +0,0 @@ | |||
# proto2 extensions are not implemented |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Passing 100% of the protobuf v25.2 conformance tests now.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Very nice.
@@ -233,7 +297,7 @@ function makeFieldInfo(desc: DescField, resolver: Resolver): PartialFieldInfo { | |||
} | |||
|
|||
function makeMapFieldInfo( | |||
field: DescField & { fieldKind: "map" }, | |||
field: (DescField | DescExtension) & { fieldKind: "map" }, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Extensions cannot be maps. So instead of this union, maybe have the caller (makeFieldInfo
) raise an exception if it sees a DescExtension
claiming to be a map?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good call, updated in eb9a200.
repeated uint32 unpacked_uint32_ext = 7004; // unpacked by default in proto2 | ||
|
||
optional google.protobuf.UInt32Value wrapper_ext = 8001; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since groups are now ostensibly supported, let's also add a group extension, to make sure they work, too. (Maybe a repeated group extension, too?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍 added in 97b9729.
}; | ||
|
||
function addType(type: MessageType | EnumType | ServiceType | Extension) { | ||
if ("fields" in type) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I take it this cannot use instanceof
because the types in the union are all interfaces (vs. classes or other nominal JS types)? Unfortunate...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That's correct, and I agree 😢
function addField(field: FieldInfo) { | ||
if (field.kind == "message") { | ||
addType(field.T); | ||
} else if (field.kind == "map" && field.V.kind == "message") { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I guess the kind
for group fields will be "message"
? Or does this need to be expanded to include groups?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, a group field is kind: "message"
with delimited: true
. Since we generate a message class for a group, it's a decent fit. This will also work nicely with the edition feature message_encoding = DELIMITED
.
): V { | ||
const opt = extension.runtime.bin.makeReadOptions(options); | ||
assert(!extension.field.oneof); // oneof is not allowed for extensions | ||
assert(extension.field.kind != "map"); // maps are not allowed for extensions |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is it possible to also assert here that the type name of the message matches the extension's extendee? I'm thinking about possible dynamic message cases, where a concrete type E
of the message is not sufficient to guarantee that the extension correctly applies to it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good call, added an assertion for the mutating functions, but left the behavior of hasExtension
as is: c1d5b71
* (for example `0` for numeric types, `[]` for repeated extension fields, and | ||
* an empty message instance for message fields). | ||
*/ | ||
export function getExtension<E extends Message<E>, V>( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A consequential downside of this approach that may need considerable documentation is that extension values are effectively read-only. So even if this returns a mutable value, mutating it has no effect on the original extended message. Instead, setExtension
must always be called, even if the top-level element (like an array or object) is unchanged but its contents are being mutated. This may be counter-intuitive compared to all other kinds of field access on the message.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍 Added a comment in 5fd6e96.
I think the documentation (a follow-up to this PR) will make this clear via examples, and I'll make sure to call it out explicitly.
const reader = readOpt.readerFactory(writer.finish()); | ||
while (reader.pos < reader.len) { | ||
const [no, wireType] = reader.tag(); | ||
const data = reader.skip(wireType); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If wire type is "start group", how does this know the tag number to look for in the closing "end group" tag?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It doesn't. Method skip
returns the bytes until (and including) the "end group" tag. It recursively skips nested groups. We're iterating over tags we just created ourselves, so we should be fine in this case.
There is a check for matching end group field number when we parse a group here. IMO it would be better to check in method skip
, so that we verify unknown fields for matching group start/end tags as well, but I'm not sure it's worth it right now, as we're already moving a lot of parts.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ack. Maybe a TODO in reader.skip
?
We were storing methods of IExtensionRegistry in a variable. Calling the function crashes, because `this` in the implementation will be null, and we're using `this` in createRegistryFromDescriptor(). Fixed by calling the bound method instead. Added test coverage by running JSON parse tests with a registry from createRegistryFromDescriptor().
assert(!extension.field.oneof); // oneof is not allowed for extensions | ||
assert(extension.field.kind != "map"); // maps are not allowed for extensions |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Were these two checks not worth keeping anywhere?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These were left over from development, I forgot to remove them earlier. I expect it to very rare that users create their own extension, so we can rely on documentation and typings (makeExtension() does not allow oneof or map) here to shave off non-essential bytes from the bundle size. The assertions for the matching extendee in the accessors is a different situation, because it's very possible to pass in the wrong message without nominal typing.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM!
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | Type | Update | |---|---|---|---|---|---|---|---| | [@bufbuild/protoc-gen-es](https://github.com/bufbuild/protobuf-es) ([source](https://github.com/bufbuild/protobuf-es/tree/HEAD/packages/protoc-gen-es)) | [`1.6.0` -> `1.7.0`](https://renovatebot.com/diffs/npm/@bufbuild%2fprotoc-gen-es/1.6.0/1.7.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@bufbuild%2fprotoc-gen-es/1.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@bufbuild%2fprotoc-gen-es/1.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@bufbuild%2fprotoc-gen-es/1.6.0/1.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@bufbuild%2fprotoc-gen-es/1.6.0/1.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | minor | | [@swc/core](https://swc.rs) ([source](https://github.com/swc-project/swc)) | [`1.3.102` -> `1.3.107`](https://renovatebot.com/diffs/npm/@swc%2fcore/1.3.102/1.3.107) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@swc%2fcore/1.3.107?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@swc%2fcore/1.3.107?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@swc%2fcore/1.3.102/1.3.107?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@swc%2fcore/1.3.102/1.3.107?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [@swc/jest](https://github.com/swc-project/jest) | [`0.2.29` -> `0.2.31`](https://renovatebot.com/diffs/npm/@swc%2fjest/0.2.29/0.2.31) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@swc%2fjest/0.2.31?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@swc%2fjest/0.2.31?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@swc%2fjest/0.2.29/0.2.31?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@swc%2fjest/0.2.29/0.2.31?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) | [`6.2.0` -> `6.3.0`](https://renovatebot.com/diffs/npm/@testing-library%2fjest-dom/6.2.0/6.3.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@testing-library%2fjest-dom/6.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@testing-library%2fjest-dom/6.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@testing-library%2fjest-dom/6.2.0/6.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@testing-library%2fjest-dom/6.2.0/6.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react) ([source](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react)) | [`18.2.47` -> `18.2.48`](https://renovatebot.com/diffs/npm/@types%2freact/18.2.47/18.2.48) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2freact/18.2.48?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2freact/18.2.48?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2freact/18.2.47/18.2.48?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2freact/18.2.47/18.2.48?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin)) | [`6.18.1` -> `6.19.1`](https://renovatebot.com/diffs/npm/@typescript-eslint%2feslint-plugin/6.18.1/6.19.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2feslint-plugin/6.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2feslint-plugin/6.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2feslint-plugin/6.18.1/6.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2feslint-plugin/6.18.1/6.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)) | [`6.18.1` -> `6.19.1`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/6.18.1/6.19.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fparser/6.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fparser/6.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fparser/6.18.1/6.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fparser/6.18.1/6.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [@typescript-eslint/typescript-estree](https://github.com/typescript-eslint/typescript-eslint) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-estree)) | [`6.18.1` -> `6.19.1`](https://renovatebot.com/diffs/npm/@typescript-eslint%2ftypescript-estree/6.18.1/6.19.1) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2ftypescript-estree/6.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2ftypescript-estree/6.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2ftypescript-estree/6.18.1/6.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2ftypescript-estree/6.18.1/6.19.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [autoprefixer](https://github.com/postcss/autoprefixer) | [`10.4.16` -> `10.4.17`](https://renovatebot.com/diffs/npm/autoprefixer/10.4.16/10.4.17) | [![age](https://developer.mend.io/api/mc/badges/age/npm/autoprefixer/10.4.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/autoprefixer/10.4.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/autoprefixer/10.4.16/10.4.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/autoprefixer/10.4.16/10.4.17?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [buf](https://github.com/bufbuild/buf) | `1.28.1` -> `1.29.0` | [![age](https://developer.mend.io/api/mc/badges/age/hermit/buf/1.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/hermit/buf/1.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/hermit/buf/1.28.1/1.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/buf/1.28.1/1.29.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | minor | | [github.com/amacneil/dbmate/v2](https://github.com/amacneil/dbmate) | `v2.10.0` -> `v2.11.0` | [![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2famacneil%2fdbmate%2fv2/v2.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2famacneil%2fdbmate%2fv2/v2.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2famacneil%2fdbmate%2fv2/v2.10.0/v2.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2famacneil%2fdbmate%2fv2/v2.10.0/v2.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | require | minor | | [github.com/google/uuid](https://github.com/google/uuid) | `v1.5.0` -> `v1.6.0` | [![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgoogle%2fuuid/v1.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fgoogle%2fuuid/v1.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fgoogle%2fuuid/v1.5.0/v1.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgoogle%2fuuid/v1.5.0/v1.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | require | minor | | [go.opentelemetry.io/otel](https://github.com/open-telemetry/opentelemetry-go) | `v1.21.0` -> `v1.22.0` | [![age](https://developer.mend.io/api/mc/badges/age/go/go.opentelemetry.io%2fotel/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/go.opentelemetry.io%2fotel/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/go.opentelemetry.io%2fotel/v1.21.0/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/go.opentelemetry.io%2fotel/v1.21.0/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | require | minor | | [go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc](https://github.com/open-telemetry/opentelemetry-go) | `v0.44.0` -> `v0.45.0` | [![age](https://developer.mend.io/api/mc/badges/age/go/go.opentelemetry.io%2fotel%2fexporters%2fotlp%2fotlpmetric%2fotlpmetricgrpc/v0.45.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/go.opentelemetry.io%2fotel%2fexporters%2fotlp%2fotlpmetric%2fotlpmetricgrpc/v0.45.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/go.opentelemetry.io%2fotel%2fexporters%2fotlp%2fotlpmetric%2fotlpmetricgrpc/v0.44.0/v0.45.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/go.opentelemetry.io%2fotel%2fexporters%2fotlp%2fotlpmetric%2fotlpmetricgrpc/v0.44.0/v0.45.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | require | minor | | [go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc](https://github.com/open-telemetry/opentelemetry-go) | `v1.21.0` -> `v1.22.0` | [![age](https://developer.mend.io/api/mc/badges/age/go/go.opentelemetry.io%2fotel%2fexporters%2fotlp%2fotlptrace%2fotlptracegrpc/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/go.opentelemetry.io%2fotel%2fexporters%2fotlp%2fotlptrace%2fotlptracegrpc/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/go.opentelemetry.io%2fotel%2fexporters%2fotlp%2fotlptrace%2fotlptracegrpc/v1.21.0/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/go.opentelemetry.io%2fotel%2fexporters%2fotlp%2fotlptrace%2fotlptracegrpc/v1.21.0/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | require | minor | | [go.opentelemetry.io/otel/metric](https://github.com/open-telemetry/opentelemetry-go) | `v1.21.0` -> `v1.22.0` | [![age](https://developer.mend.io/api/mc/badges/age/go/go.opentelemetry.io%2fotel%2fmetric/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/go.opentelemetry.io%2fotel%2fmetric/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/go.opentelemetry.io%2fotel%2fmetric/v1.21.0/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/go.opentelemetry.io%2fotel%2fmetric/v1.21.0/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | require | minor | | [go.opentelemetry.io/otel/sdk](https://github.com/open-telemetry/opentelemetry-go) | `v1.21.0` -> `v1.22.0` | [![age](https://developer.mend.io/api/mc/badges/age/go/go.opentelemetry.io%2fotel%2fsdk/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/go.opentelemetry.io%2fotel%2fsdk/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/go.opentelemetry.io%2fotel%2fsdk/v1.21.0/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/go.opentelemetry.io%2fotel%2fsdk/v1.21.0/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | require | minor | | [go.opentelemetry.io/otel/sdk/metric](https://github.com/open-telemetry/opentelemetry-go) | `v1.21.0` -> `v1.22.0` | [![age](https://developer.mend.io/api/mc/badges/age/go/go.opentelemetry.io%2fotel%2fsdk%2fmetric/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/go.opentelemetry.io%2fotel%2fsdk%2fmetric/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/go.opentelemetry.io%2fotel%2fsdk%2fmetric/v1.21.0/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/go.opentelemetry.io%2fotel%2fsdk%2fmetric/v1.21.0/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | require | minor | | [go.opentelemetry.io/otel/trace](https://github.com/open-telemetry/opentelemetry-go) | `v1.21.0` -> `v1.22.0` | [![age](https://developer.mend.io/api/mc/badges/age/go/go.opentelemetry.io%2fotel%2ftrace/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/go.opentelemetry.io%2fotel%2ftrace/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/go.opentelemetry.io%2fotel%2ftrace/v1.21.0/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/go.opentelemetry.io%2fotel%2ftrace/v1.21.0/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | require | minor | | [go.opentelemetry.io/proto/otlp](https://github.com/open-telemetry/opentelemetry-proto-go) | `v1.0.0` -> `v1.1.0` | [![age](https://developer.mend.io/api/mc/badges/age/go/go.opentelemetry.io%2fproto%2fotlp/v1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/go.opentelemetry.io%2fproto%2fotlp/v1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/go.opentelemetry.io%2fproto%2fotlp/v1.0.0/v1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/go.opentelemetry.io%2fproto%2fotlp/v1.0.0/v1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | require | minor | | [helm](https://github.com/helm/helm) | `3.13.3` -> `3.14.0` | [![age](https://developer.mend.io/api/mc/badges/age/hermit/helm/3.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/hermit/helm/3.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/hermit/helm/3.13.3/3.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/helm/3.13.3/3.14.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | minor | | [node](https://github.com/nodejs/node) | `21.5.0` -> `21.6.1` | [![age](https://developer.mend.io/api/mc/badges/age/hermit/node/21.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/hermit/node/21.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/hermit/node/21.5.0/21.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/node/21.5.0/21.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | minor | | [prettier](https://prettier.io) ([source](https://github.com/prettier/prettier)) | [`3.2.2` -> `3.2.4`](https://renovatebot.com/diffs/npm/prettier/3.2.2/3.2.4) | [![age](https://developer.mend.io/api/mc/badges/age/npm/prettier/3.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/prettier/3.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/prettier/3.2.2/3.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/prettier/3.2.2/3.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [react-router-dom](https://github.com/remix-run/react-router) ([source](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom)) | [`6.21.2` -> `6.21.3`](https://renovatebot.com/diffs/npm/react-router-dom/6.21.2/6.21.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/react-router-dom/6.21.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/react-router-dom/6.21.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/react-router-dom/6.21.2/6.21.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/react-router-dom/6.21.2/6.21.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch | | [reactflow](https://github.com/xyflow/xyflow) ([source](https://github.com/xyflow/xyflow/tree/HEAD/packages/reactflow)) | [`11.10.1` -> `11.10.3`](https://renovatebot.com/diffs/npm/reactflow/11.10.1/11.10.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/reactflow/11.10.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/reactflow/11.10.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/reactflow/11.10.1/11.10.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/reactflow/11.10.1/11.10.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch | | [sqlc](https://github.com/sqlc-dev/sqlc) | `1.24.0` -> `1.25.0` | [![age](https://developer.mend.io/api/mc/badges/age/hermit/sqlc/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/hermit/sqlc/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/hermit/sqlc/1.24.0/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/sqlc/1.24.0/1.25.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | minor | | [typed-css-modules](https://github.com/Quramy/typed-css-modules) | [`0.8.1` -> `0.9.0`](https://renovatebot.com/diffs/npm/typed-css-modules/0.8.1/0.9.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/typed-css-modules/0.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/typed-css-modules/0.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/typed-css-modules/0.8.1/0.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/typed-css-modules/0.8.1/0.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [vite](https://vitejs.dev) ([source](https://github.com/vitejs/vite/tree/HEAD/packages/vite)) | [`4.5.1` -> `4.5.2`](https://renovatebot.com/diffs/npm/vite/4.5.1/4.5.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/vite/4.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/vite/4.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/vite/4.5.1/4.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vite/4.5.1/4.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch | | [org.assertj:assertj-core](https://assertj.github.io/doc/#assertj-core) ([source](https://github.com/assertj/assertj)) | `3.25.1` -> `3.25.2` | [![age](https://developer.mend.io/api/mc/badges/age/maven/org.assertj:assertj-core/3.25.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.assertj:assertj-core/3.25.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.assertj:assertj-core/3.25.1/3.25.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.assertj:assertj-core/3.25.1/3.25.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | test | patch | | [com.squareup.wire:wire-compiler](https://github.com/square/wire) | `4.9.3` -> `4.9.5` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.squareup.wire:wire-compiler/4.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.squareup.wire:wire-compiler/4.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.squareup.wire:wire-compiler/4.9.3/4.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.squareup.wire:wire-compiler/4.9.3/4.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | patch | | [com.squareup.wire:wire-grpc-client-jvm](https://github.com/square/wire) | `4.9.3` -> `4.9.5` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.squareup.wire:wire-grpc-client-jvm/4.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.squareup.wire:wire-grpc-client-jvm/4.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.squareup.wire:wire-grpc-client-jvm/4.9.3/4.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.squareup.wire:wire-grpc-client-jvm/4.9.3/4.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | compile | patch | | [com.squareup.wire:wire-grpc-server](https://github.com/square/wire) | `4.9.3` -> `4.9.5` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.squareup.wire:wire-grpc-server/4.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.squareup.wire:wire-grpc-server/4.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.squareup.wire:wire-grpc-server/4.9.3/4.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.squareup.wire:wire-grpc-server/4.9.3/4.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | compile | patch | | [com.squareup.wire:wire-runtime-jvm](https://github.com/square/wire) | `4.9.3` -> `4.9.5` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.squareup.wire:wire-runtime-jvm/4.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.squareup.wire:wire-runtime-jvm/4.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.squareup.wire:wire-runtime-jvm/4.9.3/4.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.squareup.wire:wire-runtime-jvm/4.9.3/4.9.5?slim=true)](https://docs.renovatebot.com/merge-confidence/) | compile | patch | | [com.squareup:kotlinpoet-jvm](https://github.com/square/kotlinpoet) | `1.15.3` -> `1.16.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/com.squareup:kotlinpoet-jvm/1.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.squareup:kotlinpoet-jvm/1.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.squareup:kotlinpoet-jvm/1.15.3/1.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.squareup:kotlinpoet-jvm/1.15.3/1.16.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | compile | minor | --- ### Release Notes <details> <summary>bufbuild/protobuf-es (@​bufbuild/protoc-gen-es)</summary> ### [`v1.7.0`](https://github.com/bufbuild/protobuf-es/releases/tag/v1.7.0) [Compare Source](https://github.com/bufbuild/protobuf-es/compare/v1.6.0...v1.7.0) #### What's Changed This release adds support for extensions, a Protobuf language feature that allows to extend a message with an additional field. For example: ```proto syntax = "proto2"; message User { extensions 100 to 200; } extend User { optional uint32 age = 100; } ``` For the extension `age`, we generate a new export `const age: Extension<User, number>`. You can set the extension field with the function `setExtension`: ```ts import { setExtension } from "@​bufbuild/protobuf"; import { User, age } from "./example_pb.js"; const user = new User(); setExtension(user, age, 77); ``` To learn more about the details, see the [API documentation](https://github.com/bufbuild/protobuf-es/blob/main/docs/runtime_api.md#extensions). For plugin authors: Since extensions provide a better way to access custom options in a plugin, we are deprecating the `findCustom*Option` functions from `@bufbuild/protoplugin/ecmascript`. We recommend to switch to extensions for better type safety and flexibility, see [the PR for details](https://github.com/bufbuild/protobuf-es/pull/669). #### All changes - Support extensions by [@​timostamm](https://github.com/timostamm) in [https://github.com/bufbuild/protobuf-es/pull/666](https://github.com/bufbuild/protobuf-es/pull/666) - Deprecate findCustom\*Option functions in favor of extensions by [@​timostamm](https://github.com/timostamm) in [https://github.com/bufbuild/protobuf-es/pull/669](https://github.com/bufbuild/protobuf-es/pull/669) - Document extensions by [@​timostamm](https://github.com/timostamm) in [https://github.com/bufbuild/protobuf-es/pull/672](https://github.com/bufbuild/protobuf-es/pull/672) - Support experimental editions in [@​bufbuild/protoplugin](https://github.com/bufbuild/protoplugin) by [@​timostamm](https://github.com/timostamm) in [https://github.com/bufbuild/protobuf-es/pull/655](https://github.com/bufbuild/protobuf-es/pull/655) - Improve errors for unsupported editions in createDescriptorSet by [@​timostamm](https://github.com/timostamm) in [https://github.com/bufbuild/protobuf-es/pull/654](https://github.com/bufbuild/protobuf-es/pull/654) **Full Changelog**: https://github.com/bufbuild/protobuf-es/compare/v1.6.0...v1.7.0 </details> <details> <summary>swc-project/swc (@​swc/core)</summary> ### [`v1.3.107`](https://github.com/swc-project/swc/blob/HEAD/CHANGELOG.md#13107---2024-01-28) [Compare Source](https://github.com/swc-project/swc/compare/v1.3.106...v1.3.107) ##### Bug Fixes - **(es/codegen)** Do not produce octal literals ([#​8565](https://github.com/swc-project/swc/issues/8565)) ([07634a0](https://github.com/swc-project/swc/commit/07634a05ba9b989d68502953a69a40a2806e93d0)) - **(es/decorator)** Skip TypeScript class method/prop declarations ([#​8555](https://github.com/swc-project/swc/issues/8555)) ([6a8dd8c](https://github.com/swc-project/swc/commit/6a8dd8cbb384372657923d4c1094e8053661aa56)) - **(es/decorator)** Preserve state while traversing the `module_items` scope ([#​8556](https://github.com/swc-project/swc/issues/8556)) ([f416aff](https://github.com/swc-project/swc/commit/f416aff7d7036de72509132603d9b423a0b95f68)) - **(es/loader)** Make `tsc` resolver work for bare specifier ([#​8550](https://github.com/swc-project/swc/issues/8550)) ([d6a4615](https://github.com/swc-project/swc/commit/d6a46158987d0e96d6184d41c2fdd73df92d6681)) ### [`v1.3.106`](https://github.com/swc-project/swc/blob/HEAD/CHANGELOG.md#13106---2024-01-25) [Compare Source](https://github.com/swc-project/swc/compare/v1.3.105...v1.3.106) ##### Bug Fixes - **(binding/types)** Add `bugfixes` field to EnvConfig ([#​8538](https://github.com/swc-project/swc/issues/8538)) ([49ebdf9](https://github.com/swc-project/swc/commit/49ebdf9fb7c9228c711c303c822add29bc3c8364)) - **(common)** Fix source map generation with `inputSourceMap` ([#​8546](https://github.com/swc-project/swc/issues/8546)) ([043ee85](https://github.com/swc-project/swc/commit/043ee85d0852c7c7d6193ad699074a599326aeec)) - **(es/ast)** Add `definite` and `is_override` to `AutoAccessor` ([#​8436](https://github.com/swc-project/swc/issues/8436)) ([572bcae](https://github.com/swc-project/swc/commit/572bcaefc1b6ba9f92c57a35ede61fec9f3221bd)) - **(es/ast)** Fix definition of `SetterProp` ([#​8314](https://github.com/swc-project/swc/issues/8314)) ([bc38ac9](https://github.com/swc-project/swc/commit/bc38ac906c427ba060f3da47c64726fe417162ed)) - **(es/codegen)** Set `sourceRoot` of sourcemaps ([#​6086](https://github.com/swc-project/swc/issues/6086)) ([ae78669](https://github.com/swc-project/swc/commit/ae786692a0d20254bc233472a23035ba1be25e46)) - **(es/compat)** Support vars from `reserved_word` pass ([#​8543](https://github.com/swc-project/swc/issues/8543)) ([fc929e9](https://github.com/swc-project/swc/commit/fc929e962ba18afa98ae4523e50ff630527a218f)) - **(es/loader)** Don't use browser versions for `jsc.paths` ([#​8548](https://github.com/swc-project/swc/issues/8548)) ([fab27da](https://github.com/swc-project/swc/commit/fab27dabed3a4d0478b28c86809cc06482b2c45c)) - **(es/minifier)** Fix a bug related to inliner and the variable scoping ([#​8542](https://github.com/swc-project/swc/issues/8542)) ([aa70131](https://github.com/swc-project/swc/commit/aa70131c558158abd3dcd3fca53dfe444c511ae1)) - **(es/module)** Fix resolving of dependencies ([#​8533](https://github.com/swc-project/swc/issues/8533)) ([71fb5c1](https://github.com/swc-project/swc/commit/71fb5c12a75bec27cc775069f83b576019d261f2)) - **(es/module)** Fix handling of `*` in `jsc.paths` ([#​8535](https://github.com/swc-project/swc/issues/8535)) ([2d8bd9e](https://github.com/swc-project/swc/commit/2d8bd9ed894cbc2e0e9063f6a1ab723c3d3bfdc6)) - **(es/quote)** Add support for import phase to quote macro ([#​8536](https://github.com/swc-project/swc/issues/8536)) ([71930ff](https://github.com/swc-project/swc/commit/71930ffb5625fb58fab3200764ea98b05abab8ba)) ##### Features - **(css/parser)** Implement error reporting for `@value` of CSS Modules ([#​8547](https://github.com/swc-project/swc/issues/8547)) ([00619b1](https://github.com/swc-project/swc/commit/00619b17082e857d1d5822f04b9ee82b0a295cc3)) - **(es/ast)** Support import phase ([#​8279](https://github.com/swc-project/swc/issues/8279)) ([72048ae](https://github.com/swc-project/swc/commit/72048ae1ced64b6d9d326e6d436a60b1191bc266)) - **(swc_core)** Expose `preset_env_base` ([#​8537](https://github.com/swc-project/swc/issues/8537)) ([793f265](https://github.com/swc-project/swc/commit/793f2651a8c44c43cde8b83d4f98eda6e274676c)) ##### Miscellaneous Tasks - **(common)** Update `sourcemap` ([#​8544](https://github.com/swc-project/swc/issues/8544)) ([4630426](https://github.com/swc-project/swc/commit/4630426d6aa77af992787456e476b8862c25a45e)) ### [`v1.3.105`](https://github.com/swc-project/swc/blob/HEAD/CHANGELOG.md#13105---2024-01-21) [Compare Source](https://github.com/swc-project/swc/compare/v1.3.104...v1.3.105) ##### Bug Fixes - **(common)** Remove `<` and `>` from `Display` impl of `FileName::Custom` ([#​8530](https://github.com/swc-project/swc/issues/8530)) ([014a6cd](https://github.com/swc-project/swc/commit/014a6cda8205183f6c3a5e395b6f89cbf7b388b9)) - **(es/codegen)** Fix codegen of `\\0` ([#​8433](https://github.com/swc-project/swc/issues/8433)) ([9f1ce3a](https://github.com/swc-project/swc/commit/9f1ce3acd6965302afb3a65713f429fd1ddf4a2b)) - **(es/minifier)** Fix a bug in tpl string <-> string logic ([#​8510](https://github.com/swc-project/swc/issues/8510)) ([4946a11](https://github.com/swc-project/swc/commit/4946a111377cfb7da5eee3df88a06e2365aac0c2)) - **(es/typescript)** Fix panic on invalid jsx pragma ([#​8513](https://github.com/swc-project/swc/issues/8513)) ([f40f59b](https://github.com/swc-project/swc/commit/f40f59bd707a9d21d8eb41e42b5c6a1c95f0bb7e)) ##### Miscellaneous Tasks - **(preset-env)** Update `browserslist-rs` ([#​8524](https://github.com/swc-project/swc/issues/8524)) ([5e40dc7](https://github.com/swc-project/swc/commit/5e40dc7d8c7d7b979c3765fbaa2f9c9b41cf49a0)) ##### Testing - **(es/codegen)** Add tests for `@ctrl/tinycolor` ([#​8518](https://github.com/swc-project/swc/issues/8518)) ([1c4eb1f](https://github.com/swc-project/swc/commit/1c4eb1f54fbecef8f955172cba725c27eb4e2b7e)) - **(es/codegen)** Add a JS test for ascii-only mode ([#​8519](https://github.com/swc-project/swc/issues/8519)) ([974c6a0](https://github.com/swc-project/swc/commit/974c6a0036c5ef3e3d12c81c7310758046ff0a0d)) - **(es/minifier)** Add a test for a fixed issue ([#​8520](https://github.com/swc-project/swc/issues/8520)) ([8fac2bb](https://github.com/swc-project/swc/commit/8fac2bb03ce63eb66774fa007285fa8ae8575038)) - **(es/module)** Add a test for a fixed issue ([#​8521](https://github.com/swc-project/swc/issues/8521)) ([4b4a0a2](https://github.com/swc-project/swc/commit/4b4a0a244deef02a86165b8fd0a070408abfa654)) ### [`v1.3.104`](https://github.com/swc-project/swc/blob/HEAD/CHANGELOG.md#13104---2024-01-17) [Compare Source](https://github.com/swc-project/swc/compare/v1.3.103...v1.3.104) ##### Bug Fixes - **(es)** Fix plugin template & restore `test!` as `test_inline!` ([#​8508](https://github.com/swc-project/swc/issues/8508)) ([10449e0](https://github.com/swc-project/swc/commit/10449e08d9459af2c313eb7146005bcff016d169)) - **(es/systemjs)** Handle top level this ([#​8506](https://github.com/swc-project/swc/issues/8506)) ([0f94c8c](https://github.com/swc-project/swc/commit/0f94c8cf051f7a7526f6a3e7742fc079146e0af2)) - **(plugin)** Set `swc_common::errors::HANDLER` while invoking plugins ([#​8511](https://github.com/swc-project/swc/issues/8511)) ([ba753f1](https://github.com/swc-project/swc/commit/ba753f12885c4c3062afa5782dc7f6652981a659)) ### [`v1.3.103`](https://github.com/swc-project/swc/blob/HEAD/CHANGELOG.md#13103---2024-01-15) [Compare Source](https://github.com/swc-project/swc/compare/v1.3.102...v1.3.103) ##### Bug Fixes - **(binding/types)** Add type for `decoratorVersion` ([#​8468](https://github.com/swc-project/swc/issues/8468)) ([79438e6](https://github.com/swc-project/swc/commit/79438e6dc24735fae1adc98e9a74ab6cecd502de)) - **(es/codegen)** Emit abstract keyword ([#​8479](https://github.com/swc-project/swc/issues/8479)) ([a12eaae](https://github.com/swc-project/swc/commit/a12eaae0e544d7e485ce7ce11e56591e7ff34108)) - **(es/codegen)** Emit declare keyword for class properties ([#​8478](https://github.com/swc-project/swc/issues/8478)) ([2076ef8](https://github.com/swc-project/swc/commit/2076ef8f359941ad511c860000ec3eaa74410cac)) - **(es/codegen)** Emit implements clause with commas ([#​8477](https://github.com/swc-project/swc/issues/8477)) ([d98a282](https://github.com/swc-project/swc/commit/d98a28290b1c439abbd0cdec30436ef25a256ebd)) - **(es/codegen)** Emit `?` for an optional computed property ([#​8481](https://github.com/swc-project/swc/issues/8481)) ([e0bdc0f](https://github.com/swc-project/swc/commit/e0bdc0f7c210c73f0291ab72e380743fe5f03b72)) - **(es/codegen)** Fix codegen of a property key in ascii-only mode ([#​8493](https://github.com/swc-project/swc/issues/8493)) ([8d9bf4c](https://github.com/swc-project/swc/commit/8d9bf4cfaaeef9a9f3307b53c3349bff1359ccdf)) - **(es/compat)** Set inserted var inside export class in destructing ([#​8470](https://github.com/swc-project/swc/issues/8470)) ([4416077](https://github.com/swc-project/swc/commit/4416077f4ac1afb74575b9a0e836bb66b8dc8b9a)) - **(es/compat)** Correctly handle `this` in arrow function parameters ([#​8489](https://github.com/swc-project/swc/issues/8489)) ([52a8f05](https://github.com/swc-project/swc/commit/52a8f05fe419e905465e31b493d2007a1511276c)) - **(es/minifier)** Correctly escape more characters ([#​8490](https://github.com/swc-project/swc/issues/8490)) ([f7c4934](https://github.com/swc-project/swc/commit/f7c4934e591bc14bc965cb28bc6b9ca1d8ac1350)) - **(es/module)** Fix resolving of `.js` files ([#​8480](https://github.com/swc-project/swc/issues/8480)) ([b70e96f](https://github.com/swc-project/swc/commit/b70e96ffe93d3ed59420d5c66a0a4258f6bf1de7)) - **(es/parser)** Correctly parse the keyword ([#​8483](https://github.com/swc-project/swc/issues/8483)) ([740e6f3](https://github.com/swc-project/swc/commit/740e6f390a8a5327cc320c9582dbe8afbc8b5a27)) - **(es/resolver)** Resolve top-level `undefined`, `NaN`, and `Infinity` correctly ([#​8471](https://github.com/swc-project/swc/issues/8471)) ([82bd807](https://github.com/swc-project/swc/commit/82bd8070cb276d8020ba688f1b781b7b46b6ce0c)) ##### Documentation - Replace `string_cache` with `hstr` in `ARCHITECTURE.md` ([#​8487](https://github.com/swc-project/swc/issues/8487)) ([abd7c51](https://github.com/swc-project/swc/commit/abd7c51583dff82816a910d46e894eddea3c1aff)) ##### Features - **(html/parser)** Allow self-closing `/>` on non-void HTML elements via a flag ([#​8460](https://github.com/swc-project/swc/issues/8460)) ([566063d](https://github.com/swc-project/swc/commit/566063dca5fe73834cdf5e0acf7c7f344a9806a5)) ##### Refactor - **(css/parser)** Remove value normalization ([#​8434](https://github.com/swc-project/swc/issues/8434)) ([85be8a4](https://github.com/swc-project/swc/commit/85be8a4de1d8407421aadeb5769d414b9938f693)) ##### Testing - **(es/minifier)** Enable non esm mode for tests ([#​8472](https://github.com/swc-project/swc/issues/8472)) ([1120336](https://github.com/swc-project/swc/commit/1120336f23a75e8c236f088d56b6dea04311d2ed)) - **(es/minifier)** Enable script mode for `terser_exec` and `mangle` ([#​8474](https://github.com/swc-project/swc/issues/8474)) ([b676e75](https://github.com/swc-project/swc/commit/b676e75cdd8ae6b4b3637152e39e982637221701)) </details> <details> <summary>swc-project/jest (@​swc/jest)</summary> ### [`v0.2.31`](https://github.com/swc-project/jest/compare/v0.2.30...v0.2.31) [Compare Source](https://github.com/swc-project/jest/compare/v0.2.30...v0.2.31) ### [`v0.2.30`](https://github.com/swc-project/jest/compare/v0.2.29...v0.2.30) [Compare Source](https://github.com/swc-project/jest/compare/v0.2.29...v0.2.30) </details> <details> <summary>testing-library/jest-dom (@​testing-library/jest-dom)</summary> ### [`v6.3.0`](https://github.com/testing-library/jest-dom/releases/tag/v6.3.0) [Compare Source](https://github.com/testing-library/jest-dom/compare/v6.2.1...v6.3.0) ##### Features - Support for regular expressions in toHaveClass ([#​563](https://github.com/testing-library/jest-dom/issues/563)) ([9787ed5](https://github.com/testing-library/jest-dom/commit/9787ed59fcc930e3d33c8a6efe473da3eca01707)) ### [`v6.2.1`](https://github.com/testing-library/jest-dom/releases/tag/v6.2.1) [Compare Source](https://github.com/testing-library/jest-dom/compare/v6.2.0...v6.2.1) ##### Bug Fixes - Standalone types for "./matchers" export and add Bun support ([#​566](https://github.com/testing-library/jest-dom/issues/566)) ([5675b86](https://github.com/testing-library/jest-dom/commit/5675b8668c09345e064001784338a85b7bf9f2af)) </details> <details> <summary>typescript-eslint/typescript-eslint (@​typescript-eslint/eslint-plugin)</summary> ### [`v6.19.1`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#6191-2024-01-22) [Compare Source](https://github.com/typescript-eslint/typescript-eslint/compare/v6.19.0...v6.19.1) ##### 🩹 Fixes - **type-utils:** preventing isUnsafeAssignment infinite recursive calls - **eslint-plugin:** \[no-unnecessary-condition] fix false positive for type variable ##### ❤️ Thank You - YeonJuan You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. ### [`v6.19.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#6190-2024-01-15) [Compare Source](https://github.com/typescript-eslint/typescript-eslint/compare/v6.18.1...v6.19.0) ##### 🚀 Features - **eslint-plugin:** \[prefer-promise-reject-errors] add rule - **eslint-plugin:** \[no-array-delete] add new rule - **eslint-plugin:** \[no-useless-template-literals] add fix suggestions ##### 🩹 Fixes - **eslint-plugin:** \[no-unnecessary-type-assertion] detect unnecessary non-null-assertion on a call expression - **eslint-plugin:** \[no-unnecesary-type-assertion] treat unknown/any as nullable ##### ❤️ Thank You - auvred - Brad Zacher - Josh Goldberg ✨ - Joshua Chen - LJX - Steven - StyleShit You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. </details> <details> <summary>typescript-eslint/typescript-eslint (@​typescript-eslint/parser)</summary> ### [`v6.19.1`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#6191-2024-01-22) [Compare Source](https://github.com/typescript-eslint/typescript-eslint/compare/v6.19.0...v6.19.1) This was a version bump only for parser to align it with other projects, there were no code changes. You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. ### [`v6.19.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#6190-2024-01-15) [Compare Source](https://github.com/typescript-eslint/typescript-eslint/compare/v6.18.1...v6.19.0) This was a version bump only for parser to align it with other projects, there were no code changes. You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. </details> <details> <summary>typescript-eslint/typescript-eslint (@​typescript-eslint/typescript-estree)</summary> ### [`v6.19.1`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/typescript-estree/CHANGELOG.md#6191-2024-01-22) [Compare Source](https://github.com/typescript-eslint/typescript-eslint/compare/v6.19.0...v6.19.1) This was a version bump only for typescript-estree to align it with other projects, there were no code changes. You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. ### [`v6.19.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/typescript-estree/CHANGELOG.md#6190-2024-01-15) [Compare Source](https://github.com/typescript-eslint/typescript-eslint/compare/v6.18.1...v6.19.0) ##### 🩹 Fixes - **typescript-estree:** add JSDocParsingMode enum merge for typescript/lib/tsserverlibrary - **typescript-estree:** disallow `using` as the variable keyword for `for..in` loops - **typescript-estree:** fix incorrect backwards-compat augmentation in TS 5.3 ##### ❤️ Thank You - auvred - Brad Zacher - Josh Goldberg ✨ - Joshua Chen - LJX - Steven - StyleShit You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. </details> <details> <summary>postcss/autoprefixer (autoprefixer)</summary> ### [`v10.4.17`](https://github.com/postcss/autoprefixer/blob/HEAD/CHANGELOG.md#10417) [Compare Source](https://github.com/postcss/autoprefixer/compare/10.4.16...10.4.17) - Fixed `user-select: contain` prefixes. </details> <details> <summary>bufbuild/buf (buf)</summary> ### [`v1.29.0`](https://github.com/bufbuild/buf/blob/HEAD/CHANGELOG.md#v1290---2024-01-24) - Add support for `yaml` format. All commands that take image inputs, output images, or convert between message formats, now take `yaml` as a format, in addition to the existing `binpb` and `txtpb` formats. Some examples: - `buf build -o image.yaml` - `buf ls-files image.yaml` - `buf convert --type foo.Bar --from input.binpb --to output.yaml` - The `yaml` and `json` formats now accept two new options: `use_proto_names` and `use_enum_numbers`. This affects output serialization. Some examples: - `buf convert --type foo.Bar --from input.binpb --to output.yaml#use_proto_names=true` - `buf convert --type foo.Bar --from input.binpb --to -#format=yaml,use_enum_numbers=true` - Fix issue where `buf format` would inadvertently mangle files that used the [expanded `Any` syntax](https://protobuf.com/docs/language-spec#any-messages) in option values. </details> <details> <summary>amacneil/dbmate (github.com/amacneil/dbmate/v2)</summary> ### [`v2.11.0`](https://github.com/amacneil/dbmate/releases/tag/v2.11.0) [Compare Source](https://github.com/amacneil/dbmate/compare/v2.10.0...v2.11.0) ##### What's Changed - Add Redshift support by [@​aterekhov-plr](https://github.com/aterekhov-plr) in [https://github.com/amacneil/dbmate/pull/488](https://github.com/amacneil/dbmate/pull/488) - Bump golang from 1.21.5 to 1.21.6 by [@​dependabot](https://github.com/dependabot) in [https://github.com/amacneil/dbmate/pull/512](https://github.com/amacneil/dbmate/pull/512) - Update dependencies by [@​amacneil](https://github.com/amacneil) in [https://github.com/amacneil/dbmate/pull/513](https://github.com/amacneil/dbmate/pull/513) ##### New Contributors - [@​aterekhov-plr](https://github.com/aterekhov-plr) made their first contribution in [https://github.com/amacneil/dbmate/pull/488](https://github.com/amacneil/dbmate/pull/488) **Full Changelog**: https://github.com/amacneil/dbmate/compare/v2.10.0...v2.11.0 </details> <details> <summary>google/uuid (github.com/google/uuid)</summary> ### [`v1.6.0`](https://github.com/google/uuid/releases/tag/v1.6.0) [Compare Source](https://github.com/google/uuid/compare/v1.5.0...v1.6.0) ##### Features - add Max UUID constant ([#​149](https://github.com/google/uuid/issues/149)) ([c58770e](https://github.com/google/uuid/commit/c58770eb495f55fe2ced6284f93c5158a62e53e3)) ##### Bug Fixes - fix typo in version 7 uuid documentation ([#​153](https://github.com/google/uuid/issues/153)) ([016b199](https://github.com/google/uuid/commit/016b199544692f745ffc8867b914129ecb47ef06)) - Monotonicity in UUIDv7 ([#​150](https://github.com/google/uuid/issues/150)) ([a2b2b32](https://github.com/google/uuid/commit/a2b2b32373ff0b1a312b7fdf6d38a977099698a6)) </details> <details> <summary>open-telemetry/opentelemetry-go (go.opentelemetry.io/otel)</summary> ### [`v1.22.0`](https://github.com/open-telemetry/opentelemetry-go/releases/tag/v1.22.0): /v0.45.0 [Compare Source](https://github.com/open-telemetry/opentelemetry-go/compare/v1.21.0...v1.22.0) ##### Added - The `go.opentelemetry.io/otel/semconv/v1.22.0` package. The package contains semantic conventions from the `v1.22.0` version of the OpenTelemetry Semantic Conventions. ([#​4735](https://github.com/open-telemetry/opentelemetry-go/issues/4735)) - The `go.opentelemetry.io/otel/semconv/v1.23.0` package. The package contains semantic conventions from the `v1.23.0` version of the OpenTelemetry Semantic Conventions. ([#​4746](https://github.com/open-telemetry/opentelemetry-go/issues/4746)) - The `go.opentelemetry.io/otel/semconv/v1.23.1` package. The package contains semantic conventions from the `v1.23.1` version of the OpenTelemetry Semantic Conventions. ([#​4749](https://github.com/open-telemetry/opentelemetry-go/issues/4749)) - The `go.opentelemetry.io/otel/semconv/v1.24.0` package. The package contains semantic conventions from the `v1.24.0` version of the OpenTelemetry Semantic Conventions. ([#​4770](https://github.com/open-telemetry/opentelemetry-go/issues/4770)) - Add `WithResourceAsConstantLabels` option to apply resource attributes for every metric emitted by the Prometheus exporter. ([#​4733](https://github.com/open-telemetry/opentelemetry-go/issues/4733)) - Experimental cardinality limiting is added to the metric SDK. See [metric documentation](./sdk/metric/EXPERIMENTAL.md#cardinality-limit) for more information about this feature and how to enable it. ([#​4457](https://github.com/open-telemetry/opentelemetry-go/issues/4457)) - Add `NewMemberRaw` and `NewKeyValuePropertyRaw` in `go.opentelemetry.io/otel/baggage`. ([#​4804](https://github.com/open-telemetry/opentelemetry-go/issues/4804)) ##### Changed - Upgrade all use of `go.opentelemetry.io/otel/semconv` to use `v1.24.0`. ([#​4754](https://github.com/open-telemetry/opentelemetry-go/issues/4754)) - Update transformations in `go.opentelemetry.io/otel/exporters/zipkin` to follow `v1.19.0` version of the OpenTelemetry specification. ([#​4754](https://github.com/open-telemetry/opentelemetry-go/issues/4754)) - Record synchronous measurements when the passed context is canceled instead of dropping in `go.opentelemetry.io/otel/sdk/metric`. If you do not want to make a measurement when the context is cancelled, you need to handle it yourself (e.g `if ctx.Err() != nil`). ([#​4671](https://github.com/open-telemetry/opentelemetry-go/issues/4671)) - Improve `go.opentelemetry.io/otel/trace.TraceState`'s performance. ([#​4722](https://github.com/open-telemetry/opentelemetry-go/issues/4722)) - Improve `go.opentelemetry.io/otel/propagation.TraceContext`'s performance. ([#​4721](https://github.com/open-telemetry/opentelemetry-go/issues/4721)) - Improve `go.opentelemetry.io/otel/baggage` performance. ([#​4743](https://github.com/open-telemetry/opentelemetry-go/issues/4743)) - Improve performance of the `(*Set).Filter` method in `go.opentelemetry.io/otel/attribute` when the passed filter does not filter out any attributes from the set. ([#​4774](https://github.com/open-telemetry/opentelemetry-go/issues/4774)) - `Member.String` in `go.opentelemetry.io/otel/baggage` percent-encodes only when necessary. ([#​4775](https://github.com/open-telemetry/opentelemetry-go/issues/4775)) - `Property.Value` in `go.opentelemetry.io/otel/baggage` now returns a raw string instead of a percent-encoded value. ([#​4804](https://github.com/open-telemetry/opentelemetry-go/issues/4804)) ##### Fixed - Fix `Parse` in `go.opentelemetry.io/otel/baggage` to validate member value before percent-decoding. ([#​4755](https://github.com/open-telemetry/opentelemetry-go/issues/4755)) - Fix whitespace encoding of `Member.String` in `go.opentelemetry.io/otel/baggage`. ([#​4756](https://github.com/open-telemetry/opentelemetry-go/issues/4756)) - Fix baggage item key so that it is not canonicalized in `go.opentelemetry.io/otel/bridge/opentracing`. ([#​4776](https://github.com/open-telemetry/opentelemetry-go/issues/4776)) - Fix `go.opentelemetry.io/otel/bridge/opentracing` to properly handle baggage values that requires escaping during propagation. ([#​4804](https://github.com/open-telemetry/opentelemetry-go/issues/4804)) - Fix a bug where using multiple readers resulted in incorrect asynchronous counter values in `go.opentelemetry.io/otel/sdk/metric`. ([#​4742](https://github.com/open-telemetry/opentelemetry-go/issues/4742)) </details> <details> <summary>open-telemetry/opentelemetry-proto-go (go.opentelemetry.io/proto/otlp)</summary> ### [`v1.1.0`](https://github.com/open-telemetry/opentelemetry-proto-go/releases/tag/v1.1.0) [Compare Source](https://github.com/open-telemetry/opentelemetry-proto-go/compare/v1.0.0...v1.1.0) Release of the [v1.1.0][otlp] version of the OTLP. **Full Changelog**: https://github.com/open-telemetry/opentelemetry-proto-go/compare/v1.0.0...v1.1.0 [otlp]: https://github.com/open-telemetry/opentelemetry-proto/releases/tag/v1.1.0 </details> <details> <summary>helm/helm (helm)</summary> ### [`v3.14.0`](https://github.com/helm/helm/releases/tag/v3.14.0): Helm v3.14.0 Helm v3.14.0 is a feature release. Users are encouraged to upgrade for the best experience. The community keeps growing, and we'd love to see you there! - Join the discussion in [Kubernetes Slack](https://kubernetes.slack.com): - for questions and just to hang out - for discussing PRs, code, and bugs - Hang out at the Public Developer Call: Thursday, 9:30 Pacific via [Zoom](https://zoom.us/j/696660622) - Test, debug, and contribute charts: [ArtifactHub/packages](https://artifacthub.io/packages/search?kind=0) ##### Notable Changes - New `helm search` flag of `--fail-on-no-result` - Allow a nested `tpl` invocation access to `defines` - Speed up the `tpl` function - Added qps/HELM_QPS parameter that tells Kubernetes packages how to operate - Added `--kube-version` to `lint` command - The `ignore` pkg is now public ##### Installation and Upgrading Download Helm v3.14.0. The common platform binaries are here: - [MacOS amd64](https://get.helm.sh/helm-v3.14.0-darwin-amd64.tar.gz) ([checksum](https://get.helm.sh/helm-v3.14.0-darwin-amd64.tar.gz.sha256sum) / 804586896496f7b3da97f56089ea00f220e075e969b6fdf6c0b7b9cdc22de120) - [MacOS arm64](https://get.helm.sh/helm-v3.14.0-darwin-arm64.tar.gz) ([checksum](https://get.helm.sh/helm-v3.14.0-darwin-arm64.tar.gz.sha256sum) </details> --- ### Configuration 📅 **Schedule**: Branch creation - "before 4am on Monday" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/TBD54566975/ftl). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMzUuMCIsInVwZGF0ZWRJblZlciI6IjM3LjE1My4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9--> --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com> Co-authored-by: Alec Thomas <alec@swapoff.org>
This PR adds support for extensions, a Protobuf language feature that allows to extend a message with an additional field.
Here is an example:
The message we extend must declare a range of field numbers for extensions:
Generating code with @bufbuild/protoc-gen-es will add a new export with the name of the extension field:
Using the new accessor functions for extensions introduced by this PR, the field can be set on the extended message in a type-safe way:
Extensions are supported in the JSON format as well. Similar to
google.protobuf.Any
, youhave to provide a type registry to let the serializer know about extension.
Example for parsing and serializing messages with extensions.
Related changes:
createRegistry
accepts the newExtension
type.createRegistry
andcreateRegistryFromDesc
implement the new interfaceIExtensionRegistry
to look up extensions.typeRegistry
JSON serialization option can now implementIExtensionRegistry
.DescExtension
inGeneratedFile.import
,GeneratedFile.print
, and related methods to allow custom plugins to refer to extensions easily.Regression checks:
make perf
.A note about custom options:
You can learn more about extensions in the language guide. Note that extensions can only be used for custom options in proto3.
Currently, extensions cannot be used to retrieve custom options from generated code in Protobuf-ES, but we plan to follow up with a solution. #397 is tracking the feature. Custom options can be retrieved from descriptors, so it is possible to use them to read options in a custom plugin.
Planned follow-ups:
Closes #86.