Skip to content

fix(query,core): fix mutationInvalidates codegen with path params and tags-split (#3090) - #3198

Merged
melloware merged 3 commits into
orval-labs:masterfrom
zeriong:fix/mutation-invalidates-codegen-bugs-3090
Apr 6, 2026
Merged

fix(query,core): fix mutationInvalidates codegen with path params and tags-split (#3090)#3198
melloware merged 3 commits into
orval-labs:masterfrom
zeriong:fix/mutation-invalidates-codegen-bugs-3090

Conversation

@zeriong

@zeriong zeriong commented Apr 5, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes #3090

  • Bug 1: When mutationInvalidates targets a query with required path parameters but no params mapping, the generated code called the query key function without arguments (e.g. getShowPetByIdQueryKey()), causing TS2554 errors and silent runtime mismatches. Now generates predicate-based broad invalidation using the route prefix instead.
  • Bug 2: In tags-split mode, the file option in mutationInvalidates resolved import paths relative to the output root instead of the consuming file's subdirectory, producing broken imports like './items' instead of '../items/items'. Now correctly resolves relative paths from each tag's subdirectory.

Changed files

File Change
packages/query/src/mutation-generator.ts Look up target query's route from OpenAPI spec; generate predicate-based invalidation when path params are required but unmapped
packages/core/src/writers/split-tags-mode.ts Adjust file option import paths relative to tag subdirectory in tags-split mode
tests/configs/react-query.config.ts Add test configs for both bugs
tests/__snapshots__/react-query/invalidates/endpoints.ts Updated snapshot
tests/__snapshots__/react-query/invalidates-tags-split/** New snapshots for tags-split invalidation

Test plan

  • bun run format:check — pass
  • bun run build — 12/12 pass
  • bun run typecheck — 12/12 pass
  • bun run lint — 24/24 pass
  • bun run test — pass (existing resolve-version.test.ts failure is pre-existing on master)
  • bun run test:snapshots — 67/67 tasks, 3509/3509 tests pass
  • Generated invalidates/endpoints.ts uses predicate + startsWith for Bug 1
  • Generated invalidates-tags-split/pets/pets.ts imports '../health/health' for Bug 2

Summary by CodeRabbit

  • New Features

    • Enhanced mutation invalidation with OpenAPI spec awareness for improved query lifecycle management when targets omit parameters.
    • Improved import path resolution in tags-split code generation mode for better organized output.
  • Tests

    • Added comprehensive test fixtures for React Query split-tags and split-query-key code generation modes.

… tags-split (orval-labs#3090)

Bug 1: When mutationInvalidates targets a query with required path
parameters but no params mapping, the generated code called the
query key function without arguments, causing TS2554 errors and
silent runtime mismatches. Now generates predicate-based broad
invalidation using the route prefix instead.

Bug 2: In tags-split mode, the ile option in mutationInvalidates
resolved import paths relative to the output root instead of the
consuming file's subdirectory, producing broken imports like
'./items' instead of '../items/items'. Now correctly resolves
relative paths from each tag's subdirectory.

Signed-off-by: jaery <jaeryong95@gmail.com>
@coderabbitai

coderabbitai Bot commented Apr 5, 2026

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

Import paths for tags-split mode are now rewritten to resolve relative paths against the output root and match the split directory layout. Additionally, mutation invalidation becomes OpenAPI-spec–aware, detecting required path parameters and adjusting invalidation strategies accordingly. Test snapshots are generated for new configurations.

Changes

Cohort / File(s) Summary
Core Import & Path Resolution
packages/core/src/writers/split-tags-mode.ts
Import paths are transformed to resolve relative imports against the output root, determine target filenames from tag names, and rewrite as relative paths from consuming files before passing to generateImportsForBuilder.
OpenAPI-Aware Mutation Invalidation
packages/query/src/mutation-generator.ts
Invalidation generation now uses createGenerateInvalidateCall(spec, shouldSplitQueryKey) to detect required path parameters from the OpenAPI spec; generates predicate-based or partial-key invalidation when required params exist; filters query-key function imports via needsQueryKeyFnCall.
Test Configuration
tests/configs/react-query.config.ts
Extended React Query invalidation tests with two new configurations: invalidatesTagsSplit (tags-split mode with health-check invalidation) and invalidatesSplitQueryKey (split query-key mode with show-pet-by-id invalidation).
Tags-Split Test Snapshots
tests/__snapshots__/react-query/invalidates-tags-split/.../*
Generated HTTP status types, response wrappers, query key/option builders, React hooks, and domain models (Pet, Dog, Cat, Labradoodle, Dachshund, etc.) for petstore endpoints with tag-split output layout.
Split-Query-Key Test Snapshots
tests/__snapshots__/react-query/invalidates-split-query-key/.../*
Generated HTTP status types, response wrappers, query key/option builders, React hooks, and domain models for petstore endpoints with split query-key output layout and spec-aware invalidation.
Existing Invalidation Test Updates
tests/__snapshots__/react-query/invalidates/endpoints.ts
Delete-pet mutation now accepts explicit queryClient parameter and skipInvalidation option; onSuccess handler conditionally invalidates both list and show-by-id queries.

Sequence Diagram(s)

sequenceDiagram
    participant MutGen as Mutation Generator
    participant Spec as OpenAPI Spec
    participant InvGen as Invalidate Call Generator
    participant QK as Query Key Builder
    participant QC as QueryClient

    MutGen->>MutGen: Check if target.params is empty
    alt target.params is empty
        MutGen->>Spec: findOperationInfo(spec, target.query)
        Spec-->>MutGen: Operation with required path params?
        alt Required path params detected
            MutGen->>InvGen: Generate predicate-based or partial-key invalidation
            InvGen->>InvGen: Use static route prefix for matching
            InvGen-->>MutGen: Invalidation strategy (predicate/partial-key)
        else No required params
            MutGen->>QK: queryKeyFn() with zero args
            QK-->>MutGen: Query key
        end
    else target.params is present
        MutGen->>QK: queryKeyFn(...args)
        QK-->>MutGen: Query key
    end
    
    MutGen->>QC: invalidateQueries with computed strategy
    QC-->>MutGen: Invalidation complete
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

  • orval-labs/orval#3170 — Both PRs modify import-path generation logic in core writers; main PR adjusts imports for tags-split layout while related PR updates generateImportsForBuilder and index-file targets.
  • orval-labs/orval#2928 — Both PRs modify packages/query/src/mutation-generator.ts; main PR introduces spec-aware invalidation logic while related PR updated mutation-generator signatures.
  • orval-labs/orval#3069 — Both PRs modify packages/core/src/writers/split-tags-mode.ts; main PR changes import-path rewriting logic while related PR adds error handling in the same file.

Suggested labels

tanstack-query, openapi

Suggested reviewers

  • melloware
  • snebjorn

Poem

🐰 Through imports twisted, paths now clear,
Split tags resolve without a fear!
Mutations know their OpenAPI way,
Invalidating smarter every day.
Query keys dance in harmony true,
This schema-aware magic's for you!

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely summarizes the two main bugs being fixed: mutation invalidation codegen issues with path parameters and tags-split mode.
Docstring Coverage ✅ Passed Docstring coverage is 80.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (1)
tests/configs/react-query.config.ts (1)

18-80: Add a fixture for the shouldSplitQueryKey invalidation path.

The new generator logic now has a separate branch when query.shouldSplitQueryKey is enabled, but the fixtures added here only exercise default-key invalidation and tags-split import rewriting. A small snapshot config with an unmapped required path param under shouldSplitQueryKey: true would keep that new path from regressing silently.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/configs/react-query.config.ts` around lines 18 - 80, Add a new test
fixture that exercises the generator branch where query.shouldSplitQueryKey ===
true: create a config block similar to the existing invalidates entry but set
override.query.shouldSplitQueryKey = true and include a mutationInvalidates
entry that invalidates the unmapped required-path query 'showPetById' (i.e.,
list an invalidates entry of 'showPetById' with no params mapping) so the
snapshot tests cover predicate-based invalidation for split-key mode; reference
the existing override.query.mutationInvalidates array and the 'showPetById'
invalidation to place the new case next to the current invalidates test.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@packages/core/src/writers/split-tags-mode.ts`:
- Around line 100-107: The code incorrectly assumes any resolvedPath whose
basename is a known tag is always a tag directory and blindly rewrites it to
dirname/tag/tag+extension, which duplicates explicit file imports like
"./items/items" and diverges from the Angular split-tag naming used later;
update the branch that uses tagNames.has(targetBasename) (the logic producing
targetFile from resolvedPath, targetBasename, tagNames, extension) to compute
the actual split-tag filename using the same filename rule used elsewhere (e.g.,
the Angular branch at lines ~218-221) instead of always joining dirname/tag/tag;
specifically, detect when the import already points to a file (avoid adding an
extra segment) and apply the correct per-platform/generated-name (e.g.,
"<tag>.service" for Angular or "<tag>/<tag>" for default) so targetFile uses the
real split-tag filename.

In `@packages/query/src/mutation-generator.ts`:
- Around line 131-135: getStaticRoutePrefix currently slices up to the first `{`
and returns `'/'` for templates that start with a path param, which causes
overly-broad invalidation; update getStaticRoutePrefix to detect when the
extracted prefix contains no stable literal segment (e.g., only slashes or
empty) and in that case do not return `'/'` but instead fallback to using the
full route template (or return an explicit sentinel like an empty string) so the
caller can perform exact/template-aware matching; apply the same guard/fallback
logic to the similar logic referenced around lines 193-212 so both places avoid
producing a global prefix for routes that start with a path parameter.
- Around line 143-149: The code in needsQueryKeyFnCall treats any truthy
target.params (e.g., [] or {}) as a mapping and skips spec-based fallback,
causing get...QueryKey() to be emitted with no args; change the check to treat
only non-empty mappings as present by replacing "if (target.params) return true"
with a test that verifies target.params is not null/undefined and (if
Array.isArray(target.params) then length>0 else
Object.keys(target.params).length>0). Apply the same non-empty-mapping check in
the other analogous spot (the similar params existence check around the later
block referenced in the comment) so both code paths consistently treat empty
params as “no mapping.”
- Around line 90-105: findOperationInfo currently only matches routes by raw
operationId, which misses generated/renamed operation-name forms like
target.query (used elsewhere with camel(`get-${target.query}-query-key`));
update findOperationInfo to compare both the raw operation.operationId and the
generated operation-name form used by the generator (i.e., the same
transformation used for camel(`get-${target.query}-query-key`) / generated
operation names) so that lookups using target.query succeed; specifically,
inside findOperationInfo (and the lookup logic that calls it) compute the
canonical/generated name for each operation (using the same
camel/get-...-query-key logic) and treat a match if either operation.operationId
=== operationName or generatedName === operationName.

---

Nitpick comments:
In `@tests/configs/react-query.config.ts`:
- Around line 18-80: Add a new test fixture that exercises the generator branch
where query.shouldSplitQueryKey === true: create a config block similar to the
existing invalidates entry but set override.query.shouldSplitQueryKey = true and
include a mutationInvalidates entry that invalidates the unmapped required-path
query 'showPetById' (i.e., list an invalidates entry of 'showPetById' with no
params mapping) so the snapshot tests cover predicate-based invalidation for
split-key mode; reference the existing override.query.mutationInvalidates array
and the 'showPetById' invalidation to place the new case next to the current
invalidates test.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: ef2f26b0-c915-4a03-a60a-48e4f62e9d0b

📥 Commits

Reviewing files that changed from the base of the PR and between b52e2cb and a818da8.

📒 Files selected for processing (32)
  • packages/core/src/writers/split-tags-mode.ts
  • packages/query/src/mutation-generator.ts
  • tests/__snapshots__/angular/multi-content-query-params/endpoints.ts
  • tests/__snapshots__/angular/multi-content-query-params/model/error.ts
  • tests/__snapshots__/angular/multi-content-query-params/model/index.ts
  • tests/__snapshots__/angular/multi-content-query-params/model/item.ts
  • tests/__snapshots__/angular/multi-content-query-params/model/items.ts
  • tests/__snapshots__/angular/multi-content-query-params/model/listItemsParams.ts
  • tests/__snapshots__/react-query/invalidates-tags-split/health/health.ts
  • tests/__snapshots__/react-query/invalidates-tags-split/model/cat.ts
  • tests/__snapshots__/react-query/invalidates-tags-split/model/catType.ts
  • tests/__snapshots__/react-query/invalidates-tags-split/model/createPetsBody.ts
  • tests/__snapshots__/react-query/invalidates-tags-split/model/createPetsParams.ts
  • tests/__snapshots__/react-query/invalidates-tags-split/model/createPetsSort.ts
  • tests/__snapshots__/react-query/invalidates-tags-split/model/dachshund.ts
  • tests/__snapshots__/react-query/invalidates-tags-split/model/dachshundBreed.ts
  • tests/__snapshots__/react-query/invalidates-tags-split/model/dog.ts
  • tests/__snapshots__/react-query/invalidates-tags-split/model/dogType.ts
  • tests/__snapshots__/react-query/invalidates-tags-split/model/error.ts
  • tests/__snapshots__/react-query/invalidates-tags-split/model/index.ts
  • tests/__snapshots__/react-query/invalidates-tags-split/model/labradoodle.ts
  • tests/__snapshots__/react-query/invalidates-tags-split/model/labradoodleBreed.ts
  • tests/__snapshots__/react-query/invalidates-tags-split/model/listPetsParams.ts
  • tests/__snapshots__/react-query/invalidates-tags-split/model/listPetsSort.ts
  • tests/__snapshots__/react-query/invalidates-tags-split/model/pet.ts
  • tests/__snapshots__/react-query/invalidates-tags-split/model/petCallingCode.ts
  • tests/__snapshots__/react-query/invalidates-tags-split/model/petCountry.ts
  • tests/__snapshots__/react-query/invalidates-tags-split/model/petWithTag.ts
  • tests/__snapshots__/react-query/invalidates-tags-split/model/pets.ts
  • tests/__snapshots__/react-query/invalidates-tags-split/pets/pets.ts
  • tests/__snapshots__/react-query/invalidates/endpoints.ts
  • tests/configs/react-query.config.ts

Comment thread packages/core/src/writers/split-tags-mode.ts Outdated
Comment thread packages/query/src/mutation-generator.ts Outdated
Comment thread packages/query/src/mutation-generator.ts Outdated
Comment thread packages/query/src/mutation-generator.ts
…d snapshots (orval-labs#3090)

- Match operationId by both raw and camelCase forms for renamed operations
- Treat empty params ([] / {}) as 'no mapping' to avoid zero-arg calls
- Guard route prefix when no stable literal segment exists (e.g. /{tenantId}/...)
- Use Angular .service suffix when resolving tag file paths in tags-split mode
- Add shouldSplitQueryKey invalidation test fixture
- Remove orphaned angular/multi-content-query-params snapshots from unrelated branch

Signed-off-by: jaery <jaeryong95@gmail.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

♻️ Duplicate comments (2)
packages/core/src/writers/split-tags-mode.ts (1)

103-115: ⚠️ Potential issue | 🟠 Major

Handle explicit file targets before the tag-directory rewrite.

Lines 107-114 still treat any path.basename(resolvedPath) that matches a tag name as a tag directory. An explicit target like ./items/items therefore becomes .../items/items/items.ts (or .service.ts) instead of the requested file, and the fallback branch doubles paths that already end with the configured extension. Restrict the special case to dirname/<tag> and otherwise preserve the explicit file stem.

💡 Suggested change
           const resolvedPath = path.resolve(dirname, imp.importPath);
           const targetBasename = path.basename(resolvedPath);
+          const isTagDirectoryTarget =
+            tagNames.has(targetBasename) &&
+            path.dirname(resolvedPath) === dirname;

           let targetFile: string;
-          if (tagNames.has(targetBasename)) {
+          if (isTagDirectoryTarget) {
             // Target is a known tag directory. Use the real generated
             // filename which includes the Angular `.service` suffix when
             // applicable (e.g. dirname/health/health.service.ts).
             const tagFilename = targetBasename + serviceSuffix + extension;
             targetFile = path.join(resolvedPath, tagFilename);
           } else {
-            targetFile = resolvedPath + extension;
+            targetFile = resolvedPath.endsWith(extension)
+              ? resolvedPath
+              : resolvedPath + extension;
           }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/core/src/writers/split-tags-mode.ts` around lines 103 - 115, The
code currently treats any resolvedPath whose basename matches a tag name as a
tag-directory and rewrites it, which mangles explicit file targets; update the
logic in the block that sets targetFile (using resolvedPath, targetBasename,
tagNames, dirname, serviceSuffix, extension) so the special-case rewrite only
runs when the resolved path is an immediate child directory of dirname (i.e.,
path.dirname(resolvedPath) === dirname) and not when the import explicitly
targets a file stem; otherwise preserve the explicit stem and append extension
only if the resolvedPath does not already end with the configured extension or
serviceSuffix+extension.
packages/query/src/mutation-generator.ts (1)

136-146: ⚠️ Potential issue | 🟠 Major

Avoid the zero-arg fallback for routes that start with a path param.

For a template like /{tenantId}/pets/{petId}, needsQueryKeyFnCall() returns false, but getStaticRoutePrefix() also returns undefined, so Lines 239-240 emit get...QueryKey() again. That recreates the original TS2554/runtime bug, and when file is set Lines 499-502 may already have dropped the import for that symbol. Keep this branch on a template-aware broad invalidation path instead of falling back to the zero-arg call.

Also applies to: 162-169, 212-240, 499-502

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@packages/query/src/mutation-generator.ts` around lines 136 - 146,
getStaticRoutePrefix currently returns undefined for prefixes like "/" (routes
that start with a path param), which causes callers (e.g., needsQueryKeyFnCall
and the code that emits get...QueryKey()) to fall back to a zero-arg call and
reintroduce the TS2554/runtime bug; change getStaticRoutePrefix to return the
raw prefix (even "/" or other single-segment prefixes) instead of undefined so
template-starting routes stay on the template-aware broad invalidation path;
update the hasLiteralSegment logic in getStaticRoutePrefix so it does not treat
"/" as a guard to return undefined, and verify callers (needsQueryKeyFnCall and
the emission sites that previously fell back to zero-arg get...QueryKey()) will
now use the returned prefix rather than emitting the zero-arg call.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@packages/core/src/writers/split-tags-mode.ts`:
- Around line 103-115: The code currently treats any resolvedPath whose basename
matches a tag name as a tag-directory and rewrites it, which mangles explicit
file targets; update the logic in the block that sets targetFile (using
resolvedPath, targetBasename, tagNames, dirname, serviceSuffix, extension) so
the special-case rewrite only runs when the resolved path is an immediate child
directory of dirname (i.e., path.dirname(resolvedPath) === dirname) and not when
the import explicitly targets a file stem; otherwise preserve the explicit stem
and append extension only if the resolvedPath does not already end with the
configured extension or serviceSuffix+extension.

In `@packages/query/src/mutation-generator.ts`:
- Around line 136-146: getStaticRoutePrefix currently returns undefined for
prefixes like "/" (routes that start with a path param), which causes callers
(e.g., needsQueryKeyFnCall and the code that emits get...QueryKey()) to fall
back to a zero-arg call and reintroduce the TS2554/runtime bug; change
getStaticRoutePrefix to return the raw prefix (even "/" or other single-segment
prefixes) instead of undefined so template-starting routes stay on the
template-aware broad invalidation path; update the hasLiteralSegment logic in
getStaticRoutePrefix so it does not treat "/" as a guard to return undefined,
and verify callers (needsQueryKeyFnCall and the emission sites that previously
fell back to zero-arg get...QueryKey()) will now use the returned prefix rather
than emitting the zero-arg call.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 3d56f354-0ca3-46a7-924b-87bfbc5ec716

📥 Commits

Reviewing files that changed from the base of the PR and between a818da8 and c141e14.

📒 Files selected for processing (24)
  • packages/core/src/writers/split-tags-mode.ts
  • packages/query/src/mutation-generator.ts
  • tests/__snapshots__/react-query/invalidates-split-query-key/endpoints.ts
  • tests/__snapshots__/react-query/invalidates-split-query-key/model/cat.ts
  • tests/__snapshots__/react-query/invalidates-split-query-key/model/catType.ts
  • tests/__snapshots__/react-query/invalidates-split-query-key/model/createPetsBody.ts
  • tests/__snapshots__/react-query/invalidates-split-query-key/model/createPetsParams.ts
  • tests/__snapshots__/react-query/invalidates-split-query-key/model/createPetsSort.ts
  • tests/__snapshots__/react-query/invalidates-split-query-key/model/dachshund.ts
  • tests/__snapshots__/react-query/invalidates-split-query-key/model/dachshundBreed.ts
  • tests/__snapshots__/react-query/invalidates-split-query-key/model/dog.ts
  • tests/__snapshots__/react-query/invalidates-split-query-key/model/dogType.ts
  • tests/__snapshots__/react-query/invalidates-split-query-key/model/error.ts
  • tests/__snapshots__/react-query/invalidates-split-query-key/model/index.ts
  • tests/__snapshots__/react-query/invalidates-split-query-key/model/labradoodle.ts
  • tests/__snapshots__/react-query/invalidates-split-query-key/model/labradoodleBreed.ts
  • tests/__snapshots__/react-query/invalidates-split-query-key/model/listPetsParams.ts
  • tests/__snapshots__/react-query/invalidates-split-query-key/model/listPetsSort.ts
  • tests/__snapshots__/react-query/invalidates-split-query-key/model/pet.ts
  • tests/__snapshots__/react-query/invalidates-split-query-key/model/petCallingCode.ts
  • tests/__snapshots__/react-query/invalidates-split-query-key/model/petCountry.ts
  • tests/__snapshots__/react-query/invalidates-split-query-key/model/petWithTag.ts
  • tests/__snapshots__/react-query/invalidates-split-query-key/model/pets.ts
  • tests/configs/react-query.config.ts
✅ Files skipped from review due to trivial changes (21)
  • tests/snapshots/react-query/invalidates-split-query-key/model/createPetsBody.ts
  • tests/snapshots/react-query/invalidates-split-query-key/model/dachshundBreed.ts
  • tests/snapshots/react-query/invalidates-split-query-key/model/catType.ts
  • tests/snapshots/react-query/invalidates-split-query-key/model/dogType.ts
  • tests/snapshots/react-query/invalidates-split-query-key/model/cat.ts
  • tests/snapshots/react-query/invalidates-split-query-key/model/petCallingCode.ts
  • tests/snapshots/react-query/invalidates-split-query-key/model/pets.ts
  • tests/snapshots/react-query/invalidates-split-query-key/model/petWithTag.ts
  • tests/snapshots/react-query/invalidates-split-query-key/model/createPetsParams.ts
  • tests/snapshots/react-query/invalidates-split-query-key/model/error.ts
  • tests/snapshots/react-query/invalidates-split-query-key/model/dachshund.ts
  • tests/snapshots/react-query/invalidates-split-query-key/model/listPetsSort.ts
  • tests/snapshots/react-query/invalidates-split-query-key/model/dog.ts
  • tests/snapshots/react-query/invalidates-split-query-key/model/listPetsParams.ts
  • tests/snapshots/react-query/invalidates-split-query-key/model/labradoodle.ts
  • tests/snapshots/react-query/invalidates-split-query-key/model/petCountry.ts
  • tests/snapshots/react-query/invalidates-split-query-key/model/createPetsSort.ts
  • tests/snapshots/react-query/invalidates-split-query-key/model/pet.ts
  • tests/snapshots/react-query/invalidates-split-query-key/model/index.ts
  • tests/snapshots/react-query/invalidates-split-query-key/model/labradoodleBreed.ts
  • tests/snapshots/react-query/invalidates-split-query-key/endpoints.ts

@melloware melloware added the tanstack-query TanStack Query related issue label Apr 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

tanstack-query TanStack Query related issue

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug: mutationInvalidates generates broken code with react-query + tags-split mode

2 participants