Skip to content
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

Fix normalization of partial messages #975

Merged
merged 2 commits into from
Jan 3, 2024
Merged

Conversation

timostamm
Copy link
Member

Connect supports two styles of passing a request message to a client.

  1. With a concrete instance:
const req = new SayRequest({ sentence: "hello" });
client.say(req);
  1. Or with an object literal:
client.say({ sentence: "hello" });

The object literal is just a convenient shortcut, and simply calls new SayRequest with the given partial message as an argument.

There is a flaw in the logic that converts a partial message to a concrete instance: If a different message instance is passed to the client, it is not converted to the correct instance. For example, provided that the Protobuf message SimilarToSayRequest also has a field string sentence like the original, the following code compiles without error:

const req = new SimilarToSayRequest({ sentence: "hello" });
client.say(req);

Note that TypeScript does not use nominal typing, and passing a different message is not a type error if it structurally matches. The issue is that the message properties are not converted via new SayRequest, and the serialization logic of SimilarToSayRequest is applied, which will lead to corrupt data for the RPC unless the same Protobuf field numbers are used.

We recommend to stick with one of the two styles above, and not pass different message types to an RPC, but it's only logical to treat a different message type the same way as we treat an object literal.

This PR changes the behavior to convert the request message via new SayRequest, unless the message is an instance of SayRequest (required to retain unknown fields).

