Skip to content

Conversation

@ymc9
Copy link
Member

@ymc9 ymc9 commented Nov 5, 2025

Summary by CodeRabbit

  • New Features

    • Full Vue 3 integration for TanStack Query: model-aware hooks for queries (including infinite), mutations with optimistic updates and cache invalidation, and schema-driven utilities for Vue apps.
  • Chores

    • Package metadata and exports updated to surface Vue support and include package.json export.
    • Workspace catalog and dependency mappings updated to add Vue and register Vue integration.

Copilot AI review requested due to automatic review settings November 5, 2025 04:40
@coderabbitai
Copy link

coderabbitai bot commented Nov 5, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Walkthrough

Adds Vue 3 integration for the TanStack Query client: new src/vue.ts module and build entry, package export and dependency updates to surface Vue, a parameter rename in a utility, and workspace catalog addition for Vue.

Changes

Cohort / File(s) Summary
Package exports & deps
packages/clients/tanstack-query/package.json
Added exports "./vue" and "./package.json"; added @tanstack/vue-query and vue entries across dependencies/devDependencies/peerDependencies and peerDependenciesMeta.
Vue build entry
packages/clients/tanstack-query/tsup.config.ts
Added vue: 'src/vue.ts' entry to the tsup build configuration.
Vue implementation
packages/clients/tanstack-query/src/vue.ts
New Vue 3 integration: context providers, getQuerySettings, many model/schema types, model- and schema-scoped query/mutation hooks (including infinite queries), internal query/mutation helpers, optimistic updates, invalidation utilities, and re-exports (e.g., FetchFn).
React minor refactor
packages/clients/tanstack-query/src/react.ts
JSDoc deprecation link syntax updated; useInternalMutation now reads logging from useHooksContext() instead of directly from QuerySettingsContext.
Utility rename
packages/clients/tanstack-query/src/utils/common.ts
Renamed parameter makeUrl(url, ...)makeUrl(endpoint, ...) and switched base URL construction to use endpoint.
Workspace catalog
pnpm-workspace.yaml
Added vue entry (version 3.5.22) to the workspace catalog.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

  • Inspect src/vue.ts closely: types, hook signatures, query/mutation wiring, infinite query behavior, optimistic update correctness, and cache invalidation.
  • Verify makeUrl rename is applied consistently where used.
  • Confirm package exports and peerDependenciesMeta match built artifacts and runtime expectations.
  • Check useInternalMutation logging change in react.ts preserves previous behavior.

Poem

🐰 I hopped through code at break of dawn,
New Vue hooks stitched neatly on the lawn.
Queries chase carrots, mutations hum,
Cache and schema dancing, drum by drum.
A tiny hop — the package is reborn. 🥕

Pre-merge checks and finishing touches

✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat(tanstack): migrate vue query' clearly and specifically describes the main change—adding Vue integration to the TanStack Query client, which is the primary focus of this PR.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/tanstack-vue

📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0791443 and 77c8cb3.

📒 Files selected for processing (1)
  • packages/clients/tanstack-query/src/vue.ts (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
packages/clients/tanstack-query/src/vue.ts (3)
packages/clients/tanstack-query/src/utils/common.ts (10)
  • APIContext (111-126)
  • DEFAULT_QUERY_ENDPOINT (11-11)
  • ExtraQueryOptions (101-106)
  • ExtraMutationOptions (81-96)
  • getQueryKey (180-190)
  • makeUrl (211-223)
  • fetcher (128-159)
  • marshal (192-199)
  • setupInvalidation (234-255)
  • setupOptimisticUpdate (313-357)
packages/schema/src/schema.ts (2)
  • SchemaDef (10-18)
  • GetModels (109-109)
packages/common-helpers/src/lower-case-first.ts (1)
  • lowerCaseFirst (1-3)
⏰ 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). (3)
  • GitHub Check: build-test (20.x, sqlite)
  • GitHub Check: build-test (20.x, postgresql)
  • GitHub Check: claude-review
🔇 Additional comments (7)
packages/clients/tanstack-query/src/vue.ts (7)

1-55: LGTM: Imports and exports are well-structured.

The imports cover all necessary dependencies from TanStack Vue Query, ZenStack packages, and Vue core. The re-export of FetchFn and the VueQueryContextKey constant follow Vue best practices for dependency injection.


57-80: LGTM: Context management follows Vue patterns correctly.

