-
-
Notifications
You must be signed in to change notification settings - Fork 3.6k
feat(angular-query): move devtools to conditional sub-paths #9270
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
feat(angular-query): move devtools to conditional sub-paths #9270
Conversation
|
View your CI Pipeline Execution ↗ for commit 1f2db27
☁️ Nx Cloud last updated this comment at |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #9270 +/- ##
==========================================
+ Coverage 45.51% 45.75% +0.23%
==========================================
Files 209 213 +4
Lines 8379 8427 +48
Branches 1895 1913 +18
==========================================
+ Hits 3814 3856 +42
- Misses 4118 4124 +6
Partials 447 447 🚀 New features to boost your workflow:
|
… improves tree shaking and dependency injection
2cf432d to
cd70269
Compare
…ry-devtools-sub-path-imports # Conflicts: # examples/angular/devtools-panel/package.json # packages/angular-query-devtools-experimental/package.json
…hub.com:arnoud-dv/query into feature/angular-query-devtools-sub-path-imports
c2ebe03 to
b724764
Compare
b724764 to
e9055fb
Compare
053d604 to
c2600eb
Compare
695d33a to
d6f6fa3
Compare
…ry-devtools-sub-path-imports # Conflicts: # examples/angular/basic-persister/src/app/app.config.ts # examples/angular/devtools-panel/package.json # packages/angular-query-devtools-experimental/package.json # packages/angular-query-devtools-experimental/src/test-setup.ts # packages/angular-query-devtools-experimental/tsup.config.ts # packages/angular-query-experimental/package.json # packages/angular-query-experimental/src/__tests__/providers.test.ts # packages/angular-query-experimental/vite.config.ts # pnpm-lock.yaml
883e428 to
34323da
Compare
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.
Actionable comments posted: 41
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (6)
docs/framework/angular/reference/type-aliases/unusedskiptokenoptions.md (1)
24-26: Fix optional property syntax in auto-generated docs
In docs/framework/angular/reference/type-aliases/unusedskiptokenoptions.md, replace the invalid “optional queryFn:” with a proper TS optional property:- optional queryFn: Exclude<CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>['queryFn'], SkipToken | undefined>; + queryFn?: Exclude<CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>['queryFn'], SkipToken | undefined>;Update the docs generator/template to emit
queryFn?:instead of the “optional” prefix.docs/framework/angular/reference/functions/providetanstackquery.md (1)
54-60: Fix import (missing comma) and update withDevtools subpath per breaking change.
- Missing comma after withDevtools breaks copy/paste.
- withDevtools must be imported from the devtools subpath now.
Apply:
-import { - provideTanStackQuery, - withDevtools - QueryClient, -} from '@tanstack/angular-query-experimental' +import { + provideTanStackQuery, + QueryClient, +} from '@tanstack/angular-query-experimental' +import { withDevtools } from '@tanstack/angular-query-experimental/devtools'Optionally document prod-enabled import:
import { withDevtools } from '@tanstack/angular-query-experimental/devtools/production'packages/angular-query-experimental/src/inject-is-restoring.ts (1)
32-36: Annotate the return type to lock the public API.As written, the inferred return type is
unknown(due to the untyped token). Explicitly returnSignal<boolean>to stabilize the emitted types.-export function injectIsRestoring(options?: InjectIsRestoringOptions) { +export function injectIsRestoring(options?: InjectIsRestoringOptions): Signal<boolean> { !options?.injector && assertInInjectionContext(injectIsRestoring) const injector = options?.injector ?? inject(Injector) return injector.get(IS_RESTORING) }docs/framework/angular/devtools.md (1)
147-149: Type should beboolean, notBooleanUse the primitive type in docs to match TS best practices.
-- `initialIsOpen?: Boolean` +- `initialIsOpen?: boolean`examples/angular/devtools-panel/src/app/components/lazy-load-devtools-panel-example.component.ts (1)
48-59: Guard against undefined hostElement when toggling; add minimal error handling.
Effect may run beforedivEl()is set, passingundefinedtoinjectDevtoolsPanel.Apply:
readonly loadDevtoolsEffect = effect(() => { - if (this.devtools()) return - if (this.isOpen()) { + if (this.devtools()) return + if (!this.isOpen()) return + const host = this.divEl() + if (!host) return this.devtools.set( - import('@tanstack/angular-query-experimental/devtools-panel').then( - ({ injectDevtoolsPanel }) => - injectDevtoolsPanel(this.devToolsOptions, { - injector: this.injector, - }), - ), + import('@tanstack/angular-query-experimental/devtools-panel') + .then(({ injectDevtoolsPanel }) => + injectDevtoolsPanel(this.devToolsOptions, { injector: this.injector }), + ) + .catch((err) => { + console.error('Failed to load devtools panel', err) + throw err + }), ) - } + } })packages/angular-query-experimental/src/__tests__/inject-devtools-panel.test.ts (1)
52-54: Mocks are not cleared between tests; call counts will leak across specs.vi.restoreAllMocks() won’t reset vi.fn counters, causing toHaveBeenCalledTimes assertions to be order-dependent.
Apply this diff to reset counters reliably:
- afterEach(() => { - vi.restoreAllMocks() - }) + afterEach(() => { + vi.clearAllMocks() + vi.restoreAllMocks() + })
♻️ Duplicate comments (3)
docs/framework/angular/reference/interfaces/injectinfinitequeryoptions.md (1)
20-21: Same issue: update second “Defined in” link to TanStack org.Mirror the fix for the other link.
Apply:
-Defined in: [inject-infinite-query.ts:31](https://github.com/arnoud-dv/query/blob/main/packages/angular-query-experimental/src/inject-infinite-query.ts#L31) +Defined in: [inject-infinite-query.ts:31](https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/inject-infinite-query.ts#L31)docs/framework/angular/reference/type-aliases/definedcreatequeryresult.md (1)
18-19: Canonicalize the “Defined in” link (same issue as above).-Defined in: [types.ts:109](https://github.com/arnoud-dv/query/blob/main/packages/angular-query-experimental/src/types.ts#L109) +Defined in: [types.ts:109](https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/types.ts#L109)docs/framework/angular/reference/type-aliases/createqueryresult.md (1)
14-15: Update “Defined in” link to TanStack/query (same issue as above).-Defined in: [types.ts:104](https://github.com/arnoud-dv/query/blob/main/packages/angular-query-experimental/src/types.ts#L104) +Defined in: [types.ts:104](https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/types.ts#L104)
🧹 Nitpick comments (66)
docs/framework/angular/reference/interfaces/basemutationnarrowing.md (5)
10-11: Point “Defined in” to the canonical repo and pin to a commit to avoid link rot.If this page is autogenerated, please adjust the generator. For this instance, switching to TanStack is sufficient:
-Defined in: [types.ts:172](https://github.com/arnoud-dv/query/blob/main/packages/angular-query-experimental/src/types.ts#L172) +Defined in: [types.ts:172](https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/types.ts#L172)
48-49: Same canonical link fix for isError.-Defined in: [types.ts:195](https://github.com/arnoud-dv/query/blob/main/packages/angular-query-experimental/src/types.ts#L195) +Defined in: [types.ts:195](https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/types.ts#L195)
76-77: Same canonical link fix for isIdle.-Defined in: [types.ts:229](https://github.com/arnoud-dv/query/blob/main/packages/angular-query-experimental/src/types.ts#L229) +Defined in: [types.ts:229](https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/types.ts#L229)
104-105: Same canonical link fix for isPending.-Defined in: [types.ts:212](https://github.com/arnoud-dv/query/blob/main/packages/angular-query-experimental/src/types.ts#L212) +Defined in: [types.ts:212](https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/types.ts#L212)
132-133: Same canonical link fix for isSuccess.-Defined in: [types.ts:178](https://github.com/arnoud-dv/query/blob/main/packages/angular-query-experimental/src/types.ts#L178) +Defined in: [types.ts:178](https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/types.ts#L178)docs/framework/angular/reference/type-aliases/createinfinitequeryresult.md (1)
6-7: Enrich the DO NOT EDIT banner with provenance and regeneration hint.Helps future editors find the true source and the generator.
-<!-- DO NOT EDIT: this page is autogenerated from the type comments --> +<!-- DO NOT EDIT: autogenerated from packages/angular-query-experimental/src/types.ts (type comments) via scripts/generate-angular-docs. Edit the source and re-run docs generation. -->docs/framework/angular/reference/functions/mutationoptions.md (2)
39-41: Verify Angular Signals usage in the example.Angular typically uses
signal(0), notnew Signal(0). Please confirm and adjust to prevent confusing users.
47-53: Align default type parameter docs for TError.Here TError defaults to
Error, while the related interface page showsDefaultError. Please reconcile or explain the difference to avoid confusion.docs/framework/angular/reference/type-aliases/createmutationresult.md (1)
6-7: Autogen notice: add “how to regenerate” pointer.
Consider appending a short note or link to the docs build/generation instructions so contributors know where to make source edits and how to re-generate.docs/framework/angular/reference/functions/injectmutationstate.md (2)
35-38: Clarify parameter description foroptionsIt’s not “the Angular injector”; it’s an options object that may contain
injector.-The Angular injector to use. +Options for injection. Set `injector` to override the current injection context used by `inject()`.
11-15: Tighten signature formatting (remove dangling comma)Minor formatting polish in the code block.
function injectMutationState<TResult>( injectMutationStateFn, - options?, + options? ): Signal<TResult[]>docs/framework/angular/guides/query-cancellation.md (1)
63-74: LGTM on the language tag; minor axios example polish for consistency.The switch to ts is correct. Optional: return response.data to mirror the fetch example’s data-centric return.
Replace the example with:
const query = injectQuery(() => ({ queryKey: ['todos'], queryFn: async ({ signal }) => { const { data } = await axios.get('/todos', { signal }) return data }, }))packages/angular-query-experimental/eslint.config.js (1)
23-24: Whitelist API Extractor tags in jsdoc/check-tag-names
Detected@public(and similar) tags in several packages; add them viadefinedTagsto avoid bogus warnings:-'jsdoc/check-tag-names': ['warn'], +'jsdoc/check-tag-names': ['warn', { definedTags: ['public','beta','internal','alpha'] }],knip.json (1)
26-30: Include dev (non-production) entry points or explicitly ignore them to avoid false positives.
Only listing production subpaths may cause knip to flag dev-only exports as unused. Either add dev entries or mark them ignored.Apply one of the following diffs:
Option A — add dev entries:
"packages/angular-query-experimental": { "entry": [ + "src/devtools/index.ts", "src/devtools/production/index.ts", + "src/devtools-panel/index.ts", "src/devtools-panel/production/index.ts" ] }Option B — ignore dev paths instead:
"packages/angular-query-experimental": { - "entry": [ + "entry": [ "src/devtools/production/index.ts", "src/devtools-panel/production/index.ts" - ] + ], + "ignore": [ + "src/devtools/index.ts", + "src/devtools-panel/index.ts" + ] }docs/framework/angular/reference/type-aliases/createmutatefunction.md (1)
16-17: Stabilize “Defined in” links.Line-based links to main can rot after refactors. Prefer permalinks (commit SHA) or symbol anchors from the docs generator.
docs/framework/angular/reference/functions/providetanstackquery.md (2)
14-15: Use permalinks for “Defined in”.Line numbers on main are brittle. Switch to commit-sha URLs or generator-provided symbol anchors.
80-84: Minor grammar/style tweak.Hyphenate “lazy-loaded”; prefer “that” over “which”; tighten phrasing.
-Using an InjectionToken for the QueryClient is an advanced optimization which allows TanStack Query to be absent from the main application bundle. -This can be beneficial if you want to include TanStack Query on lazy loaded routes only while still sharing a `QueryClient`. - -Note that this is a small optimization and for most applications it's preferable to provide the `QueryClient` in the main application config. +Using an InjectionToken for the QueryClient is an advanced optimization that allows TanStack Query to be absent from the main application bundle. +This can be beneficial if you want to include TanStack Query only on lazy-loaded routes while still sharing a `QueryClient`. + +Note that this is a small optimization, and for most applications it's preferable to provide the `QueryClient` in the main application config.docs/framework/angular/reference/functions/injectisfetching.md (2)
14-15: Prefer permalink for “Defined in”.Avoid line-number drift by linking to a specific commit or a stable anchor.
19-19: Add terminating period.Finish the sentence for consistency with the rest of the page.
-Can be used for app-wide loading indicators +Can be used for app-wide loading indicators.docs/framework/angular/reference/type-aliases/definedinitialdataoptions.md (1)
18-19: Stabilize “Defined in” link.Switch to a commit permalink or generator anchor to prevent link rot.
docs/framework/angular/reference/interfaces/createqueryoptions.md (1)
10-11: Stabilize source link.Use a commit SHA or stable anchor for “Defined in”.
docs/framework/angular/reference/type-aliases/queriesresults.md (2)
38-38: Grammar nit
Use “type parameter” and end with a period.-QueriesResults reducer recursively maps type param to results +QueriesResults reducer recursively maps the type parameter to results.
36-37: Pin or stabilize “Defined in” links to avoid drift
Verified all current “Defined in” links point to existing files and valid line numbers. Using blob/main with explicit line anchors is brittle post-merge. Prefer GitHub permalinks pinned to a commit SHA or omit the line anchors entirely. Also update URLs to the canonical repository instead of the fork before publishing.docs/framework/angular/reference/type-aliases/undefinedinitialdataoptions.md (1)
15-16: Stabilize “Defined in” link target
Same suggestion as elsewhere: pin to a commit SHA or remove the L anchor to avoid future mismatches; switch to canonical repo before publish.Use the validation script shared in QueriesResults to check this link too.
docs/framework/angular/reference/interfaces/injectqueryoptions.md (1)
10-11: Consolidate and harden “Defined in” links
Both references should be pinned (commit permalink) or use anchor-less links; avoid linking to the fork for published docs.Re-run the cross-doc “Defined in” validator to ensure both anchors are within file bounds after any future refactors.
Also applies to: 20-21
docs/framework/angular/reference/functions/injectisrestoring.md (2)
14-15: Harden source link
Prefer commit-pinned permalink or omit the line anchor; update to canonical repo before publish.Covered by the shared validator script.
30-30: Tighten returns wording
Minor clarity/grammar improvement.-readonly signal with boolean that indicates whether a restore is in progress. +A read-only `Signal<boolean>` indicating whether a restore is in progress.docs/framework/angular/reference/interfaces/injectisfetchingoptions.md (1)
10-11: Stabilize both “Defined in” links
Same guidance: pin to commit or drop line anchors; switch to canonical repo for published docs.Use the shared validator to ensure anchors remain within bounds.
Also applies to: 20-21
packages/angular-query-experimental/src/inject-is-restoring.ts (1)
11-12: Doc nit: call out internal token name for debugging.Consider mentioning the concrete token description (e.g.,
tanstack.isRestoring) to make DI errors more actionable.packages/angular-query-experimental/src/devtools-panel/types.ts (1)
24-52: TightenhostElementtyping for better IntelliSense and safety.DevTools mounts into an HTML element; narrowing improves DX without breaking usage.
-export interface DevtoolsPanelOptions { +export interface DevtoolsPanelOptions { @@ - hostElement?: ElementRef + hostElement?: ElementRef<HTMLElement> }If you want to support raw elements too, widen to
ElementRef<HTMLElement> | HTMLElementand adapt the implementation accordingly.packages/angular-query-experimental/src/devtools-panel/stub.ts (1)
4-7: LGTM — minimal, tree-shakeable production stub.No side effects; signature matches the public type. Consider marking as pure, though not necessary:
-export const injectDevtoolsPanel: InjectDevtoolsPanel = () => ({ +/* @__PURE__ */ export const injectDevtoolsPanel: InjectDevtoolsPanel = () => ({ destroy: noop, })packages/angular-query-experimental/package.json (1)
99-101: Optional dep is correct; confirm TS type resolution UX.Moving
@tanstack/query-devtoolstooptionalDependenciesis right. Note: consumers importing only the main package won’t need it, but those importing/devtools(-panel)will need it for types too. Consider a short note in docs.docs/framework/angular/devtools.md (3)
31-39: Tighten production wording to avoid ambiguity about inclusion/exclusionMinor clarity tweak: explicitly tie inclusion to the production sub-path import.
Apply:
-Devtools are automatically excluded from production builds. However, it might be desirable to lazy load the devtools in production. +When imported from the main devtools path, devtools are automatically excluded from production builds. If you want them in production, you can still lazy load them via the production sub-path. -To use `withDevtools` in production builds, import using the `production` sub-path. The function exported from the production subpath is identical to the main one, but won't be excluded from production builds. +To use `withDevtools` in production builds, import from the `production` sub-path. The API is identical, but it won’t be excluded by production builds.
59-65: Polish phrasing for the environments noteSmall grammar/readability improvements.
-This is useful if you want to load devtools based on Angular environment configurations. E.g. you could set this to true when the application is running on your production build staging environment. +This is useful if you want to load devtools based on Angular environment configurations. For example, you could set this to true when the application is running in a staging environment for your production build.
112-116: Fix minor grammar“passed as parameter” → “passed as a parameter”.
-If you want to use an injectable such as a service in the callback you can use `deps`. The injected value will be passed as parameter to the callback function. +If you want to use an injectable such as a service in the callback, you can use `deps`. The injected value will be passed as a parameter to the callback function.docs/framework/angular/reference/functions/queryoptions.md (4)
37-40: Remove duplicated& object & objectfrom return typeLikely a generator artifact; it adds noise and no value.
-): Omit<CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryFn'> & - object & - object +): Omit<CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryFn'>Please also apply similar cleanup at Lines 98–103 and 160–161.
82-87: Duplicate sentence“The tagged query options.” is repeated twice.
The tagged query options. -The tagged query options.Apply the same dedup at Lines 147–150 and 205–208.
98-103: Return type cleanup (same issue as above)Duplicate
& object & object.-): OmitKeyof< - CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>, - 'queryFn' -> & - object & - object +): OmitKeyof<CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryFn'>Also confirm that
OmitKeyofis defined and linked in the reference.
160-161: Return type cleanup (same issue as above)Remove duplicate
& object & object.-): CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey> & object & object +): CreateQueryOptions<TQueryFnData, TError, TData, TQueryKey>examples/angular/query-options-from-a-service/src/app/app.config.ts (1)
8-8: Import updated to new subpath; consistent with the PR’s breaking change.Looks good. If you want to showcase DI-enabled options (new deps support), consider adding a brief example later, but not required for this PR.
examples/angular/auto-refetching/src/app/app.config.ts (1)
10-10: Import path move to devtools subpath looks correct.Matches the new API surface.
If you intend to keep devtools enabled in production for this example, consider switching to '@tanstack/angular-query-experimental/devtools/production' to align with the production variant.
examples/angular/simple/src/app/app.config.ts (1)
6-6: Import path update LGTM.Consistent with the new devtools subpath.
If you want this example’s production build to include only the production-safe variant, import from '@tanstack/angular-query-experimental/devtools/production'.
docs/framework/angular/reference/functions/provideangularquery.md (1)
38-40: Deprecation note is clear; consider adding “since” version.Optional: add “Deprecated since v5.x” to aid consumers scanning changelogs.
packages/angular-query-experimental/src/devtools/stub.ts (1)
1-7: Production stub is minimal and correctly typed; consider a tiny tweak for tree-shaking.Optional: mark the factory as pure to aid some bundlers.
Apply:
-export const withDevtools: WithDevtools = () => ({ +export const withDevtools: WithDevtools = /* @__PURE__ */ () => ({ ɵkind: 'Devtools', ɵproviders: [], })docs/framework/angular/reference/functions/injectquery.md (1)
128-130: Deduplicate repeated lines (“The query result.” and “See”).
Likely generator duplication.Apply:
- The query result. + The query result. -### See - -https://tanstack.com/query/latest/docs/framework/angular/guides/queries +### See + +https://tanstack.com/query/latest/docs/framework/angular/guides/queriesAnd later:
- The query result. + The query result. -### See - -https://tanstack.com/query/latest/docs/framework/angular/guides/queries +### See + +https://tanstack.com/query/latest/docs/framework/angular/guides/queriesAlso applies to: 139-146, 219-221, 235-237
packages/angular-query-experimental/src/index.ts (1)
50-61: Confirm intent to keep DeveloperToolsFeature at the root indexGiven devtools moved to subpaths, retaining
DeveloperToolsFeatureon the root may re-surface devtools naming in the top-level API. If intentional for BC, consider:
- Marking it deprecated in providers.ts, pointing to the devtools subpath.
- Optionally re-exporting (or aliasing) it from
devtoolsto fully decouple the root later.Pure type exports won’t affect tree‑shaking, so this is optional API hygiene.
docs/framework/angular/reference/type-aliases/developertoolsfeature.md (2)
16-16: Minor grammar tweak in source TSDoc (autogen)Prefer “a feature that enables developer tools.” Update the comment in providers.ts; this page is autogenerated.
21-21: Ensure “withDevtools” in See section autolinks to new subpath docsIf the dedicated page moved/was removed, adjust the doc generator so this resolves to
@tanstack/angular-query-experimental/devtools.packages/angular-query-experimental/src/__tests__/inject-devtools-panel.test.ts (5)
34-39: Avoid flaky reliance on vi.waitFor; prefer a stable waitFor import.Not all Vitest versions expose vi.waitFor. Import waitFor directly (from vitest or @testing-library/dom) to ensure portability.
Apply this diff:
- const waitForDevtoolsToBeCreated = async () => { - await vi.waitFor(() => { - expect(mocks.mockTanstackQueryDevtoolsPanel).toHaveBeenCalledTimes(1) - }) - } + const waitForDevtoolsToBeCreated = async () => { + await waitFor(() => { + expect(mocks.mockTanstackQueryDevtoolsPanel).toHaveBeenCalledTimes(1) + }) + }Add the import (outside this range):
import { waitFor } from 'vitest' // or: '@testing-library/dom'Confirm your Vitest version supports vi.waitFor; if not, prefer the import shown above.
98-118: Host element removal path covered; consider a second assertion.Nice coverage of reactive teardown. As a small improvement, assert that unmount is called exactly once to guard against duplicate registrations.
Apply this diff:
- expect(mockDevtoolsPanelInstance.unmount).toHaveBeenCalledTimes(1) + expect(mockDevtoolsPanelInstance.unmount).toHaveBeenCalledTimes(1) + expect(mocks.mockTanstackQueryDevtoolsPanel).toHaveBeenCalledTimes(1)
120-141: Also assert the argument passed to setClient.Verifying the payload catches regressions in client identity propagation.
Apply this diff:
- expect(mockDevtoolsPanelInstance.setClient).toHaveBeenCalledTimes(1) + expect(mockDevtoolsPanelInstance.setClient).toHaveBeenCalledTimes(1) + expect(mockDevtoolsPanelInstance.setClient).toHaveBeenLastCalledWith(expect.any(QueryClient))
143-164: Tighten assertion by checking the new errorTypes value.This helps ensure structural compatibility of the propagated array.
Apply this diff:
- expect(mockDevtoolsPanelInstance.setErrorTypes).toHaveBeenCalledTimes(1) + expect(mockDevtoolsPanelInstance.setErrorTypes).toHaveBeenCalledTimes(1) + expect(mockDevtoolsPanelInstance.setErrorTypes).toHaveBeenLastCalledWith([])
166-190: Verify onClose propagation by value.Asserting the function reference prevents accidental re-wrapping.
Apply this diff:
- expect(mockDevtoolsPanelInstance.setOnClose).toHaveBeenCalledTimes(1) + expect(mockDevtoolsPanelInstance.setOnClose).toHaveBeenCalledTimes(1) + expect(mockDevtoolsPanelInstance.setOnClose).toHaveBeenLastCalledWith(functionB)packages/angular-query-experimental/src/devtools/with-devtools.ts (2)
85-86: Consider adding a comment explaining the injector destruction check.The
injectorIsDestroyedflag is crucial for preventing operations after the injector is destroyed during async import. A brief comment would improve maintainability.+ // Track injector destruction to prevent operations after cleanup let injectorIsDestroyed = false inject(DestroyRef).onDestroy(() => (injectorIsDestroyed = true))
99-104: Consider memoizing the loadDevtools default logic.The
shouldLoadToolsSignalcomputed signal recreates the same conditional logic on each evaluation. While not a significant performance issue, the logic could be slightly cleaner.const shouldLoadToolsSignal = computed(() => { const { loadDevtools } = devtoolsOptions() - return typeof loadDevtools === 'boolean' - ? loadDevtools - : isDevMode() + return loadDevtools === 'auto' || loadDevtools === undefined + ? isDevMode() + : loadDevtools })packages/angular-query-experimental/src/devtools-panel/inject-devtools-panel.ts (1)
69-69: Consider providing more context in the error message.The error message could be more helpful by indicating which option to use for providing the QueryClient.
- if (!client) throw new Error('No QueryClient found') + if (!client) throw new Error('No QueryClient found. Provide one via options.client or ensure QueryClient is provided in the injection context.')packages/angular-query-experimental/src/__tests__/providers.test.ts (3)
133-139: De-flake: extract and reuse an async “flush env init” helperThe timer/import/tick sequence is verbose and duplicated. A single helper reduces noise and mistakes.
- TestBed.inject(ENVIRONMENT_INITIALIZER) - await vi.advanceTimersByTimeAsync(0) - TestBed.tick() - await vi.dynamicImportSettled() - TestBed.tick() - await vi.dynamicImportSettled() + TestBed.inject(ENVIRONMENT_INITIALIZER) + await flushDevtoolsInit()Add once near the top (outside the test) to support this change:
async function flushDevtoolsInit() { await vi.advanceTimersByTimeAsync(0) TestBed.tick() await vi.dynamicImportSettled() TestBed.tick() await vi.dynamicImportSettled() }
54-56: Cleanup timers and DOM between testsStay on the safe side: revert to real timers and remove any leftover devtools containers to avoid cross-test leakage.
afterEach(() => { vi.restoreAllMocks() + vi.useRealTimers() + document.querySelectorAll('.tsqd-parent-container')?.forEach((el) => el.remove()) })
400-407: Strengthen assertion: verify DOM mount/unmount alongside method callsAlso assert the container element is added/removed.
expect(mockDevtoolsInstance.mount).toHaveBeenCalledTimes(1) expect(mockDevtoolsInstance.unmount).toHaveBeenCalledTimes(0) + expect(document.querySelector('.tsqd-parent-container')).not.toBeNull() loadDevtools.set(false) TestBed.tick() expect(mockDevtoolsInstance.unmount).toHaveBeenCalledTimes(1) + expect(document.querySelector('.tsqd-parent-container')).toBeNull()docs/framework/angular/reference/functions/injectqueries.md (1)
12-15: Doc polish: replace “root0” with a meaningful param nameThe autogenerated “root0” is noisy. Consider updating the source TSDoc to name the destructured parameter (e.g., params: { combine?, queries }) so the docs render friendlier names.
docs/framework/angular/reference/functions/infinitequeryoptions.md (4)
29-37: Redundant “& object & object” in return typesDocs show a double object intersection; it’s noise and may confuse readers. Drop the duplicate “& object”.
Apply:
-): CreateInfiniteQueryOptions<...> & - object & - object +): CreateInfiniteQueryOptions<...> & objectand
-): CreateInfiniteQueryOptions<...> & - object & - object +): CreateInfiniteQueryOptions<...> & objectAlso applies to: 151-160
89-101: OmitKeyof overload: same redundant intersectionsSame duplication here; keep a single “& object”.
-): OmitKeyof<...> & - object & - object +): OmitKeyof<...> & object
70-73: Duplicate sentences in Returns sections“The tagged infinite query options.” appears twice per overload. Remove duplicates for readability.
-The tagged infinite query options. - The tagged infinite query options.Also applies to: 133-136, 193-196
14-17: Heading wording: use “Parameters” not “Param”Prefer consistent “Parameters” heading; current text repeats and is singular.
-## Param +## ParametersAlso applies to: 74-77, 137-140, 197-200
docs/framework/angular/reference/functions/injectinfinitequery.md (2)
71-74: Duplicate sentences in Returns sections“The infinite query result.” is repeated. Remove duplicates.
-The infinite query result. - The infinite query result.Also applies to: 130-133, 189-192
55-66: Heading wording and repetitionMultiple “### Param” sections; prefer “Parameters” once per overload with sub-bullets for each param.
-### Param +### ParametersAlso applies to: 114-125, 173-184
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
💡 Knowledge Base configuration:
- MCP integration is disabled by default for public repositories
- Jira integration is disabled by default for public repositories
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (107)
codecov.yml(0 hunks)docs/framework/angular/devtools.md(4 hunks)docs/framework/angular/guides/query-cancellation.md(1 hunks)docs/framework/angular/reference/functions/infinitequeryoptions.md(7 hunks)docs/framework/angular/reference/functions/injectinfinitequery.md(5 hunks)docs/framework/angular/reference/functions/injectisfetching.md(1 hunks)docs/framework/angular/reference/functions/injectismutating.md(1 hunks)docs/framework/angular/reference/functions/injectisrestoring.md(2 hunks)docs/framework/angular/reference/functions/injectmutation.md(2 hunks)docs/framework/angular/reference/functions/injectmutationstate.md(2 hunks)docs/framework/angular/reference/functions/injectqueries.md(1 hunks)docs/framework/angular/reference/functions/injectquery.md(4 hunks)docs/framework/angular/reference/functions/injectqueryclient.md(1 hunks)docs/framework/angular/reference/functions/mutationoptions.md(2 hunks)docs/framework/angular/reference/functions/provideangularquery.md(1 hunks)docs/framework/angular/reference/functions/provideisrestoring.md(1 hunks)docs/framework/angular/reference/functions/providequeryclient.md(1 hunks)docs/framework/angular/reference/functions/providetanstackquery.md(2 hunks)docs/framework/angular/reference/functions/queryfeature.md(1 hunks)docs/framework/angular/reference/functions/queryoptions.md(7 hunks)docs/framework/angular/reference/functions/withdevtools.md(0 hunks)docs/framework/angular/reference/index.md(2 hunks)docs/framework/angular/reference/interfaces/basemutationnarrowing.md(5 hunks)docs/framework/angular/reference/interfaces/basequerynarrowing.md(4 hunks)docs/framework/angular/reference/interfaces/createbasequeryoptions.md(1 hunks)docs/framework/angular/reference/interfaces/createinfinitequeryoptions.md(1 hunks)docs/framework/angular/reference/interfaces/createmutationoptions.md(1 hunks)docs/framework/angular/reference/interfaces/createqueryoptions.md(1 hunks)docs/framework/angular/reference/interfaces/devtoolsoptions.md(0 hunks)docs/framework/angular/reference/interfaces/injectinfinitequeryoptions.md(2 hunks)docs/framework/angular/reference/interfaces/injectisfetchingoptions.md(2 hunks)docs/framework/angular/reference/interfaces/injectismutatingoptions.md(2 hunks)docs/framework/angular/reference/interfaces/injectmutationoptions.md(2 hunks)docs/framework/angular/reference/interfaces/injectmutationstateoptions.md(2 hunks)docs/framework/angular/reference/interfaces/injectqueryoptions.md(2 hunks)docs/framework/angular/reference/interfaces/queryfeature.md(3 hunks)docs/framework/angular/reference/type-aliases/createbasemutationresult.md(2 hunks)docs/framework/angular/reference/type-aliases/createbasequeryresult.md(2 hunks)docs/framework/angular/reference/type-aliases/createinfinitequeryresult.md(2 hunks)docs/framework/angular/reference/type-aliases/createmutateasyncfunction.md(1 hunks)docs/framework/angular/reference/type-aliases/createmutatefunction.md(2 hunks)docs/framework/angular/reference/type-aliases/createmutationresult.md(2 hunks)docs/framework/angular/reference/type-aliases/createqueryresult.md(1 hunks)docs/framework/angular/reference/type-aliases/definedcreateinfinitequeryresult.md(2 hunks)docs/framework/angular/reference/type-aliases/definedcreatequeryresult.md(2 hunks)docs/framework/angular/reference/type-aliases/definedinitialdatainfiniteoptions.md(2 hunks)docs/framework/angular/reference/type-aliases/definedinitialdataoptions.md(2 hunks)docs/framework/angular/reference/type-aliases/developertoolsfeature.md(1 hunks)docs/framework/angular/reference/type-aliases/persistqueryclientfeature.md(1 hunks)docs/framework/angular/reference/type-aliases/queriesoptions.md(2 hunks)docs/framework/angular/reference/type-aliases/queriesresults.md(2 hunks)docs/framework/angular/reference/type-aliases/queryfeaturekind.md(0 hunks)docs/framework/angular/reference/type-aliases/queryfeatures.md(1 hunks)docs/framework/angular/reference/type-aliases/undefinedinitialdatainfiniteoptions.md(2 hunks)docs/framework/angular/reference/type-aliases/undefinedinitialdataoptions.md(1 hunks)docs/framework/angular/reference/type-aliases/unusedskiptokeninfiniteoptions.md(2 hunks)docs/framework/angular/reference/type-aliases/unusedskiptokenoptions.md(2 hunks)docs/framework/angular/reference/variables/queryfeatures.md(0 hunks)examples/angular/auto-refetching/src/app/app.config.ts(1 hunks)examples/angular/basic-persister/src/app/app.config.ts(1 hunks)examples/angular/basic/src/app/app.config.ts(1 hunks)examples/angular/devtools-panel/package.json(0 hunks)examples/angular/devtools-panel/src/app/components/basic-devtools-panel-example.component.ts(1 hunks)examples/angular/devtools-panel/src/app/components/lazy-load-devtools-panel-example.component.ts(2 hunks)examples/angular/infinite-query-with-max-pages/src/app/app.config.ts(1 hunks)examples/angular/optimistic-updates/src/app/app.config.ts(1 hunks)examples/angular/pagination/src/app/app.config.ts(1 hunks)examples/angular/query-options-from-a-service/src/app/app.config.ts(1 hunks)examples/angular/router/src/app/app.config.ts(1 hunks)examples/angular/rxjs/src/app/app.config.ts(1 hunks)examples/angular/simple/src/app/app.config.ts(1 hunks)knip.json(1 hunks)package.json(0 hunks)packages/angular-query-devtools-experimental/.attw.json(0 hunks)packages/angular-query-devtools-experimental/eslint.config.js(0 hunks)packages/angular-query-devtools-experimental/package.json(0 hunks)packages/angular-query-devtools-experimental/root.eslint.config.js(0 hunks)packages/angular-query-devtools-experimental/src/index.ts(0 hunks)packages/angular-query-devtools-experimental/src/inject-devtools-panel.ts(0 hunks)packages/angular-query-devtools-experimental/src/test-setup.ts(0 hunks)packages/angular-query-devtools-experimental/tsconfig.json(0 hunks)packages/angular-query-devtools-experimental/tsconfig.prod.json(0 hunks)packages/angular-query-devtools-experimental/tsup.config.ts(0 hunks)packages/angular-query-devtools-experimental/vite.config.ts(0 hunks)packages/angular-query-experimental/eslint.config.js(1 hunks)packages/angular-query-experimental/package.json(3 hunks)packages/angular-query-experimental/src/__tests__/inject-devtools-panel.test.ts(12 hunks)packages/angular-query-experimental/src/__tests__/providers.test.ts(5 hunks)packages/angular-query-experimental/src/devtools-panel/index.ts(1 hunks)packages/angular-query-experimental/src/devtools-panel/inject-devtools-panel.ts(1 hunks)packages/angular-query-experimental/src/devtools-panel/production/index.ts(1 hunks)packages/angular-query-experimental/src/devtools-panel/stub.ts(1 hunks)packages/angular-query-experimental/src/devtools-panel/types.ts(1 hunks)packages/angular-query-experimental/src/devtools/index.ts(1 hunks)packages/angular-query-experimental/src/devtools/production/index.ts(1 hunks)packages/angular-query-experimental/src/devtools/stub.ts(1 hunks)packages/angular-query-experimental/src/devtools/types.ts(1 hunks)packages/angular-query-experimental/src/devtools/with-devtools.ts(1 hunks)packages/angular-query-experimental/src/index.ts(1 hunks)packages/angular-query-experimental/src/infinite-query-options.ts(0 hunks)packages/angular-query-experimental/src/inject-infinite-query.ts(0 hunks)packages/angular-query-experimental/src/inject-is-mutating.ts(0 hunks)packages/angular-query-experimental/src/inject-is-restoring.ts(1 hunks)packages/angular-query-experimental/src/inject-mutation-state.ts(0 hunks)packages/angular-query-experimental/src/inject-mutation.ts(0 hunks)packages/angular-query-experimental/src/inject-queries.ts(0 hunks)packages/angular-query-experimental/src/inject-query-client.ts(0 hunks)
⛔ Files not processed due to max files limit (8)
- packages/angular-query-experimental/src/inject-query.ts
- packages/angular-query-experimental/src/providers.ts
- packages/angular-query-experimental/src/query-options.ts
- packages/angular-query-experimental/src/types.ts
- packages/angular-query-experimental/src/util/is-dev-mode/is-dev-mode.ts
- packages/angular-query-experimental/vite.config.ts
- packages/angular-query-persist-client/package.json
- scripts/publish.ts
💤 Files with no reviewable changes (25)
- docs/framework/angular/reference/functions/withdevtools.md
- examples/angular/devtools-panel/package.json
- packages/angular-query-devtools-experimental/tsconfig.json
- packages/angular-query-devtools-experimental/tsconfig.prod.json
- docs/framework/angular/reference/interfaces/devtoolsoptions.md
- packages/angular-query-experimental/src/inject-is-mutating.ts
- package.json
- packages/angular-query-devtools-experimental/eslint.config.js
- docs/framework/angular/reference/variables/queryfeatures.md
- packages/angular-query-experimental/src/inject-query-client.ts
- packages/angular-query-experimental/src/inject-infinite-query.ts
- packages/angular-query-devtools-experimental/src/inject-devtools-panel.ts
- packages/angular-query-experimental/src/infinite-query-options.ts
- packages/angular-query-experimental/src/inject-queries.ts
- codecov.yml
- packages/angular-query-devtools-experimental/src/test-setup.ts
- packages/angular-query-devtools-experimental/tsup.config.ts
- packages/angular-query-experimental/src/inject-mutation-state.ts
- packages/angular-query-experimental/src/inject-mutation.ts
- packages/angular-query-devtools-experimental/src/index.ts
- packages/angular-query-devtools-experimental/.attw.json
- docs/framework/angular/reference/type-aliases/queryfeaturekind.md
- packages/angular-query-devtools-experimental/root.eslint.config.js
- packages/angular-query-devtools-experimental/vite.config.ts
- packages/angular-query-devtools-experimental/package.json
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2025-08-19T03:18:18.303Z
Learnt from: oscartbeaumont
PR: TanStack/query#9564
File: packages/solid-query-devtools/src/production.tsx:2-3
Timestamp: 2025-08-19T03:18:18.303Z
Learning: In the solid-query-devtools package, the codebase uses a pattern of type-only default imports combined with typeof for component type annotations (e.g., `import type SolidQueryDevtoolsComp from './devtools'` followed by `typeof SolidQueryDevtoolsComp`). This pattern is consistently used across index.tsx and production.tsx files, and the maintainers prefer consistency over changing this approach.
Applied to files:
packages/angular-query-experimental/src/devtools/index.tspackages/angular-query-experimental/package.jsonpackages/angular-query-experimental/src/devtools-panel/types.tspackages/angular-query-experimental/src/devtools/types.tspackages/angular-query-experimental/src/index.ts
📚 Learning: 2025-09-02T17:57:33.139Z
Learnt from: TkDodo
PR: TanStack/query#9612
File: packages/query-async-storage-persister/src/asyncThrottle.ts:0-0
Timestamp: 2025-09-02T17:57:33.139Z
Learning: When importing from tanstack/query-core in other TanStack Query packages like query-async-storage-persister, a workspace dependency "tanstack/query-core": "workspace:*" needs to be added to the package.json.
Applied to files:
packages/angular-query-experimental/package.json
🧬 Code graph analysis (7)
packages/angular-query-experimental/src/devtools-panel/stub.ts (2)
packages/angular-query-experimental/src/devtools-panel/inject-devtools-panel.ts (1)
injectDevtoolsPanel(33-110)packages/angular-query-experimental/src/devtools-panel/types.ts (1)
InjectDevtoolsPanel(54-57)
packages/angular-query-experimental/src/devtools/stub.ts (2)
packages/angular-query-experimental/src/devtools/with-devtools.ts (1)
withDevtools(61-180)packages/angular-query-experimental/src/devtools/types.ts (1)
WithDevtools(104-107)
packages/angular-query-experimental/src/devtools-panel/inject-devtools-panel.ts (2)
packages/angular-query-experimental/src/devtools-panel/stub.ts (1)
injectDevtoolsPanel(5-7)packages/angular-query-experimental/src/devtools-panel/types.ts (3)
InjectDevtoolsPanel(54-57)DevtoolsPanelOptions(24-52)InjectDevtoolsPanelOptions(5-12)
packages/angular-query-experimental/src/devtools-panel/types.ts (1)
packages/angular-query-experimental/src/devtools-panel/index.ts (4)
InjectDevtoolsPanelOptions(4-4)DevtoolsPanelRef(5-5)DevtoolsPanelOptions(3-3)InjectDevtoolsPanel(2-2)
packages/angular-query-experimental/src/devtools/types.ts (3)
packages/angular-query-experimental/src/devtools/index.ts (4)
WithDevtoolsOptions(5-5)DevtoolsOptions(2-2)WithDevtoolsFn(4-4)WithDevtools(3-3)packages/angular-query-experimental/src/index.ts (1)
DeveloperToolsFeature(51-51)packages/angular-query-experimental/src/providers.ts (1)
DeveloperToolsFeature(158-158)
packages/angular-query-experimental/src/devtools/with-devtools.ts (3)
packages/angular-query-experimental/src/devtools/types.ts (4)
DevtoolsOptions(41-100)WithDevtools(104-107)WithDevtoolsFn(102-102)WithDevtoolsOptions(12-36)packages/angular-query-experimental/src/devtools/stub.ts (1)
withDevtools(4-7)packages/angular-query-experimental/src/providers.ts (1)
queryFeature(146-151)
packages/angular-query-experimental/src/__tests__/providers.test.ts (3)
packages/angular-query-experimental/src/providers.ts (1)
provideTanStackQuery(105-113)packages/angular-query-experimental/src/devtools/with-devtools.ts (1)
withDevtools(61-180)packages/angular-query-experimental/src/devtools/stub.ts (1)
withDevtools(4-7)
🪛 LanguageTool
docs/framework/angular/reference/functions/injectisrestoring.md
[grammar] ~30-~30: There might be a mistake here.
Context: ... Signal<boolean> readonly signal with boolean that indicates whether a restor...
(QB_NEW_EN)
[grammar] ~30-~30: There might be a mistake here.
Context: ...icates whether a restore is in progress.
(QB_NEW_EN)
docs/framework/angular/reference/type-aliases/developertoolsfeature.md
[grammar] ~16-~16: There might be a mistake here.
Context: ...a feature which enables developer tools. The type is used to describe the return ...
(QB_NEW_EN)
docs/framework/angular/reference/type-aliases/queriesresults.md
[grammar] ~38-~38: There might be a mistake here.
Context: ...62) QueriesResults reducer recursively maps type param to results ## Type Paramete...
(QB_NEW_EN)
docs/framework/angular/reference/functions/providetanstackquery.md
[grammar] ~80-~80: There might be a mistake here.
Context: ...absent from the main application bundle. This can be beneficial if you want to in...
(QB_NEW_EN)
docs/framework/angular/devtools.md
[grammar] ~112-~112: There might be a mistake here.
Context: ...eps`. The injected value will be passed as parameter to the callback function. Th...
(QB_NEW_EN)
docs/framework/angular/reference/functions/infinitequeryoptions.md
Outdated
Show resolved
Hide resolved
| [`CreateInfiniteQueryOptions`](../../interfaces/createinfinitequeryoptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`, `TPageParam`\> & `object` & `object` | ||
|
|
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.
💡 Verification agent
🧩 Analysis chain
Validate doc kind path for CreateInfiniteQueryOptions
The link path uses “interfaces/createinfinitequeryoptions.md”. If CreateInfiniteQueryOptions is a type alias (not an interface), the path should be under type-aliases to avoid 404s/inconsistency. Please confirm the generator’s kind mapping.
You can scan for the emitted file to confirm:
Also applies to: 131-133, 191-193
🏁 Script executed:
#!/bin/bash
# Verify whether CreateInfiniteQueryOptions is documented under interfaces or type-aliases
fd -a createinfinitequeryoptions.md docs | sed 's|^\./||'
rg -n "createinfinitequeryoptions" -g "docs/**/*.md" -nLength of output: 2240
Update Angular docs CreateInfiniteQueryOptions path to type-aliases
Change all links in docs/framework/angular/reference from ../interfaces/createinfinitequeryoptions.md to ../type-aliases/createinfinitequeryoptions.md (in functions/infinitequeryoptions.md at lines 68, 131, 191; injectinfinitequery.md at line 175; and index.md at line 15).
🤖 Prompt for AI Agents
In docs/framework/angular/reference/functions/infinitequeryoptions.md around
lines 68-69, update the Markdown link target from
../../interfaces/createinfinitequeryoptions.md to
../../type-aliases/createinfinitequeryoptions.md; also update the same link in
docs/framework/angular/reference/functions/infinitequeryoptions.md at lines ~131
and ~191, in docs/framework/angular/reference/functions/injectinfinitequery.md
at line ~175, and in docs/framework/angular/reference/index.md at line ~15 so
all references point to ../type-aliases/createinfinitequeryoptions.md instead of
../interfaces/createinfinitequeryoptions.md.
docs/framework/angular/reference/functions/injectinfinitequery.md
Outdated
Show resolved
Hide resolved
| Defined in: [inject-is-mutating.ts:30](https://github.com/arnoud-dv/query/blob/main/packages/angular-query-experimental/src/inject-is-mutating.ts#L30) | ||
|
|
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.
💡 Verification agent
🧩 Analysis chain
Fix GitHub source link: points to personal fork; switch to TanStack (or pin a SHA).
Linking to a fork will 404 after merge and line anchors are brittle. Point to TanStack/query and ideally use a commit permalink.
Apply:
-Defined in: [inject-is-mutating.ts:30](https://github.com/arnoud-dv/query/blob/main/packages/angular-query-experimental/src/inject-is-mutating.ts#L30)
+Defined in: [inject-is-mutating.ts:30](https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/inject-is-mutating.ts#L30)Run to find other occurrences:
🏁 Script executed:
#!/bin/bash
rg -n "github\.com/arnoud-dv/query" docs/framework/angularLength of output: 15539
Replace all personal-fork GitHub links with TanStack/query permalinks
In every file under docs/framework/angular, update links of the form
https://github.com/arnoud-dv/query/blob/main/…
to
https://github.com/TanStack/query/blob/<commit-SHA>/…
(pinning a specific commit makes line anchors stable).
🤖 Prompt for AI Agents
In docs/framework/angular/reference/functions/injectismutating.md around lines
14 to 15, the file contains a personal-fork GitHub link
(https://github.com/arnoud-dv/query/...) that must be replaced with a
TanStack/query permalink pinned to a specific commit SHA
(https://github.com/TanStack/query/blob/<commit-SHA>/...), so update the URL to
point to the TanStack repo and include the exact commit SHA for the referenced
file/line to ensure stable anchors.
docs/framework/angular/reference/functions/injectmutationstate.md
Outdated
Show resolved
Hide resolved
| Defined in: [providers.ts:173](https://github.com/arnoud-dv/query/blob/main/packages/angular-query-experimental/src/providers.ts#L173) | ||
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.
💡 Verification agent
🧩 Analysis chain
Doc link points to author’s fork; switch to canonical repo before merge.
The “Defined in” URL uses arnoud-dv/query. Post-merge this will be wrong. Regenerate docs to link to TanStack/query (or use a repo slug in the generator config).
🏁 Script executed:
#!/bin/bash
# Find any docs still linking to the fork rather than the canonical repo
rg -n "github\.com/arnoud-dv/query" docsLength of output: 15521
Canonical repo slug misconfigured in generated docs
The “Defined in” links across many files still point to github.com/arnoud-dv/query. Update the docs-generator’s repo slug to TanStack/query and regenerate the documentation to correct all affected links.
🤖 Prompt for AI Agents
In docs/framework/angular/reference/type-aliases/queryfeatures.md around lines
14 to 15, the generated "Defined in" link uses the wrong GitHub repo slug
(github.com/arnoud-dv/query); update the docs-generator configuration to use the
correct repo slug "TanStack/query" and then regenerate the docs so all "Defined
in" links point to https://github.com/TanStack/query with correct file paths.
| Defined in: [infinite-query-options.ts:34](https://github.com/arnoud-dv/query/blob/main/packages/angular-query-experimental/src/infinite-query-options.ts#L34) | ||
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.
💡 Verification agent
❓ Verification inconclusive
Fix “Defined in” GitHub link to canonical repo
The link points to the contributor fork. This will break post-merge and harms docs credibility. Point to TanStack/query and adjust the generator so future autogeneration uses the canonical repo.
Apply this doc-only patch now (and fix the generator config to avoid re-introducing the fork URL):
-Defined in: [infinite-query-options.ts:34](https://github.com/arnoud-dv/query/blob/main/packages/angular-query-experimental/src/infinite-query-options.ts#L34)
+Defined in: [infinite-query-options.ts:34](https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/infinite-query-options.ts#L34)Fix “Defined in” link to canonical TanStack/query repo
In docs/framework/angular/reference/type-aliases/unusedskiptokeninfiniteoptions.md, update the “Defined in” link to point at TanStack/query instead of the contributor fork, and adjust the docs generator to use the canonical repo URL going forward.
-Defined in: [infinite-query-options.ts:34](https://github.com/arnoud-dv/query/blob/main/packages/angular-query-experimental/src/infinite-query-options.ts#L34)
+Defined in: [infinite-query-options.ts:34](https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/infinite-query-options.ts#L34)📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| Defined in: [infinite-query-options.ts:34](https://github.com/arnoud-dv/query/blob/main/packages/angular-query-experimental/src/infinite-query-options.ts#L34) | |
| Defined in: [infinite-query-options.ts:34](https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/infinite-query-options.ts#L34) |
🤖 Prompt for AI Agents
In
docs/framework/angular/reference/type-aliases/unusedskiptokeninfiniteoptions.md
around lines 30-31, the "Defined in" link points to a contributor fork; update
the URL to the canonical TanStack/query repo path for infinite-query-options.ts
(replace the forked GitHub URL with
https://github.com/TanStack/query/blob/main/.../infinite-query-options.ts#L34).
Also modify the docs generator configuration/template used to render "Defined
in" links so it uses the canonical repo base (https://github.com/TanStack/query)
instead of the contributor fork for future generated files.
docs/framework/angular/reference/type-aliases/unusedskiptokenoptions.md
Outdated
Show resolved
Hide resolved
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.
Review continued from previous batch...
| () => [`CreateInfiniteQueryOptions`](../../interfaces/createinfinitequeryoptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`, `TPageParam`\> | ||
|
|
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.
💡 Verification agent
🧩 Analysis chain
Validate doc kind path for CreateInfiniteQueryOptions
Link targets “interfaces/createinfinitequeryoptions.md”. Confirm actual location/kind to avoid 404s.
🏁 Script executed:
#!/bin/bash
fd -a createinfinitequeryoptions.md docs | sed 's|^\./||'
rg -n "CreateInfiniteQueryOptions" -g "docs/**/*.md" -nLength of output: 4118
Fix broken relative link for CreateInfiniteQueryOptions
In docs/framework/angular/reference/functions/injectinfinitequery.md (at lines 175–176), update the link to the interface’s actual location under reference/interfaces:
- [`CreateInfiniteQueryOptions`](../../interfaces/createinfinitequeryoptions.md)
+ [`CreateInfiniteQueryOptions`](../interfaces/createinfinitequeryoptions.md)📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| () => [`CreateInfiniteQueryOptions`](../../interfaces/createinfinitequeryoptions.md)\<`TQueryFnData`, `TError`, `TData`, `TQueryKey`, `TPageParam`\> | |
| () => [`CreateInfiniteQueryOptions`](../interfaces/createinfinitequeryoptions.md)<`TQueryFnData`, `TError`, `TData`, `TQueryKey`, `TPageParam`> |
🤖 Prompt for AI Agents
In docs/framework/angular/reference/functions/injectinfinitequery.md around
lines 175-176, the relative link to CreateInfiniteQueryOptions is incorrect
(uses ../../interfaces/...); update the link to point to the actual interface
location under reference/interfaces by changing the path to
../interfaces/createinfinitequeryoptions.md while preserving the link label and
type parameters.
…ry-devtools-sub-path-imports # Conflicts: # examples/angular/devtools-panel/package.json # packages/angular-query-devtools-experimental/package.json # packages/angular-query-devtools-experimental/tsconfig.json
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.
Actionable comments posted: 1
♻️ Duplicate comments (6)
docs/framework/angular/reference/type-aliases/createmutationresult.md (1)
16-17: Use a commit permalink for “Defined in” to avoid drift on main.Line numbers on
mainare unstable. Link to a specific commit produced by the docs generator.-Defined in: [types.ts:259](https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/types.ts#L259) +Defined in: [types.ts:259](https://github.com/TanStack/query/blob/<commit>/packages/angular-query-experimental/src/types.ts#L259)If your generator can inject the commit hash, replace
<commit>with that value at build time.docs/framework/angular/reference/functions/provideangularquery.md (1)
14-14: Canonical repo link looks good.Previous issue about pointing to a fork is resolved.
docs/framework/angular/reference/functions/mutationoptions.md (1)
52-53: Drop fragile line anchors from “Defined in” links.Anchors drift as files change. Link to the file path only. This echoes the prior review on similar links.
-Defined in: [mutation-options.ts:34](https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/mutation-options.ts#L34) +Defined in: [mutation-options.ts](https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/mutation-options.ts)-Defined in: [mutation-options.ts:48](https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/mutation-options.ts#L48) +Defined in: [mutation-options.ts](https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/mutation-options.ts)If this page is generated, update the template to omit line anchors globally.
Also applies to: 122-123
docs/framework/angular/reference/functions/infinitequeryoptions.md (3)
68-69: Fix path: CreateInfiniteQueryOptions lives under type-aliases, not interfaces.Update link target to avoid 404/inconsistency.
-[`CreateInfiniteQueryOptions`](../../interfaces/createinfinitequeryoptions.md)<TQueryFnData, TError, TData, TQueryKey, TPageParam> & `object` & `object` +[`CreateInfiniteQueryOptions`](../../type-aliases/createinfinitequeryoptions.md)<TQueryFnData, TError, TData, TQueryKey, TPageParam> & `object` & `object`
131-133: Fix path: CreateInfiniteQueryOptions link should target type-aliases.-`OmitKeyof`<[`CreateInfiniteQueryOptions`](../../interfaces/createinfinitequeryoptions.md)<TQueryFnData, TError, TData, TQueryKey, TPageParam>, `"queryFn"`> & `object` & `object` +`OmitKeyof`<[`CreateInfiniteQueryOptions`](../../type-aliases/createinfinitequeryoptions.md)<TQueryFnData, TError, TData, TQueryKey, TPageParam>, `"queryFn"`> & `object` & `object`
191-193: Fix path: CreateInfiniteQueryOptions link should target type-aliases.-[`CreateInfiniteQueryOptions`](../../interfaces/createinfinitequeryoptions.md)<TQueryFnData, TError, TData, TQueryKey, TPageParam> & `object` & `object` +[`CreateInfiniteQueryOptions`](../../type-aliases/createinfinitequeryoptions.md)<TQueryFnData, TError, TData, TQueryKey, TPageParam> & `object` & `object`
🧹 Nitpick comments (20)
docs/framework/angular/reference/type-aliases/createmutationresult.md (1)
6-7: Prefer a visible admonition over a hidden HTML comment for the autogeneration notice.Makes the guidance obvious to contributors browsing the docs site, and can point them to the true source-of-truth file.
-<!-- DO NOT EDIT: this page is autogenerated from the type comments --> +:::note +This page is autogenerated from source code comments. To propose changes, edit +`packages/angular-query-experimental/src/types.ts` and re-run the docs generator. +:::docs/framework/angular/reference/functions/provideangularquery.md (6)
36-36: Fix MD034: replace bare URL with a labeled link.Improves readability and satisfies markdownlint.
-https://tanstack.com/query/v5/docs/framework/angular/quick-start +[Angular quick start](https://tanstack.com/query/v5/docs/framework/angular/quick-start)
10-12: Show parameter type in the signature block for clarity.Keeps the snippet consistent with the typed sections below.
```ts -function provideAngularQuery(queryClient): Provider[] +function provideAngularQuery(queryClient: QueryClient): Provider[]--- `16-19`: **Tighten wording.** Minor grammar/style improvements. ```diff -Sets up providers necessary to enable TanStack Query functionality for Angular applications. - -Allows to configure a `QueryClient`. +Configure the Angular providers required to enable TanStack Query. + +Allows configuring a `QueryClient`.
30-33: Consistent type formatting and clearer return description.-`Provider`[] - -A set of providers to set up TanStack Query. +`Provider[]` + +An array of providers to set up TanStack Query.
1-4: Optional: add a deprecated badge via frontmatter (if supported).If your docs site renders a deprecation badge from frontmatter, set it here.
--- id: provideAngularQuery title: provideAngularQuery +deprecated: true ---
14-14: Use a permalink to a specific commit to avoid line-number drift.Linking to main with a line anchor can rot as files change. Prefer a blob URL pinned to the commit that generated these docs.
docs/framework/angular/reference/interfaces/queryfeature.md (2)
16-16: Type parameter constraint now references the symbol directly — LGTM.If a doc page exists for QueryFeatureKind, consider linking it; otherwise this is fine.
10-11: Pin "Defined in" links to commit SHAs or release tags (don’t link tomain).
Linking to the main branch is brittle for versioned docs — update the doc generator to emit GitHub permalinks (commit SHA or release tag) for the "Defined in" links. Affected example: docs/framework/angular/reference/interfaces/queryfeature.md (lines 10–11, 26, 36) and many other entries under docs/framework/*.docs/framework/angular/reference/functions/mutationoptions.md (6)
12-13: Use proper headings instead of bold for “Example”.Switching to headings both improves structure and fixes MD036 (no-emphasis-as-heading).
-**Example** +### Example(Repeat the same replacement for the second occurrence.)
Also applies to: 126-127
41-41: Disambiguate duplicate “Call Signature” headings.Unique headings avoid MD024 (duplicate heading) and make overloads clearer.
-## Call Signature +## Call Signature (with mutationKey)-## Call Signature +## Call Signature (without mutationKey)Also applies to: 111-111
37-40: Remove stray “Param” sections (redundant).These duplicate the detailed “Parameters” sections below and add noise.
-## Param - -The mutation options. - +<!-- removed: redundant summary -->(Apply to all three occurrences.)
Also applies to: 107-110, 177-179
103-106: Deduplicate trailing “Mutation options.” lines.These duplicates are likely a generator artifact and trip readers.
Mutation options. - -Mutation options. -(Apply to both overload sections.)
Also applies to: 173-176
10-35: Consolidate repeated example blocks or label them per overload.The same example appears three times; either keep one “Example” above and reference it, or label them “Example (with mutationKey)” and “Example (without mutationKey)” to avoid redundancy.
If autogenerated, I can help adjust the generator to emit a single example and headings keyed to overloads. Want me to open a follow-up?
Also applies to: 54-80, 124-150
81-101: Heading level consistency within overload sections.Consider using a consistent hierarchy per overload:
- H3: Type Parameters
- H3: Parameters
- H3: Returns
Right now sections mix H2/H3 and include stray “Param” blocks.
I can provide a batch diff once you confirm the preferred heading scheme for API pages.
Also applies to: 151-171
docs/framework/angular/reference/functions/infinitequeryoptions.md (5)
29-37: Remove spurious& object & objectfrom return type.This looks like generator noise; it adds no information and harms readability.
Apply:
> & - object & - object
89-101: Two issues: (1) OmitKeyof block readability; (2) trailing& object & object.
- Consider linking OmitKeyof if documented; otherwise keep as code span.
- Drop the redundant
& object & object.): OmitKeyof< CreateInfiniteQueryOptions< TQueryFnData, TError, TData, TQueryKey, TPageParam >, 'queryFn' > & - object & - object + // (no additional intersections)If an OmitKeyof doc exists, prefer:
-): OmitKeyof< +): [`OmitKeyof`](../../type-aliases/omitkeyof.md)<
152-160: Remove duplicate& object & objectintersection.Same generator artifact as above.
> & - object & - object
70-73: Deduplicate repeated sentence in Returns.“The tagged infinite query options.” appears twice in each block.
-The tagged infinite query options. The tagged infinite query options.Also applies to: 133-135, 193-195
14-17: Normalize headings: use “Parameters” consistently (not “Param”).Unify section headings to improve TOC and searchability.
Occurrences found:
- docs/framework/angular/reference/functions/queryoptions.md — lines 28, 88, 151, 209
- docs/framework/angular/reference/functions/mutationoptions.md — lines 37, 107, 177
- docs/framework/angular/reference/functions/injectquery.md — lines 43, 47, 131, 135, 223, 227, 315, 319
- docs/framework/angular/reference/functions/injectinfinitequery.md — lines 13, 17, 75, 79, 134, 138, 193, 197
- docs/framework/angular/reference/functions/infinitequeryoptions.md — lines 14, 74, 137, 197
Diff suggestion (apply to ## and ### headings):
-## Param +## Parameters -### Param +### Parameters
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (50)
docs/framework/angular/reference/functions/infinitequeryoptions.md(7 hunks)docs/framework/angular/reference/functions/injectinfinitequery.md(5 hunks)docs/framework/angular/reference/functions/injectisfetching.md(1 hunks)docs/framework/angular/reference/functions/injectismutating.md(1 hunks)docs/framework/angular/reference/functions/injectisrestoring.md(2 hunks)docs/framework/angular/reference/functions/injectmutation.md(2 hunks)docs/framework/angular/reference/functions/injectmutationstate.md(2 hunks)docs/framework/angular/reference/functions/injectqueries.md(1 hunks)docs/framework/angular/reference/functions/injectquery.md(4 hunks)docs/framework/angular/reference/functions/injectqueryclient.md(1 hunks)docs/framework/angular/reference/functions/mutationoptions.md(3 hunks)docs/framework/angular/reference/functions/provideangularquery.md(1 hunks)docs/framework/angular/reference/functions/provideisrestoring.md(1 hunks)docs/framework/angular/reference/functions/providequeryclient.md(1 hunks)docs/framework/angular/reference/functions/providetanstackquery.md(2 hunks)docs/framework/angular/reference/functions/queryfeature.md(1 hunks)docs/framework/angular/reference/functions/queryoptions.md(7 hunks)docs/framework/angular/reference/interfaces/basemutationnarrowing.md(5 hunks)docs/framework/angular/reference/interfaces/basequerynarrowing.md(4 hunks)docs/framework/angular/reference/interfaces/createbasequeryoptions.md(1 hunks)docs/framework/angular/reference/interfaces/createinfinitequeryoptions.md(1 hunks)docs/framework/angular/reference/interfaces/createmutationoptions.md(1 hunks)docs/framework/angular/reference/interfaces/createqueryoptions.md(1 hunks)docs/framework/angular/reference/interfaces/injectinfinitequeryoptions.md(2 hunks)docs/framework/angular/reference/interfaces/injectisfetchingoptions.md(2 hunks)docs/framework/angular/reference/interfaces/injectismutatingoptions.md(2 hunks)docs/framework/angular/reference/interfaces/injectmutationoptions.md(2 hunks)docs/framework/angular/reference/interfaces/injectmutationstateoptions.md(2 hunks)docs/framework/angular/reference/interfaces/injectqueryoptions.md(2 hunks)docs/framework/angular/reference/interfaces/queryfeature.md(3 hunks)docs/framework/angular/reference/type-aliases/createbasemutationresult.md(2 hunks)docs/framework/angular/reference/type-aliases/createbasequeryresult.md(2 hunks)docs/framework/angular/reference/type-aliases/createinfinitequeryresult.md(2 hunks)docs/framework/angular/reference/type-aliases/createmutateasyncfunction.md(1 hunks)docs/framework/angular/reference/type-aliases/createmutatefunction.md(2 hunks)docs/framework/angular/reference/type-aliases/createmutationresult.md(2 hunks)docs/framework/angular/reference/type-aliases/createqueryresult.md(1 hunks)docs/framework/angular/reference/type-aliases/definedcreateinfinitequeryresult.md(2 hunks)docs/framework/angular/reference/type-aliases/definedcreatequeryresult.md(2 hunks)docs/framework/angular/reference/type-aliases/definedinitialdatainfiniteoptions.md(2 hunks)docs/framework/angular/reference/type-aliases/definedinitialdataoptions.md(2 hunks)docs/framework/angular/reference/type-aliases/developertoolsfeature.md(1 hunks)docs/framework/angular/reference/type-aliases/persistqueryclientfeature.md(1 hunks)docs/framework/angular/reference/type-aliases/queriesoptions.md(2 hunks)docs/framework/angular/reference/type-aliases/queriesresults.md(2 hunks)docs/framework/angular/reference/type-aliases/queryfeatures.md(1 hunks)docs/framework/angular/reference/type-aliases/undefinedinitialdatainfiniteoptions.md(2 hunks)docs/framework/angular/reference/type-aliases/undefinedinitialdataoptions.md(1 hunks)docs/framework/angular/reference/type-aliases/unusedskiptokeninfiniteoptions.md(2 hunks)docs/framework/angular/reference/type-aliases/unusedskiptokenoptions.md(2 hunks)
✅ Files skipped from review due to trivial changes (12)
- docs/framework/angular/reference/type-aliases/createbasemutationresult.md
- docs/framework/angular/reference/interfaces/injectmutationstateoptions.md
- docs/framework/angular/reference/functions/injectismutating.md
- docs/framework/angular/reference/functions/injectisfetching.md
- docs/framework/angular/reference/functions/provideisrestoring.md
- docs/framework/angular/reference/functions/providequeryclient.md
- docs/framework/angular/reference/type-aliases/unusedskiptokenoptions.md
- docs/framework/angular/reference/interfaces/injectisfetchingoptions.md
- docs/framework/angular/reference/type-aliases/undefinedinitialdataoptions.md
- docs/framework/angular/reference/type-aliases/persistqueryclientfeature.md
- docs/framework/angular/reference/functions/injectquery.md
- docs/framework/angular/reference/interfaces/injectinfinitequeryoptions.md
🚧 Files skipped from review as they are similar to previous changes (32)
- docs/framework/angular/reference/type-aliases/queryfeatures.md
- docs/framework/angular/reference/functions/injectmutation.md
- docs/framework/angular/reference/interfaces/injectmutationoptions.md
- docs/framework/angular/reference/type-aliases/developertoolsfeature.md
- docs/framework/angular/reference/functions/injectmutationstate.md
- docs/framework/angular/reference/type-aliases/definedcreatequeryresult.md
- docs/framework/angular/reference/type-aliases/definedcreateinfinitequeryresult.md
- docs/framework/angular/reference/type-aliases/queriesoptions.md
- docs/framework/angular/reference/interfaces/injectqueryoptions.md
- docs/framework/angular/reference/type-aliases/createmutatefunction.md
- docs/framework/angular/reference/functions/queryfeature.md
- docs/framework/angular/reference/functions/injectisrestoring.md
- docs/framework/angular/reference/functions/providetanstackquery.md
- docs/framework/angular/reference/type-aliases/createinfinitequeryresult.md
- docs/framework/angular/reference/interfaces/injectismutatingoptions.md
- docs/framework/angular/reference/interfaces/createinfinitequeryoptions.md
- docs/framework/angular/reference/type-aliases/definedinitialdataoptions.md
- docs/framework/angular/reference/interfaces/createmutationoptions.md
- docs/framework/angular/reference/interfaces/basemutationnarrowing.md
- docs/framework/angular/reference/type-aliases/createmutateasyncfunction.md
- docs/framework/angular/reference/type-aliases/createqueryresult.md
- docs/framework/angular/reference/interfaces/createqueryoptions.md
- docs/framework/angular/reference/type-aliases/undefinedinitialdatainfiniteoptions.md
- docs/framework/angular/reference/functions/injectqueryclient.md
- docs/framework/angular/reference/interfaces/basequerynarrowing.md
- docs/framework/angular/reference/type-aliases/unusedskiptokeninfiniteoptions.md
- docs/framework/angular/reference/type-aliases/definedinitialdatainfiniteoptions.md
- docs/framework/angular/reference/functions/injectqueries.md
- docs/framework/angular/reference/functions/queryoptions.md
- docs/framework/angular/reference/functions/injectinfinitequery.md
- docs/framework/angular/reference/type-aliases/queriesresults.md
- docs/framework/angular/reference/type-aliases/createbasequeryresult.md
🧰 Additional context used
🪛 markdownlint-cli2 (0.17.2)
docs/framework/angular/reference/functions/mutationoptions.md
12-12: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
111-111: Multiple headings with the same content
(MD024, no-duplicate-heading)
126-126: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
docs/framework/angular/reference/functions/provideangularquery.md
36-36: Bare URL used
(MD034, no-bare-urls)
🔇 Additional comments (9)
docs/framework/angular/reference/interfaces/createbasequeryoptions.md (2)
6-7: LGTM: Autogenerated notice is correctly placed.The HTML comment won’t render and sits after the frontmatter, so it won’t break Docusaurus parsing.
10-11: Use a permalink and anchor the symbol (avoid fragile line numbers).Don't link to main with a hardcoded L21 — link to the exact commit and, if possible, the CreateBaseQueryOptions symbol. Verification: the suggested script produced no output / couldn't locate packages/angular-query-experimental/types.ts in the checked-out repo — manual verification required.
docs/framework/angular/reference/interfaces/queryfeature.md (1)
6-7: Autogenerated notice — good.Clear and helpful to avoid manual edits.
docs/framework/angular/reference/functions/mutationoptions.md (2)
6-7: LGTM: Autogenerated notice is appropriate.No action needed.
30-35: Replacenew Signal(...)withsignal(...)across docsdocs/framework/angular/reference/functions/mutationoptions.md (lines 30–35): change
idSignal = new Signal(0)→idSignal = signal(0). Scan the docs fornew Signal(and update occurrences; automated grep returned no matches, so manual verification required.docs/framework/angular/reference/functions/infinitequeryoptions.md (4)
40-41: Fixed: repo owner points to TanStack.“Defined in” now links to the canonical repo. LGTM.
103-104: Fixed: repo owner points to TanStack.Link target is correct. LGTM.
163-164: Fixed: repo owner points to TanStack.All “Defined in” links for this page now use the canonical repo. LGTM.
6-7: Keep the autogenerated notice; verify presence across Angular reference pagesEnsure the exact banner appears on all related function/type docs to prevent manual edits.
Automated search produced no results — run locally and list matching files:
rg -n --color=never -F '' docs/framework/angular/reference | awk -F: '{print $1}' | sort -u
| queries = inject(QueriesService) | ||
| idSignal = new Signal(0) | ||
| mutation = injectMutation(() => this.queries.updatePost(this.idSignal())) | ||
|
|
||
| mutation.mutate({ title: 'New Title' }) | ||
| ``` |
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.
Fix Angular Signals usage and top-level inject snippet.
Angular signals are created via the signal(...) function (not new Signal), and top-level variables should be const. Also drop this. in the top-level example.
Apply:
-queries = inject(QueriesService)
-idSignal = new Signal(0)
-mutation = injectMutation(() => this.queries.updatePost(this.idSignal()))
-
-mutation.mutate({ title: 'New Title' })
+const queries = inject(QueriesService)
+const id = signal(0)
+const mutation = injectMutation(() => queries.updatePost(id()))
+mutation.mutate({ title: 'New Title' })Optionally, show imports for clarity at the start of the code block:
import { inject, signal } from '@angular/core'🤖 Prompt for AI Agents
In docs/framework/angular/reference/functions/mutationoptions.md around lines 30
to 35, fix the top-level Angular Signals and inject usage: declare top-level
variables with const, replace the incorrect new Signal(0) with signal(0), remove
the unnecessary this. from the top-level injectMutation callback so it
references the top-level queries and idSignal (e.g., injectMutation(() =>
queries.updatePost(idSignal()))), and optionally add an import note to show
import { inject, signal } from '@angular/core' at the top of the example.
…-devtools-sub-path-imports
…hub.com:arnoud-dv/query into feature/angular-query-devtools-sub-path-imports # Conflicts: # docs/framework/angular/reference/functions/mutationoptions.md
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.
Actionable comments posted: 1
♻️ Duplicate comments (2)
docs/framework/angular/reference/functions/mutationoptions.md (2)
56-57: Drop fragile line anchors from “Defined in” links.Anchor
#L38will drift; link to the file path only. This mirrors an earlier review on similar links.-Defined in: [mutation-options.ts:38](https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/mutation-options.ts#L38) +Defined in: [mutation-options.ts](https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/mutation-options.ts)
130-131: Drop fragile line anchors from the second “Defined in” link.-Defined in: [mutation-options.ts:52](https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/mutation-options.ts#L52) +Defined in: [mutation-options.ts](https://github.com/TanStack/query/blob/main/packages/angular-query-experimental/src/mutation-options.ts)
🧹 Nitpick comments (10)
docs/framework/angular/reference/functions/mutationoptions.md (10)
12-13: Use a heading for “Example” to satisfy markdownlint (MD036).-**Example** +### Example
48-54: Render parameter type inline in the call signature.The parameter
optionsis printed untyped; show its type inside the signature for clarity.function mutationOptions<TData, TError, TVariables, TContext>( - options, -): WithRequired< - CreateMutationOptions<TData, TError, TVariables, TContext>, - 'mutationKey' -> + options: WithRequired< + CreateMutationOptions<TData, TError, TVariables, TContext>, + 'mutationKey' + > +): WithRequired< + CreateMutationOptions<TData, TError, TVariables, TContext>, + 'mutationKey' +>
78-86: Optional: consolidate the repeated example or add imports for reader clarity.This block duplicates the prior example; either reference the earlier example (“see Example above”) or add imports at the top of the code block for completeness.
89-107: Headings/readability: prefer “Parameters” once; avoid repetition.You have “## Param” earlier and “### Parameters” here. Use a single “## Parameters” section and keep the nested “#### options” under it.
-## Param +## Parameters
111-113: Remove duplicate sentence.“Mutation options.” appears twice.
Mutation options. - -Mutation options.
119-121: Avoid duplicate H2 titles (MD024).Rename the second “Call Signature” heading to distinguish overloads.
-## Call Signature +## Call Signature (overload 2)
121-128: Render parameter type inline in overload 2 signature.-function mutationOptions<TData, TError, TVariables, TContext>( - options, -): Omit< +function mutationOptions<TData, TError, TVariables, TContext>( + options: Omit< CreateMutationOptions<TData, TError, TVariables, TContext>, 'mutationKey' -> + > +): Omit< + CreateMutationOptions<TData, TError, TVariables, TContext>, + 'mutationKey' +>
134-136: Use a heading for “Example” (MD036).-**Example** +### Example
185-188: Remove duplicate sentence in overload 2.Mutation options. - -Mutation options.
189-191: Remove redundant “### Param” subsection.This repeats the earlier “Parameters” section and adds no new info.
-### Param - -The mutation options.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
docs/framework/angular/reference/functions/mutationoptions.md(3 hunks)packages/angular-query-experimental/src/mutation-options.ts(2 hunks)
✅ Files skipped from review due to trivial changes (1)
- packages/angular-query-experimental/src/mutation-options.ts
🧰 Additional context used
🪛 markdownlint-cli2 (0.17.2)
docs/framework/angular/reference/functions/mutationoptions.md
12-12: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
119-119: Multiple headings with the same content
(MD024, no-duplicate-heading)
134-134: Emphasis used instead of a heading
(MD036, no-emphasis-as-heading)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
- GitHub Check: Preview
- GitHub Check: Test
| export class QueriesService { | ||
| private http = inject(HttpClient) | ||
|
|
||
| updatePost(id: number) { | ||
| return mutationOptions({ | ||
| mutationFn: (post: Post) => Promise.resolve(post), | ||
| mutationKey: ['updatePost', id], | ||
| onSuccess: (newPost) => { | ||
| // ^? newPost: Post | ||
| this.queryClient.setQueryData(['posts', id], newPost) | ||
| }, | ||
| }) |
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.
💡 Verification agent
❓ Verification inconclusive
Example is missing the queryClient injection (will not compile).
You call this.queryClient.setQueryData(...) but never define/inject queryClient.
If the public API provides injectQueryClient(), add it; otherwise inject QueryClient directly. Please adjust the generator/template accordingly.
export class QueriesService {
private http = inject(HttpClient)
+ // If available:
+ // private queryClient = injectQueryClient()
+ // Else:
+ // private queryClient = inject(QueryClient)
updatePost(id: number) {
return mutationOptions({
mutationFn: (post: Post) => Promise.resolve(post),
mutationKey: ['updatePost', id],
onSuccess: (newPost) => {
// ^? newPost: Post
this.queryClient.setQueryData(['posts', id], newPost)
},
})
}
}Add missing queryClient injection (example won't compile as-is)
Calls this.queryClient.setQueryData(...) but queryClient isn't injected — add injectQueryClient() if available, otherwise inject(QueryClient).
File: docs/framework/angular/reference/functions/mutationoptions.md (lines 15-26)
export class QueriesService {
private http = inject(HttpClient)
+ // If available:
+ // private queryClient = injectQueryClient()
+ // Else:
+ // private queryClient = inject(QueryClient)
updatePost(id: number) {
return mutationOptions({
mutationFn: (post: Post) => Promise.resolve(post),
mutationKey: ['updatePost', id],
onSuccess: (newPost) => {
// ^? newPost: Post
this.queryClient.setQueryData(['posts', id], newPost)
},
})
}
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| export class QueriesService { | |
| private http = inject(HttpClient) | |
| updatePost(id: number) { | |
| return mutationOptions({ | |
| mutationFn: (post: Post) => Promise.resolve(post), | |
| mutationKey: ['updatePost', id], | |
| onSuccess: (newPost) => { | |
| // ^? newPost: Post | |
| this.queryClient.setQueryData(['posts', id], newPost) | |
| }, | |
| }) | |
| export class QueriesService { | |
| private http = inject(HttpClient) | |
| // If available: | |
| // private queryClient = injectQueryClient() | |
| // Else: | |
| // private queryClient = inject(QueryClient) | |
| updatePost(id: number) { | |
| return mutationOptions({ | |
| mutationFn: (post: Post) => Promise.resolve(post), | |
| mutationKey: ['updatePost', id], | |
| onSuccess: (newPost) => { | |
| // ^? newPost: Post | |
| this.queryClient.setQueryData(['posts', id], newPost) | |
| }, | |
| }) | |
| } | |
| } |
🤖 Prompt for AI Agents
In docs/framework/angular/reference/functions/mutationoptions.md around lines 15
to 26, the example calls this.queryClient.setQueryData(...) but never injects
queryClient, so the snippet won't compile; fix by adding a queryClient injection
on the class (e.g., add a private queryClient = injectQueryClient() if that
helper exists in this codebase, otherwise add private queryClient =
inject(QueryClient)) and ensure the class has the appropriate
import/availability for injectQueryClient or QueryClient so this.queryClient is
defined before use.
|
I see this is in active development, thank you for your work @arnoud-dv 💪🏼 |
0cad49d to
bc62387
Compare
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.
Actionable comments posted: 2
🧹 Nitpick comments (7)
packages/angular-query-experimental/src/__tests__/with-devtools.test.ts (7)
233-255: Flush before asserting reactive updates to avoid timing races.The panel may not be created yet, so these early expectations can be flaky. Flush deterministically, then assert.
Apply this diff:
@@ - TestBed.inject(ENVIRONMENT_INITIALIZER) - await vi.advanceTimersByTimeAsync(0) - - TestBed.tick() + TestBed.inject(ENVIRONMENT_INITIALIZER) + await waitForDevtoolsToSettle() expect(mockDevtoolsInstance.setErrorTypes).toHaveBeenCalledTimes(0)
289-296: Same here: ensure the panel exists before asserting client updates.- TestBed.inject(ENVIRONMENT_INITIALIZER) - await vi.advanceTimersByTimeAsync(0) - - TestBed.tick() + TestBed.inject(ENVIRONMENT_INITIALIZER) + await waitForDevtoolsToSettle()
321-326: Flush before position assertions.- TestBed.inject(ENVIRONMENT_INITIALIZER) - await vi.advanceTimersByTimeAsync(0) - - TestBed.tick() + TestBed.inject(ENVIRONMENT_INITIALIZER) + await waitForDevtoolsToSettle()
352-357: Flush before button position assertions.- TestBed.inject(ENVIRONMENT_INITIALIZER) - await vi.advanceTimersByTimeAsync(0) - - TestBed.tick() + TestBed.inject(ENVIRONMENT_INITIALIZER) + await waitForDevtoolsToSettle()
385-390: Flush before initialIsOpen assertions.- TestBed.inject(ENVIRONMENT_INITIALIZER) - await vi.advanceTimersByTimeAsync(0) - - TestBed.tick() + TestBed.inject(ENVIRONMENT_INITIALIZER) + await waitForDevtoolsToSettle()
415-421: Ensure devtools is mounted before asserting and then toggle.Without awaiting dynamic import settlement, the mount assertion is timing-sensitive.
- TestBed.inject(ENVIRONMENT_INITIALIZER) - await vi.advanceTimersByTimeAsync(0) - - expect(mockDevtoolsInstance.mount).toHaveBeenCalledTimes(1) + TestBed.inject(ENVIRONMENT_INITIALIZER) + await waitForDevtoolsToSettle() + + expect(mockDevtoolsInstance.mount).toHaveBeenCalledTimes(1)
55-59: Tidy teardown: clear pending timers before restoring real timers.Reduces cross‑test interference.
afterEach(() => { vi.restoreAllMocks() + vi.clearAllTimers() vi.useRealTimers() TestBed.resetTestingModule() })
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
packages/angular-query-experimental/src/__tests__/with-devtools.test.ts(1 hunks)packages/angular-query-experimental/src/mutation-options.ts(4 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- packages/angular-query-experimental/src/mutation-options.ts
🔇 Additional comments (4)
packages/angular-query-experimental/src/__tests__/with-devtools.test.ts (4)
61-151: Parametrized gating tests look solid.Good coverage across dev/prod and auto/explicit load paths.
210-231: Platform gating test is correct.Asserting no constructor call on server platform is the right invariant.
500-603: Deps injection tests are on point.Order fidelity, empty deps, and reactive updates are covered well.
136-142: Confirm TestBed.tick availability or add a fallback.
Search produced no matches for a TestBed.tick augmentation; confirm the test harness provides TestBed.tick. If it isn’t provided, update uses in packages/angular-query-experimental/src/tests/with-devtools.test.ts (lines 136–142, 233–235, 289–291, 321–323, 352–354, 385–387, 415–417) to a guarded fallback, e.g.:if (typeof (TestBed as any).tick === 'function') TestBed.tick();
else await vi.advanceTimersByTimeAsync(0);
| const mockIsDevMode = vi.mocked(isDevMode) | ||
|
|
||
| describe('withDevtools feature', () => { | ||
| beforeEach(() => { | ||
| vi.clearAllMocks() | ||
| vi.useFakeTimers() | ||
| }) |
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.
🛠️ Refactor suggestion
Extract a single “waitForDevtoolsToSettle” helper and use it here to avoid flakiness and duplication.
You’re manually sequencing timers/ticks/import-settling in several tests with slight variations, which risks racey assertions. Centralize this into one helper and call it consistently.
Apply these diffs:
@@
const mockIsDevMode = vi.mocked(isDevMode)
describe('withDevtools feature', () => {
beforeEach(() => {
vi.clearAllMocks()
vi.useFakeTimers()
})
@@
afterEach(() => {
vi.restoreAllMocks()
+ vi.clearAllTimers()
vi.useRealTimers()
TestBed.resetTestingModule()
})@@
-const mockIsDevMode = vi.mocked(isDevMode)
+const mockIsDevMode = vi.mocked(isDevMode)
+
+// Consolidated flush helper to make async devtools creation deterministic
+const waitForDevtoolsToSettle = async () => {
+ await vi.advanceTimersByTimeAsync(0)
+ if (typeof (TestBed as any).tick === 'function') {
+ ;(TestBed as any).tick()
+ }
+ await vi.dynamicImportSettled()
+ if (typeof (TestBed as any).tick === 'function') {
+ ;(TestBed as any).tick()
+ }
+ await vi.dynamicImportSettled()
+}@@
- TestBed.inject(ENVIRONMENT_INITIALIZER)
- await vi.advanceTimersByTimeAsync(0)
- TestBed.tick()
- await vi.dynamicImportSettled()
- TestBed.tick()
- await vi.dynamicImportSettled()
+ TestBed.inject(ENVIRONMENT_INITIALIZER)
+ await waitForDevtoolsToSettle()Also applies to: 136-142
🤖 Prompt for AI Agents
In packages/angular-query-experimental/src/__tests__/with-devtools.test.ts
around lines 47-53 and 136-142, tests manually sequence timers/ticks and import
settling in multiple places causing flakiness; extract a single
waitForDevtoolsToSettle helper that advances the fake timers, awaits any
necessary next-tick/promises, and returns once devtools-related async work is
settled, then replace the manual sequences in all tests with calls to this
helper to centralize timing logic and eliminate duplication.
| createEnvironmentInjector( | ||
| [ | ||
| withDevtools(() => ({ | ||
| loadDevtools: true, | ||
| })).ɵproviders, | ||
| ], | ||
| injector, | ||
| ) | ||
|
|
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.
🛠️ Refactor suggestion
Avoid private API access (ɵproviders) with createEnvironmentInjector.
You can pass EnvironmentProviders directly; no need to reach into the private ɵ property.
- createEnvironmentInjector(
- [
- withDevtools(() => ({
- loadDevtools: true,
- })).ɵproviders,
- ],
- injector,
- )
+ createEnvironmentInjector(
+ [
+ withDevtools(() => ({
+ loadDevtools: true,
+ })),
+ ],
+ injector,
+ )📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| createEnvironmentInjector( | |
| [ | |
| withDevtools(() => ({ | |
| loadDevtools: true, | |
| })).ɵproviders, | |
| ], | |
| injector, | |
| ) | |
| createEnvironmentInjector( | |
| [ | |
| withDevtools(() => ({ | |
| loadDevtools: true, | |
| })), | |
| ], | |
| injector, | |
| ) |
🤖 Prompt for AI Agents
In packages/angular-query-experimental/src/__tests__/with-devtools.test.ts
around lines 195 to 203, the test is accessing the private ɵproviders property
on the result of withDevtools; remove the private API usage and pass the
EnvironmentProviders directly to createEnvironmentInjector by replacing the
.ɵproviders access with the withDevtools(...) result itself (i.e., pass
withDevtools(() => ({ loadDevtools: true })) as an EnvironmentProvider or spread
it if needed) so createEnvironmentInjector receives public EnvironmentProviders
only.
…-devtools-sub-path-imports
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.
Actionable comments posted: 0
🧹 Nitpick comments (1)
packages/angular-query-experimental/vite.config.ts (1)
122-122: Broaden DTS exclude globs to avoid leaking test types.Current 'src/tests' may not exclude nested files. Use recursive patterns and common test filename globs.
- exclude: ['src/__tests__'], + exclude: [ + 'src/__tests__/**', + 'src/**/__tests__/**', + 'src/**/*.test.*', + 'src/**/*.spec.*' + ],
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (6)
docs/framework/angular/devtools.md(4 hunks)examples/angular/devtools-panel/package.json(0 hunks)knip.json(1 hunks)packages/angular-query-experimental/package.json(3 hunks)packages/angular-query-experimental/src/index.ts(1 hunks)packages/angular-query-experimental/vite.config.ts(1 hunks)
💤 Files with no reviewable changes (1)
- examples/angular/devtools-panel/package.json
🚧 Files skipped from review as they are similar to previous changes (4)
- packages/angular-query-experimental/package.json
- packages/angular-query-experimental/src/index.ts
- docs/framework/angular/devtools.md
- knip.json
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: Test
🔇 Additional comments (2)
packages/angular-query-experimental/vite.config.ts (2)
124-124: tsconfig path tweak LGTM.Relative path without './' works with both plugins; no action needed.
114-121: Verify exports wiring for devtools/devtools-panelpackages/angular-query-experimental/package.json contains ./devtools and ./devtools-panel exports and their /production variants, but the production "default" JS targets ./dist/devtools/index.mjs (and ./dist/devtools-panel/index.mjs) while the production "types" target ./dist/.../production/index.d.ts. Confirm the built JS and .d.ts exist at those exact paths and whether the split is intentional; if not, align exports (e.g., put both JS and .d.ts under the same production/ subdir or both under dist/...).
- Re-run import scan (previous rg failed due to the regex). Run:
jq '.exports' packages/angular-query-experimental/package.json rg -n "@tanstack/angular-query-experimental/devtools|@tanstack/angular-query-experimental/devtools-panel" -S -g '!packages/angular-query-experimental/**' | grep -v '/production' || true- Optional: consider moving stub.mjs into a production/ subdir for symmetry or update exports to clearly document the current layout.
…#9270) * feat(angular-query-devtools): move devtools to conditional sub-paths, improves tree shaking and dependency injection * Fix compatibility with moduleResolution node * ci: apply automated fixes * fix preview release for angular-query * Fix angular-query preview release * Revert some changes made obsolete by better Vite based alternative * Update export paths * Fix production exports and publishconfig * knip config * remove postpack * Generate API reference docs * type declarations in correct directory * Update documentation * knip config * Optional core devtools dependency * ci: apply automated fixes * regenerate api reference docs * ci: apply automated fixes * ci: apply automated fixes (attempt 2/3) * regenerate api reference docs * formatting * apply coderabbit suggestions * Improve unit tests * docs --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Breaking changes
Import paths
withDevtools moved to subpath
Most applications, to completely tree shake devtools from production builds
If you want to also use devtools in production builds
injectDevtoolsPanel moved to main package
Most applications, to completely tree shake devtools panel from production builds
If you want to also use devtools panel in production builds
angular-query-devtools-experimental package
After moving injectDevtoolsPanel to the main package, the angular devtools package is obsolete.
Improvements and fixes
Subpath exports
Experience with subpath exports paves the way to add functionality such as RxJs integration without needing to have the whole Angular TanStack Query package depend on RxJs.
Isolating devtools to a subpath reliably fixes #9078, where esbuild was generating chunks even when devtools were not used at all. While these chunks were not adding to the main bundle size it unnecessarily increased build time and deployment size.
Conditional exports
The devtools subpath exports further utilize conditional exports. For development builds, the function is exported normally. For production builds a tiny stub function is exported, resulting in excellent tree shaking without having to configure environments.
Dependency injection in the devtools callback
Fixes #8824 After no longer running the options computation function in the injection context it was no longer possible to use dependency injection to inject values. The withDevtools function now has a
depsoption to automatically inject dependencies and pass it as a parameter to the computation function. This solves this issue while not injecting a value each time the computation function is run which would be the case if the function would run in the injection context. This is similar to and internally usesdepson Angular'suseFactory.Adds a check if devtools were already provided
Fixes #8705
Summary by CodeRabbit
New Features
Documentation
Examples
Chores / Breaking Changes