From b9613818d9ba7d7e37fafd25a004d05d87a98714 Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Thu, 25 Sep 2025 15:12:33 +0200 Subject: [PATCH 1/6] feat: add start devtools --- .../start-basic-react-query/package.json | 7 +- .../src/routes/__root.tsx | 18 +- .../start-basic-react-query/vite.config.ts | 2 + package.json | 7 +- .../react-start-devtools/eslint.config.js | 32 + packages/react-start-devtools/package.json | 70 ++ .../src/ReactStartDevtools.tsx | 10 + packages/react-start-devtools/src/index.ts | 16 + packages/react-start-devtools/src/plugin.tsx | 6 + .../react-start-devtools/src/production.ts | 7 + .../react-start-devtools/tests/index.test.ts | 7 + .../react-start-devtools/tests/test-setup.ts | 1 + .../react-start-devtools/tsconfig.docs.json | 4 + packages/react-start-devtools/tsconfig.json | 7 + packages/react-start-devtools/vite.config.ts | 25 + .../solid-start-devtools/eslint.config.js | 10 + packages/solid-start-devtools/package.json | 64 + .../src/SolidStartDevtools.tsx | 10 + packages/solid-start-devtools/src/index.ts | 15 + packages/solid-start-devtools/src/plugin.tsx | 6 + .../solid-start-devtools/src/production.ts | 6 + .../solid-start-devtools/tests/index.test.ts | 7 + .../solid-start-devtools/tests/test-setup.ts | 1 + .../solid-start-devtools/tsconfig.docs.json | 4 + packages/solid-start-devtools/tsconfig.json | 8 + packages/solid-start-devtools/vite.config.ts | 25 + packages/start-devtools/CHANGELOG.md | 2 + packages/start-devtools/eslint.config.js | 10 + packages/start-devtools/package.json | 69 + packages/start-devtools/src/StartDevtools.tsx | 9 + packages/start-devtools/src/core.tsx | 11 + packages/start-devtools/src/index.ts | 10 + packages/start-devtools/src/production.ts | 5 + packages/start-devtools/src/styles/tokens.ts | 305 +++++ .../start-devtools/src/styles/use-styles.ts | 364 ++++++ packages/start-devtools/tests/index.test.ts | 7 + packages/start-devtools/tests/test-setup.ts | 1 + packages/start-devtools/tsconfig.docs.json | 4 + packages/start-devtools/tsconfig.json | 8 + packages/start-devtools/vite.config.ts | 25 + pnpm-lock.yaml | 1109 ++++++++++++++++- 41 files changed, 2266 insertions(+), 48 deletions(-) create mode 100644 packages/react-start-devtools/eslint.config.js create mode 100644 packages/react-start-devtools/package.json create mode 100644 packages/react-start-devtools/src/ReactStartDevtools.tsx create mode 100644 packages/react-start-devtools/src/index.ts create mode 100644 packages/react-start-devtools/src/plugin.tsx create mode 100644 packages/react-start-devtools/src/production.ts create mode 100644 packages/react-start-devtools/tests/index.test.ts create mode 100644 packages/react-start-devtools/tests/test-setup.ts create mode 100644 packages/react-start-devtools/tsconfig.docs.json create mode 100644 packages/react-start-devtools/tsconfig.json create mode 100644 packages/react-start-devtools/vite.config.ts create mode 100644 packages/solid-start-devtools/eslint.config.js create mode 100644 packages/solid-start-devtools/package.json create mode 100644 packages/solid-start-devtools/src/SolidStartDevtools.tsx create mode 100644 packages/solid-start-devtools/src/index.ts create mode 100644 packages/solid-start-devtools/src/plugin.tsx create mode 100644 packages/solid-start-devtools/src/production.ts create mode 100644 packages/solid-start-devtools/tests/index.test.ts create mode 100644 packages/solid-start-devtools/tests/test-setup.ts create mode 100644 packages/solid-start-devtools/tsconfig.docs.json create mode 100644 packages/solid-start-devtools/tsconfig.json create mode 100644 packages/solid-start-devtools/vite.config.ts create mode 100644 packages/start-devtools/CHANGELOG.md create mode 100644 packages/start-devtools/eslint.config.js create mode 100644 packages/start-devtools/package.json create mode 100644 packages/start-devtools/src/StartDevtools.tsx create mode 100644 packages/start-devtools/src/core.tsx create mode 100644 packages/start-devtools/src/index.ts create mode 100644 packages/start-devtools/src/production.ts create mode 100644 packages/start-devtools/src/styles/tokens.ts create mode 100644 packages/start-devtools/src/styles/use-styles.ts create mode 100644 packages/start-devtools/tests/index.test.ts create mode 100644 packages/start-devtools/tests/test-setup.ts create mode 100644 packages/start-devtools/tsconfig.docs.json create mode 100644 packages/start-devtools/tsconfig.json create mode 100644 packages/start-devtools/vite.config.ts diff --git a/examples/react/start-basic-react-query/package.json b/examples/react/start-basic-react-query/package.json index 33346b8c332..4a1a2ca5a09 100644 --- a/examples/react/start-basic-react-query/package.json +++ b/examples/react/start-basic-react-query/package.json @@ -9,12 +9,15 @@ "start": "vite start" }, "dependencies": { + "@tanstack/devtools-vite": "^0.3.3", + "@tanstack/react-devtools": "^0.7.0", "@tanstack/react-query": "^5.66.0", "@tanstack/react-query-devtools": "^5.66.0", "@tanstack/react-router": "^1.132.7", "@tanstack/react-router-ssr-query": "^1.132.7", "@tanstack/react-router-devtools": "^1.132.7", "@tanstack/react-start": "^1.132.9", + "@tanstack/react-start-devtools": "0.0.1", "react": "^19.0.0", "react-dom": "^19.0.0", "redaxios": "^0.5.1", @@ -25,11 +28,11 @@ "@types/react": "^19.0.8", "@types/react-dom": "^19.0.3", "@vitejs/plugin-react": "^4.3.4", - "postcss": "^8.5.1", "autoprefixer": "^10.4.20", + "postcss": "^8.5.1", "tailwindcss": "^3.4.17", "typescript": "^5.7.2", "vite": "^7.1.1", "vite-tsconfig-paths": "^5.1.4" } -} +} \ No newline at end of file diff --git a/examples/react/start-basic-react-query/src/routes/__root.tsx b/examples/react/start-basic-react-query/src/routes/__root.tsx index bc278f8036b..44c685b1a9a 100644 --- a/examples/react/start-basic-react-query/src/routes/__root.tsx +++ b/examples/react/start-basic-react-query/src/routes/__root.tsx @@ -7,8 +7,10 @@ import { createRootRouteWithContext, } from '@tanstack/react-router' import { ReactQueryDevtools } from '@tanstack/react-query-devtools' -import { TanStackRouterDevtools } from '@tanstack/react-router-devtools' +import { TanStackRouterDevtools, TanStackRouterDevtoolsPanel } from '@tanstack/react-router-devtools' import * as React from 'react' +import { TanStackDevtools } from '@tanstack/react-devtools' +import { StartDevtoolsPanel } from '@tanstack/react-start-devtools' import type { QueryClient } from '@tanstack/react-query' import { DefaultCatchBoundary } from '~/components/DefaultCatchBoundary' import { NotFound } from '~/components/NotFound' @@ -136,6 +138,20 @@ function RootDocument({ children }: { children: React.ReactNode }) {
{children} + + }, + { + name: 'React Router', + render: () => + }, + { + name: "Start", + render: () => + } + ]} /> diff --git a/examples/react/start-basic-react-query/vite.config.ts b/examples/react/start-basic-react-query/vite.config.ts index f10c86e79fc..0bdd46239ad 100644 --- a/examples/react/start-basic-react-query/vite.config.ts +++ b/examples/react/start-basic-react-query/vite.config.ts @@ -2,12 +2,14 @@ import { tanstackStart } from '@tanstack/react-start/plugin/vite' import { defineConfig } from 'vite' import tsConfigPaths from 'vite-tsconfig-paths' import viteReact from '@vitejs/plugin-react' +import { devtools } from '@tanstack/devtools-vite' export default defineConfig({ server: { port: 3000, }, plugins: [ + devtools(), tsConfigPaths({ projects: ['./tsconfig.json'], }), diff --git a/package.json b/package.json index a6af63a493c..3ae6e8bb96d 100644 --- a/package.json +++ b/package.json @@ -39,8 +39,8 @@ "@eslint-react/eslint-plugin": "^1.26.2", "@playwright/test": "^1.52.0", "@tanstack/config": "^0.16.1", - "@tanstack/react-query": "5.66.0", "@tanstack/query-core": "5.66.0", + "@tanstack/react-query": "5.66.0", "@types/node": "^22.10.2", "@types/react": "^19.0.8", "@types/react-dom": "^19.0.3", @@ -104,6 +104,9 @@ "@tanstack/solid-start-client": "workspace:*", "@tanstack/solid-start-server": "workspace:*", "@tanstack/start-plugin-core": "workspace:*", + "@tanstack/start-devtools": "workspace:*", + "@tanstack/start-react-devtools": "workspace:*", + "@tanstack/start-solid-devtools": "workspace:*", "@tanstack/start-client-core": "workspace:*", "@tanstack/start-server-core": "workspace:*", "@tanstack/start-storage-context": "workspace:*", @@ -115,4 +118,4 @@ "@tanstack/nitro-v2-vite-plugin": "workspace:*" } } -} +} \ No newline at end of file diff --git a/packages/react-start-devtools/eslint.config.js b/packages/react-start-devtools/eslint.config.js new file mode 100644 index 00000000000..3b8dc150431 --- /dev/null +++ b/packages/react-start-devtools/eslint.config.js @@ -0,0 +1,32 @@ +// @ts-check + +import pluginReact from '@eslint-react/eslint-plugin' +import pluginReactCompiler from 'eslint-plugin-react-compiler' +import pluginReactHooks from 'eslint-plugin-react-hooks' +import rootConfig from '../../eslint.config.js' + +export default [ + ...rootConfig, + { + files: ['**/*.{ts,tsx}'], + ...pluginReact.configs.recommended, + }, + { + plugins: { + 'react-hooks': pluginReactHooks, + 'react-compiler': pluginReactCompiler, + }, + rules: { + '@eslint-react/dom/no-missing-button-type': 'off', + 'react-compiler/react-compiler': 'error', + 'react-hooks/exhaustive-deps': 'error', + 'react-hooks/rules-of-hooks': 'error', + }, + }, + { + files: ['**/__tests__/**'], + rules: { + // 'react-compiler/react-compiler': 'off', + }, + }, +] diff --git a/packages/react-start-devtools/package.json b/packages/react-start-devtools/package.json new file mode 100644 index 00000000000..07c3ec13e7c --- /dev/null +++ b/packages/react-start-devtools/package.json @@ -0,0 +1,70 @@ +{ + "name": "@tanstack/react-start-devtools", + "version": "0.0.1", + "description": "React adapter for devtools for Start.", + "author": "Tanner Linsley", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/TanStack/start.git", + "directory": "packages/start" + }, + "homepage": "https://tanstack.com/start", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "keywords": [], + "type": "module", + "types": "dist/esm/index.d.ts", + "module": "dist/esm/index.js", + "exports": { + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + } + }, + "./production": { + "import": { + "types": "./dist/esm/production.d.ts", + "default": "./dist/esm/production.js" + } + }, + "./package.json": "./package.json" + }, + "sideEffects": false, + "engines": { + "node": ">=18" + }, + "files": [ + "dist/", + "src" + ], + "scripts": { + "clean": "premove ./build ./dist", + "lint:fix": "eslint ./src --fix", + "test:eslint": "eslint ./src", + "test:lib": "vitest", + "test:lib:dev": "pnpm test:lib --watch", + "test:types": "tsc", + "test:build": "publint --strict", + "build": "vite build" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "@types/react-dom": ">=16.8", + "react": ">=16.8", + "react-dom": ">=16.8" + }, + "dependencies": { + "@tanstack/devtools-utils": "^0.0.3", + "@tanstack/start-devtools": "workspace:*" + }, + "devDependencies": { + "@eslint-react/eslint-plugin": "^1.53.1", + "@vitejs/plugin-react": "^5.0.2", + "eslint-plugin-react-compiler": "19.1.0-rc.2", + "eslint-plugin-react-hooks": "^5.2.0" + } +} \ No newline at end of file diff --git a/packages/react-start-devtools/src/ReactStartDevtools.tsx b/packages/react-start-devtools/src/ReactStartDevtools.tsx new file mode 100644 index 00000000000..18849cfd2c6 --- /dev/null +++ b/packages/react-start-devtools/src/ReactStartDevtools.tsx @@ -0,0 +1,10 @@ + +import { createReactPanel } from '@tanstack/devtools-utils/react' +import { StartDevtoolsCore } from "@tanstack/start-devtools" +import type { DevtoolsPanelProps } from '@tanstack/devtools-utils/react'; + +export interface StartDevtoolsReactInit extends DevtoolsPanelProps { } + +const [StartDevtoolsPanel, StartDevtoolsPanelNoOp] = createReactPanel(StartDevtoolsCore) + +export { StartDevtoolsPanel, StartDevtoolsPanelNoOp } \ No newline at end of file diff --git a/packages/react-start-devtools/src/index.ts b/packages/react-start-devtools/src/index.ts new file mode 100644 index 00000000000..be08ae76a36 --- /dev/null +++ b/packages/react-start-devtools/src/index.ts @@ -0,0 +1,16 @@ +'use client' + +import * as Devtools from './ReactStartDevtools' +import * as plugin from './plugin' + +export const StartDevtoolsPanel = + process.env.NODE_ENV !== 'development' + ? Devtools.StartDevtoolsPanelNoOp + : Devtools.StartDevtoolsPanel + +export const startDevtoolsPlugin = + process.env.NODE_ENV !== 'development' + ? plugin.startDevtoolsNoOpPlugin + : plugin.startDevtoolsPlugin + +export type { StartDevtoolsReactInit } from './ReactStartDevtools' diff --git a/packages/react-start-devtools/src/plugin.tsx b/packages/react-start-devtools/src/plugin.tsx new file mode 100644 index 00000000000..f1073b77aee --- /dev/null +++ b/packages/react-start-devtools/src/plugin.tsx @@ -0,0 +1,6 @@ +import { createReactPlugin } from '@tanstack/devtools-utils/react' +import { StartDevtoolsPanel } from './ReactStartDevtools' + +const [startDevtoolsPlugin, startDevtoolsNoOpPlugin] = createReactPlugin("TanStack Start", StartDevtoolsPanel) + +export { startDevtoolsPlugin, startDevtoolsNoOpPlugin } \ No newline at end of file diff --git a/packages/react-start-devtools/src/production.ts b/packages/react-start-devtools/src/production.ts new file mode 100644 index 00000000000..0d434cb4412 --- /dev/null +++ b/packages/react-start-devtools/src/production.ts @@ -0,0 +1,7 @@ +'use client' + +export { StartDevtoolsPanel } from './ReactStartDevtools' + +export type { StartDevtoolsReactInit } from './ReactStartDevtools' + +export { startDevtoolsPlugin } from './plugin' diff --git a/packages/react-start-devtools/tests/index.test.ts b/packages/react-start-devtools/tests/index.test.ts new file mode 100644 index 00000000000..350ef3adeb2 --- /dev/null +++ b/packages/react-start-devtools/tests/index.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from 'vitest' + +describe('test suite', () => { + it('should work', () => { + expect(true).toBe(true) + }) +}) diff --git a/packages/react-start-devtools/tests/test-setup.ts b/packages/react-start-devtools/tests/test-setup.ts new file mode 100644 index 00000000000..a9d0dd31aa6 --- /dev/null +++ b/packages/react-start-devtools/tests/test-setup.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom/vitest' diff --git a/packages/react-start-devtools/tsconfig.docs.json b/packages/react-start-devtools/tsconfig.docs.json new file mode 100644 index 00000000000..2880b4dfa6a --- /dev/null +++ b/packages/react-start-devtools/tsconfig.docs.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "include": ["tests", "src"] +} diff --git a/packages/react-start-devtools/tsconfig.json b/packages/react-start-devtools/tsconfig.json new file mode 100644 index 00000000000..bf8f85d34c3 --- /dev/null +++ b/packages/react-start-devtools/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src", "eslint.config.js", "vite.config.ts", "tests"], + "compilerOptions": { + "jsx": "react" + } +} diff --git a/packages/react-start-devtools/vite.config.ts b/packages/react-start-devtools/vite.config.ts new file mode 100644 index 00000000000..e0c1757b6d5 --- /dev/null +++ b/packages/react-start-devtools/vite.config.ts @@ -0,0 +1,25 @@ +import { defineConfig, mergeConfig } from 'vitest/config' +import { tanstackViteConfig } from '@tanstack/config/vite' +import react from '@vitejs/plugin-react' +import packageJson from './package.json' + +const config = defineConfig({ + plugins: [react()], + test: { + name: packageJson.name, + dir: './', + watch: false, + environment: 'jsdom', + setupFiles: ['./tests/test-setup.ts'], + globals: true, + }, +}) + +export default mergeConfig( + config, + tanstackViteConfig({ + entry: ['./src/index.ts', './src/production.ts'], + srcDir: './src', + cjs: false, + }), +) diff --git a/packages/solid-start-devtools/eslint.config.js b/packages/solid-start-devtools/eslint.config.js new file mode 100644 index 00000000000..e472c69e733 --- /dev/null +++ b/packages/solid-start-devtools/eslint.config.js @@ -0,0 +1,10 @@ +// @ts-check + +import rootConfig from '../../eslint.config.js' + +export default [ + ...rootConfig, + { + rules: {}, + }, +] diff --git a/packages/solid-start-devtools/package.json b/packages/solid-start-devtools/package.json new file mode 100644 index 00000000000..3df43dfec69 --- /dev/null +++ b/packages/solid-start-devtools/package.json @@ -0,0 +1,64 @@ +{ + "name": "@tanstack/solid-start-devtools", + "version": "0.0.1", + "description": "Solid adapter for devtools for Start.", + "author": "Tanner Linsley", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/TanStack/start.git", + "directory": "packages/start" + }, + "homepage": "https://tanstack.com/start", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "keywords": [], + "type": "module", + "types": "dist/esm/index.d.ts", + "module": "dist/esm/index.js", + "exports": { + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + } + }, + "./production": { + "import": { + "types": "./dist/esm/production.d.ts", + "default": "./dist/esm/production.js" + } + }, + "./package.json": "./package.json" + }, + "sideEffects": false, + "engines": { + "node": ">=18" + }, + "files": [ + "dist/", + "src" + ], + "scripts": { + "clean": "premove ./build ./dist", + "lint:fix": "eslint ./src --fix", + "test:eslint": "eslint ./src", + "test:lib": "vitest", + "test:lib:dev": "pnpm test:lib --watch", + "test:types": "tsc", + "test:build": "publint --strict", + "build": "vite build" + }, + "peerDependencies": { + "solid-js": ">=1.9.7" + }, + "dependencies": { + "@tanstack/devtools-utils": "^0.0.3", + "@tanstack/start-devtools": "workspace:*" + }, + "devDependencies": { + "vite-plugin-solid": "^2.11.8" + } +} \ No newline at end of file diff --git a/packages/solid-start-devtools/src/SolidStartDevtools.tsx b/packages/solid-start-devtools/src/SolidStartDevtools.tsx new file mode 100644 index 00000000000..d5caf8fb16a --- /dev/null +++ b/packages/solid-start-devtools/src/SolidStartDevtools.tsx @@ -0,0 +1,10 @@ + +import { createSolidPanel } from "@tanstack/devtools-utils/solid" +import { StartDevtoolsCore } from "@tanstack/start-devtools" +import type { DevtoolsPanelProps } from "@tanstack/devtools-utils/solid"; + +const [StartDevtoolsPanel, StartDevtoolsPanelNoOp] = createSolidPanel(StartDevtoolsCore) +export interface StartDevtoolsSolidInit extends DevtoolsPanelProps { +} + +export { StartDevtoolsPanel, StartDevtoolsPanelNoOp } \ No newline at end of file diff --git a/packages/solid-start-devtools/src/index.ts b/packages/solid-start-devtools/src/index.ts new file mode 100644 index 00000000000..a00a5511903 --- /dev/null +++ b/packages/solid-start-devtools/src/index.ts @@ -0,0 +1,15 @@ + +import * as Devtools from './SolidStartDevtools' +import * as plugin from './plugin' + +export const StartDevtoolsPanel = + process.env.NODE_ENV !== 'development' + ? Devtools.StartDevtoolsPanelNoOp + : Devtools.StartDevtoolsPanel + +export const startDevtoolsPlugin = + process.env.NODE_ENV !== 'development' + ? plugin.startDevtoolsNoOpPlugin + : plugin.startDevtoolsPlugin + +export type { StartDevtoolsSolidInit } from './SolidStartDevtools' diff --git a/packages/solid-start-devtools/src/plugin.tsx b/packages/solid-start-devtools/src/plugin.tsx new file mode 100644 index 00000000000..d720a7396fa --- /dev/null +++ b/packages/solid-start-devtools/src/plugin.tsx @@ -0,0 +1,6 @@ +import { createSolidPlugin } from '@tanstack/devtools-utils/solid' +import { StartDevtoolsPanel } from './SolidStartDevtools' + +const [startDevtoolsPlugin, startDevtoolsNoOpPlugin] = createSolidPlugin("TanStack Start", StartDevtoolsPanel) + +export { startDevtoolsPlugin, startDevtoolsNoOpPlugin } \ No newline at end of file diff --git a/packages/solid-start-devtools/src/production.ts b/packages/solid-start-devtools/src/production.ts new file mode 100644 index 00000000000..6579ba08254 --- /dev/null +++ b/packages/solid-start-devtools/src/production.ts @@ -0,0 +1,6 @@ + +export { StartDevtoolsPanel } from './SolidStartDevtools' + +export type { StartDevtoolsSolidInit } from './SolidStartDevtools' + +export { startDevtoolsPlugin } from './plugin' diff --git a/packages/solid-start-devtools/tests/index.test.ts b/packages/solid-start-devtools/tests/index.test.ts new file mode 100644 index 00000000000..350ef3adeb2 --- /dev/null +++ b/packages/solid-start-devtools/tests/index.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from 'vitest' + +describe('test suite', () => { + it('should work', () => { + expect(true).toBe(true) + }) +}) diff --git a/packages/solid-start-devtools/tests/test-setup.ts b/packages/solid-start-devtools/tests/test-setup.ts new file mode 100644 index 00000000000..a9d0dd31aa6 --- /dev/null +++ b/packages/solid-start-devtools/tests/test-setup.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom/vitest' diff --git a/packages/solid-start-devtools/tsconfig.docs.json b/packages/solid-start-devtools/tsconfig.docs.json new file mode 100644 index 00000000000..2880b4dfa6a --- /dev/null +++ b/packages/solid-start-devtools/tsconfig.docs.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "include": ["tests", "src"] +} diff --git a/packages/solid-start-devtools/tsconfig.json b/packages/solid-start-devtools/tsconfig.json new file mode 100644 index 00000000000..3ee4c951e36 --- /dev/null +++ b/packages/solid-start-devtools/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src", "eslint.config.js", "vite.config.ts", "tests"], + "compilerOptions": { + "jsx": "preserve", + "jsxImportSource": "solid-js" + } +} diff --git a/packages/solid-start-devtools/vite.config.ts b/packages/solid-start-devtools/vite.config.ts new file mode 100644 index 00000000000..7473089b271 --- /dev/null +++ b/packages/solid-start-devtools/vite.config.ts @@ -0,0 +1,25 @@ +import { defineConfig, mergeConfig } from 'vitest/config' +import { tanstackViteConfig } from '@tanstack/config/vite' +import solid from 'vite-plugin-solid' +import packageJson from './package.json' + +const config = defineConfig({ + plugins: [solid()], + test: { + name: packageJson.name, + dir: './', + watch: false, + environment: 'jsdom', + setupFiles: ['./tests/test-setup.ts'], + globals: true, + }, +}) + +export default mergeConfig( + config, + tanstackViteConfig({ + entry: ['./src/index.ts', './src/production.ts'], + srcDir: './src', + cjs: false, + }), +) diff --git a/packages/start-devtools/CHANGELOG.md b/packages/start-devtools/CHANGELOG.md new file mode 100644 index 00000000000..04f439c113d --- /dev/null +++ b/packages/start-devtools/CHANGELOG.md @@ -0,0 +1,2 @@ +# @tanstack/start-devtools + \ No newline at end of file diff --git a/packages/start-devtools/eslint.config.js b/packages/start-devtools/eslint.config.js new file mode 100644 index 00000000000..e472c69e733 --- /dev/null +++ b/packages/start-devtools/eslint.config.js @@ -0,0 +1,10 @@ +// @ts-check + +import rootConfig from '../../eslint.config.js' + +export default [ + ...rootConfig, + { + rules: {}, + }, +] diff --git a/packages/start-devtools/package.json b/packages/start-devtools/package.json new file mode 100644 index 00000000000..508936cbaad --- /dev/null +++ b/packages/start-devtools/package.json @@ -0,0 +1,69 @@ +{ + "name": "@tanstack/start-devtools", + "version": "0.0.1", + "description": "Devtools for Start.", + "author": "Tanner Linsley", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/TanStack/start.git", + "directory": "packages/start" + }, + "homepage": "https://tanstack.com/start", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "keywords": [ + "devtools", + "start" + ], + "type": "module", + "types": "dist/esm/index.d.ts", + "module": "dist/esm/index.js", + "exports": { + ".": { + "import": { + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + } + }, + "./production": { + "import": { + "types": "./dist/esm/production.d.ts", + "default": "./dist/esm/production.js" + } + }, + "./package.json": "./package.json" + }, + "sideEffects": false, + "engines": { + "node": ">=18" + }, + "files": [ + "dist/", + "src" + ], + "scripts": { + "clean": "premove ./build ./dist", + "lint:fix": "eslint ./src --fix", + "test:eslint": "eslint ./src", + "test:lib": "vitest", + "test:lib:dev": "pnpm test:lib --watch", + "test:types": "tsc", + "test:build": "publint --strict", + "build": "vite build" + }, + "dependencies": { + "@tanstack/devtools-ui": "^0.3.4", + "@tanstack/devtools-utils": "^0.0.3", + "@tanstack/solid-store": "^0.7.5", + "clsx": "^2.1.1", + "dayjs": "^1.11.18", + "goober": "^2.1.16", + "solid-js": "^1.9.9" + }, + "devDependencies": { + "vite-plugin-solid": "^2.11.8" + } +} \ No newline at end of file diff --git a/packages/start-devtools/src/StartDevtools.tsx b/packages/start-devtools/src/StartDevtools.tsx new file mode 100644 index 00000000000..30f7695d5d1 --- /dev/null +++ b/packages/start-devtools/src/StartDevtools.tsx @@ -0,0 +1,9 @@ + + +export default function StartDevtools() { + return ( + +
+ + ) +} diff --git a/packages/start-devtools/src/core.tsx b/packages/start-devtools/src/core.tsx new file mode 100644 index 00000000000..0516c4086be --- /dev/null +++ b/packages/start-devtools/src/core.tsx @@ -0,0 +1,11 @@ + +import { constructCoreClass } from '@tanstack/devtools-utils/solid' +import { lazy } from 'solid-js' + +const Component = lazy(() => import('./StartDevtools')) + +export interface StartDevtoolsInit { } + +const [StartDevtoolsCore, StartDevtoolsCoreNoOp] = constructCoreClass(Component) + +export { StartDevtoolsCore, StartDevtoolsCoreNoOp } \ No newline at end of file diff --git a/packages/start-devtools/src/index.ts b/packages/start-devtools/src/index.ts new file mode 100644 index 00000000000..d6a9993189c --- /dev/null +++ b/packages/start-devtools/src/index.ts @@ -0,0 +1,10 @@ +'use client' + +import * as Devtools from './core' + +export const StartDevtoolsCore = + process.env.NODE_ENV !== 'development' + ? Devtools.StartDevtoolsCoreNoOp + : Devtools.StartDevtoolsCore + +export type { StartDevtoolsInit } from './core' diff --git a/packages/start-devtools/src/production.ts b/packages/start-devtools/src/production.ts new file mode 100644 index 00000000000..1ec1a938a00 --- /dev/null +++ b/packages/start-devtools/src/production.ts @@ -0,0 +1,5 @@ +'use client' + +export { StartDevtoolsCore } from './core' + +export type { StartDevtoolsInit } from './core' diff --git a/packages/start-devtools/src/styles/tokens.ts b/packages/start-devtools/src/styles/tokens.ts new file mode 100644 index 00000000000..9d247cf184c --- /dev/null +++ b/packages/start-devtools/src/styles/tokens.ts @@ -0,0 +1,305 @@ +export const tokens = { + colors: { + inherit: 'inherit', + current: 'currentColor', + transparent: 'transparent', + black: '#000000', + white: '#ffffff', + neutral: { + 50: '#f9fafb', + 100: '#f2f4f7', + 200: '#eaecf0', + 300: '#d0d5dd', + 400: '#98a2b3', + 500: '#667085', + 600: '#475467', + 700: '#344054', + 800: '#1d2939', + 900: '#101828', + }, + darkGray: { + 50: '#525c7a', + 100: '#49536e', + 200: '#414962', + 300: '#394056', + 400: '#313749', + 500: '#292e3d', + 600: '#212530', + 700: '#191c24', + 800: '#111318', + 900: '#0b0d10', + }, + gray: { + 50: '#f9fafb', + 100: '#f2f4f7', + 200: '#eaecf0', + 300: '#d0d5dd', + 400: '#98a2b3', + 500: '#667085', + 600: '#475467', + 700: '#344054', + 800: '#1d2939', + 900: '#101828', + }, + blue: { + 25: '#F5FAFF', + 50: '#EFF8FF', + 100: '#D1E9FF', + 200: '#B2DDFF', + 300: '#84CAFF', + 400: '#53B1FD', + 500: '#2E90FA', + 600: '#1570EF', + 700: '#175CD3', + 800: '#1849A9', + 900: '#194185', + }, + green: { + 25: '#F6FEF9', + 50: '#ECFDF3', + 100: '#D1FADF', + 200: '#A6F4C5', + 300: '#6CE9A6', + 400: '#32D583', + 500: '#12B76A', + 600: '#039855', + 700: '#027A48', + 800: '#05603A', + 900: '#054F31', + }, + red: { + 50: '#fef2f2', + 100: '#fee2e2', + 200: '#fecaca', + 300: '#fca5a5', + 400: '#f87171', + 500: '#ef4444', + 600: '#dc2626', + 700: '#b91c1c', + 800: '#991b1b', + 900: '#7f1d1d', + 950: '#450a0a', + }, + yellow: { + 25: '#FFFCF5', + 50: '#FFFAEB', + 100: '#FEF0C7', + 200: '#FEDF89', + 300: '#FEC84B', + 400: '#FDB022', + 500: '#F79009', + 600: '#DC6803', + 700: '#B54708', + 800: '#93370D', + 900: '#7A2E0E', + }, + purple: { + 25: '#FAFAFF', + 50: '#F4F3FF', + 100: '#EBE9FE', + 200: '#D9D6FE', + 300: '#BDB4FE', + 400: '#9B8AFB', + 500: '#7A5AF8', + 600: '#6938EF', + 700: '#5925DC', + 800: '#4A1FB8', + 900: '#3E1C96', + }, + teal: { + 25: '#F6FEFC', + 50: '#F0FDF9', + 100: '#CCFBEF', + 200: '#99F6E0', + 300: '#5FE9D0', + 400: '#2ED3B7', + 500: '#15B79E', + 600: '#0E9384', + 700: '#107569', + 800: '#125D56', + 900: '#134E48', + }, + pink: { + 25: '#fdf2f8', + 50: '#fce7f3', + 100: '#fbcfe8', + 200: '#f9a8d4', + 300: '#f472b6', + 400: '#ec4899', + 500: '#db2777', + 600: '#be185d', + 700: '#9d174d', + 800: '#831843', + 900: '#500724', + }, + cyan: { + 25: '#ecfeff', + 50: '#cffafe', + 100: '#a5f3fc', + 200: '#67e8f9', + 300: '#22d3ee', + 400: '#06b6d4', + 500: '#0891b2', + 600: '#0e7490', + 700: '#155e75', + 800: '#164e63', + 900: '#083344', + }, + }, + alpha: { + 100: 'ff', + 90: 'e5', + 80: 'cc', + 70: 'b3', + 60: '99', + 50: '80', + 40: '66', + 30: '4d', + 20: '33', + 10: '1a', + 0: '00', + }, + font: { + size: { + '2xs': 'calc(var(--tsrd-font-size) * 0.625)', + xs: 'calc(var(--tsrd-font-size) * 0.75)', + sm: 'calc(var(--tsrd-font-size) * 0.875)', + md: 'var(--tsrd-font-size)', + lg: 'calc(var(--tsrd-font-size) * 1.125)', + xl: 'calc(var(--tsrd-font-size) * 1.25)', + '2xl': 'calc(var(--tsrd-font-size) * 1.5)', + '3xl': 'calc(var(--tsrd-font-size) * 1.875)', + '4xl': 'calc(var(--tsrd-font-size) * 2.25)', + '5xl': 'calc(var(--tsrd-font-size) * 3)', + '6xl': 'calc(var(--tsrd-font-size) * 3.75)', + '7xl': 'calc(var(--tsrd-font-size) * 4.5)', + '8xl': 'calc(var(--tsrd-font-size) * 6)', + '9xl': 'calc(var(--tsrd-font-size) * 8)', + }, + lineHeight: { + '3xs': 'calc(var(--tsrd-font-size) * 0.75)', + '2xs': 'calc(var(--tsrd-font-size) * 0.875)', + xs: 'calc(var(--tsrd-font-size) * 1)', + sm: 'calc(var(--tsrd-font-size) * 1.25)', + md: 'calc(var(--tsrd-font-size) * 1.5)', + lg: 'calc(var(--tsrd-font-size) * 1.75)', + xl: 'calc(var(--tsrd-font-size) * 2)', + '2xl': 'calc(var(--tsrd-font-size) * 2.25)', + '3xl': 'calc(var(--tsrd-font-size) * 2.5)', + '4xl': 'calc(var(--tsrd-font-size) * 2.75)', + '5xl': 'calc(var(--tsrd-font-size) * 3)', + '6xl': 'calc(var(--tsrd-font-size) * 3.25)', + '7xl': 'calc(var(--tsrd-font-size) * 3.5)', + '8xl': 'calc(var(--tsrd-font-size) * 3.75)', + '9xl': 'calc(var(--tsrd-font-size) * 4)', + }, + weight: { + thin: '100', + extralight: '200', + light: '300', + normal: '400', + medium: '500', + semibold: '600', + bold: '700', + extrabold: '800', + black: '900', + }, + fontFamily: { + sans: 'ui-sans-serif, Inter, system-ui, sans-serif, sans-serif', + mono: `ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace`, + }, + }, + breakpoints: { + xs: '320px', + sm: '640px', + md: '768px', + lg: '1024px', + xl: '1280px', + '2xl': '1536px', + }, + border: { + radius: { + none: '0px', + xs: 'calc(var(--tsrd-font-size) * 0.125)', + sm: 'calc(var(--tsrd-font-size) * 0.25)', + md: 'calc(var(--tsrd-font-size) * 0.375)', + lg: 'calc(var(--tsrd-font-size) * 0.5)', + xl: 'calc(var(--tsrd-font-size) * 0.75)', + '2xl': 'calc(var(--tsrd-font-size) * 1)', + '3xl': 'calc(var(--tsrd-font-size) * 1.5)', + full: '9999px', + }, + }, + size: { + 0: '0px', + 0.25: 'calc(var(--tsrd-font-size) * 0.0625)', + 0.5: 'calc(var(--tsrd-font-size) * 0.125)', + 1: 'calc(var(--tsrd-font-size) * 0.25)', + 1.5: 'calc(var(--tsrd-font-size) * 0.375)', + 2: 'calc(var(--tsrd-font-size) * 0.5)', + 2.5: 'calc(var(--tsrd-font-size) * 0.625)', + 3: 'calc(var(--tsrd-font-size) * 0.75)', + 3.5: 'calc(var(--tsrd-font-size) * 0.875)', + 4: 'calc(var(--tsrd-font-size) * 1)', + 4.5: 'calc(var(--tsrd-font-size) * 1.125)', + 5: 'calc(var(--tsrd-font-size) * 1.25)', + 5.5: 'calc(var(--tsrd-font-size) * 1.375)', + 6: 'calc(var(--tsrd-font-size) * 1.5)', + 6.5: 'calc(var(--tsrd-font-size) * 1.625)', + 7: 'calc(var(--tsrd-font-size) * 1.75)', + 8: 'calc(var(--tsrd-font-size) * 2)', + 9: 'calc(var(--tsrd-font-size) * 2.25)', + 10: 'calc(var(--tsrd-font-size) * 2.5)', + 11: 'calc(var(--tsrd-font-size) * 2.75)', + 12: 'calc(var(--tsrd-font-size) * 3)', + 14: 'calc(var(--tsrd-font-size) * 3.5)', + 16: 'calc(var(--tsrd-font-size) * 4)', + 20: 'calc(var(--tsrd-font-size) * 5)', + 24: 'calc(var(--tsrd-font-size) * 6)', + 28: 'calc(var(--tsrd-font-size) * 7)', + 32: 'calc(var(--tsrd-font-size) * 8)', + 36: 'calc(var(--tsrd-font-size) * 9)', + 40: 'calc(var(--tsrd-font-size) * 10)', + 44: 'calc(var(--tsrd-font-size) * 11)', + 48: 'calc(var(--tsrd-font-size) * 12)', + 52: 'calc(var(--tsrd-font-size) * 13)', + 56: 'calc(var(--tsrd-font-size) * 14)', + 60: 'calc(var(--tsrd-font-size) * 15)', + 64: 'calc(var(--tsrd-font-size) * 16)', + 72: 'calc(var(--tsrd-font-size) * 18)', + 80: 'calc(var(--tsrd-font-size) * 20)', + 96: 'calc(var(--tsrd-font-size) * 24)', + }, + shadow: { + xs: (_: string = 'rgb(0 0 0 / 0.1)') => + `0 1px 2px 0 rgb(0 0 0 / 0.05)` as const, + sm: (color: string = 'rgb(0 0 0 / 0.1)') => + `0 1px 3px 0 ${color}, 0 1px 2px -1px ${color}` as const, + md: (color: string = 'rgb(0 0 0 / 0.1)') => + `0 4px 6px -1px ${color}, 0 2px 4px -2px ${color}` as const, + lg: (color: string = 'rgb(0 0 0 / 0.1)') => + `0 10px 15px -3px ${color}, 0 4px 6px -4px ${color}` as const, + xl: (color: string = 'rgb(0 0 0 / 0.1)') => + `0 20px 25px -5px ${color}, 0 8px 10px -6px ${color}` as const, + '2xl': (color: string = 'rgb(0 0 0 / 0.25)') => + `0 25px 50px -12px ${color}` as const, + inner: (color: string = 'rgb(0 0 0 / 0.05)') => + `inset 0 2px 4px 0 ${color}` as const, + none: () => `none` as const, + }, + zIndices: { + hide: -1, + auto: 'auto', + base: 0, + docked: 10, + dropdown: 1000, + sticky: 1100, + banner: 1200, + overlay: 1300, + modal: 1400, + popover: 1500, + skipLink: 1600, + toast: 1700, + tooltip: 1800, + }, +} as const diff --git a/packages/start-devtools/src/styles/use-styles.ts b/packages/start-devtools/src/styles/use-styles.ts new file mode 100644 index 00000000000..3c472600d6d --- /dev/null +++ b/packages/start-devtools/src/styles/use-styles.ts @@ -0,0 +1,364 @@ +import * as goober from 'goober' +import { createEffect, createSignal } from 'solid-js' +import { useTheme } from '@tanstack/devtools-ui' +import { tokens } from './tokens' + +const stylesFactory = (theme: 'light' | 'dark') => { + const { colors, font, size, alpha, border } = tokens + const { fontFamily, size: fontSize } = font + const css = goober.css + const t = (light: string, dark: string) => (theme === 'light' ? light : dark) + + return { + mainContainer: css` + display: flex; + flex: 1; + min-height: 0; + overflow: hidden; + padding: ${size[2]}; + padding-top: 0; + margin-top: ${size[2]}; + `, + dragHandle: css` + width: 8px; + background: ${t(colors.gray[300], colors.darkGray[600])}; + cursor: col-resize; + position: relative; + transition: all 0.2s ease; + user-select: none; + pointer-events: all; + margin: 0 ${size[1]}; + border-radius: 2px; + + &:hover { + background: ${t(colors.blue[600], colors.blue[500])}; + margin: 0 ${size[1]}; + } + + &.dragging { + background: ${t(colors.blue[700], colors.blue[600])}; + margin: 0 ${size[1]}; + } + + &::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 2px; + height: 20px; + background: ${t(colors.gray[400], colors.darkGray[400])}; + border-radius: 1px; + pointer-events: none; + } + + &:hover::after, + &.dragging::after { + background: ${t(colors.blue[500], colors.blue[300])}; + } + `, + leftPanel: css` + background: ${t(colors.gray[100], colors.darkGray[800])}; + border-radius: ${border.radius.lg}; + border: 1px solid ${t(colors.gray[200], colors.darkGray[700])}; + display: flex; + flex-direction: column; + overflow: hidden; + min-height: 0; + flex-shrink: 0; + `, + rightPanel: css` + background: ${t(colors.gray[100], colors.darkGray[800])}; + border-radius: ${border.radius.lg}; + border: 1px solid ${t(colors.gray[200], colors.darkGray[700])}; + display: flex; + flex-direction: column; + overflow: hidden; + min-height: 0; + flex: 1; + `, + panelHeader: css` + font-size: ${fontSize.md}; + font-weight: ${font.weight.bold}; + color: ${t(colors.blue[700], colors.blue[400])}; + padding: ${size[2]}; + border-bottom: 1px solid ${t(colors.gray[200], colors.darkGray[700])}; + background: ${t(colors.gray[100], colors.darkGray[800])}; + flex-shrink: 0; + `, + utilList: css` + flex: 1; + overflow-y: auto; + padding: ${size[1]}; + min-height: 0; + `, + utilGroup: css` + margin-bottom: ${size[2]}; + `, + utilGroupHeader: css` + font-size: ${fontSize.xs}; + font-weight: ${font.weight.semibold}; + color: ${t(colors.gray[600], colors.gray[400])}; + text-transform: uppercase; + letter-spacing: 0.05em; + margin-bottom: ${size[1]}; + padding: ${size[1]} ${size[2]}; + background: ${t(colors.gray[200], colors.darkGray[700])}; + border-radius: ${border.radius.md}; + `, + utilRow: css` + display: flex; + justify-content: space-between; + align-items: center; + padding: ${size[2]}; + margin-bottom: ${size[1]}; + background: ${t(colors.gray[200], colors.darkGray[700])}; + border-radius: ${border.radius.md}; + cursor: pointer; + transition: all 0.2s ease; + border: 1px solid transparent; + + &:hover { + background: ${t(colors.gray[300], colors.darkGray[600])}; + border-color: ${t(colors.gray[400], colors.darkGray[500])}; + } + `, + utilRowSelected: css` + background: ${t(colors.blue[100], colors.blue[900] + alpha[20])}; + border-color: ${t(colors.blue[600], colors.blue[500])}; + box-shadow: 0 0 0 1px + ${t(colors.blue[600] + alpha[30], colors.blue[500] + alpha[30])}; + `, + utilKey: css` + font-family: ${fontFamily.mono}; + font-size: ${fontSize.xs}; + color: ${t(colors.gray[900], colors.gray[100])}; + flex: 1; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + `, + utilStatus: css` + font-size: ${fontSize.xs}; + color: ${t(colors.gray[600], colors.gray[400])}; + text-transform: uppercase; + letter-spacing: 0.05em; + padding: ${size[1]} ${size[1]}; + background: ${t(colors.gray[300], colors.darkGray[600])}; + border-radius: ${border.radius.sm}; + margin-left: ${size[1]}; + `, + stateDetails: css` + flex: 1; + overflow-y: auto; + padding: ${size[2]}; + min-height: 0; + `, + stateHeader: css` + margin-bottom: ${size[2]}; + padding-bottom: ${size[2]}; + border-bottom: 1px solid ${t(colors.gray[200], colors.darkGray[700])}; + `, + stateTitle: css` + font-size: ${fontSize.md}; + font-weight: ${font.weight.bold}; + color: ${t(colors.blue[700], colors.blue[400])}; + margin-bottom: ${size[1]}; + `, + stateKey: css` + font-family: ${fontFamily.mono}; + font-size: ${fontSize.xs}; + color: ${t(colors.gray[600], colors.gray[400])}; + word-break: break-all; + `, + stateContent: css` + background: ${t(colors.gray[100], colors.darkGray[700])}; + border-radius: ${border.radius.md}; + padding: ${size[2]}; + border: 1px solid ${t(colors.gray[300], colors.darkGray[600])}; + `, + detailsGrid: css` + display: grid; + grid-template-columns: 1fr; + gap: ${size[2]}; + align-items: start; + `, + detailSection: css` + background: ${t(colors.white, colors.darkGray[700])}; + border: 1px solid ${t(colors.gray[300], colors.darkGray[600])}; + border-radius: ${border.radius.md}; + padding: ${size[2]}; + `, + detailSectionHeader: css` + font-size: ${fontSize.sm}; + font-weight: ${font.weight.bold}; + color: ${t(colors.gray[800], colors.gray[200])}; + margin-bottom: ${size[1]}; + text-transform: uppercase; + letter-spacing: 0.04em; + `, + actionsRow: css` + display: flex; + flex-wrap: wrap; + gap: ${size[2]}; + `, + actionButton: css` + display: inline-flex; + align-items: center; + gap: ${size[1]}; + padding: ${size[1]} ${size[2]}; + border-radius: ${border.radius.md}; + border: 1px solid ${t(colors.gray[300], colors.darkGray[500])}; + background: ${t(colors.gray[200], colors.darkGray[600])}; + color: ${t(colors.gray[900], colors.gray[100])}; + font-size: ${fontSize.xs}; + cursor: pointer; + user-select: none; + transition: + background 0.15s, + border-color 0.15s; + &:hover { + background: ${t(colors.gray[300], colors.darkGray[500])}; + border-color: ${t(colors.gray[400], colors.darkGray[400])}; + } + &:disabled { + opacity: 0.5; + cursor: not-allowed; + &:hover { + background: ${t(colors.gray[200], colors.darkGray[600])}; + border-color: ${t(colors.gray[300], colors.darkGray[500])}; + } + } + `, + actionDotBlue: css` + width: 6px; + height: 6px; + border-radius: 9999px; + background: ${colors.blue[400]}; + `, + actionDotGreen: css` + width: 6px; + height: 6px; + border-radius: 9999px; + background: ${colors.green[400]}; + `, + actionDotRed: css` + width: 6px; + height: 6px; + border-radius: 9999px; + background: ${colors.red[400]}; + `, + actionDotYellow: css` + width: 6px; + height: 6px; + border-radius: 9999px; + background: ${colors.yellow[400]}; + `, + actionDotOrange: css` + width: 6px; + height: 6px; + border-radius: 9999px; + background: ${colors.pink[400]}; + `, + actionDotPurple: css` + width: 6px; + height: 6px; + border-radius: 9999px; + background: ${colors.purple[400]}; + `, + infoGrid: css` + display: grid; + grid-template-columns: auto 1fr; + gap: ${size[1]}; + row-gap: ${size[1]}; + align-items: center; + `, + infoLabel: css` + color: ${t(colors.gray[600], colors.gray[400])}; + font-size: ${fontSize.xs}; + text-transform: uppercase; + letter-spacing: 0.05em; + `, + infoValueMono: css` + font-family: ${fontFamily.mono}; + font-size: ${fontSize.xs}; + color: ${t(colors.gray[900], colors.gray[100])}; + word-break: break-all; + `, + noSelection: css` + flex: 1; + display: flex; + align-items: center; + justify-content: center; + color: ${t(colors.gray[500], colors.gray[500])}; + font-style: italic; + text-align: center; + padding: ${size[4]}; + `, + // Keep existing styles for backward compatibility + sectionContainer: css` + display: flex; + flex-wrap: wrap; + gap: ${size[4]}; + `, + section: css` + background: ${t(colors.gray[100], colors.darkGray[800])}; + border-radius: ${border.radius.lg}; + box-shadow: ${tokens.shadow.md( + t(colors.gray[400] + alpha[80], colors.black + alpha[80]), + )}; + padding: ${size[4]}; + margin-bottom: ${size[4]}; + border: 1px solid ${t(colors.gray[200], colors.darkGray[700])}; + min-width: 0; + max-width: 33%; + max-height: fit-content; + `, + sectionHeader: css` + font-size: ${fontSize.lg}; + font-weight: ${font.weight.bold}; + margin-bottom: ${size[2]}; + color: ${t(colors.blue[600], colors.blue[400])}; + letter-spacing: 0.01em; + display: flex; + align-items: center; + gap: ${size[2]}; + `, + sectionEmpty: css` + color: ${t(colors.gray[500], colors.gray[500])}; + font-size: ${fontSize.sm}; + font-style: italic; + margin: ${size[2]} 0; + `, + instanceList: css` + display: flex; + flex-direction: column; + gap: ${size[2]}; + background: ${t(colors.gray[200], colors.darkGray[700])}; + border: 1px solid ${t(colors.gray[300], colors.darkGray[600])}; + `, + instanceCard: css` + background: ${t(colors.gray[200], colors.darkGray[700])}; + border-radius: ${border.radius.md}; + padding: ${size[3]}; + border: 1px solid ${t(colors.gray[300], colors.darkGray[600])}; + font-size: ${fontSize.sm}; + color: ${t(colors.gray[900], colors.gray[100])}; + font-family: ${fontFamily.mono}; + overflow-x: auto; + transition: + box-shadow 0.3s, + background 0.3s; + `, + } +} + +export function useStyles() { + const { theme } = useTheme() + const [styles, setStyles] = createSignal(stylesFactory(theme())) + createEffect(() => { + setStyles(stylesFactory(theme())) + }) + return styles +} diff --git a/packages/start-devtools/tests/index.test.ts b/packages/start-devtools/tests/index.test.ts new file mode 100644 index 00000000000..350ef3adeb2 --- /dev/null +++ b/packages/start-devtools/tests/index.test.ts @@ -0,0 +1,7 @@ +import { describe, expect, it } from 'vitest' + +describe('test suite', () => { + it('should work', () => { + expect(true).toBe(true) + }) +}) diff --git a/packages/start-devtools/tests/test-setup.ts b/packages/start-devtools/tests/test-setup.ts new file mode 100644 index 00000000000..a9d0dd31aa6 --- /dev/null +++ b/packages/start-devtools/tests/test-setup.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom/vitest' diff --git a/packages/start-devtools/tsconfig.docs.json b/packages/start-devtools/tsconfig.docs.json new file mode 100644 index 00000000000..2880b4dfa6a --- /dev/null +++ b/packages/start-devtools/tsconfig.docs.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "include": ["tests", "src"] +} diff --git a/packages/start-devtools/tsconfig.json b/packages/start-devtools/tsconfig.json new file mode 100644 index 00000000000..3ee4c951e36 --- /dev/null +++ b/packages/start-devtools/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src", "eslint.config.js", "vite.config.ts", "tests"], + "compilerOptions": { + "jsx": "preserve", + "jsxImportSource": "solid-js" + } +} diff --git a/packages/start-devtools/vite.config.ts b/packages/start-devtools/vite.config.ts new file mode 100644 index 00000000000..7473089b271 --- /dev/null +++ b/packages/start-devtools/vite.config.ts @@ -0,0 +1,25 @@ +import { defineConfig, mergeConfig } from 'vitest/config' +import { tanstackViteConfig } from '@tanstack/config/vite' +import solid from 'vite-plugin-solid' +import packageJson from './package.json' + +const config = defineConfig({ + plugins: [solid()], + test: { + name: packageJson.name, + dir: './', + watch: false, + environment: 'jsdom', + setupFiles: ['./tests/test-setup.ts'], + globals: true, + }, +}) + +export default mergeConfig( + config, + tanstackViteConfig({ + entry: ['./src/index.ts', './src/production.ts'], + srcDir: './src', + cjs: false, + }), +) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5819bf6bef6..c2315b54dbb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -38,6 +38,9 @@ overrides: '@tanstack/solid-start-client': workspace:* '@tanstack/solid-start-server': workspace:* '@tanstack/start-plugin-core': workspace:* + '@tanstack/start-devtools': workspace:* + '@tanstack/start-react-devtools': workspace:* + '@tanstack/start-solid-devtools': workspace:* '@tanstack/start-client-core': workspace:* '@tanstack/start-server-core': workspace:* '@tanstack/start-storage-context': workspace:* @@ -57,7 +60,7 @@ importers: version: 0.17.3 '@eslint-react/eslint-plugin': specifier: ^1.26.2 - version: 1.26.2(eslint@9.22.0(jiti@2.6.0))(ts-api-utils@2.0.1(typescript@5.9.2))(typescript@5.9.2) + version: 1.26.2(eslint@9.22.0(jiti@2.6.0))(ts-api-utils@2.1.0(typescript@5.9.2))(typescript@5.9.2) '@playwright/test': specifier: ^1.52.0 version: 1.52.0 @@ -2268,7 +2271,7 @@ importers: version: 1.0.3(@rsbuild/core@1.2.4) '@rsbuild/plugin-solid': specifier: ^1.0.4 - version: 1.0.4(@babel/core@7.27.7)(@rsbuild/core@1.2.4)(solid-js@1.9.5) + version: 1.0.4(@babel/core@7.28.4)(@rsbuild/core@1.2.4)(solid-js@1.9.5) '@tanstack/router-e2e-utils': specifier: workspace:^ version: link:../../e2e-utils @@ -4903,6 +4906,12 @@ importers: examples/react/start-basic-react-query: dependencies: + '@tanstack/devtools-vite': + specifier: ^0.3.3 + version: 0.3.3(vite@7.1.7(@types/node@22.13.4)(jiti@2.6.0)(lightningcss@1.29.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0)) + '@tanstack/react-devtools': + specifier: ^0.7.0 + version: 0.7.0(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(csstype@3.1.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(solid-js@1.9.9) '@tanstack/react-query': specifier: 5.66.0 version: 5.66.0(react@19.0.0) @@ -4921,6 +4930,9 @@ importers: '@tanstack/react-start': specifier: workspace:* version: link:../../../packages/react-start + '@tanstack/react-start-devtools': + specifier: 0.0.1 + version: link:../../../packages/react-start-devtools react: specifier: ^19.0.0 version: 19.0.0 @@ -6498,6 +6510,40 @@ importers: specifier: ^4.3.4 version: 4.3.4(vite@7.1.7(@types/node@22.13.4)(jiti@2.6.0)(lightningcss@1.29.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0)) + packages/react-start-devtools: + dependencies: + '@tanstack/devtools-utils': + specifier: ^0.0.3 + version: 0.0.3(@types/react@19.0.8)(csstype@3.1.3)(react@19.0.0)(solid-js@1.9.9) + '@tanstack/start-devtools': + specifier: workspace:* + version: link:../start-devtools + '@types/react': + specifier: ^19.0.8 + version: 19.0.8 + '@types/react-dom': + specifier: ^19.0.3 + version: 19.0.3(@types/react@19.0.8) + react: + specifier: ^19.0.0 + version: 19.0.0 + react-dom: + specifier: ^19.0.0 + version: 19.0.0(react@19.0.0) + devDependencies: + '@eslint-react/eslint-plugin': + specifier: ^1.53.1 + version: 1.53.1(eslint@9.22.0(jiti@2.6.0))(ts-api-utils@2.1.0(typescript@5.9.2))(typescript@5.9.2) + '@vitejs/plugin-react': + specifier: ^5.0.2 + version: 5.0.3(vite@7.1.7(@types/node@22.13.4)(jiti@2.6.0)(lightningcss@1.29.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0)) + eslint-plugin-react-compiler: + specifier: 19.1.0-rc.2 + version: 19.1.0-rc.2(eslint@9.22.0(jiti@2.6.0)) + eslint-plugin-react-hooks: + specifier: ^5.2.0 + version: 5.2.0(eslint@9.22.0(jiti@2.6.0)) + packages/react-start-server: dependencies: '@tanstack/history': @@ -6715,7 +6761,7 @@ importers: version: 7.1.7(@types/node@22.13.4)(jiti@2.6.0)(lightningcss@1.29.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0) vite-plugin-solid: specifier: ^2.11.8 - version: 2.11.8(@testing-library/jest-dom@6.6.3)(solid-js@1.9.5)(vite@7.1.7(@types/node@22.13.4)(jiti@2.6.0)(lightningcss@1.29.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0)) + version: 2.11.8(@testing-library/jest-dom@6.6.3)(solid-js@1.9.9)(vite@7.1.7(@types/node@22.13.4)(jiti@2.6.0)(lightningcss@1.29.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0)) webpack: specifier: '>=5.92.0' version: 5.97.1(@swc/core@1.10.15(@swc/helpers@0.5.15))(esbuild@0.25.10) @@ -6967,6 +7013,22 @@ importers: specifier: ^2.11.8 version: 2.11.8(@testing-library/jest-dom@6.6.3)(solid-js@1.9.5)(vite@7.1.7(@types/node@22.13.4)(jiti@2.6.0)(lightningcss@1.29.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0)) + packages/solid-start-devtools: + dependencies: + '@tanstack/devtools-utils': + specifier: ^0.0.3 + version: 0.0.3(@types/react@19.0.8)(csstype@3.1.3)(react@19.0.0)(solid-js@1.9.9) + '@tanstack/start-devtools': + specifier: workspace:* + version: link:../start-devtools + solid-js: + specifier: '>=1.9.7' + version: 1.9.9 + devDependencies: + vite-plugin-solid: + specifier: ^2.11.8 + version: 2.11.8(@testing-library/jest-dom@6.6.3)(solid-js@1.9.9)(vite@7.1.7(@types/node@22.13.4)(jiti@2.6.0)(lightningcss@1.29.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0)) + packages/solid-start-server: dependencies: '@solidjs/meta': @@ -7016,6 +7078,34 @@ importers: specifier: ^1.0.3 version: 1.0.3 + packages/start-devtools: + dependencies: + '@tanstack/devtools-ui': + specifier: ^0.3.4 + version: 0.3.5(csstype@3.1.3)(solid-js@1.9.9) + '@tanstack/devtools-utils': + specifier: ^0.0.3 + version: 0.0.3(@types/react@19.0.8)(csstype@3.1.3)(react@19.0.0)(solid-js@1.9.9) + '@tanstack/solid-store': + specifier: ^0.7.5 + version: 0.7.7(solid-js@1.9.9) + clsx: + specifier: ^2.1.1 + version: 2.1.1 + dayjs: + specifier: ^1.11.18 + version: 1.11.18 + goober: + specifier: ^2.1.16 + version: 2.1.16(csstype@3.1.3) + solid-js: + specifier: ^1.9.9 + version: 1.9.9 + devDependencies: + vite-plugin-solid: + specifier: ^2.11.8 + version: 2.11.8(@testing-library/jest-dom@6.6.3)(solid-js@1.9.9)(vite@7.1.7(@types/node@22.13.4)(jiti@2.6.0)(lightningcss@1.29.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0)) + packages/start-plugin-core: dependencies: '@babel/code-frame': @@ -7236,10 +7326,18 @@ packages: resolution: {integrity: sha512-BU2f9tlKQ5CAthiMIgpzAh4eDTLWo1mqi9jqE2OxMG0E/OM199VJt2q8BztTxpnSW0i1ymdwLXRJnYzvDM5r2w==} engines: {node: '>=6.9.0'} + '@babel/core@7.28.4': + resolution: {integrity: sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==} + engines: {node: '>=6.9.0'} + '@babel/generator@7.27.5': resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==} engines: {node: '>=6.9.0'} + '@babel/generator@7.28.3': + resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.27.3': resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} engines: {node: '>=6.9.0'} @@ -7254,6 +7352,10 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.27.1': resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} engines: {node: '>=6.9.0'} @@ -7272,6 +7374,12 @@ packages: peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.28.3': + resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.27.1': resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} engines: {node: '>=6.9.0'} @@ -7306,6 +7414,10 @@ packages: resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==} engines: {node: '>=6.9.0'} + '@babel/helpers@7.28.4': + resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==} + engines: {node: '>=6.9.0'} + '@babel/parser@7.27.5': resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==} engines: {node: '>=6.0.0'} @@ -7316,12 +7428,24 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.28.4': + resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-proposal-decorators@7.25.9': resolution: {integrity: sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-private-methods@7.18.6': + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-decorators@7.25.9': resolution: {integrity: sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==} engines: {node: '>=6.9.0'} @@ -7400,6 +7524,10 @@ packages: resolution: {integrity: sha512-X6ZlfR/O/s5EQ/SnUSLzr+6kGnkg8HXGMzpgsMsrJVcfDtH1vIp6ctCN4eZ1LS5c0+te5Cb6Y514fASjMRJ1nw==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.28.4': + resolution: {integrity: sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ==} + engines: {node: '>=6.9.0'} + '@babel/types@7.27.6': resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==} engines: {node: '>=6.9.0'} @@ -7408,6 +7536,10 @@ packages: resolution: {integrity: sha512-8OLQgDScAOHXnAz2cV+RfzzNMipuLVBz2biuAJFMV9bfkNf393je3VM8CLkjQodW5+iWsSJdSgSWT6rsZoXHPw==} engines: {node: '>=6.9.0'} + '@babel/types@7.28.4': + resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} + engines: {node: '>=6.9.0'} + '@bundled-es-modules/cookie@2.0.1': resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==} @@ -8160,6 +8292,12 @@ packages: peerDependencies: eslint: ^9.22.0 + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^9.22.0 + '@eslint-community/regexpp@4.12.1': resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -8168,14 +8306,26 @@ packages: resolution: {integrity: sha512-WuljGOJaaiehGkW0aAyuCZIGKfcv/Q1fSl4rvlfWohIDgpp5MFIkBa56drR75WUdNKrrUb3JirnVGIAhegUBIA==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} + '@eslint-react/ast@1.53.1': + resolution: {integrity: sha512-qvUC99ewtriJp9quVEOvZ6+RHcsMLfVQ0OhZ4/LupZUDhjW7GiX1dxJsFaxHdJ9rLNLhQyLSPmbAToeqUrSruQ==} + engines: {node: '>=18.18.0'} + '@eslint-react/core@1.26.2': resolution: {integrity: sha512-2mB5hZBL6XmOjDNL3o0h/qHQHuzxGQGYtQQHjD0Yddhde7NU/b4z/oxtrzEInc6Lk2Ry7Rhqi4S49EpwKXWJlQ==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} + '@eslint-react/core@1.53.1': + resolution: {integrity: sha512-8prroos5/Uvvh8Tjl1HHCpq4HWD3hV9tYkm7uXgKA6kqj0jHlgRcQzuO6ZPP7feBcK3uOeug7xrq03BuG8QKCA==} + engines: {node: '>=18.18.0'} + '@eslint-react/eff@1.26.2': resolution: {integrity: sha512-7ttz+DPNZl+cHdR5PwU9/ff95VHZmo10icGVX34HyRktJuU2boinWzib5KRg6V1jVwgWuzdvULNXyBd5NVMhhg==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} + '@eslint-react/eff@1.53.1': + resolution: {integrity: sha512-uq20lPRAmsWRjIZm+mAV/2kZsU2nDqn5IJslxGWe3Vfdw23hoyhEw3S1KKlxbftwbTvsZjKvVP0iw3bZo/NUpg==} + engines: {node: '>=18.18.0'} + '@eslint-react/eslint-plugin@1.26.2': resolution: {integrity: sha512-nTfR32jTLChc0RXKbks2Gf6seMYeqiCGj0qYq+yOmEn/XhcDWVQj86SHIJLFPwvH3LSwDUSgiQzdW9jn/rNv3A==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} @@ -8186,18 +8336,40 @@ packages: typescript: optional: true + '@eslint-react/eslint-plugin@1.53.1': + resolution: {integrity: sha512-JZ2ciXNCC9CtBBAqYtwWH+Jy/7ZzLw+whei8atP4Fxsbh+Scs30MfEwBzuiEbNw6uF9eZFfPidchpr5RaEhqxg==} + engines: {node: '>=18.18.0'} + peerDependencies: + eslint: ^9.22.0 + typescript: ^4.9.5 || ^5.3.3 + peerDependenciesMeta: + typescript: + optional: true + '@eslint-react/jsx@1.26.2': resolution: {integrity: sha512-lldo9Sd/tZslBN8X7/ZAZXY7UccZZYctrNAoeR8DFMFWLxzvooykixLOl5YkRCWm4uaSmq3r3VNFZ35N2wcbyQ==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} + '@eslint-react/kit@1.53.1': + resolution: {integrity: sha512-zOi2le9V4rMrJvQV4OeedGvMGvDT46OyFPOwXKs7m0tQu5vXVJ8qwIPaVQT1n/WIuvOg49OfmAVaHpGxK++xLQ==} + engines: {node: '>=18.18.0'} + '@eslint-react/shared@1.26.2': resolution: {integrity: sha512-q/xrNkFe8sHAPjaAuvqyCl3Ls5ly9cfUpAfhAgxYtArNAtIZHvuwu0zrwoHMYk0ZpZi+VlQYwUCtKX8axPXoTw==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} + '@eslint-react/shared@1.53.1': + resolution: {integrity: sha512-gomJQmFqQgQVI3Ra4vTMG/s6a4bx3JqeNiTBjxBJt4C9iGaBj458GkP4LJHX7TM6xUzX+fMSKOPX7eV3C/+UCw==} + engines: {node: '>=18.18.0'} + '@eslint-react/var@1.26.2': resolution: {integrity: sha512-9abwhGTd4DBxOy5jVF0CnjEYDiRTXg4cbbAulZ+MVqE03KZDWNAVYYEYI5e+YTOcyJbGYY/zPEYmB+c+cUEiyw==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} + '@eslint-react/var@1.53.1': + resolution: {integrity: sha512-yzwopvPntcHU7mmDvWzRo1fb8QhjD8eDRRohD11rTV1u7nWO4QbJi0pOyugQakvte1/W11Y0Vr8Of0Ojk/A6zg==} + engines: {node: '>=18.18.0'} + '@eslint/config-array@0.19.2': resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -8535,6 +8707,9 @@ packages: resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + '@jridgewell/gen-mapping@0.3.8': resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} engines: {node: '>=6.0.0'} @@ -8562,6 +8737,9 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@jsonjoy.com/base64@1.1.2': resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} engines: {node: '>=10.0'} @@ -9668,6 +9846,9 @@ packages: '@rolldown/pluginutils@1.0.0-beta.19': resolution: {integrity: sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==} + '@rolldown/pluginutils@1.0.0-beta.35': + resolution: {integrity: sha512-slYrCpoxJUqzFDDNlvrOYRazQUNRvWPjXA17dAOISY3rDMxX6k8K4cj2H+hEYMHF81HO3uNd5rHVigAWRM5dSg==} + '@rolldown/pluginutils@1.0.0-beta.40': resolution: {integrity: sha512-s3GeJKSQOwBlzdUrj4ISjJj5SfSh+aqn0wjOar4Bx95iV1ETI7F6S/5hLcfAxZ9kXDcyrAkxPlqmd1ZITttf+w==} @@ -10430,6 +10611,43 @@ packages: engines: {node: '>=18'} hasBin: true + '@tanstack/devtools-event-bus@0.3.2': + resolution: {integrity: sha512-yJT2As/drc+Epu0nsqCsJaKaLcaNGufiNxSlp/+/oeTD0jsBxF9/PJBfh66XVpYXkKr97b8689mSu7QMef0Rrw==} + engines: {node: '>=18'} + + '@tanstack/devtools-ui@0.3.5': + resolution: {integrity: sha512-DU8OfLntngnph+Tb7ivQvh4F4w+rDu6r01fXlhjq/Nmgdr0gtsOox4kdmyq5rCs+C6aPgP3M7+BE+fv4dN+VvA==} + engines: {node: '>=18'} + peerDependencies: + solid-js: '>=1.9.7' + + '@tanstack/devtools-utils@0.0.3': + resolution: {integrity: sha512-7FIIOIuMPQZ42FpXureF4vdMbjyTLCfVIEhSDInjDjSOtoEbkIUtw+HK25GyldOG2uLs1iYNij+Ln675KT0iBw==} + engines: {node: '>=18'} + peerDependencies: + '@types/react': ^19.0.8 + react: ^19.0.0 + solid-js: '>=1.9.7' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + solid-js: + optional: true + + '@tanstack/devtools-vite@0.3.3': + resolution: {integrity: sha512-ghr+dsgrJz5pH0NxD5l6TZFBhlTAc3DdRqFqmLcUniEHpv/t4lzX6vHcAqEkrqZbiCW6+AHYzNyH+z4wrdUjtQ==} + engines: {node: '>=18'} + peerDependencies: + vite: ^7.1.1 + + '@tanstack/devtools@0.6.14': + resolution: {integrity: sha512-dOtHoeLjjcHeNscu+ZEf89EFboQsy0ggb6pf8Sha59qBUeQbjUsaAvwP8Ogwg89oJxFQbTP7DKYNBNw5CxlNEA==} + engines: {node: '>=18'} + peerDependencies: + solid-js: '>=1.9.7' + '@tanstack/query-core@5.66.0': resolution: {integrity: sha512-J+JeBtthiKxrpzUu7rfIPDzhscXF2p5zE/hVdrqkACBP8Yu0M96mwJ5m/8cPPYQE9aRNvXztXHlNwIh4FEeMZw==} @@ -10439,6 +10657,15 @@ packages: '@tanstack/query-devtools@5.72.2': resolution: {integrity: sha512-mMKnGb+iOhVBcj6jaerCFRpg8pACStdG8hmUBHPtToeZzs4ctjBUL1FajqpVn2WaMxnq8Wya+P3Q5tPFNM9jQw==} + '@tanstack/react-devtools@0.7.0': + resolution: {integrity: sha512-HJH+oNBYQotgsKWAQqvkY8KnfQbbZptHbrkPGVaIwj393vVFGT1BuXMYy+rlmOYxczyerb90ltRFgsQyUtJTuw==} + engines: {node: '>=18'} + peerDependencies: + '@types/react': ^19.0.8 + '@types/react-dom': ^19.0.3 + react: ^19.0.0 + react-dom: ^19.0.0 + '@tanstack/react-query-devtools@5.67.2': resolution: {integrity: sha512-cmj2DxBc+/9btQ66n5xI8wTtAma2BLVa403K7zIYiguzJ/kV201jnGensYqJeu1Rd8uRMLLRM74jLVMLDWNRJA==} peerDependencies: @@ -10478,9 +10705,17 @@ packages: peerDependencies: solid-js: ^1.6.0 + '@tanstack/solid-store@0.7.7': + resolution: {integrity: sha512-DnEZbqQ+pg68BguHz17VFukfp+6JaTk8nE2MhdVliU8bhsOFlTMsmVHp/4gMoQ1AkmAOMFiBsSliROCaaeJzvg==} + peerDependencies: + solid-js: ^1.6.0 + '@tanstack/store@0.7.0': resolution: {integrity: sha512-CNIhdoUsmD2NolYuaIs8VfWM467RK6oIBAW4nPEKZhg1smZ+/CwtCdpURgp7nxSqOaV9oKkzdWD80+bC66F/Jg==} + '@tanstack/store@0.7.7': + resolution: {integrity: sha512-xa6pTan1bcaqYDS9BDpSiS63qa6EoDkPN9RsRaxHuDdVDNntzq3xNwR5YKTU/V3SkSyC9T4YVOPh2zRQN0nhIQ==} + '@tanstack/virtual-core@3.13.0': resolution: {integrity: sha512-NBKJP3OIdmZY3COJdWkSonr50FMVIi+aj5ZJ7hI/DTpEKg2RMfo/KvP8A3B/zOSpMgIe52B5E2yn7rryULzA6g==} @@ -10745,6 +10980,12 @@ packages: eslint: ^9.22.0 typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/project-service@8.44.1': + resolution: {integrity: sha512-ycSa60eGg8GWAkVsKV4E6Nz33h+HjTXbsDT4FILyL8Obk5/mx4tbvCNsLf9zret3ipSumAOG89UcCs/KRaKYrA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/rule-tester@8.23.0': resolution: {integrity: sha512-8pmi9mxDD2Eb4rHmBM5UqLRelixNOUQziAs7mgUAH6TVZbdu7LOCIdZcy3DaMKa76IKBF+bFLB3ESMhSetojpQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -10759,6 +11000,16 @@ packages: resolution: {integrity: sha512-OGqo7+dXHqI7Hfm+WqkZjKjsiRtFUQHPdGMXzk5mYXhJUedO7e/Y7i8AK3MyLMgZR93TX4bIzYrfyVjLC+0VSw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.44.1': + resolution: {integrity: sha512-NdhWHgmynpSvyhchGLXh+w12OMT308Gm25JoRIyTZqEbApiBiQHD/8xgb6LqCWCFcxFtWwaVdFsLPQI3jvhywg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.44.1': + resolution: {integrity: sha512-B5OyACouEjuIvof3o86lRMvyDsFwZm+4fBOqFHccIctYgBjqR3qT39FBYGN87khcgf0ExpdCBeGKpKRhSFTjKQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@8.22.0': resolution: {integrity: sha512-NzE3aB62fDEaGjaAYZE4LH7I1MUwHooQ98Byq0G0y3kkibPJQIXVUspzlFOmOfHhiDLwKzMlWxaNv+/qcZurJA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -10773,6 +11024,13 @@ packages: eslint: ^9.22.0 typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/type-utils@8.44.1': + resolution: {integrity: sha512-KdEerZqHWXsRNKjF9NYswNISnFzXfXNDfPxoTh7tqohU/PRIbwTmsjGK6V9/RTYWau7NZvfo52lgVk+sJh0K3g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^9.22.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/types@8.22.0': resolution: {integrity: sha512-0S4M4baNzp612zwpD4YOieP3VowOARgK2EkN/GBn95hpyF8E2fbMT55sRHWBq+Huaqk3b3XK+rxxlM8sPgGM6A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -10781,6 +11039,10 @@ packages: resolution: {integrity: sha512-1sK4ILJbCmZOTt9k4vkoulT6/y5CHJ1qUYxqpF1K/DBAd8+ZUL4LlSCxOssuH5m4rUaaN0uS0HlVPvd45zjduQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.44.1': + resolution: {integrity: sha512-Lk7uj7y9uQUOEguiDIDLYLJOrYHQa7oBiURYVFqIpGxclAFQ78f6VUOM8lI2XEuNOKNB7XuvM2+2cMXAoq4ALQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.22.0': resolution: {integrity: sha512-SJX99NAS2ugGOzpyhMza/tX+zDwjvwAtQFLsBo3GQxiGcvaKlqGBkmZ+Y1IdiSi9h4Q0Lr5ey+Cp9CGWNY/F/w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -10793,6 +11055,12 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/typescript-estree@8.44.1': + resolution: {integrity: sha512-qnQJ+mVa7szevdEyvfItbO5Vo+GfZ4/GZWWDRRLjrxYPkhM+6zYB2vRYwCsoJLzqFCdZT4mEqyJoyzkunsZ96A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.22.0': resolution: {integrity: sha512-T8oc1MbF8L+Bk2msAvCUzjxVB2Z2f+vXYfcucE2wOmYs7ZUwco5Ep0fYZw8quNwOiw9K8GYVL+Kgc2pETNTLOg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -10807,6 +11075,13 @@ packages: eslint: ^9.22.0 typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/utils@8.44.1': + resolution: {integrity: sha512-DpX5Fp6edTlocMCwA+mHY8Mra+pPjRZ0TfHkXI8QFelIKcbADQz1LUPNtzOFUriBB2UYqw4Pi9+xV4w9ZczHFg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^9.22.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/visitor-keys@8.22.0': resolution: {integrity: sha512-AWpYAXnUgvLNabGTy3uBylkgZoosva/miNd1I8Bz3SjotmQPbVqhO4Cczo8AsZ44XVErEBPr/CRSgaj8sG7g0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -10815,6 +11090,10 @@ packages: resolution: {integrity: sha512-oWWhcWDLwDfu++BGTZcmXWqpwtkwb5o7fxUIGksMQQDSdPW9prsSnfIOZMlsj4vBOSrcnjIUZMiIjODgGosFhQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.44.1': + resolution: {integrity: sha512-576+u0QD+Jp3tZzvfRfxon0EA2lzcDt3lhUbsC6Lgzy9x2VR4E+JUiNyGHi5T8vk0TV+fpJ5GLG1JsJuWCaKhw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@vercel/nft@0.30.1': resolution: {integrity: sha512-2mgJZv4AYBFkD/nJ4QmiX5Ymxi+AisPLPcS/KPXVqniyQNqKXX+wjieAbDXQP3HcogfEbpHoRMs49Cd4pfkk8g==} engines: {node: '>=18'} @@ -10832,6 +11111,12 @@ packages: peerDependencies: vite: ^7.1.1 + '@vitejs/plugin-react@5.0.3': + resolution: {integrity: sha512-PFVHhosKkofGH0Yzrw1BipSedTH68BFF8ZWy1kfUpCtJcouXXY0+racG8sExw7hw0HoX36813ga5o3LTWZ4FUg==} + engines: {node: ^20.19.0 || >=22.12.0} + peerDependencies: + vite: ^7.1.1 + '@vitest/browser@3.0.6': resolution: {integrity: sha512-FqKwCAkALZfNzGNx4YvRJa6HCWM2USWTjOdNO2egI/s6+3WkIl4xAlYISOARLJLDAI3yCXcpTtuUUF39K8TQgw==} peerDependencies: @@ -11410,6 +11695,10 @@ packages: resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -11730,6 +12019,9 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} + dayjs@1.11.18: + resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==} + db0@0.3.2: resolution: {integrity: sha512-xzWNQ6jk/+NtdfLyXEipbX55dmDSeteLFt/ayF+wZUU5bzKgmrDOxmInUTbyVRp46YwnJdkDA1KhB7WIXFofJw==} peerDependencies: @@ -12138,6 +12430,12 @@ packages: peerDependencies: eslint: ^9.22.0 + eslint-plugin-react-compiler@19.1.0-rc.2: + resolution: {integrity: sha512-oKalwDGcD+RX9mf3NEO4zOoUMeLvjSvcbbEOpquzmzqEEM2MQdp7/FY/Hx9NzmUwFzH1W9SKTz5fihfMldpEYw==} + engines: {node: ^14.17.0 || ^16.0.0 || >= 18.0.0} + peerDependencies: + eslint: ^9.22.0 + eslint-plugin-react-debug@1.26.2: resolution: {integrity: sha512-UKCXj090YGXYmVLfZ8yZh09RLPlMfhJFYRXGUL4i/IHal22PO7kNTwNSHw105THVJXTiKPxuj/dDbII3H2C+7w==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} @@ -12148,6 +12446,16 @@ packages: typescript: optional: true + eslint-plugin-react-debug@1.53.1: + resolution: {integrity: sha512-WNOiQ6jhodJE88VjBU/IVDM+2Zr9gKHlBFDUSA3fQ0dMB5RiBVj5wMtxbxRuipK/GqNJbteqHcZoYEod7nfddg==} + engines: {node: '>=18.18.0'} + peerDependencies: + eslint: ^9.22.0 + typescript: ^4.9.5 || ^5.3.3 + peerDependenciesMeta: + typescript: + optional: true + eslint-plugin-react-dom@1.26.2: resolution: {integrity: sha512-W4PLB5+zRt+Ceewtwf2tobEPBF+Pvl5ycElRPeKT9VOpn6IAqk0i5JqCVu7mPvPruLFbUDlGaHK769aZhqLyjA==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} @@ -12158,6 +12466,16 @@ packages: typescript: optional: true + eslint-plugin-react-dom@1.53.1: + resolution: {integrity: sha512-UYrWJ2cS4HpJ1A5XBuf1HfMpPoLdfGil+27g/ldXfGemb4IXqlxHt4ANLyC8l2CWcE3SXGJW7mTslL34MG0qTQ==} + engines: {node: '>=18.18.0'} + peerDependencies: + eslint: ^9.22.0 + typescript: ^4.9.5 || ^5.3.3 + peerDependenciesMeta: + typescript: + optional: true + eslint-plugin-react-hooks-extra@1.26.2: resolution: {integrity: sha512-Xh1Pp6lvYDI8aOFDvtd1E6WzBE3QVk2cV48pmKQOWzzL25Tod/7kk4pOXoML1t1rqRQW8xcoL7UmrlR8IMQh+w==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} @@ -12168,12 +12486,28 @@ packages: typescript: optional: true + eslint-plugin-react-hooks-extra@1.53.1: + resolution: {integrity: sha512-fshTnMWNn9NjFLIuy7HzkRgGK29vKv4ZBO9UMr+kltVAfKLMeXXP6021qVKk66i/XhQjbktiS+vQsu1Rd3ZKvg==} + engines: {node: '>=18.18.0'} + peerDependencies: + eslint: ^9.22.0 + typescript: ^4.9.5 || ^5.3.3 + peerDependenciesMeta: + typescript: + optional: true + eslint-plugin-react-hooks@5.1.0: resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==} engines: {node: '>=10'} peerDependencies: eslint: ^9.22.0 + eslint-plugin-react-hooks@5.2.0: + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^9.22.0 + eslint-plugin-react-naming-convention@1.26.2: resolution: {integrity: sha512-eiudTnDwwVpOY6K2g2fsoklG3x4X7N0X4+wFM2AE0+qSy4TCCFic+H+NRi3T53nL0pbvNawHkjS8sRSRRzOG3A==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} @@ -12184,6 +12518,16 @@ packages: typescript: optional: true + eslint-plugin-react-naming-convention@1.53.1: + resolution: {integrity: sha512-rvZ/B/CSVF8d34HQ4qIt90LRuxotVx+KUf3i1OMXAyhsagEFMRe4gAlPJiRufZ+h9lnuu279bEdd+NINsXOteA==} + engines: {node: '>=18.18.0'} + peerDependencies: + eslint: ^9.22.0 + typescript: ^4.9.5 || ^5.3.3 + peerDependenciesMeta: + typescript: + optional: true + eslint-plugin-react-web-api@1.26.2: resolution: {integrity: sha512-xu0QWvptg9zDaf/hfiJ02hTOd/soF10ww3h9wnJZ7ohbMclIA89ZRET6lXXXJNie3HrOLsB+HmOg/h/Rc7zL+A==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} @@ -12194,6 +12538,16 @@ packages: typescript: optional: true + eslint-plugin-react-web-api@1.53.1: + resolution: {integrity: sha512-INVZ3Cbl9/b+sizyb43ChzEPXXYuDsBGU9BIg7OVTNPyDPloCXdI+dQFAcSlDocZhPrLxhPV3eT6+gXbygzYXg==} + engines: {node: '>=18.18.0'} + peerDependencies: + eslint: ^9.22.0 + typescript: ^4.9.5 || ^5.3.3 + peerDependenciesMeta: + typescript: + optional: true + eslint-plugin-react-x@1.26.2: resolution: {integrity: sha512-4wEHGPdCY8yNl0AYcZWDdQ6QyX7lRmjoaM7CSw3v9ZEHLh2u8ttKl2JJpx5mRKFWP0JxQ8YvbgLW8MovDAIWmw==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} @@ -12207,6 +12561,19 @@ packages: typescript: optional: true + eslint-plugin-react-x@1.53.1: + resolution: {integrity: sha512-MwMNnVwiPem0U6SlejDF/ddA4h/lmP6imL1RDZ2m3pUBrcdcOwOx0gyiRVTA3ENnhRlWfHljHf5y7m8qDSxMEg==} + engines: {node: '>=18.18.0'} + peerDependencies: + eslint: ^9.22.0 + ts-api-utils: ^2.1.0 + typescript: ^4.9.5 || ^5.3.3 + peerDependenciesMeta: + ts-api-utils: + optional: true + typescript: + optional: true + eslint-plugin-solid@0.14.5: resolution: {integrity: sha512-nfuYK09ah5aJG/oEN6P1qziy1zLgW4PDWe75VNPi4CEFYk1x2AEqwFeQfEPR7gNn0F2jOeqKhx2E+5oNCOBYWQ==} engines: {node: '>=18.0.0'} @@ -12243,6 +12610,10 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint@9.22.0: resolution: {integrity: sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -12680,6 +13051,12 @@ packages: headers-polyfill@4.0.3: resolution: {integrity: sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==} + hermes-estree@0.25.1: + resolution: {integrity: sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==} + + hermes-parser@0.25.1: + resolution: {integrity: sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==} + highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} @@ -13180,6 +13557,9 @@ packages: resolution: {integrity: sha512-zYEr/gh7uLW2l4su11bmQ2M9xLgQLjyvx58UyNM/6nuqyWFHPX5ktMjvpev3F8QWdjSsHUpnWew4PBCswBNuMQ==} engines: {node: '>=18'} + launch-editor@2.11.1: + resolution: {integrity: sha512-SEET7oNfgSaB6Ym0jufAdCeo3meJVeCaaDyzRygy0xsp2BFKCprcfHljTq4QkzTLUxEKkFK6OK4811YM2oSrRg==} + launch-editor@2.9.1: resolution: {integrity: sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==} @@ -14524,6 +14904,10 @@ packages: resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} engines: {node: '>= 0.4'} + shell-quote@1.8.3: + resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} + engines: {node: '>= 0.4'} + side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} engines: {node: '>= 0.4'} @@ -14578,6 +14962,9 @@ packages: solid-js@1.9.5: resolution: {integrity: sha512-ogI3DaFcyn6UhYhrgcyRAMbu/buBJitYQASZz5WzfQVPP10RD2AbCoRZ517psnezrasyCbWzIxZ6kVqet768xw==} + solid-js@1.9.9: + resolution: {integrity: sha512-A0ZBPJQldAeGCTW0YRYJmt7RCeh5rbFfPZ2aOttgYnctHE7HgKeHCBB/PVc2P7eOfmNXqMFFFoYYdm3S4dcbkA==} + solid-refresh@0.6.3: resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} peerDependencies: @@ -14917,6 +15304,12 @@ packages: peerDependencies: typescript: '>=4.8.4' + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + ts-declaration-location@1.0.5: resolution: {integrity: sha512-WqmlO9IoeYwCqJ2E9kHMcY9GZhhfLYItC3VnHDlPOrg6nNdUWS4wn4hhDZUPt60m1EvtjPIZyprTjpI992Bgzw==} peerDependencies: @@ -14928,6 +15321,9 @@ packages: ts-pattern@5.6.2: resolution: {integrity: sha512-d4IxJUXROL5NCa3amvMg6VQW2HVtZYmUTPfvVtO7zJWGYLJ+mry9v2OmYm+z67aniQoQ8/yFNadiEwtNS9qQiw==} + ts-pattern@5.8.0: + resolution: {integrity: sha512-kIjN2qmWiHnhgr5DAkAafF9fwb0T5OhMVSWrm8XEdTFnX6+wfXwYOFjeF86UZ54vduqiR7BfqScFmXSzSaH8oA==} + tsconfck@3.1.4: resolution: {integrity: sha512-kdqWFGVJqe+KGYvlSO9NIaWn9jT1Ny4oKVzAJsKii5eoE9snzTJzL4+MMVOMn+fikWGFmKEylcXL710V/kIPJQ==} engines: {node: ^18 || >=20} @@ -15594,6 +15990,18 @@ packages: utf-8-validate: optional: true + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + xml-name-validator@5.0.0: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} @@ -15666,9 +16074,18 @@ packages: resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} engines: {node: '>= 14'} + zod-validation-error@3.5.3: + resolution: {integrity: sha512-OT5Y8lbUadqVZCsnyFaTQ4/O2mys4tj7PqhdbBCp7McPwvIEKfPtdA6QfPeFQK2/Rz5LgwmAXRJTugBNBi0btw==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + zod@3.25.57: resolution: {integrity: sha512-6tgzLuwVST5oLUxXTmBqoinKMd3JeesgbgseXeFasKKj8Q1FCZrHnbqJOyiEvr4cVAlbug+CgIsmJ8cl/pU5FA==} + zod@4.1.11: + resolution: {integrity: sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg==} + snapshots: '@adobe/css-tools@4.4.1': {} @@ -15770,6 +16187,26 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/core@7.28.4': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.3 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.4) + '@babel/helpers': 7.28.4 + '@babel/parser': 7.28.4 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/generator@7.27.5': dependencies: '@babel/parser': 7.27.5 @@ -15778,9 +16215,17 @@ snapshots: '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 - '@babel/helper-annotate-as-pure@7.27.3': + '@babel/generator@7.28.3': dependencies: - '@babel/types': 7.27.7 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.27.3': + dependencies: + '@babel/types': 7.28.4 '@babel/helper-compilation-targets@7.27.2': dependencies: @@ -15798,26 +16243,41 @@ snapshots: '@babel/helper-optimise-call-expression': 7.27.1 '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.4) '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.27.7 + '@babel/traverse': 7.28.4 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.7)': + dependencies: + '@babel/core': 7.27.7 + '@babel/helper-annotate-as-pure': 7.27.3 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.28.4 semver: 6.3.1 transitivePeerDependencies: - supports-color + '@babel/helper-globals@7.28.0': {} + '@babel/helper-member-expression-to-functions@7.27.1': dependencies: - '@babel/traverse': 7.27.7 - '@babel/types': 7.27.7 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.18.6': dependencies: - '@babel/types': 7.27.7 + '@babel/types': 7.28.4 '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.27.7 - '@babel/types': 7.27.7 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color @@ -15826,7 +16286,7 @@ snapshots: '@babel/core': 7.27.4 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.7 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color @@ -15835,13 +16295,22 @@ snapshots: '@babel/core': 7.27.7 '@babel/helper-module-imports': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@babel/traverse': 7.27.7 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.27.7 + '@babel/types': 7.28.4 '@babel/helper-plugin-utils@7.27.1': {} @@ -15850,14 +16319,23 @@ snapshots: '@babel/core': 7.27.4 '@babel/helper-member-expression-to-functions': 7.27.1 '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.27.7 + '@babel/traverse': 7.28.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.7)': + dependencies: + '@babel/core': 7.27.7 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.28.4 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.27.7 - '@babel/types': 7.27.7 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 transitivePeerDependencies: - supports-color @@ -15870,7 +16348,12 @@ snapshots: '@babel/helpers@7.27.6': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.27.7 + '@babel/types': 7.28.4 + + '@babel/helpers@7.28.4': + dependencies: + '@babel/template': 7.27.2 + '@babel/types': 7.28.4 '@babel/parser@7.27.5': dependencies: @@ -15878,7 +16361,11 @@ snapshots: '@babel/parser@7.27.7': dependencies: - '@babel/types': 7.27.7 + '@babel/types': 7.28.4 + + '@babel/parser@7.28.4': + dependencies: + '@babel/types': 7.28.4 '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.27.4)': dependencies: @@ -15889,6 +16376,14 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.27.7)': + dependencies: + '@babel/core': 7.27.7 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.7) + '@babel/helper-plugin-utils': 7.27.1 + transitivePeerDependencies: + - supports-color + '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -15904,6 +16399,11 @@ snapshots: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -15940,6 +16440,11 @@ snapshots: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -15950,6 +16455,11 @@ snapshots: '@babel/core': 7.27.7 '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.4)': + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.27.4)': dependencies: '@babel/core': 7.27.4 @@ -15994,6 +16504,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.28.4': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.3 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.4 + '@babel/template': 7.27.2 + '@babel/types': 7.28.4 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + '@babel/types@7.27.6': dependencies: '@babel/helper-string-parser': 7.27.1 @@ -16004,6 +16526,11 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@babel/types@7.28.4': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@bundled-es-modules/cookie@2.0.1': dependencies: cookie: 0.7.2 @@ -16489,6 +17016,11 @@ snapshots: eslint: 9.22.0(jiti@2.6.0) eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.9.0(eslint@9.22.0(jiti@2.6.0))': + dependencies: + eslint: 9.22.0(jiti@2.6.0) + eslint-visitor-keys: 3.4.3 + '@eslint-community/regexpp@4.12.1': {} '@eslint-react/ast@1.26.2(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2)': @@ -16504,6 +17036,19 @@ snapshots: - supports-color - typescript + '@eslint-react/ast@1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2)': + dependencies: + '@eslint-react/eff': 1.53.1 + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + string-ts: 2.2.1 + ts-pattern: 5.8.0 + transitivePeerDependencies: + - eslint + - supports-color + - typescript + '@eslint-react/core@1.26.2(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2)': dependencies: '@eslint-react/ast': 1.26.2(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) @@ -16522,9 +17067,29 @@ snapshots: - supports-color - typescript + '@eslint-react/core@1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2)': + dependencies: + '@eslint-react/ast': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/eff': 1.53.1 + '@eslint-react/kit': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/shared': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/var': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/type-utils': 8.44.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/utils': 8.44.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + birecord: 0.1.1 + ts-pattern: 5.8.0 + transitivePeerDependencies: + - eslint + - supports-color + - typescript + '@eslint-react/eff@1.26.2': {} - '@eslint-react/eslint-plugin@1.26.2(eslint@9.22.0(jiti@2.6.0))(ts-api-utils@2.0.1(typescript@5.9.2))(typescript@5.9.2)': + '@eslint-react/eff@1.53.1': {} + + '@eslint-react/eslint-plugin@1.26.2(eslint@9.22.0(jiti@2.6.0))(ts-api-utils@2.1.0(typescript@5.9.2))(typescript@5.9.2)': dependencies: '@eslint-react/eff': 1.26.2 '@eslint-react/shared': 1.26.2(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) @@ -16538,7 +17103,29 @@ snapshots: eslint-plugin-react-hooks-extra: 1.26.2(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) eslint-plugin-react-naming-convention: 1.26.2(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) eslint-plugin-react-web-api: 1.26.2(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) - eslint-plugin-react-x: 1.26.2(eslint@9.22.0(jiti@2.6.0))(ts-api-utils@2.0.1(typescript@5.9.2))(typescript@5.9.2) + eslint-plugin-react-x: 1.26.2(eslint@9.22.0(jiti@2.6.0))(ts-api-utils@2.1.0(typescript@5.9.2))(typescript@5.9.2) + optionalDependencies: + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + - ts-api-utils + + '@eslint-react/eslint-plugin@1.53.1(eslint@9.22.0(jiti@2.6.0))(ts-api-utils@2.1.0(typescript@5.9.2))(typescript@5.9.2)': + dependencies: + '@eslint-react/eff': 1.53.1 + '@eslint-react/kit': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/shared': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/type-utils': 8.44.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/utils': 8.44.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + eslint: 9.22.0(jiti@2.6.0) + eslint-plugin-react-debug: 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + eslint-plugin-react-dom: 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + eslint-plugin-react-hooks-extra: 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + eslint-plugin-react-naming-convention: 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + eslint-plugin-react-web-api: 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + eslint-plugin-react-x: 1.53.1(eslint@9.22.0(jiti@2.6.0))(ts-api-utils@2.1.0(typescript@5.9.2))(typescript@5.9.2) optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: @@ -16559,6 +17146,17 @@ snapshots: - supports-color - typescript + '@eslint-react/kit@1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2)': + dependencies: + '@eslint-react/eff': 1.53.1 + '@typescript-eslint/utils': 8.44.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + ts-pattern: 5.8.0 + zod: 4.1.11 + transitivePeerDependencies: + - eslint + - supports-color + - typescript + '@eslint-react/shared@1.26.2(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2)': dependencies: '@eslint-react/eff': 1.26.2 @@ -16570,6 +17168,18 @@ snapshots: - supports-color - typescript + '@eslint-react/shared@1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2)': + dependencies: + '@eslint-react/eff': 1.53.1 + '@eslint-react/kit': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + ts-pattern: 5.8.0 + zod: 4.1.11 + transitivePeerDependencies: + - eslint + - supports-color + - typescript + '@eslint-react/var@1.26.2(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2)': dependencies: '@eslint-react/ast': 1.26.2(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) @@ -16584,6 +17194,20 @@ snapshots: - supports-color - typescript + '@eslint-react/var@1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2)': + dependencies: + '@eslint-react/ast': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/eff': 1.53.1 + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/utils': 8.44.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + string-ts: 2.2.1 + ts-pattern: 5.8.0 + transitivePeerDependencies: + - eslint + - supports-color + - typescript + '@eslint/config-array@0.19.2': dependencies: '@eslint/object-schema': 2.1.6 @@ -17040,6 +17664,11 @@ snapshots: dependencies: '@sinclair/typebox': 0.34.38 + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 @@ -17048,8 +17677,8 @@ snapshots: '@jridgewell/remapping@2.3.5': dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/resolve-uri@3.1.2': {} @@ -17057,8 +17686,8 @@ snapshots: '@jridgewell/source-map@0.3.6': dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/sourcemap-codec@1.5.0': {} @@ -17069,6 +17698,11 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': dependencies: tslib: 2.8.1 @@ -18246,6 +18880,8 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.19': {} + '@rolldown/pluginutils@1.0.0-beta.35': {} + '@rolldown/pluginutils@1.0.0-beta.40': {} '@rollup/plugin-alias@5.1.1(rollup@4.52.2)': @@ -18417,11 +19053,11 @@ snapshots: - solid-js - supports-color - '@rsbuild/plugin-solid@1.0.4(@babel/core@7.27.7)(@rsbuild/core@1.2.4)(solid-js@1.9.5)': + '@rsbuild/plugin-solid@1.0.4(@babel/core@7.28.4)(@rsbuild/core@1.2.4)(solid-js@1.9.5)': dependencies: '@rsbuild/core': 1.2.4 '@rsbuild/plugin-babel': 1.0.3(@rsbuild/core@1.2.4) - babel-preset-solid: 1.9.3(@babel/core@7.27.7) + babel-preset-solid: 1.9.3(@babel/core@7.28.4) solid-refresh: 0.6.3(solid-js@1.9.5) transitivePeerDependencies: - '@babel/core' @@ -18584,7 +19220,7 @@ snapshots: '@sentry/bundler-plugin-core@3.1.2': dependencies: - '@babel/core': 7.27.7 + '@babel/core': 7.28.4 '@sentry/babel-plugin-component-annotate': 3.1.2 '@sentry/cli': 2.41.1 dotenv: 16.5.0 @@ -18742,6 +19378,11 @@ snapshots: '@solid-primitives/utils': 6.3.0(solid-js@1.9.5) solid-js: 1.9.5 + '@solid-primitives/event-listener@2.4.0(solid-js@1.9.9)': + dependencies: + '@solid-primitives/utils': 6.3.0(solid-js@1.9.9) + solid-js: 1.9.9 + '@solid-primitives/keyboard@1.3.0(solid-js@1.9.5)': dependencies: '@solid-primitives/event-listener': 2.4.0(solid-js@1.9.5) @@ -18749,6 +19390,13 @@ snapshots: '@solid-primitives/utils': 6.3.0(solid-js@1.9.5) solid-js: 1.9.5 + '@solid-primitives/keyboard@1.3.0(solid-js@1.9.9)': + dependencies: + '@solid-primitives/event-listener': 2.4.0(solid-js@1.9.9) + '@solid-primitives/rootless': 1.5.0(solid-js@1.9.9) + '@solid-primitives/utils': 6.3.0(solid-js@1.9.9) + solid-js: 1.9.9 + '@solid-primitives/media@2.3.0(solid-js@1.9.5)': dependencies: '@solid-primitives/event-listener': 2.4.0(solid-js@1.9.5) @@ -18779,6 +19427,11 @@ snapshots: '@solid-primitives/utils': 6.3.0(solid-js@1.9.5) solid-js: 1.9.5 + '@solid-primitives/rootless@1.5.0(solid-js@1.9.9)': + dependencies: + '@solid-primitives/utils': 6.3.0(solid-js@1.9.9) + solid-js: 1.9.9 + '@solid-primitives/scheduled@1.5.0(solid-js@1.9.5)': dependencies: solid-js: 1.9.5 @@ -18803,6 +19456,10 @@ snapshots: dependencies: solid-js: 1.9.5 + '@solid-primitives/utils@6.3.0(solid-js@1.9.9)': + dependencies: + solid-js: 1.9.9 + '@solidjs/meta@0.29.4(solid-js@1.9.5)': dependencies: solid-js: 1.9.5 @@ -19033,12 +19690,79 @@ snapshots: - typescript - vite + '@tanstack/devtools-event-bus@0.3.2': + dependencies: + ws: 8.18.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@tanstack/devtools-ui@0.3.5(csstype@3.1.3)(solid-js@1.9.9)': + dependencies: + clsx: 2.1.1 + goober: 2.1.16(csstype@3.1.3) + solid-js: 1.9.9 + transitivePeerDependencies: + - csstype + + '@tanstack/devtools-utils@0.0.3(@types/react@19.0.8)(csstype@3.1.3)(react@19.0.0)(solid-js@1.9.9)': + dependencies: + '@tanstack/devtools-ui': 0.3.5(csstype@3.1.3)(solid-js@1.9.9) + optionalDependencies: + '@types/react': 19.0.8 + react: 19.0.0 + solid-js: 1.9.9 + transitivePeerDependencies: + - csstype + + '@tanstack/devtools-vite@0.3.3(vite@7.1.7(@types/node@22.13.4)(jiti@2.6.0)(lightningcss@1.29.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0))': + dependencies: + '@babel/core': 7.28.4 + '@babel/generator': 7.28.3 + '@babel/parser': 7.28.4 + '@babel/traverse': 7.28.4 + '@babel/types': 7.28.4 + '@tanstack/devtools-event-bus': 0.3.2 + chalk: 5.6.2 + launch-editor: 2.11.1 + vite: 7.1.7(@types/node@22.13.4)(jiti@2.6.0)(lightningcss@1.29.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + '@tanstack/devtools@0.6.14(csstype@3.1.3)(solid-js@1.9.9)': + dependencies: + '@solid-primitives/keyboard': 1.3.0(solid-js@1.9.9) + '@tanstack/devtools-event-bus': 0.3.2 + '@tanstack/devtools-ui': 0.3.5(csstype@3.1.3)(solid-js@1.9.9) + clsx: 2.1.1 + goober: 2.1.16(csstype@3.1.3) + solid-js: 1.9.9 + transitivePeerDependencies: + - bufferutil + - csstype + - utf-8-validate + '@tanstack/query-core@5.66.0': {} '@tanstack/query-devtools@5.67.2': {} '@tanstack/query-devtools@5.72.2': {} + '@tanstack/react-devtools@0.7.0(@types/react-dom@19.0.3(@types/react@19.0.8))(@types/react@19.0.8)(csstype@3.1.3)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(solid-js@1.9.9)': + dependencies: + '@tanstack/devtools': 0.6.14(csstype@3.1.3)(solid-js@1.9.9) + '@types/react': 19.0.8 + '@types/react-dom': 19.0.3(@types/react@19.0.8) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + transitivePeerDependencies: + - bufferutil + - csstype + - solid-js + - utf-8-validate + '@tanstack/react-query-devtools@5.67.2(@tanstack/react-query@5.66.0(react@19.0.0))(react@19.0.0)': dependencies: '@tanstack/query-devtools': 5.67.2 @@ -19079,8 +19803,15 @@ snapshots: '@tanstack/store': 0.7.0 solid-js: 1.9.5 + '@tanstack/solid-store@0.7.7(solid-js@1.9.9)': + dependencies: + '@tanstack/store': 0.7.7 + solid-js: 1.9.9 + '@tanstack/store@0.7.0': {} + '@tanstack/store@0.7.7': {} + '@tanstack/virtual-core@3.13.0': {} '@testing-library/dom@10.4.0': @@ -19394,6 +20125,15 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/project-service@8.44.1(typescript@5.9.2)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.9.2) + '@typescript-eslint/types': 8.44.1 + debug: 4.4.3 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/rule-tester@8.23.0(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2)': dependencies: '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.9.2) @@ -19417,11 +20157,20 @@ snapshots: '@typescript-eslint/types': 8.23.0 '@typescript-eslint/visitor-keys': 8.23.0 + '@typescript-eslint/scope-manager@8.44.1': + dependencies: + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/visitor-keys': 8.44.1 + + '@typescript-eslint/tsconfig-utils@8.44.1(typescript@5.9.2)': + dependencies: + typescript: 5.9.2 + '@typescript-eslint/type-utils@8.22.0(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2)': dependencies: '@typescript-eslint/typescript-estree': 8.22.0(typescript@5.9.2) '@typescript-eslint/utils': 8.22.0(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) - debug: 4.4.0 + debug: 4.4.3 eslint: 9.22.0(jiti@2.6.0) ts-api-utils: 2.0.1(typescript@5.9.2) typescript: 5.9.2 @@ -19439,15 +20188,29 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@8.44.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2)': + dependencies: + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + debug: 4.4.3 + eslint: 9.22.0(jiti@2.6.0) + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@8.22.0': {} '@typescript-eslint/types@8.23.0': {} + '@typescript-eslint/types@8.44.1': {} + '@typescript-eslint/typescript-estree@8.22.0(typescript@5.9.2)': dependencies: '@typescript-eslint/types': 8.22.0 '@typescript-eslint/visitor-keys': 8.22.0 - debug: 4.4.0 + debug: 4.4.3 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 @@ -19471,6 +20234,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@8.44.1(typescript@5.9.2)': + dependencies: + '@typescript-eslint/project-service': 8.44.1(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.44.1(typescript@5.9.2) + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/visitor-keys': 8.44.1 + debug: 4.4.3 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@8.22.0(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.22.0(jiti@2.6.0)) @@ -19493,6 +20272,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.44.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.22.0(jiti@2.6.0)) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/typescript-estree': 8.44.1(typescript@5.9.2) + eslint: 9.22.0(jiti@2.6.0) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@8.22.0': dependencies: '@typescript-eslint/types': 8.22.0 @@ -19503,6 +20293,11 @@ snapshots: '@typescript-eslint/types': 8.23.0 eslint-visitor-keys: 4.2.0 + '@typescript-eslint/visitor-keys@8.44.1': + dependencies: + '@typescript-eslint/types': 8.44.1 + eslint-visitor-keys: 4.2.1 + '@vercel/nft@0.30.1(rollup@4.52.2)': dependencies: '@mapbox/node-pre-gyp': 2.0.0 @@ -19545,6 +20340,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitejs/plugin-react@5.0.3(vite@7.1.7(@types/node@22.13.4)(jiti@2.6.0)(lightningcss@1.29.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0))': + dependencies: + '@babel/core': 7.28.4 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.4) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.4) + '@rolldown/pluginutils': 1.0.0-beta.35 + '@types/babel__core': 7.20.5 + react-refresh: 0.17.0 + vite: 7.1.7(@types/node@22.13.4)(jiti@2.6.0)(lightningcss@1.29.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0) + transitivePeerDependencies: + - supports-color + '@vitest/browser@3.0.6(@types/node@22.13.4)(playwright@1.52.0)(typescript@5.9.2)(vite@7.1.7(@types/node@22.13.4)(jiti@2.6.0)(lightningcss@1.29.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0))(vitest@3.2.4)': dependencies: '@testing-library/dom': 10.4.0 @@ -19657,7 +20464,7 @@ snapshots: '@vue/compiler-core@3.5.14': dependencies: - '@babel/parser': 7.27.5 + '@babel/parser': 7.28.4 '@vue/shared': 3.5.14 entities: 4.5.0 estree-walker: 2.0.2 @@ -19883,7 +20690,7 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.4.0 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -20076,7 +20883,7 @@ snapshots: '@babel/core': 7.27.4 '@babel/helper-module-imports': 7.18.6 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.4) - '@babel/types': 7.27.7 + '@babel/types': 7.28.4 html-entities: 2.3.3 parse5: 7.3.0 validate-html-nesting: 1.2.2 @@ -20086,7 +20893,17 @@ snapshots: '@babel/core': 7.27.7 '@babel/helper-module-imports': 7.18.6 '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7) - '@babel/types': 7.27.7 + '@babel/types': 7.28.4 + html-entities: 2.3.3 + parse5: 7.3.0 + validate-html-nesting: 1.2.2 + + babel-plugin-jsx-dom-expressions@0.39.5(@babel/core@7.28.4): + dependencies: + '@babel/core': 7.28.4 + '@babel/helper-module-imports': 7.18.6 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.4) + '@babel/types': 7.28.4 html-entities: 2.3.3 parse5: 7.3.0 validate-html-nesting: 1.2.2 @@ -20107,6 +20924,11 @@ snapshots: '@babel/core': 7.27.7 babel-plugin-jsx-dom-expressions: 0.39.5(@babel/core@7.27.7) + babel-preset-solid@1.9.3(@babel/core@7.28.4): + dependencies: + '@babel/core': 7.28.4 + babel-plugin-jsx-dom-expressions: 0.39.5(@babel/core@7.28.4) + balanced-match@1.0.2: {} bare-events@2.5.4: @@ -20257,6 +21079,8 @@ snapshots: chalk@5.4.1: {} + chalk@5.6.2: {} + char-regex@1.0.2: {} check-error@2.1.1: {} @@ -20575,6 +21399,8 @@ snapshots: dependencies: '@babel/runtime': 7.26.7 + dayjs@1.11.18: {} + db0@0.3.2: {} de-indent@1.0.2: {} @@ -21004,6 +21830,18 @@ snapshots: minimatch: 9.0.5 semver: 7.7.2 + eslint-plugin-react-compiler@19.1.0-rc.2(eslint@9.22.0(jiti@2.6.0)): + dependencies: + '@babel/core': 7.27.7 + '@babel/parser': 7.27.7 + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.27.7) + eslint: 9.22.0(jiti@2.6.0) + hermes-parser: 0.25.1 + zod: 3.25.57 + zod-validation-error: 3.5.3(zod@3.25.57) + transitivePeerDependencies: + - supports-color + eslint-plugin-react-debug@1.26.2(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2): dependencies: '@eslint-react/ast': 1.26.2(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) @@ -21024,6 +21862,26 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-plugin-react-debug@1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2): + dependencies: + '@eslint-react/ast': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/core': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/eff': 1.53.1 + '@eslint-react/kit': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/shared': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/var': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/type-utils': 8.44.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/utils': 8.44.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + eslint: 9.22.0(jiti@2.6.0) + string-ts: 2.2.1 + ts-pattern: 5.8.0 + optionalDependencies: + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + eslint-plugin-react-dom@1.26.2(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2): dependencies: '@eslint-react/ast': 1.26.2(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) @@ -21044,6 +21902,26 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-plugin-react-dom@1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2): + dependencies: + '@eslint-react/ast': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/core': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/eff': 1.53.1 + '@eslint-react/kit': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/shared': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/var': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/utils': 8.44.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + compare-versions: 6.1.1 + eslint: 9.22.0(jiti@2.6.0) + string-ts: 2.2.1 + ts-pattern: 5.8.0 + optionalDependencies: + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + eslint-plugin-react-hooks-extra@1.26.2(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2): dependencies: '@eslint-react/ast': 1.26.2(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) @@ -21064,10 +21942,34 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-plugin-react-hooks-extra@1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2): + dependencies: + '@eslint-react/ast': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/core': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/eff': 1.53.1 + '@eslint-react/kit': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/shared': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/var': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/type-utils': 8.44.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/utils': 8.44.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + eslint: 9.22.0(jiti@2.6.0) + string-ts: 2.2.1 + ts-pattern: 5.8.0 + optionalDependencies: + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + eslint-plugin-react-hooks@5.1.0(eslint@9.22.0(jiti@2.6.0)): dependencies: eslint: 9.22.0(jiti@2.6.0) + eslint-plugin-react-hooks@5.2.0(eslint@9.22.0(jiti@2.6.0)): + dependencies: + eslint: 9.22.0(jiti@2.6.0) + eslint-plugin-react-naming-convention@1.26.2(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2): dependencies: '@eslint-react/ast': 1.26.2(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) @@ -21087,6 +21989,26 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-plugin-react-naming-convention@1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2): + dependencies: + '@eslint-react/ast': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/core': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/eff': 1.53.1 + '@eslint-react/kit': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/shared': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/var': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/type-utils': 8.44.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/utils': 8.44.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + eslint: 9.22.0(jiti@2.6.0) + string-ts: 2.2.1 + ts-pattern: 5.8.0 + optionalDependencies: + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + eslint-plugin-react-web-api@1.26.2(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2): dependencies: '@eslint-react/ast': 1.26.2(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) @@ -21106,7 +22028,26 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-react-x@1.26.2(eslint@9.22.0(jiti@2.6.0))(ts-api-utils@2.0.1(typescript@5.9.2))(typescript@5.9.2): + eslint-plugin-react-web-api@1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2): + dependencies: + '@eslint-react/ast': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/core': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/eff': 1.53.1 + '@eslint-react/kit': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/shared': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/var': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/utils': 8.44.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + eslint: 9.22.0(jiti@2.6.0) + string-ts: 2.2.1 + ts-pattern: 5.8.0 + optionalDependencies: + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + eslint-plugin-react-x@1.26.2(eslint@9.22.0(jiti@2.6.0))(ts-api-utils@2.1.0(typescript@5.9.2))(typescript@5.9.2): dependencies: '@eslint-react/ast': 1.26.2(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) '@eslint-react/core': 1.26.2(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) @@ -21124,7 +22065,30 @@ snapshots: string-ts: 2.2.1 ts-pattern: 5.6.2 optionalDependencies: - ts-api-utils: 2.0.1(typescript@5.9.2) + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + eslint-plugin-react-x@1.53.1(eslint@9.22.0(jiti@2.6.0))(ts-api-utils@2.1.0(typescript@5.9.2))(typescript@5.9.2): + dependencies: + '@eslint-react/ast': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/core': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/eff': 1.53.1 + '@eslint-react/kit': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/shared': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@eslint-react/var': 1.53.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.44.1 + '@typescript-eslint/type-utils': 8.44.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + '@typescript-eslint/types': 8.44.1 + '@typescript-eslint/utils': 8.44.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + compare-versions: 6.1.1 + eslint: 9.22.0(jiti@2.6.0) + is-immutable-type: 5.0.1(eslint@9.22.0(jiti@2.6.0))(typescript@5.9.2) + string-ts: 2.2.1 + ts-pattern: 5.8.0 + optionalDependencies: + ts-api-utils: 2.1.0(typescript@5.9.2) typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -21167,6 +22131,8 @@ snapshots: eslint-visitor-keys@4.2.0: {} + eslint-visitor-keys@4.2.1: {} + eslint@9.22.0(jiti@2.6.0): dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.22.0(jiti@2.6.0)) @@ -21685,6 +22651,12 @@ snapshots: headers-polyfill@4.0.3: {} + hermes-estree@0.25.1: {} + + hermes-parser@0.25.1: + dependencies: + hermes-estree: 0.25.1 + highlight.js@10.7.3: {} hoist-non-react-statics@3.3.2: @@ -21804,7 +22776,7 @@ snapshots: https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.0 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -22152,6 +23124,11 @@ snapshots: ky@1.7.4: {} + launch-editor@2.11.1: + dependencies: + picocolors: 1.1.1 + shell-quote: 1.8.3 + launch-editor@2.9.1: dependencies: picocolors: 1.1.1 @@ -22345,8 +23322,8 @@ snapshots: magicast@0.3.5: dependencies: - '@babel/parser': 7.27.7 - '@babel/types': 7.27.7 + '@babel/parser': 7.28.4 + '@babel/types': 7.28.4 source-map-js: 1.2.1 map-cache@0.2.2: {} @@ -23611,7 +24588,7 @@ snapshots: send@1.2.0: dependencies: - debug: 4.4.0 + debug: 4.4.3 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -23691,6 +24668,8 @@ snapshots: shell-quote@1.8.2: {} + shell-quote@1.8.3: {} + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 @@ -23761,15 +24740,30 @@ snapshots: seroval: 1.2.0 seroval-plugins: 1.2.0(seroval@1.2.0) + solid-js@1.9.9: + dependencies: + csstype: 3.1.3 + seroval: 1.3.2 + seroval-plugins: 1.3.2(seroval@1.3.2) + solid-refresh@0.6.3(solid-js@1.9.5): dependencies: - '@babel/generator': 7.27.5 + '@babel/generator': 7.28.3 '@babel/helper-module-imports': 7.27.1 - '@babel/types': 7.27.7 + '@babel/types': 7.28.4 solid-js: 1.9.5 transitivePeerDependencies: - supports-color + solid-refresh@0.6.3(solid-js@1.9.9): + dependencies: + '@babel/generator': 7.28.3 + '@babel/helper-module-imports': 7.27.1 + '@babel/types': 7.28.4 + solid-js: 1.9.9 + transitivePeerDependencies: + - supports-color + source-map-js@1.2.1: {} source-map-support@0.5.21: @@ -23789,7 +24783,7 @@ snapshots: spdy-transport@3.0.0: dependencies: - debug: 4.4.0 + debug: 4.4.3 detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -24113,6 +25107,10 @@ snapshots: dependencies: typescript: 5.9.2 + ts-api-utils@2.1.0(typescript@5.9.2): + dependencies: + typescript: 5.9.2 + ts-declaration-location@1.0.5(typescript@5.9.2): dependencies: minimatch: 10.0.1 @@ -24122,6 +25120,8 @@ snapshots: ts-pattern@5.6.2: {} + ts-pattern@5.8.0: {} + tsconfck@3.1.4(typescript@5.8.2): optionalDependencies: typescript: 5.8.2 @@ -24496,6 +25496,21 @@ snapshots: transitivePeerDependencies: - supports-color + vite-plugin-solid@2.11.8(@testing-library/jest-dom@6.6.3)(solid-js@1.9.9)(vite@7.1.7(@types/node@22.13.4)(jiti@2.6.0)(lightningcss@1.29.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0)): + dependencies: + '@babel/core': 7.27.7 + '@types/babel__core': 7.20.5 + babel-preset-solid: 1.9.3(@babel/core@7.27.7) + merge-anything: 5.1.7 + solid-js: 1.9.9 + solid-refresh: 0.6.3(solid-js@1.9.9) + vite: 7.1.7(@types/node@22.13.4)(jiti@2.6.0)(lightningcss@1.29.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0) + vitefu: 1.1.1(vite@7.1.7(@types/node@22.13.4)(jiti@2.6.0)(lightningcss@1.29.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0)) + optionalDependencies: + '@testing-library/jest-dom': 6.6.3 + transitivePeerDependencies: + - supports-color + vite-tsconfig-paths@5.1.4(typescript@5.8.2)(vite@7.1.7(@types/node@22.13.4)(jiti@2.6.0)(lightningcss@1.29.2)(terser@5.37.0)(tsx@4.20.3)(yaml@2.7.0)): dependencies: debug: 4.4.0 @@ -24860,6 +25875,8 @@ snapshots: ws@8.18.0: {} + ws@8.18.3: {} + xml-name-validator@5.0.0: {} xmlbuilder2@3.1.1: @@ -24933,4 +25950,10 @@ snapshots: compress-commons: 6.0.2 readable-stream: 4.7.0 + zod-validation-error@3.5.3(zod@3.25.57): + dependencies: + zod: 3.25.57 + zod@3.25.57: {} + + zod@4.1.11: {} From 2599dc3818c74201d24bf12b8b042e26b7e95c56 Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Fri, 26 Sep 2025 10:45:58 +0200 Subject: [PATCH 2/6] Update packages/solid-start-devtools/package.json Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- packages/solid-start-devtools/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/solid-start-devtools/package.json b/packages/solid-start-devtools/package.json index 3df43dfec69..2f35fec765b 100644 --- a/packages/solid-start-devtools/package.json +++ b/packages/solid-start-devtools/package.json @@ -6,8 +6,8 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/TanStack/start.git", - "directory": "packages/start" + "url": "https://github.com/TanStack/router.git", + "directory": "packages/solid-start-devtools" }, "homepage": "https://tanstack.com/start", "funding": { From 7c3ad0c1ff819c92d46d7e2481351080d10e4dfb Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Fri, 26 Sep 2025 10:46:09 +0200 Subject: [PATCH 3/6] Update packages/start-devtools/package.json Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- packages/start-devtools/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/start-devtools/package.json b/packages/start-devtools/package.json index 508936cbaad..05dc7803075 100644 --- a/packages/start-devtools/package.json +++ b/packages/start-devtools/package.json @@ -6,8 +6,8 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/TanStack/start.git", - "directory": "packages/start" + "url": "https://github.com/TanStack/router.git", + "directory": "packages/start-devtools" }, "homepage": "https://tanstack.com/start", "funding": { From 31f11bbc920c837cbfc6f321b08c2eec836c7707 Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Fri, 26 Sep 2025 10:46:23 +0200 Subject: [PATCH 4/6] Update packages/react-start-devtools/package.json Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- packages/react-start-devtools/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-start-devtools/package.json b/packages/react-start-devtools/package.json index 07c3ec13e7c..f945f6a9d0b 100644 --- a/packages/react-start-devtools/package.json +++ b/packages/react-start-devtools/package.json @@ -6,8 +6,8 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/TanStack/start.git", - "directory": "packages/start" + "url": "https://github.com/TanStack/router.git", + "directory": "packages/react-start-devtools" }, "homepage": "https://tanstack.com/start", "funding": { From 50bbb01774ba7c1fb8a059b2d02c6a0fd869102d Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Fri, 26 Sep 2025 10:47:04 +0200 Subject: [PATCH 5/6] fix small issues --- package.json | 4 ++-- packages/react-start-devtools/package.json | 2 +- packages/solid-start-devtools/package.json | 2 +- packages/start-devtools/package.json | 2 +- pnpm-lock.yaml | 6 +++--- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 3ae6e8bb96d..7cd1731ee2f 100644 --- a/package.json +++ b/package.json @@ -105,8 +105,8 @@ "@tanstack/solid-start-server": "workspace:*", "@tanstack/start-plugin-core": "workspace:*", "@tanstack/start-devtools": "workspace:*", - "@tanstack/start-react-devtools": "workspace:*", - "@tanstack/start-solid-devtools": "workspace:*", + "@tanstack/react-start-devtools": "workspace:*", + "@tanstack/solid-start-devtools": "workspace:*", "@tanstack/start-client-core": "workspace:*", "@tanstack/start-server-core": "workspace:*", "@tanstack/start-storage-context": "workspace:*", diff --git a/packages/react-start-devtools/package.json b/packages/react-start-devtools/package.json index 07c3ec13e7c..fdba76f08ac 100644 --- a/packages/react-start-devtools/package.json +++ b/packages/react-start-devtools/package.json @@ -42,7 +42,7 @@ "src" ], "scripts": { - "clean": "premove ./build ./dist", + "clean": "rimraf ./build ./dist", "lint:fix": "eslint ./src --fix", "test:eslint": "eslint ./src", "test:lib": "vitest", diff --git a/packages/solid-start-devtools/package.json b/packages/solid-start-devtools/package.json index 3df43dfec69..afa6a46c18a 100644 --- a/packages/solid-start-devtools/package.json +++ b/packages/solid-start-devtools/package.json @@ -42,7 +42,7 @@ "src" ], "scripts": { - "clean": "premove ./build ./dist", + "clean": "rimraf ./build ./dist", "lint:fix": "eslint ./src --fix", "test:eslint": "eslint ./src", "test:lib": "vitest", diff --git a/packages/start-devtools/package.json b/packages/start-devtools/package.json index 508936cbaad..97bded28f28 100644 --- a/packages/start-devtools/package.json +++ b/packages/start-devtools/package.json @@ -45,7 +45,7 @@ "src" ], "scripts": { - "clean": "premove ./build ./dist", + "clean": "rimraf ./build ./dist", "lint:fix": "eslint ./src --fix", "test:eslint": "eslint ./src", "test:lib": "vitest", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c2315b54dbb..55dbf5e5845 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,8 +39,8 @@ overrides: '@tanstack/solid-start-server': workspace:* '@tanstack/start-plugin-core': workspace:* '@tanstack/start-devtools': workspace:* - '@tanstack/start-react-devtools': workspace:* - '@tanstack/start-solid-devtools': workspace:* + '@tanstack/react-start-devtools': workspace:* + '@tanstack/solid-start-devtools': workspace:* '@tanstack/start-client-core': workspace:* '@tanstack/start-server-core': workspace:* '@tanstack/start-storage-context': workspace:* @@ -4931,7 +4931,7 @@ importers: specifier: workspace:* version: link:../../../packages/react-start '@tanstack/react-start-devtools': - specifier: 0.0.1 + specifier: workspace:* version: link:../../../packages/react-start-devtools react: specifier: ^19.0.0 From dac64590e569d00e2149555817c84f05b8d0b768 Mon Sep 17 00:00:00 2001 From: Alem Tuzlak Date: Fri, 26 Sep 2025 14:16:16 +0200 Subject: [PATCH 6/6] add initial request interceptor util for devtools --- .../src/routes/__root.tsx | 15 ++--- packages/start-devtools/package.json | 3 +- packages/start-devtools/src/StartDevtools.tsx | 56 +++++++++++++++++-- .../src/start-compiler-plugin/plugin.ts | 19 +++++-- packages/start-server-core/package.json | 9 ++- .../src/createStartHandler.ts | 14 ++++- .../start-server-core/src/event-client.ts | 24 ++++++++ packages/start-server-core/src/index.tsx | 1 + packages/start-server-core/vite.config.ts | 2 +- pnpm-lock.yaml | 14 ++++- 10 files changed, 133 insertions(+), 24 deletions(-) create mode 100644 packages/start-server-core/src/event-client.ts diff --git a/examples/react/start-basic-react-query/src/routes/__root.tsx b/examples/react/start-basic-react-query/src/routes/__root.tsx index 44c685b1a9a..45bfeb62e0a 100644 --- a/examples/react/start-basic-react-query/src/routes/__root.tsx +++ b/examples/react/start-basic-react-query/src/routes/__root.tsx @@ -6,8 +6,8 @@ import { Scripts, createRootRouteWithContext, } from '@tanstack/react-router' -import { ReactQueryDevtools } from '@tanstack/react-query-devtools' -import { TanStackRouterDevtools, TanStackRouterDevtoolsPanel } from '@tanstack/react-router-devtools' +import { ReactQueryDevtoolsPanel } from '@tanstack/react-query-devtools' +import { TanStackRouterDevtoolsPanel } from '@tanstack/react-router-devtools' import * as React from 'react' import { TanStackDevtools } from '@tanstack/react-devtools' import { StartDevtoolsPanel } from '@tanstack/react-start-devtools' @@ -138,22 +138,23 @@ function RootDocument({ children }: { children: React.ReactNode }) {
{children} - + render: () => }, { name: 'React Router', render: () => }, { - name: "Start", + name: "TanStack Start", render: () => } ]} /> - - + diff --git a/packages/start-devtools/package.json b/packages/start-devtools/package.json index 14934ee500a..88f5d9b2155 100644 --- a/packages/start-devtools/package.json +++ b/packages/start-devtools/package.json @@ -55,7 +55,8 @@ "build": "vite build" }, "dependencies": { - "@tanstack/devtools-ui": "^0.3.4", + "@tanstack/start-server-core": "workspace:*", + "@tanstack/devtools-ui": "^0.3.5", "@tanstack/devtools-utils": "^0.0.3", "@tanstack/solid-store": "^0.7.5", "clsx": "^2.1.1", diff --git a/packages/start-devtools/src/StartDevtools.tsx b/packages/start-devtools/src/StartDevtools.tsx index 30f7695d5d1..6723075bfb3 100644 --- a/packages/start-devtools/src/StartDevtools.tsx +++ b/packages/start-devtools/src/StartDevtools.tsx @@ -1,9 +1,57 @@ - +import { Header, HeaderLogo, JsonTree, MainPanel, Section, SectionTitle} from "@tanstack/devtools-ui" +import { startEventClient } from "@tanstack/start-server-core/event-client" +import { For, createEffect, createSignal, } from "solid-js" export default function StartDevtools() { + const [requests, setRequests] =createSignal>([]) + + createEffect(() => { + startEventClient.on("request-received", (e) => { + setRequests((r) => [...r, e.payload]) + }) + }) return ( - -
- + +
+ + TanStack Start + +
+ +
+ + Incoming Requests: {requests().length} + + + + + + + + + + + + {(req) => ( + + + + + + )} + + +
MethodURLHeaders
{req.method}{req.url} + + + +
+
+
+
+ ) } diff --git a/packages/start-plugin-core/src/start-compiler-plugin/plugin.ts b/packages/start-plugin-core/src/start-compiler-plugin/plugin.ts index 3633219dfe1..a7cd434d86d 100644 --- a/packages/start-plugin-core/src/start-compiler-plugin/plugin.ts +++ b/packages/start-plugin-core/src/start-compiler-plugin/plugin.ts @@ -32,8 +32,15 @@ function resolveRuntimeFiles(opts: { package: string; files: Array }) { } function resolvePackage(packageName: string): string { - const pkgRoot = path.dirname(require.resolve(packageName + '/package.json')) - return pkgRoot + const expectedLocation = packageName + '/package.json' + try { + const pkgRoot = path.dirname(require.resolve(expectedLocation)) + return pkgRoot + // eslint-disable-next-line unused-imports/no-unused-vars + } catch (_error) { + const pkgRoot = path.dirname(expectedLocation) + return pkgRoot + } } export function startCompilerPlugin( @@ -89,10 +96,10 @@ export function startCompilerPlugin( : this.environment.name === VITE_ENVIRONMENT_NAMES.server ? 'server' : (() => { - throw new Error( - `Environment ${this.environment.name} not configured`, - ) - })() + throw new Error( + `Environment ${this.environment.name} not configured`, + ) + })() const url = pathToFileURL(id) url.searchParams.delete('v') diff --git a/packages/start-server-core/package.json b/packages/start-server-core/package.json index cbd45a12f34..88406c87c4c 100644 --- a/packages/start-server-core/package.json +++ b/packages/start-server-core/package.json @@ -47,6 +47,12 @@ "default": "./dist/esm/index.js" } }, + "./event-client": { + "import": { + "types": "./dist/esm/event-client.d.ts", + "default": "./dist/esm/event-client.js" + } + }, "./package.json": "./package.json" }, "sideEffects": false, @@ -58,6 +64,7 @@ "node": ">=22.12.0" }, "dependencies": { + "@tanstack/devtools-event-client": "^0.3.2", "@tanstack/history": "workspace:*", "@tanstack/router-core": "workspace:*", "@tanstack/start-client-core": "workspace:*", @@ -71,4 +78,4 @@ "cookie-es": "^2.0.0", "fetchdts": "^0.1.6" } -} +} \ No newline at end of file diff --git a/packages/start-server-core/src/createStartHandler.ts b/packages/start-server-core/src/createStartHandler.ts index 9f11b5e6a68..6a639a8fa15 100644 --- a/packages/start-server-core/src/createStartHandler.ts +++ b/packages/start-server-core/src/createStartHandler.ts @@ -19,6 +19,7 @@ import { handleServerAction } from './server-functions-handler' import { HEADERS } from './constants' import { ServerFunctionSerializationAdapter } from './serializer/ServerFunctionSerializationAdapter' +import { startEventClient } from './event-client' import type { AnyStartInstanceOptions, RouteMethod, @@ -94,6 +95,13 @@ export function createStartHandler( request, requestOpts, ) => { + startEventClient.emit("request-received", { + headers: request.headers, + url: request.url.split("--")[0]!, + method: request.method + + }) + function getOrigin() { const originHeader = request.headers.get('Origin') if (originHeader) { @@ -101,7 +109,7 @@ export function createStartHandler( } try { return new URL(request.url).origin - } catch {} + } catch { } return 'http://localhost' } @@ -394,8 +402,8 @@ async function handleServerRoutes({ const handlers = typeof server.handlers === 'function' ? server.handlers({ - createHandlers: (d: any) => d, - }) + createHandlers: (d: any) => d, + }) : server.handlers const requestMethod = request.method.toLowerCase() diff --git a/packages/start-server-core/src/event-client.ts b/packages/start-server-core/src/event-client.ts new file mode 100644 index 00000000000..f67e2eb3f82 --- /dev/null +++ b/packages/start-server-core/src/event-client.ts @@ -0,0 +1,24 @@ +import { EventClient } from "@tanstack/devtools-event-client"; + +interface StartEventMap { + "start:middleware": {}, + "start:request-received": { + headers: Headers; + url: string; + method: string; + }; + +} + +class StartEventClient extends EventClient { + constructor() { + super({ + pluginId: 'start', + // Add any other necessary options here + }) + } +} + +const startEventClient = new StartEventClient() + +export { startEventClient } \ No newline at end of file diff --git a/packages/start-server-core/src/index.tsx b/packages/start-server-core/src/index.tsx index 8fa26d3528a..47042ac6421 100644 --- a/packages/start-server-core/src/index.tsx +++ b/packages/start-server-core/src/index.tsx @@ -20,3 +20,4 @@ export { HEADERS } from './constants' export { createServerRpc } from './createServerRpc' export type { RequestHandler, RequestOptions } from './request-handler' + \ No newline at end of file diff --git a/packages/start-server-core/vite.config.ts b/packages/start-server-core/vite.config.ts index d476008af25..373ef22fdab 100644 --- a/packages/start-server-core/vite.config.ts +++ b/packages/start-server-core/vite.config.ts @@ -18,7 +18,7 @@ export default mergeConfig( config, tanstackViteConfig({ srcDir: './src', - entry: './src/index.tsx', + entry: ['./src/index.tsx', './src/event-client.ts'], externalDeps: [ ...Object.values(VIRTUAL_MODULES), '#tanstack-start-entry', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 55dbf5e5845..2a5c95ca5eb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7081,7 +7081,7 @@ importers: packages/start-devtools: dependencies: '@tanstack/devtools-ui': - specifier: ^0.3.4 + specifier: ^0.3.5 version: 0.3.5(csstype@3.1.3)(solid-js@1.9.9) '@tanstack/devtools-utils': specifier: ^0.0.3 @@ -7089,6 +7089,9 @@ importers: '@tanstack/solid-store': specifier: ^0.7.5 version: 0.7.7(solid-js@1.9.9) + '@tanstack/start-server-core': + specifier: workspace:* + version: link:../start-server-core clsx: specifier: ^2.1.1 version: 2.1.1 @@ -7181,6 +7184,9 @@ importers: packages/start-server-core: dependencies: + '@tanstack/devtools-event-client': + specifier: ^0.3.2 + version: 0.3.2 '@tanstack/history': specifier: workspace:* version: link:../history @@ -10615,6 +10621,10 @@ packages: resolution: {integrity: sha512-yJT2As/drc+Epu0nsqCsJaKaLcaNGufiNxSlp/+/oeTD0jsBxF9/PJBfh66XVpYXkKr97b8689mSu7QMef0Rrw==} engines: {node: '>=18'} + '@tanstack/devtools-event-client@0.3.2': + resolution: {integrity: sha512-gkvph/YMCFUfAca75EsJBJnhbKitDGix7vdEcT/3lAV+eyGSv+uECYG43apVQN4yLJKnV6mzcNvGzOhDhb72gg==} + engines: {node: '>=18'} + '@tanstack/devtools-ui@0.3.5': resolution: {integrity: sha512-DU8OfLntngnph+Tb7ivQvh4F4w+rDu6r01fXlhjq/Nmgdr0gtsOox4kdmyq5rCs+C6aPgP3M7+BE+fv4dN+VvA==} engines: {node: '>=18'} @@ -19697,6 +19707,8 @@ snapshots: - bufferutil - utf-8-validate + '@tanstack/devtools-event-client@0.3.2': {} + '@tanstack/devtools-ui@0.3.5(csstype@3.1.3)(solid-js@1.9.9)': dependencies: clsx: 2.1.1