The use of Vue's provide/inject API is correct, with appropriate default values and a clear deprecation path from provideHooksContext to provideQuerySettingsContext.


82-170: LGTM: Type definitions are comprehensive and correctly structured.

The type system properly constrains query and mutation options by omitting internally-managed properties (queryKey, initialPageParam, mutationFn). The ModelQueryHooks interface covers all CRUD operations with appropriate type safety.


172-261: LGTM: Hook factory functions are correctly implemented.

Both useClientQueries and useModelQueries properly construct hook objects for all CRUD operations. The case-insensitive model lookup and proper delegation to internal functions are correct.


263-290: LGTM: Query implementation correctly uses Vue reactivity.

The use of toValue() for unwrapping reactive values and the queryKey/queryFn pattern are correct. The signal handling enables proper request cancellation.


325-335: LGTM: Documentation correctly references Vue.

The documentation comments properly refer to "vue-query" rather than "react-query", which is appropriate for this Vue-specific implementation. This addresses the concerns from previous reviews.


336-406: LGTM: Mutation implementation is correct and feature-complete.

The mutation logic properly handles different HTTP methods, sets up cache invalidation and optimistic updates when enabled, and correctly handles read-back errors. The integration with TanStack Query's cache management is sound.


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

❤️ Share

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

@claude
Copy link

claude bot commented Nov 5, 2025

Claude finished @ymc9's task —— View job


PR Review: Vue.js TanStack Query Integration

I've reviewed this PR that adds Vue.js support to the TanStack Query integration package. Here's my comprehensive analysis:

Review Tasks:

  • Analyze changed files and new Vue implementation
  • Compare Vue implementation with existing React implementation
  • Check code quality and best practices
  • Identify potential bugs or issues
  • Assess performance considerations
  • Review security concerns
  • Evaluate test coverage needs
  • Provide comprehensive feedback

Code Quality & Best Practices ✅

Excellent implementation overall with strong consistency:

  1. Vue Composition API Usage: The implementation correctly uses Vue 3's Composition API with provide/inject, toValue(), and proper reactive handling
  2. Type Safety: Comprehensive TypeScript types that mirror the React implementation exactly
  3. API Consistency: The Vue hooks follow the same naming conventions and structure as React (useFindMany, useCreate, etc.)
  4. Dependency Injection: Proper use of Vue's provide/inject pattern for context management
  5. Reactivity Handling: Correct use of MaybeRefOrGetter and toValue() for reactive parameters

Architecture & Design ✅

Well-structured implementation that follows Vue patterns:

  1. Context Management:

    • Uses Vue's provide/inject instead of React Context
    • Provides both deprecated provideHooksContext and new provideQuerySettingsContext for backward compatibility
    • Proper default values in getQuerySettings()
  2. Hook Structure: Maintains identical API surface to React version while adapting to Vue patterns

  3. Shared Logic: Smart reuse of common utilities from ./utils/common.ts

Potential Issues & Improvements 🔍

  1. Missing Suspense Support:

    • React version includes Suspense hooks (useSuspenseFindUnique, useSuspenseFindMany, etc.)
    • Vue version lacks these - Vue 3 supports Suspense, so this is a missing feature parity issue
    • Impact: Vue users won't have access to Suspense-based data fetching patterns
  2. Type Import Inconsistency:

    // Vue version uses these types:
    type UseQueryReturnType, UseInfiniteQueryReturnType, UseMutationReturnType
    
    // React version uses these types:
    type UseQueryResult, UseInfiniteQueryResult, UseMutationResult

    Both should align with @tanstack/vue-query vs @tanstack/react-query conventions.

  3. Comment Inconsistency:

    • Line 321 in vue.ts: "Creates a react-query mutation" - should be "vue-query mutation"

Performance Considerations ✅

  1. Reactive Arguments: Proper handling of reactive arguments with toValue() prevents unnecessary re-renders
  2. Query Key Generation: Consistent with React implementation, ensuring proper caching
  3. Optimistic Updates: Full support for optimistic updates matching React functionality

Security Concerns ✅

  1. Data Serialization: Uses the same secure serialization/deserialization as React version
  2. Request Handling: Identical HTTP request patterns with proper error handling
  3. No Additional Attack Surface: Implementation doesn't introduce new security vectors

Missing Test Coverage ⚠️