@timostamm timostamm requested a review from smaye81 January 3, 2024 15:19
@timostamm timostamm merged commit b78c1b3 into main Jan 3, 2024
4 checks passed
@timostamm timostamm deleted the tstamm/fix-normalize branch January 3, 2024 15:52
@timostamm timostamm mentioned this pull request Jan 3, 2024
alecthomas referenced this pull request in block/ftl Jan 8, 2024
[![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 |
|---|---|---|---|---|---|---|---|
| [@connectrpc/connect](https://github.com/connectrpc/connect-es)
([source](https://github.com/connectrpc/connect-es/tree/HEAD/packages/connect))
| [`1.2.0` ->
`1.2.1`](https://renovatebot.com/diffs/npm/@connectrpc%2fconnect/1.2.0/1.2.1)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@connectrpc%2fconnect/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@connectrpc%2fconnect/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@connectrpc%2fconnect/1.2.0/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@connectrpc%2fconnect/1.2.0/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
| [@connectrpc/connect-web](https://github.com/connectrpc/connect-es)
([source](https://github.com/connectrpc/connect-es/tree/HEAD/packages/connect-web))
| [`1.2.0` ->
`1.2.1`](https://renovatebot.com/diffs/npm/@connectrpc%2fconnect-web/1.2.0/1.2.1)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@connectrpc%2fconnect-web/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@connectrpc%2fconnect-web/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@connectrpc%2fconnect-web/1.2.0/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@connectrpc%2fconnect-web/1.2.0/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
|
[@connectrpc/protoc-gen-connect-es](https://github.com/connectrpc/connect-es)
([source](https://github.com/connectrpc/connect-es/tree/HEAD/packages/protoc-gen-connect-es))
| [`1.2.0` ->
`1.2.1`](https://renovatebot.com/diffs/npm/@connectrpc%2fprotoc-gen-connect-es/1.2.0/1.2.1)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@connectrpc%2fprotoc-gen-connect-es/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@connectrpc%2fprotoc-gen-connect-es/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@connectrpc%2fprotoc-gen-connect-es/1.2.0/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@connectrpc%2fprotoc-gen-connect-es/1.2.0/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
|
[@testing-library/jest-dom](https://github.com/testing-library/jest-dom)
| [`6.1.6` ->
`6.2.0`](https://renovatebot.com/diffs/npm/@testing-library%2fjest-dom/6.1.6/6.2.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@testing-library%2fjest-dom/6.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@testing-library%2fjest-dom/6.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@testing-library%2fjest-dom/6.1.6/6.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@testing-library%2fjest-dom/6.1.6/6.2.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.46` ->
`18.2.47`](https://renovatebot.com/diffs/npm/@types%2freact/18.2.46/18.2.47)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2freact/18.2.47?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2freact/18.2.47?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2freact/18.2.46/18.2.47?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2freact/18.2.46/18.2.47?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.16.0` ->
`6.18.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2feslint-plugin/6.16.0/6.18.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2feslint-plugin/6.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2feslint-plugin/6.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2feslint-plugin/6.16.0/6.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2feslint-plugin/6.16.0/6.18.0?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.16.0` ->
`6.18.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/6.16.0/6.18.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fparser/6.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fparser/6.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fparser/6.16.0/6.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fparser/6.16.0/6.18.0?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.16.0` ->
`6.18.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2ftypescript-estree/6.16.0/6.18.0)
|
[![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2ftypescript-estree/6.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2ftypescript-estree/6.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2ftypescript-estree/6.16.0/6.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2ftypescript-estree/6.16.0/6.18.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | minor |
| [@viz-js/viz](https://github.com/mdaines/viz-js)
([source](https://github.com/mdaines/viz-js/tree/HEAD/packages/viz)) |
[`3.2.3` ->
`3.2.4`](https://renovatebot.com/diffs/npm/@viz-js%2fviz/3.2.3/3.2.4) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/@viz-js%2fviz/3.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@viz-js%2fviz/3.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@viz-js%2fviz/3.2.3/3.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@viz-js%2fviz/3.2.3/3.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
| golang.org/x/sync | `v0.5.0` -> `v0.6.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2fsync/v0.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/golang.org%2fx%2fsync/v0.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/golang.org%2fx%2fsync/v0.5.0/v0.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2fsync/v0.5.0/v0.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| require | minor |
| [just](https://github.com/casey/just) | `1.21.0` -> `1.22.0` |
[![age](https://developer.mend.io/api/mc/badges/age/hermit/just/1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/hermit/just/1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/hermit/just/1.21.0/1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/just/1.21.0/1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| | minor |
| [postcss](https://postcss.org/)
([source](https://github.com/postcss/postcss)) | [`8.4.32` ->
`8.4.33`](https://renovatebot.com/diffs/npm/postcss/8.4.32/8.4.33) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/postcss/8.4.33?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/postcss/8.4.33?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/postcss/8.4.32/8.4.33?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/postcss/8.4.32/8.4.33?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| devDependencies | patch |
| [tailwindcss](https://tailwindcss.com)
([source](https://github.com/tailwindlabs/tailwindcss)) | [`3.4.0` ->
`3.4.1`](https://renovatebot.com/diffs/npm/tailwindcss/3.4.0/3.4.1) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/tailwindcss/3.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/tailwindcss/3.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/tailwindcss/3.4.0/3.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/tailwindcss/3.4.0/3.4.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| dependencies | patch |
| [watchexec](https://github.com/watchexec/watchexec) | `1.24.2` ->
`1.25.1` |
[![age](https://developer.mend.io/api/mc/badges/age/hermit/watchexec/1.25.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/hermit/watchexec/1.25.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/hermit/watchexec/1.24.2/1.25.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/watchexec/1.24.2/1.25.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| | minor |
| [com.github.ajalt.clikt:clikt-jvm](https://github.com/ajalt/clikt) |
`4.2.1` -> `4.2.2` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/com.github.ajalt.clikt:clikt-jvm/4.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.github.ajalt.clikt:clikt-jvm/4.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.github.ajalt.clikt:clikt-jvm/4.2.1/4.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.github.ajalt.clikt:clikt-jvm/4.2.1/4.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
| compile | patch |

---

### Release Notes

<details>
<summary>connectrpc/connect-es (@&#8203;connectrpc/connect)</summary>

###
[`v1.2.1`](https://github.com/connectrpc/connect-es/releases/tag/v1.2.1)

[Compare
Source](https://github.com/connectrpc/connect-es/compare/v1.2.0...v1.2.1)

##### What's Changed

- Fix normalization of partial messages by
[@&#8203;timostamm](https://github.com/timostamm) in
[https://github.com/connectrpc/connect-es/pull/975](https://github.com/connectrpc/connect-es/pull/975)

**Full Changelog**:
connectrpc/connect-es@v1.2.0...v1.2.1

</details>

<details>
<summary>testing-library/jest-dom
(@&#8203;testing-library/jest-dom)</summary>

###
[`v6.2.0`](https://github.com/testing-library/jest-dom/releases/tag/v6.2.0)

[Compare
Source](https://github.com/testing-library/jest-dom/compare/v6.1.6...v6.2.0)

##### Features

- toHaveAccessibleDescription supports aria-description
([#&#8203;565](https://github.com/testing-library/jest-dom/issues/565))
([1fb156c](https://github.com/testing-library/jest-dom/commit/1fb156c2b544e0069c56a72a2f1909fe04850f6c))

</details>

<details>
<summary>typescript-eslint/typescript-eslint
(@&#8203;typescript-eslint/eslint-plugin)</summary>

###
[`v6.18.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#6180-2024-01-06)

[Compare
Source](https://github.com/typescript-eslint/typescript-eslint/compare/v6.17.0...v6.18.0)

##### 🚀 Features

-   **typescript-estree:** throw on invalid update expressions

- **eslint-plugin:** \[no-var-requires, no-require-imports] allow option

##### ❤️  Thank You

-   auvred
-   Joshua Chen

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.17.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#6170-2024-01-01)

[Compare
Source](https://github.com/typescript-eslint/typescript-eslint/compare/v6.16.0...v6.17.0)

##### Bug Fixes

- **eslint-plugin:** \[no-restricted-imports] prevent crash when
`patterns` or `paths` in options are empty
([#&#8203;8108](https://github.com/typescript-eslint/typescript-eslint/issues/8108))
([675e987](https://github.com/typescript-eslint/typescript-eslint/commit/675e987ca1d13244c03d7e09d4e42c6539689d9a))

##### Features

- **eslint-plugin:** \[no-floating-promises] flag result of .map(async)
([#&#8203;7897](https://github.com/typescript-eslint/typescript-eslint/issues/7897))
([5857356](https://github.com/typescript-eslint/typescript-eslint/commit/5857356962060b19aa792bee778f9167ee54154b))
- **eslint-plugin:** \[switch-exhaustiveness-check] add an option to
warn against a `default` case on an already exhaustive `switch`
([#&#8203;7539](https://github.com/typescript-eslint/typescript-eslint/issues/7539))
([6a219bd](https://github.com/typescript-eslint/typescript-eslint/commit/6a219bdfe6fcf86aae28158e0d855f87a8bac719))

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
(@&#8203;typescript-eslint/parser)</summary>

###
[`v6.18.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#6180-2024-01-06)

[Compare
Source](https://github.com/typescript-eslint/typescript-eslint/compare/v6.17.0...v6.18.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.

###
[`v6.17.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#6170-2024-01-01)

[Compare
Source](https://github.com/typescript-eslint/typescript-eslint/compare/v6.16.0...v6.17.0)

**Note:** Version bump only for package
[@&#8203;typescript-eslint/parser](https://github.com/typescript-eslint/parser)

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
(@&#8203;typescript-eslint/typescript-estree)</summary>

###
[`v6.18.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/typescript-estree/CHANGELOG.md#6180-2024-01-06)

[Compare
Source](https://github.com/typescript-eslint/typescript-eslint/compare/v6.17.0...v6.18.0)

##### 🚀 Features

-   **typescript-estree:** throw on invalid update expressions

- **typescript-estree:** throw error when CatchClause param contains
initializer

##### ❤️  Thank You

-   auvred
-   Joshua Chen

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.17.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/typescript-estree/CHANGELOG.md#6170-2024-01-01)

[Compare
Source](https://github.com/typescript-eslint/typescript-eslint/compare/v6.16.0...v6.17.0)

**Note:** Version bump only for package
[@&#8203;typescript-eslint/typescript-estree](https://github.com/typescript-eslint/typescript-estree)

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>mdaines/viz-js (@&#8203;viz-js/viz)</summary>

###
[`v3.2.4`](https://github.com/mdaines/viz-js/blob/HEAD/packages/viz/CHANGELOG.md#324)

[Compare
Source](https://github.com/mdaines/viz-js/compare/b7fe5c56472b6e85e5a58f029f5e4b8e6d15831b...b036c627bb2e10f77c0fb860da381a02955fac07)

-   Update Emscripten SDK to 3.1.51

- Export the Viz type
([#&#8203;224](https://github.com/mdaines/viz-js/issues/224),
[#&#8203;225](https://github.com/mdaines/viz-js/issues/225))

</details>

<details>
<summary>casey/just (just)</summary>

###
[`v1.22.0`](https://github.com/casey/just/blob/HEAD/CHANGELOG.md#1220---2023-12-31)

[Compare
Source](https://github.com/casey/just/compare/1.21.0...1.22.0)

##### Added

- Recipes can be invoked with path syntax
([#&#8203;1809](https://github.com/casey/just/pull/1809))
- Add `--format` and `--initialize` as aliases for `--fmt` and `--init`
([#&#8203;1802](https://github.com/casey/just/pull/1802))

##### Misc

- Move table of contents pointer to right
([#&#8203;1806](https://github.com/casey/just/pull/1806))

</details>

<details>
<summary>postcss/postcss (postcss)</summary>

###
[`v8.4.33`](https://github.com/postcss/postcss/blob/HEAD/CHANGELOG.md#8433)

[Compare
Source](https://github.com/postcss/postcss/compare/8.4.32...8.4.33)

- Fixed `NoWorkResult` behavior difference with normal mode (by Romain
Menke).
- Fixed `NoWorkResult` usage conditions (by
[@&#8203;ahmdammarr](https://github.com/ahmdammarr)).

</details>

<details>
<summary>tailwindlabs/tailwindcss (tailwindcss)</summary>

###
[`v3.4.1`](https://github.com/tailwindlabs/tailwindcss/releases/tag/v3.4.1)

[Compare
Source](https://github.com/tailwindlabs/tailwindcss/compare/v3.4.0...v3.4.1)

##### Fixed

- Don't remove keyframe stops when using important utilities
([#&#8203;12639](https://github.com/tailwindlabs/tailwindcss/pull/12639))
- Don't add spaces to gradients and grid track names when followed by
`calc()`
([#&#8203;12704](https://github.com/tailwindlabs/tailwindcss/pull/12704))
- Restore old behavior for `class` dark mode strategy
([#&#8203;12717](https://github.com/tailwindlabs/tailwindcss/pull/12717))

##### Added

- Add new `selector` and `variant` strategies for dark mode
([#&#8203;12717](https://github.com/tailwindlabs/tailwindcss/pull/12717))

##### Changed

- Support `rtl` and `ltr` variants on same element as `dir` attribute
([#&#8203;12717](https://github.com/tailwindlabs/tailwindcss/pull/12717))

</details>

<details>
<summary>watchexec/watchexec (watchexec)</summary>

###
[`v1.25.1`](https://github.com/watchexec/watchexec/releases/tag/v1.25.1):
CLI v1.25.1

*Software development often involves running the same commands over and
over. Boring! Watchexec is a simple, standalone tool that watches a path
and runs a command whenever it detects modifications. Install it today
with [`cargo-binstall
watchexec-cli`](https://github.com/cargo-bins/cargo-binstall), from
the binaries below, find it [in your favourite package
manager](https://github.com/watchexec/watchexec/blob/main/doc/packages.md),
or build it from source with `cargo install watchexec-cli`.*

##### In this release:

- Fix compatibility with 32-bit platforms
([#&#8203;730](https://github.com/watchexec/watchexec/issues/730))
- Fix bugs introduced by inconsistent path normalisation in optimised
ignore handling
([#&#8203;759](https://github.com/watchexec/watchexec/issues/759))

###
[`v1.25.0`](https://github.com/watchexec/watchexec/releases/tag/v1.25.0):
CLI v1.25.0

*Software development often involves running the same commands over and
over. Boring! Watchexec is a simple, standalone tool that watches a path
and runs a command whenever it detects modifications. Install it today
with [`cargo-binstall
watchexec-cli`](https://github.com/cargo-bins/cargo-binstall), from
the binaries below, find it [in your favourite package
manager](https://github.com/watchexec/watchexec/blob/main/doc/packages.md),
or build it from source with `cargo install watchexec-cli`.*

##### In this release:

- Startup performance improvements reducing the amount of directories
visited when discovering ignore files.
([#&#8203;663](https://github.com/watchexec/watchexec/issues/663) by
[@&#8203;t3hmrman](https://github.com/t3hmrman))
- Improvements to handling of nested ignore files.
([#&#8203;745](https://github.com/watchexec/watchexec/issues/745) by
[@&#8203;thislooksfun](https://github.com/thislooksfun))

##### Other changes:

- Project origin detection tweaked a little to avoid some false
positives.
([#&#8203;748](https://github.com/watchexec/watchexec/issues/748))

</details>

<details>
<summary>ajalt/clikt (com.github.ajalt.clikt:clikt-jvm)</summary>

###
[`v4.2.2`](https://github.com/ajalt/clikt/blob/HEAD/CHANGELOG.md#422)

[Compare Source](https://github.com/ajalt/clikt/compare/4.2.1...4.2.2)

##### Changed

- Options and arguments can now reference option groups in their
`defaultLazy` and other finalization blocks. They can also freely
reference each other, including though chains of references.
([#&#8203;473](https://github.com/ajalt/clikt/issues/473))
- Updated Kotlin to 1.9.21
([#&#8203;472](https://github.com/ajalt/clikt/pull/472))

</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:eyJjcmVhdGVkSW5WZXIiOiIzNy4xMjEuMCIsInVwZGF0ZWRJblZlciI6IjM3LjEyMS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

---------

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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants