diff --git a/.changeset/remove-devtools-json.md b/.changeset/remove-devtools-json.md new file mode 100644 index 000000000..d8b10e18a --- /dev/null +++ b/.changeset/remove-devtools-json.md @@ -0,0 +1,5 @@ +--- +'sv': minor +--- + +remove: `devtools-json` add-on as SvelteKit will [silently 404 Chrome DevTools workspaces request](https://github.com/sveltejs/kit/pull/15656). You can still add `vite-plugin-devtools-json` manually if needed. diff --git a/documentation/docs/20-commands/20-sv-add.md b/documentation/docs/20-commands/20-sv-add.md index ccc60f755..6ce8c6389 100644 --- a/documentation/docs/20-commands/20-sv-add.md +++ b/documentation/docs/20-commands/20-sv-add.md @@ -50,7 +50,6 @@ Prevents installing dependencies ## Official add-ons - [`better-auth`](better-auth) -- [`devtools-json`](devtools-json) - [`drizzle`](drizzle) - [`eslint`](eslint) - [`mcp`](mcp) diff --git a/documentation/docs/30-add-ons/03-devtools-json.md b/documentation/docs/30-add-ons/03-devtools-json.md deleted file mode 100644 index 67274f434..000000000 --- a/documentation/docs/30-add-ons/03-devtools-json.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: devtools-json ---- - -The `devtools-json` add-on installs [`vite-plugin-devtools-json`](https://github.com/ChromeDevTools/vite-plugin-devtools-json/), which is a Vite plugin for generating a Chromium DevTools project settings file on-the-fly in the development server. This file is served from `/.well-known/appspecific/com.chrome.devtools.json` and tells Chromium browsers where your project's source code lives so that you can use [the workspaces feature](https://developer.chrome.com/docs/devtools/workspaces) to edit source files in the browser. - -> [!NOTE] -> Installing the plugin enables the feature for all users connecting to the dev server with a Chromium browser, and allows the browser to read and write all files within the directory. If you are using Chrome's AI Assistance feature, this may also result in data being sent to Google. - -## Alternatives - -If you'd prefer not to install the plugin, but still want to avoid seeing a message about the missing file, you have a couple of options. - -Firstly, you can prevent the request from being issued on your machine by disabling the feature in your browser. You can do this in Chrome by visiting `chrome://flags` and disabling the "DevTools Project Settings". You may also be interested in disabling "DevTools Automatic Workspace Folders" since it’s closely related. - -You can also prevent the web server from issuing a notice regarding the incoming request for all developers of your application by handling the request yourself. For example, you can create a file named `.well-known/appspecific/com.chrome.devtools.json` with the contents `"Go away, Chrome DevTools!"` or you can add logic to respond to the request in your [`handle`](https://svelte.dev/docs/kit/hooks#Server-hooks-handle) hook: - -```js -/// file: src/hooks.server.js -import { dev } from '$app/environment'; - -export function handle({ event, resolve }) { - if (dev && event.url.pathname === '/.well-known/appspecific/com.chrome.devtools.json') { - return new Response(undefined, { status: 404 }); - } - - return resolve(event); -} -``` - -## Usage - -```sh -npx sv add devtools-json -``` - -## What you get - -- `vite-plugin-devtools-json` added to your Vite plugin options diff --git a/packages/sv/src/addons/devtools-json.ts b/packages/sv/src/addons/devtools-json.ts deleted file mode 100644 index 311f631e0..000000000 --- a/packages/sv/src/addons/devtools-json.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { transforms } from '@sveltejs/sv-utils'; -import { defineAddon } from '../core/config.ts'; - -export default defineAddon({ - id: 'devtools-json', - shortDescription: 'devtools json', - homepage: 'https://github.com/ChromeDevTools/vite-plugin-devtools-json', - options: {}, - - run: ({ sv, file }) => { - sv.devDependency('vite-plugin-devtools-json', '^1.0.0'); - - // add the vite plugin - sv.file( - file.viteConfig, - transforms.script(({ ast, js }) => { - const vitePluginName = 'devtoolsJson'; - js.imports.addDefault(ast, { as: vitePluginName, from: 'vite-plugin-devtools-json' }); - js.vite.addPlugin(ast, { code: `${vitePluginName}()` }); - }) - ); - } -}); diff --git a/packages/sv/src/addons/index.ts b/packages/sv/src/addons/index.ts index 481c9045c..de0303650 100644 --- a/packages/sv/src/addons/index.ts +++ b/packages/sv/src/addons/index.ts @@ -1,6 +1,5 @@ import type { Addon, AddonDefinition } from '../core/config.ts'; import betterAuth from './better-auth.ts'; -import devtoolsJson from './devtools-json.ts'; import drizzle from './drizzle.ts'; import eslint from './eslint.ts'; import mcp from './mcp.ts'; @@ -20,7 +19,6 @@ type OfficialAddons = { playwright: Addon; tailwindcss: Addon; sveltekitAdapter: Addon; - devtoolsJson: Addon; drizzle: Addon; betterAuth: Addon; mdsvex: Addon; @@ -38,7 +36,6 @@ export const officialAddons: OfficialAddons = { playwright, tailwindcss, sveltekitAdapter, - devtoolsJson, drizzle, betterAuth, mdsvex, diff --git a/packages/sv/src/addons/tests/devtools-json/test.ts b/packages/sv/src/addons/tests/devtools-json/test.ts deleted file mode 100644 index 608963a1b..000000000 --- a/packages/sv/src/addons/tests/devtools-json/test.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { expect } from '@playwright/test'; -import fs from 'node:fs'; -import path from 'node:path'; -import devtoolsJson from '../../devtools-json.ts'; -import { setupTest } from '../_setup/suite.ts'; - -const { test, testCases } = setupTest( - { devtoolsJson }, - { kinds: [{ type: 'default', options: { [devtoolsJson.id]: {} } }], browser: false } -); - -test.concurrent.for(testCases)('devtools-json $variant', (testCase, ctx) => { - const cwd = ctx.cwd(testCase); - - const language = testCase.variant.includes('ts') ? 'ts' : 'js'; - const viteFile = path.resolve(cwd, `vite.config.${language}`); - const viteContent = fs.readFileSync(viteFile, 'utf8'); - - // Check if we have the import part - expect(viteContent).toContain(`import devtoolsJson from`); - expect(viteContent).toContain(`vite-plugin-devtools-json`); - - // Check if it's called - expect(viteContent).toContain(`devtoolsJson()`); -}); diff --git a/packages/sv/src/cli/tests/cli.ts b/packages/sv/src/cli/tests/cli.ts index f801dd534..11b08d712 100644 --- a/packages/sv/src/cli/tests/cli.ts +++ b/packages/sv/src/cli/tests/cli.ts @@ -27,7 +27,6 @@ describe('cli', () => { 'playwright', 'tailwindcss=plugins:typography,forms', 'sveltekit-adapter=adapter:node', - 'devtools-json', 'drizzle=database:sqlite+sqlite:libsql', 'better-auth=demo:password,github', 'mdsvex', diff --git a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/AGENTS.md b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/AGENTS.md index 20947ab8d..1bec82b48 100644 --- a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/AGENTS.md +++ b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/AGENTS.md @@ -2,7 +2,7 @@ - **Language**: TypeScript - **Package Manager**: npm -- **Add-ons**: prettier, eslint, vitest, playwright, tailwindcss, sveltekit-adapter, devtools-json, drizzle, better-auth, mdsvex, paraglide, mcp +- **Add-ons**: prettier, eslint, vitest, playwright, tailwindcss, sveltekit-adapter, drizzle, better-auth, mdsvex, paraglide, mcp --- diff --git a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/CLAUDE.md b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/CLAUDE.md index 20947ab8d..1bec82b48 100644 --- a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/CLAUDE.md +++ b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/CLAUDE.md @@ -2,7 +2,7 @@ - **Language**: TypeScript - **Package Manager**: npm -- **Add-ons**: prettier, eslint, vitest, playwright, tailwindcss, sveltekit-adapter, devtools-json, drizzle, better-auth, mdsvex, paraglide, mcp +- **Add-ons**: prettier, eslint, vitest, playwright, tailwindcss, sveltekit-adapter, drizzle, better-auth, mdsvex, paraglide, mcp --- diff --git a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/GEMINI.md b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/GEMINI.md index 20947ab8d..1bec82b48 100644 --- a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/GEMINI.md +++ b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/GEMINI.md @@ -2,7 +2,7 @@ - **Language**: TypeScript - **Package Manager**: npm -- **Add-ons**: prettier, eslint, vitest, playwright, tailwindcss, sveltekit-adapter, devtools-json, drizzle, better-auth, mdsvex, paraglide, mcp +- **Add-ons**: prettier, eslint, vitest, playwright, tailwindcss, sveltekit-adapter, drizzle, better-auth, mdsvex, paraglide, mcp --- diff --git a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/README.md b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/README.md index c65e1b6f7..579128e8d 100644 --- a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/README.md +++ b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/README.md @@ -15,7 +15,7 @@ To recreate this project with the same configuration: ```sh # recreate this project -npx sv@0.0.0 create --template minimal --types ts --add prettier eslint vitest="usages:unit,component" playwright tailwindcss="plugins:typography,forms" sveltekit-adapter="adapter:node" devtools-json drizzle="database:sqlite+sqlite:libsql" better-auth="demo:password,github" mdsvex paraglide="languageTags:en,es+demo:yes" mcp="ide:claude-code,cursor,gemini,opencode,vscode,other+setup:local" --no-install packages/sv/.test-output/cli/create-with-all-addons +npx sv@0.0.0 create --template minimal --types ts --add prettier eslint vitest="usages:unit,component" playwright tailwindcss="plugins:typography,forms" sveltekit-adapter="adapter:node" drizzle="database:sqlite+sqlite:libsql" better-auth="demo:password,github" mdsvex paraglide="languageTags:en,es+demo:yes" mcp="ide:claude-code,cursor,gemini,opencode,vscode,other+setup:local" --no-install packages/sv/.test-output/cli/create-with-all-addons ``` ## Developing diff --git a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/package.json b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/package.json index f30915e72..e65833f64 100644 --- a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/package.json +++ b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/package.json @@ -53,7 +53,6 @@ "typescript": "^5.9.3", "typescript-eslint": "^8.57.0", "vite": "^7.3.1", - "vite-plugin-devtools-json": "^1.0.0", "vitest": "^4.1.0", "vitest-browser-svelte": "^2.0.2" } diff --git a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/vite.config.ts b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/vite.config.ts index e6136df66..9c72d3491 100644 --- a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/vite.config.ts +++ b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/vite.config.ts @@ -1,5 +1,4 @@ import { paraglideVitePlugin } from '@inlang/paraglide-js'; -import devtoolsJson from 'vite-plugin-devtools-json'; import tailwindcss from '@tailwindcss/vite'; import { defineConfig } from 'vitest/config'; import { playwright } from '@vitest/browser-playwright'; @@ -9,7 +8,6 @@ export default defineConfig({ plugins: [ tailwindcss(), sveltekit(), - devtoolsJson(), paraglideVitePlugin({ project: './project.inlang', outdir: './src/lib/paraglide' }) ], test: {