Critical Gap: No test files found for the Vue implementation:

  • packages/clients/tanstack-query/src/vue.ts (401 lines) has no corresponding tests
  • React implementation likely has tests that should be mirrored for Vue
  • Recommendation: Add comprehensive test suite covering:
    • All hook functionality
    • Context provider behavior
    • Reactive parameter handling
    • Error scenarios
    • Integration with @tanstack/vue-query

Package Configuration ✅

  1. Export Structure: Properly configured dual exports for Vue and React
  2. Dependencies: Correct peer dependency setup with optional flags
  3. Build Configuration: tsup.config.ts correctly includes Vue entry point

Specific Code Issues

Line 321: Comment says "react-query" instead of "vue-query":

/**
 * Creates a react-query mutation  // ← Should be "vue-query mutation"

Recommendations

  1. Add Suspense Support: Implement useSuspense* hooks to match React feature parity
  2. Add Comprehensive Tests: Create test suite mirroring React implementation
  3. Fix Comment: Update mutation comment to reference "vue-query"
  4. Documentation: Consider adding Vue-specific usage examples

Summary

This is a high-quality implementation that successfully adapts the React TanStack Query integration to Vue 3. The code follows Vue best practices, maintains type safety, and provides feature parity with the React version (except for Suspense). The main concerns are missing Suspense support and lack of tests, which should be addressed before merging to production.

Overall Rating: ⭐⭐⭐⭐ (4/5) - Excellent implementation with minor gaps

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR adds Vue.js support to the @zenstackhq/tanstack-query package, extending its capabilities beyond React to support Vue applications. The implementation mirrors the existing React integration, providing comparable query and mutation hooks for Vue developers.

  • Added Vue.js adapter with full query and mutation hooks API
  • Refactored useInternalMutation in React to extract logging context properly
  • Updated parameter naming in makeUrl for consistency

Reviewed Changes

Copilot reviewed 6 out of 7 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
pnpm-workspace.yaml Added Vue 3.5.22 to the catalog
pnpm-lock.yaml Added dependencies for Vue and @tanstack/vue-query with their transitive dependencies
packages/clients/tanstack-query/tsup.config.ts Added Vue entry point for build configuration
packages/clients/tanstack-query/src/vue.ts New Vue adapter implementation with query hooks, mutations, and context providers
packages/clients/tanstack-query/src/utils/common.ts Renamed url parameter to endpoint in makeUrl for clarity
packages/clients/tanstack-query/src/react.ts Refactored to extract logging from context at function start; updated deprecated JSDoc link format
packages/clients/tanstack-query/package.json Added Vue exports, peer dependencies, and devDependencies
Files not reviewed (1)
  • pnpm-lock.yaml: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@claude
Copy link

claude bot commented Nov 5, 2025

Claude finished @ymc9's task —— View job


PR Review: Vue.js TanStack Query Integration

I've completed a comprehensive review of this PR that adds Vue.js support to the TanStack Query integration package.

Review Tasks:

  • Analyze changed files and new Vue implementation
  • Compare Vue implementation with existing React implementation
  • Check code quality and best practices
  • Identify potential bugs or issues
  • Assess performance considerations
  • Review security concerns
  • Evaluate test coverage needs
  • Provide comprehensive feedback

Code Quality & Best Practices ✅

Excellent implementation overall with strong consistency:

  1. Vue Composition API Usage: The implementation correctly uses Vue 3's Composition API with provide/inject, toValue(), and proper reactive handling
  2. Type Safety: Comprehensive TypeScript types that mirror the React implementation exactly
  3. API Consistency: The Vue hooks follow the same naming conventions and structure as React (useFindMany, useCreate, etc.)
  4. Dependency Injection: Proper use of Vue's provide/inject pattern for context management
  5. Reactivity Handling: Correct use of MaybeRefOrGetter and toValue() for reactive parameters

Architecture & Design ✅

Well-structured implementation that follows Vue patterns:

  1. Context Management:

    • Uses Vue's provide/inject instead of React Context
    • Provides both deprecated provideHooksContext and new provideQuerySettingsContext for backward compatibility
    • Proper default values in getQuerySettings()
  2. Hook Structure: Maintains identical API surface to React version while adapting to Vue patterns

  3. Shared Logic: Smart reuse of common utilities from ./utils/common.ts

Issues Found 🔍

1. Missing Suspense Support ⚠️

  • React version includes Suspense hooks (useSuspenseFindUnique, useSuspenseFindMany, etc.)
  • Vue version lacks these - Vue 3 supports Suspense, so this is a missing feature parity issue
  • Impact: Vue users won't have access to Suspense-based data fetching patterns

2. Documentation Error 🐛

  • Line 321 in vue.ts: Comment says "Creates a react-query mutation" - should be "vue-query mutation"
  • Also noted by the Copilot reviewer

3. Type Import Inconsistency 📝

// Vue version uses these types:
type UseQueryReturnType, UseInfiniteQueryReturnType, UseMutationReturnType

// React version uses these types:  
type UseQueryResult, UseInfiniteQueryResult, UseMutationResult

Both should align with @tanstack/vue-query vs @tanstack/react-query conventions.

Performance Considerations ✅

  1. Reactive Arguments: Proper handling of reactive arguments with toValue() prevents unnecessary re-renders
  2. Query Key Generation: Consistent with React implementation, ensuring proper caching
  3. Optimistic Updates: Full support for optimistic updates matching React functionality

Security Concerns ✅

  1. Data Serialization: Uses the same secure serialization/deserialization as React version
  2. Request Handling: Identical HTTP request patterns with proper error handling
  3. No Additional Attack Surface: Implementation doesn't introduce new security vectors

Missing Test Coverage ❌

Critical Gap: No test files found for the Vue implementation:

  • packages/clients/tanstack-query/src/vue.ts (401 lines) has no corresponding tests
  • React implementation has comprehensive tests in test/react-query.test.tsx
  • Recommendation: Add comprehensive test suite covering:
    • All hook functionality
    • Context provider behavior
    • Reactive parameter handling
    • Error scenarios
    • Integration with @tanstack/vue-query

Package Configuration ✅

  1. Export Structure: Properly configured dual exports for Vue and React
  2. Dependencies: Correct peer dependency setup with optional flags
  3. Build Configuration: tsup.config.ts correctly includes Vue entry point

Recommendations

  1. Add Suspense Support: Implement useSuspense* hooks to match React feature parity
  2. Add Comprehensive Tests: Create test suite mirroring React implementation
  3. Fix Documentation: Update line 321 comment to reference "vue-query"
  4. Documentation: Consider adding Vue-specific usage examples

Summary

This is a high-quality implementation that successfully adapts the React TanStack Query integration to Vue 3. The code follows Vue best practices, maintains type safety, and provides feature parity with the React version (except for Suspense). The main concerns are missing Suspense support and lack of tests, which should be addressed before merging to production.

Overall Rating: ⭐⭐⭐⭐ (4/5) - Excellent implementation with minor gaps


Copy link

@coderabbitai coderabbitai bot left a 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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/clients/tanstack-query/package.json (1)

75-89: Declare Vue as a peer dependency.

The Vue entry point imports vue, so consumers must supply it. Without declaring vue as a peer (and marking it optional like react), pnpm/yarn users will hit missing dependency errors or duplicate Vue installs. Please add vue to peerDependencies with a matching version range and mirror the optional meta entry.

     "peerDependencies": {
         "@tanstack/react-query": "^5.0.0",
         "@tanstack/vue-query": "^5.0.0",
-        "react": "^18 || ^19"
+        "react": "^18 || ^19",
+        "vue": "^3.5.0"
     },
     "peerDependenciesMeta": {
         "@tanstack/react-query": {
             "optional": true
         },
         "@tanstack/vue-query": {
             "optional": true
         },
-        "react": {
+        "react": {
             "optional": true
-        }
+        },
+        "vue": {
+            "optional": true
+        }
     }
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b9294bb and 23feaa2.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (6)
  • packages/clients/tanstack-query/package.json (3 hunks)
  • packages/clients/tanstack-query/src/react.ts (2 hunks)
  • packages/clients/tanstack-query/src/utils/common.ts (1 hunks)
  • packages/clients/tanstack-query/src/vue.ts (1 hunks)
  • packages/clients/tanstack-query/tsup.config.ts (1 hunks)
  • pnpm-workspace.yaml (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
packages/clients/tanstack-query/src/utils/common.ts (1)
packages/common-helpers/src/lower-case-first.ts (1)
  • lowerCaseFirst (1-3)
packages/clients/tanstack-query/src/vue.ts (4)
packages/clients/tanstack-query/src/utils/common.ts (10)
  • APIContext (111-126)
  • DEFAULT_QUERY_ENDPOINT (11-11)
  • ExtraQueryOptions (101-106)
  • ExtraMutationOptions (81-96)
  • getQueryKey (180-190)
  • makeUrl (211-223)
  • fetcher (128-159)
  • marshal (192-199)
  • setupInvalidation (234-255)
  • setupOptimisticUpdate (313-357)
packages/schema/src/schema.ts (2)
  • SchemaDef (10-18)
  • GetModels (109-109)
packages/orm/src/client/crud-types.ts (17)
  • FindUniqueArgs (669-671)
  • FindArgs (648-664)
  • CreateArgs (677-682)
  • CreateManyArgs (684-684)
  • CreateManyAndReturnArgs (686-692)
  • UpdateArgs (815-821)
  • UpdateManyArgs (823-826)
  • UpdateManyAndReturnArgs (828-834)
  • UpsertArgs (842-849)
  • DeleteArgs (961-966)
  • DeleteManyArgs (968-971)
  • CountArgs (977-982)
  • CountResult (988-998)
  • AggregateArgs (1004-1018)
  • AggregateResult (1044-1072)
  • GroupByArgs (1091-1108)
  • GroupByResult (1110-1144)
packages/common-helpers/src/lower-case-first.ts (1)
  • lowerCaseFirst (1-3)
🪛 Biome (2.1.2)
packages/clients/tanstack-query/src/react.ts

[error] 476-476: This hook is being called from a nested function, but all hooks must be called unconditionally from the top-level component.

This is the call path until the hook.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)

packages/clients/tanstack-query/src/vue.ts

[error] 177-177: This hook is being called from a nested function, but all hooks must be called unconditionally from the top-level component.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)


[error] 198-198: This hook is being called from a nested function, but all hooks must be called unconditionally from the top-level component.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)


[error] 202-202: This hook is being called from a nested function, but all hooks must be called unconditionally from the top-level component.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)


[error] 206-206: This hook is being called from a nested function, but all hooks must be called unconditionally from the top-level component.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)


[error] 210-210: This hook is being called from a nested function, but all hooks must be called unconditionally from the top-level component.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)


[error] 214-214: This hook is being called from a nested function, but all hooks must be called unconditionally from the top-level component.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)


[error] 218-218: This hook is being called from a nested function, but all hooks must be called unconditionally from the top-level component.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)


[error] 222-222: This hook is being called from a nested function, but all hooks must be called unconditionally from the top-level component.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)


[error] 226-226: This hook is being called from a nested function, but all hooks must be called unconditionally from the top-level component.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)


[error] 230-230: This hook is being called from a nested function, but all hooks must be called unconditionally from the top-level component.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)


[error] 234-234: This hook is being called from a nested function, but all hooks must be called unconditionally from the top-level component.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)


[error] 238-238: This hook is being called from a nested function, but all hooks must be called unconditionally from the top-level component.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)


[error] 242-242: This hook is being called from a nested function, but all hooks must be called unconditionally from the top-level component.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)


[error] 246-246: This hook is being called from a nested function, but all hooks must be called unconditionally from the top-level component.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)


[error] 250-250: This hook is being called from a nested function, but all hooks must be called unconditionally from the top-level component.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)


[error] 254-254: This hook is being called from a nested function, but all hooks must be called unconditionally from the top-level component.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)


[error] 258-258: This hook is being called from a nested function, but all hooks must be called unconditionally from the top-level component.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)


[error] 289-289: This hook is being called from a nested function, but all hooks must be called unconditionally from the top-level component.

This is the call path until the hook.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)


[error] 316-316: This hook is being called from a nested function, but all hooks must be called unconditionally from the top-level component.

This is the call path until the hook.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)


[error] 347-347: This hook is being called from a nested function, but all hooks must be called unconditionally from the top-level component.

This is the call path until the hook.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)


[error] 400-400: This hook is being called from a nested function, but all hooks must be called unconditionally from the top-level component.

This is the call path until the hook.

For React to preserve state between calls, hooks needs to be called unconditionally and always in the same order.
See https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level

(lint/correctness/useHookAtTopLevel)

⏰ 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). (4)
  • GitHub Check: Cleanup artifacts
  • GitHub Check: build-test (20.x, postgresql)
  • GitHub Check: build-test (20.x, sqlite)
  • GitHub Check: claude-review

@claude
Copy link

claude bot commented Nov 5, 2025

Claude Code is working…

I'll analyze this and get back to you.

View job run

@ymc9 ymc9 merged commit 9f530fd into dev Nov 5, 2025
4 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants