Skip to content

WIP Devtools #259

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

Draft
wants to merge 12 commits into
base: main
Choose a base branch
from
Draft

WIP Devtools #259

wants to merge 12 commits into from

Conversation

samwillis
Copy link
Collaborator

This is a WIP devtools implementation based on the Tanstack Router dev tools.

It uses a WeakMap and polling to allow collections to register themselves but still be GCed by the browser. When a collection is opened in the right hand panel and hard ref is made, but that is disposed of then it's closed.

More is needed:

  • inspection of transactions
  • view synced data
  • filtering of root collections from live queries
  • live query timing
  • the actual query of a live query

Note that this branch currently has a copy of the router and query dev tools under /devtools-reference/, this is to enable AI agents to use them as a reference while implementing it. Buch of the groundwork was done with a Curser background agent, with Claude-4-sonnet Max.

Screen.Recording.2025-07-14.at.13.10.59.mp4

KyleAMathews and others added 12 commits July 10, 2025 10:22
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <[email protected]>
devtools ref

Complete TanStack DB Devtools implementation with React and Vue wrappers

Fix linting issues and add ReactDbDevtools to React example app

Complete DB devtools architecture implementation with summary

- Core devtools package with SolidJS UI components
- React and Vue integration packages
- Comprehensive collection and transaction monitoring
- Memory-efficient weak reference system
- Real-time performance tracking
- Build configurations and linting fixes
- Complete documentation of architecture and implementation

Fix React integration type conflicts

- Separate core devtools from SolidJS components
- Create pure React implementation of devtools UI
- Update package exports for better module resolution
- Resolve SolidJS/React JSX transpilation conflicts
- React devtools now uses core functionality with React components

Update devtools summary with React integration solution

- Document the layered architecture approach
- Explain how SolidJS/React conflicts were resolved
- Update status to reflect successful fixes
- Add technical details about the solution implementation

Implement TanStack pattern for React integration

- Follow TanStack Query/Router pattern with mount/unmount class
- Create TanstackDbDevtools class with SolidJS render and mount methods
- Update React wrapper to use core class instance
- Eliminate component duplication while reusing SolidJS components
- Clean architecture following established TanStack conventions

Update summary to reflect TanStack pattern implementation

- Document the mount/unmount class approach
- Explain how component duplication was eliminated
- Update technical challenges to reflect the DOM mounting solution
- Align documentation with established TanStack patterns

Add comprehensive devtools comparison and improvement roadmap

Co-authored-by: sam.willis <[email protected]>

feat: Transform DB devtools to match TanStack architecture

chore: Remove build artifacts from repository

- Remove packages/db-devtools/build/ folder from git
- Add 'build' to .gitignore to prevent future commits of build artifacts

fix: Resolve TypeScript build errors

- Update TypeScript target and lib to ES2021 for WeakRef support
- Fix missing type annotations for mutation parameters
- Remove duplicate Window interface declaration to resolve type conflicts
- Add proper type casting for window.__TANSTACK_DB_DEVTOOLS__ usage
- Fix Transaction updatedAt property (use createdAt as fallback)
- Add non-null assertions for selectedTransaction/selectedCollection
- Create missing tsconfig.prod.json for react-db-devtools package

All TypeScript build errors are now resolved and the packages build successfully.

fix: Resolve react-db-devtools TypeScript build errors

- Fix TypeScript module/moduleResolution compatibility by setting module: ESNext and moduleResolution: bundler in react-db-devtools tsconfig files
- Remove unused React import from ReactDbDevtools.tsx
- Both db-devtools and react-db-devtools packages now build successfully
- Fixed TypeScript configuration conflicts between root tsconfig and package-specific needs

fix: Correct package.json exports for db-devtools

- Fix exports to point to actual built files (index.js/index.cjs) instead of non-existent dev.js/dev.cjs
- Wrap exports under '.' field for proper ESM resolution
- Add proper type definitions for both import and require conditions
- Add package.json export for tooling compatibility

This resolves the Vite import error when using @tanstack/db-devtools in demo applications.

fix: Resolve SolidJS JSX Fragment compilation issues

- Replace JSX fragments (<>) with proper div wrapper to avoid SolidJS Fragment export issues
- Configure esbuild to use automatic JSX transform with solid-js as import source
- Remove JSX compilation warnings from build process
- Ensure proper SolidJS JSX runtime compatibility

This fixes the browser error: 'The requested module does not provide an export named Fragment'

fix: Switch to Vite build system for proper SolidJS JSX compilation

- Replace tsup with Vite build system using vite-plugin-solid for correct JSX handling
- Add vite-plugin-dts for TypeScript declaration generation
- Update package.json exports to point to dist/ directory instead of build/
- Remove non-existent @tanstack/query-core workspace dependency
- Configure proper SolidJS compilation that avoids Fragment and jsx runtime errors

This resolves the SolidJS JSX runtime errors in browser applications.
Copy link

changeset-bot bot commented Jul 14, 2025

⚠️ No Changeset found

Latest commit: 98626e7

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

Base automatically changed from refactor-example to main July 14, 2025 16:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants