diff --git a/package.json b/package.json index 657b16331c..970c0533ac 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "@antfu/eslint-config": "catalog:cli", "@antfu/ni": "catalog:cli", "@nuxt/devtools": "workspace:*", + "@nuxt/devtools-onboard": "workspace:*", "@nuxt/devtools-ui-kit": "workspace:*", "@nuxt/eslint": "catalog:cli", "@nuxt/module-builder": "catalog:buildtools", diff --git a/packages/devtools-onboard/README.md b/packages/devtools-onboard/README.md new file mode 100644 index 0000000000..a3c0eec878 --- /dev/null +++ b/packages/devtools-onboard/README.md @@ -0,0 +1,24 @@ +# @nuxt/devtools-onboard + +The entry point of [Nuxt DevTools](https://devtools.nuxt.com). It is a tiny Nuxt module that Nuxt 5 ships instead of depending on `@nuxt/devtools` directly: + +- when `@nuxt/devtools` is installed in your project, it loads it; +- when it is not, `nuxt dev` shows a floating button (built on [`@devframes/hub-ui-onboard`](https://devfra.me/guide/hub-ui-onboard)) that installs it with your package manager and restarts the dev server, so the real DevTools dock takes its place. + +Nothing is injected outside `nuxt dev`. + +## Turning it off + +- `devtools: false` (or `devtools: { enabled: false }`) in `nuxt.config` disables both the button and DevTools. +- **Disable entirely** in the button's panel writes `node_modules/.devframe/hub-ui-onboard.json`; the button stays hidden on later starts until you delete that file or set the `devtools` option explicitly. +- **Hide for now** hides the button for the current tab only. + +## Nuxt 4 + +Nuxt 4 depends on `@nuxt/devtools` itself, so this package is not needed there. Adding it to `modules` still works: it loads the installed DevTools and never shows the button. + +```ts +export default defineNuxtConfig({ + modules: ['@nuxt/devtools-onboard'], +}) +``` diff --git a/packages/devtools-onboard/package.json b/packages/devtools-onboard/package.json new file mode 100644 index 0000000000..d819bfc23e --- /dev/null +++ b/packages/devtools-onboard/package.json @@ -0,0 +1,44 @@ +{ + "name": "@nuxt/devtools-onboard", + "type": "module", + "version": "4.0.0-beta.3", + "description": "The entry point of Nuxt DevTools: loads it when installed, otherwise offers to install it from a floating button.", + "license": "MIT", + "homepage": "https://devtools.nuxt.com", + "repository": { + "type": "git", + "url": "git+https://github.com/nuxt/devtools.git", + "directory": "packages/devtools-onboard" + }, + "exports": { + ".": "./dist/module.mjs" + }, + "types": "./dist/module.d.mts", + "files": [ + "dist" + ], + "scripts": { + "build": "nuxt-build-module build", + "stub": "nuxt-build-module build --stub", + "dev:prepare": "pnpm run stub", + "prepack": "turbo run build --filter=." + }, + "peerDependencies": { + "@nuxt/devtools": "workspace:^", + "@nuxt/kit": "^4.0.0-0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "@nuxt/devtools": { + "optional": true + } + }, + "dependencies": { + "@devframes/hub-ui-onboard": "catalog:prod", + "pkg-types": "catalog:prod" + }, + "devDependencies": { + "@nuxt/kit": "catalog:prod", + "@nuxt/schema": "catalog:types", + "nuxt": "catalog:buildtools" + } +} diff --git a/packages/devtools-onboard/src/module.ts b/packages/devtools-onboard/src/module.ts new file mode 100644 index 0000000000..2a44284b45 --- /dev/null +++ b/packages/devtools-onboard/src/module.ts @@ -0,0 +1,76 @@ +import type { NuxtOptions } from '@nuxt/schema' +import { fileURLToPath } from 'node:url' +import { createOnboarding } from '@devframes/hub-ui-onboard' +import { defineNuxtModule, installModule, tryResolveModule } from '@nuxt/kit' +import { readPackageJSON } from 'pkg-types' + +const DEVTOOLS = '@nuxt/devtools' + +/** The names Nuxt itself recognizes as DevTools in `modules` (see `loadNuxt` in nuxt core). */ +const DEVTOOLS_MODULES = new Set([DEVTOOLS, `${DEVTOOLS}-nightly`, `${DEVTOOLS}-edge`]) + +function listsDevtools(modules: NuxtOptions['modules']): boolean { + return modules.some((entry) => { + const id = Array.isArray(entry) ? entry[0] : entry + return typeof id === 'string' && DEVTOOLS_MODULES.has(id) + }) +} + +/** + * The spec the button installs. Versions are released in lockstep, so a caret + * on our own version pins the matching DevTools; a nightly build carries an + * `npm:@nuxt/devtools-nightly@…` alias in its peer range instead. + */ +async function devtoolsSpec(): Promise { + const { version, peerDependencies } = await readPackageJSON(fileURLToPath(import.meta.url)) + const range = peerDependencies?.[DEVTOOLS] ?? '' + return `${DEVTOOLS}@${range.startsWith('npm:') ? range : `^${version}`}` +} + +export default defineNuxtModule({ + meta: { + name: '@nuxt/devtools-onboard', + }, + async setup(_, nuxt) { + const { devtools } = nuxt.options + if (devtools === false || (typeof devtools === 'object' && devtools.enabled === false)) + return + if (listsDevtools(nuxt.options.modules)) + return + + const installed = await tryResolveModule(DEVTOOLS, nuxt.options.modulesDir) + if (installed) + return installModule(installed) + if (!nuxt.options.dev) + return + + const onboarding = createOnboarding({ + cwd: nuxt.options.rootDir, + // Where Vite DevTools mounts the hub, so after the restart the real + // `embedded.js` answers at the URL the button was loaded from. + base: '/__devtools/', + packages: [await devtoolsSpec()], + branding: { + productName: 'Nuxt DevTools', + primaryColor: '#099e61', + logo: 'https://nuxt.com/assets/design-kit/icon-green.svg', + }, + messages: { + restart: 'Installed. Restarting the dev server…', + }, + onInstalled() { + // A Nuxt module only mounts during setup, so the dev server has to + // start over. Delay past the install response so the panel can show + // the restart message before the process goes away. + setTimeout(() => nuxt.callHook('restart', { hard: true }), 100) + }, + }) + + nuxt.hook('vite:serverCreated', (server, { isClient }) => { + if (isClient) + server.middlewares.use(onboarding.nodeMiddleware) + }) + if (!onboarding.disabled) + (nuxt.options.app.head.script ??= []).push({ type: 'module', src: onboarding.scriptSrc, tagPosition: 'bodyClose' }) + }, +}) diff --git a/packages/devtools-onboard/test/module.test.ts b/packages/devtools-onboard/test/module.test.ts new file mode 100644 index 0000000000..02b1d80a36 --- /dev/null +++ b/packages/devtools-onboard/test/module.test.ts @@ -0,0 +1,99 @@ +import type { Nuxt, NuxtConfig } from '@nuxt/schema' +import type { IncomingMessage, ServerResponse } from 'node:http' +import { mkdtemp, rm } from 'node:fs/promises' +import { createServer } from 'node:http' +import { tmpdir } from 'node:os' +import { join } from 'node:path' +import { fileURLToPath } from 'node:url' +import { loadNuxt } from 'nuxt' +import { afterEach, describe, expect, it } from 'vitest' + +const onboardModule = fileURLToPath(new URL('../src/module.ts', import.meta.url)) + +const cleanups: (() => Promise)[] = [] +afterEach(async () => { + await Promise.all(cleanups.splice(0).map(fn => fn())) +}) + +/** + * Nuxt core pushes the bare `@nuxt/devtools` name into `_modules`; aliasing + * it to this module reproduces what Nuxt 5 does with `@nuxt/devtools-onboard`. + * `withoutDevtools` drops every `node_modules` Nuxt can resolve from, which is + * the situation of a Nuxt that no longer depends on `@nuxt/devtools` itself. + */ +async function bootNuxt(overrides: NuxtConfig, { withoutDevtools = false } = {}): Promise { + const rootDir = await mkdtemp(join(tmpdir(), 'devtools-onboard-')) + const nuxt = await loadNuxt({ + cwd: rootDir, + ready: false, + overrides: { + alias: { '@nuxt/devtools': onboardModule }, + telemetry: false, + ...overrides, + }, + }) + cleanups.push(async () => { + await nuxt.close() + await rm(rootDir, { recursive: true, force: true }) + }) + if (withoutDevtools) + nuxt.options.modulesDir = [join(rootDir, 'node_modules')] + await nuxt.ready() + return nuxt +} + +function onboardScripts(nuxt: Nuxt) { + return (nuxt.options.app.head.script ?? []).filter(script => typeof script === 'object' && script.src === '/__devtools/embedded.js') +} + +type Middleware = (req: IncomingMessage, res: ServerResponse, next: () => void) => void + +async function viteMiddlewareFetch(nuxt: Nuxt, path: string): Promise { + const mounted: Middleware[] = [] + // Only `middlewares.use` is read; the rest of a real ViteDevServer is irrelevant here. + const viteServer = { middlewares: { use: (fn: Middleware) => mounted.push(fn) } } as never + await nuxt.callHook('vite:serverCreated', viteServer, { isClient: true, isServer: false }) + const [middleware] = mounted + if (!middleware) + throw new Error('onboarding middleware was not mounted') + + const server = createServer((req, res) => middleware(req, res, () => { + res.statusCode = 404 + res.end() + })) + await new Promise(resolve => server.listen(0, '127.0.0.1', resolve)) + cleanups.push(() => new Promise(resolve => server.close(() => resolve()))) + const { port } = server.address() as { port: number } // listening on a TCP port, never a pipe + return fetch(`http://127.0.0.1:${port}${path}`) +} + +describe('@nuxt/devtools-onboard', () => { + it('does nothing when devtools are disabled', async () => { + const nuxt = await bootNuxt({ devtools: false, modules: [onboardModule] }) + expect(nuxt.options._requiredModules['@nuxt/devtools']).toBeUndefined() + expect(onboardScripts(nuxt)).toHaveLength(0) + }, 60_000) + + it('loads @nuxt/devtools when it is installed', async () => { + const nuxt = await bootNuxt({}) + expect(nuxt.options._requiredModules['@nuxt/devtools']).toBe(true) + expect(onboardScripts(nuxt)).toHaveLength(0) + }, 60_000) + + it('offers to install @nuxt/devtools when it is missing', async () => { + const nuxt = await bootNuxt({ dev: true }, { withoutDevtools: true }) + expect(nuxt.options._requiredModules['@nuxt/devtools']).toBeUndefined() + expect(onboardScripts(nuxt)).toHaveLength(1) + + const status = await viteMiddlewareFetch(nuxt, '/__devtools/__onboard/status').then(r => r.json()) + expect(status.state).toBe('idle') + // No lockfile in the fixture, so the package manager falls back to npm. + expect(status.command).toBe('npm i -D @nuxt/devtools@^4.0.0-beta.3') + expect(status.branding.productName).toBe('Nuxt DevTools') + }, 60_000) + + it('stays out of the way outside nuxt dev when @nuxt/devtools is missing', async () => { + const nuxt = await bootNuxt({ dev: false }, { withoutDevtools: true }) + expect(onboardScripts(nuxt)).toHaveLength(0) + }, 60_000) +}) diff --git a/packages/devtools-onboard/tsconfig.json b/packages/devtools-onboard/tsconfig.json new file mode 100644 index 0000000000..793920b7c1 --- /dev/null +++ b/packages/devtools-onboard/tsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "moduleResolution": "Bundler", + "strict": true + } +} diff --git a/playgrounds-ecosystem/README.md b/playgrounds-ecosystem/README.md index b0fcddcb57..52f22d67fa 100644 --- a/playgrounds-ecosystem/README.md +++ b/playgrounds-ecosystem/README.md @@ -20,6 +20,8 @@ One minimal app per Nuxt major, because Nuxt 4 ships Nitro v2 and Nuxt 5 ships Nitro v3, and `@nuxt/devtools` / `@nuxt/devtools-kit` declare both as *optional* peers. Each is a sealed pnpm workspace with its own lockfile, and installs DevTools from **packed tarballs** — the real npm install path, from `dist`. +Both list `@nuxt/devtools-onboard` in `modules`, the entry point Nuxt 5 ships, +so they also cover its hand-off to the installed `@nuxt/devtools`. ```sh # Build the monorepo, pack DevTools into .tarballs/, install diff --git a/playgrounds-ecosystem/nuxt4/nuxt.config.ts b/playgrounds-ecosystem/nuxt4/nuxt.config.ts index 61828587f6..917bba8e36 100644 --- a/playgrounds-ecosystem/nuxt4/nuxt.config.ts +++ b/playgrounds-ecosystem/nuxt4/nuxt.config.ts @@ -11,8 +11,9 @@ // // Nuxt 4 ships Nitro v2 (the `nitropack` package). See ../README.md. export default defineNuxtConfig({ + // The entry point Nuxt 5 ships: it loads the installed `@nuxt/devtools`. modules: [ - '@nuxt/devtools', + '@nuxt/devtools-onboard', ], compatibilityDate: '2024-09-19', diff --git a/playgrounds-ecosystem/nuxt4/package.json b/playgrounds-ecosystem/nuxt4/package.json index 8874622679..00d1bacb32 100644 --- a/playgrounds-ecosystem/nuxt4/package.json +++ b/playgrounds-ecosystem/nuxt4/package.json @@ -11,7 +11,8 @@ }, "dependencies": { "@nuxt/devtools": "file:.tarballs/nuxt-devtools.tgz", - "@nuxt/devtools-assets": "file:.tarballs/nuxt-devtools-assets.tgz" + "@nuxt/devtools-assets": "file:.tarballs/nuxt-devtools-assets.tgz", + "@nuxt/devtools-onboard": "file:.tarballs/nuxt-devtools-onboard.tgz" }, "devDependencies": { "@types/node": "^26.1.1", diff --git a/playgrounds-ecosystem/nuxt4/pnpm-lock.yaml b/playgrounds-ecosystem/nuxt4/pnpm-lock.yaml index 1b72bc69f7..8cc69b6fe6 100644 --- a/playgrounds-ecosystem/nuxt4/pnpm-lock.yaml +++ b/playgrounds-ecosystem/nuxt4/pnpm-lock.yaml @@ -166,6 +166,7 @@ overrides: '@nuxt/devtools': file:.tarballs/nuxt-devtools.tgz '@nuxt/devtools-kit': file:.tarballs/nuxt-devtools-kit.tgz '@nuxt/devtools-assets': file:.tarballs/nuxt-devtools-assets.tgz + '@nuxt/devtools-onboard': file:.tarballs/nuxt-devtools-onboard.tgz importers: @@ -177,6 +178,9 @@ importers: '@nuxt/devtools-assets': specifier: file:.tarballs/nuxt-devtools-assets.tgz version: file:.tarballs/nuxt-devtools-assets.tgz + '@nuxt/devtools-onboard': + specifier: file:.tarballs/nuxt-devtools-onboard.tgz + version: file:.tarballs/nuxt-devtools-onboard.tgz(@nuxt/devtools@file:.tarballs/nuxt-devtools.tgz(1b6c181a3d6f77a7d2d6e792248250de))(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.1)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.1)(rollup@4.62.3)(vite@8.3.2(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)))) devDependencies: '@types/node': specifier: ^26.1.1 @@ -360,6 +364,9 @@ packages: peerDependencies: devframe: 1.2.0 + '@devframes/hub-ui-onboard@1.2.1': + resolution: {integrity: sha512-3EuCJMwg2A/N4mbQF+C0RuKBCb1pchrQ1KeqLugcukLAXDVTtjfgstf2r1ykPx1IvXjCPXBg18mP6fEHAofeIg==} + '@devframes/hub-ui@1.2.0': resolution: {integrity: sha512-7q9zfo/i+Iiu5oO4RQdB3aWzt+4BWmKaK4L0UxwPxKibFx45xe3GrATNnoW1PY0kxY1gz2kqc9jdwXDOmXmmdw==} peerDependencies: @@ -778,15 +785,15 @@ packages: resolution: {integrity: sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==} '@nuxt/devtools-assets@file:.tarballs/nuxt-devtools-assets.tgz': - resolution: {integrity: sha512-0bhBuLRbrDlDo3j4oSQEo3QlqGqxQ5wPu96iION0JLUsJCFfQFv0UEvXY4Z4Ibifr1rYNdJ0fGhH9drKpxCFWw==, tarball: file:.tarballs/nuxt-devtools-assets.tgz} + resolution: {integrity: sha512-LSjbhjqO7myKCd2YiSHGagtYfc/cRYVPhSz8XEDtNm1uSc9cGIDGRAbAw5aDgKRoyLTYO7IYuVIE2l+PmO6KZQ==, tarball: file:.tarballs/nuxt-devtools-assets.tgz} version: 4.0.0-beta.3 '@nuxt/devtools-kit@file:.tarballs/nuxt-devtools-kit.tgz': - resolution: {integrity: sha512-S7pPJ0o+zH0YJE49rJM5fPj/ErKRmP2Rk42mdsd0pNUg2Gh/kWR9iOUbqRGDtEkWy5BZf9CIENF4MAilMTSO6A==, tarball: file:.tarballs/nuxt-devtools-kit.tgz} + resolution: {integrity: sha512-6Im/Fia/gzzLxGfpvh9CUXzCZZo9H1hlRhAPrUTbX6zeVTDVVPU+znGj7Qvu+xHynCrbi6R/I0HHBQYZnO79+g==, tarball: file:.tarballs/nuxt-devtools-kit.tgz} version: 4.0.0-beta.3 peerDependencies: '@nuxt/kit': ^4.0.0-0 || ^5.0.0-0 - nitro: ^3.0.0-0 + nitro: '*' nitropack: ^2.0.0 vite: '>=6.0' peerDependenciesMeta: @@ -795,13 +802,23 @@ packages: nitropack: optional: true + '@nuxt/devtools-onboard@file:.tarballs/nuxt-devtools-onboard.tgz': + resolution: {integrity: sha512-EcINNtawj65YjHt3z9y98g4BaOklU4SZJWysqQco2MscnrC3nAW4IhWxLBGkRIaKsKxknJaPK8a+si+tVhEp7g==, tarball: file:.tarballs/nuxt-devtools-onboard.tgz} + version: 4.0.0-beta.3 + peerDependencies: + '@nuxt/devtools': ^4.0.0-beta.3 + '@nuxt/kit': ^4.0.0-0 || ^5.0.0-0 + peerDependenciesMeta: + '@nuxt/devtools': + optional: true + '@nuxt/devtools@file:.tarballs/nuxt-devtools.tgz': - resolution: {integrity: sha512-q7qpgf0F3DNeou/9xvcG6GIa58oih4RO9CQS7WHA4eeQ9OtN0m96ilxWXkE5jSFY8q4SXoHb22ybGQrpWrQUPQ==, tarball: file:.tarballs/nuxt-devtools.tgz} + resolution: {integrity: sha512-Cb+zoAMibGT1k/wKE7p2K0eG3vR6t0eSVXqkf6Ly/sbuM1D6wLvDai4IZctXFqC3S3QBDEp2AuLE9a47G9P65Q==, tarball: file:.tarballs/nuxt-devtools.tgz} version: 4.0.0-beta.3 peerDependencies: '@nuxt/devtools-assets': 4.0.0-beta.3 '@nuxt/kit': ^4.0.0-0 || ^5.0.0-0 - nitro: ^3.0.0-0 + nitro: '*' nitropack: ^2.0.0 vite: ^8.1.5 vite-plugin-inspect: ^12.0.2 @@ -4213,6 +4230,12 @@ snapshots: - crossws - ocache + '@devframes/hub-ui-onboard@1.2.1': + dependencies: + nostics: 1.3.0 + package-manager-detector: 1.8.0 + tinyexec: 1.3.1 + '@devframes/hub-ui@1.2.0(@devframes/hub@1.2.0(@devframes/agentic@1.2.0)(crossws@0.4.12(srvx@0.11.22))(devframe@1.2.0))(@devframes/json-render@1.2.0(@devframes/hub@1.2.0(@devframes/agentic@1.2.0)(crossws@0.4.12(srvx@0.11.22))(devframe@1.2.0))(devframe@1.2.0))(devframe@1.2.0)': dependencies: '@devframes/hub': 1.2.0(@devframes/agentic@1.2.0)(crossws@0.4.12(srvx@0.11.22))(devframe@1.2.0) @@ -4640,6 +4663,14 @@ snapshots: optionalDependencies: nitropack: 2.13.4(oxc-parser@0.140.0)(rolldown@1.2.1)(srvx@0.11.22)(supports-color@10.2.2)(vite@8.3.2(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0)) + '@nuxt/devtools-onboard@file:.tarballs/nuxt-devtools-onboard.tgz(@nuxt/devtools@file:.tarballs/nuxt-devtools.tgz(1b6c181a3d6f77a7d2d6e792248250de))(@nuxt/kit@4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.1)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.1)(rollup@4.62.3)(vite@8.3.2(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))))': + dependencies: + '@devframes/hub-ui-onboard': 1.2.1 + '@nuxt/kit': 4.5.1(magic-string@1.1.0)(magicast@0.5.4)(oxc-parser@0.140.0)(rolldown@1.2.1)(unplugin@3.3.0(esbuild@0.28.1)(rolldown@1.2.1)(rollup@4.62.3)(vite@8.3.2(@types/node@26.1.2)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.49.0)(yaml@2.9.0))) + pkg-types: 2.3.3 + optionalDependencies: + '@nuxt/devtools': file:.tarballs/nuxt-devtools.tgz(1b6c181a3d6f77a7d2d6e792248250de) + '@nuxt/devtools@file:.tarballs/nuxt-devtools.tgz(1b6c181a3d6f77a7d2d6e792248250de)': dependencies: '@devframes/hub': 1.2.0(@devframes/agentic@1.2.0)(crossws@0.4.12(srvx@0.11.22))(devframe@1.2.0) diff --git a/playgrounds-ecosystem/nuxt4/pnpm-workspace.yaml b/playgrounds-ecosystem/nuxt4/pnpm-workspace.yaml index 080e7c2c94..0fdb14e955 100644 --- a/playgrounds-ecosystem/nuxt4/pnpm-workspace.yaml +++ b/playgrounds-ecosystem/nuxt4/pnpm-workspace.yaml @@ -17,6 +17,7 @@ overrides: '@nuxt/devtools': file:.tarballs/nuxt-devtools.tgz '@nuxt/devtools-kit': file:.tarballs/nuxt-devtools-kit.tgz '@nuxt/devtools-assets': file:.tarballs/nuxt-devtools-assets.tgz + '@nuxt/devtools-onboard': file:.tarballs/nuxt-devtools-onboard.tgz allowBuilds: '@parcel/watcher': true @@ -40,3 +41,4 @@ minimumReleaseAgeExclude: - '@vitejs/devtools@0.7.3' - devframe@0.9.16 - pkg-types@2.3.3 + - '@devframes/hub-ui-onboard@1.2.1' diff --git a/playgrounds-ecosystem/nuxt5/nuxt.config.ts b/playgrounds-ecosystem/nuxt5/nuxt.config.ts index ef426c6be3..5d47039584 100644 --- a/playgrounds-ecosystem/nuxt5/nuxt.config.ts +++ b/playgrounds-ecosystem/nuxt5/nuxt.config.ts @@ -11,8 +11,9 @@ // // Nuxt 5 ships the next-gen Nitro v3 engine (`nitro`). See ../README.md. export default defineNuxtConfig({ + // The entry point Nuxt 5 ships: it loads the installed `@nuxt/devtools`. modules: [ - '@nuxt/devtools', + '@nuxt/devtools-onboard', ], compatibilityDate: '2024-09-19', diff --git a/playgrounds-ecosystem/nuxt5/package.json b/playgrounds-ecosystem/nuxt5/package.json index ebac60c111..29109cb688 100644 --- a/playgrounds-ecosystem/nuxt5/package.json +++ b/playgrounds-ecosystem/nuxt5/package.json @@ -11,7 +11,8 @@ }, "dependencies": { "@nuxt/devtools": "file:.tarballs/nuxt-devtools.tgz", - "@nuxt/devtools-assets": "file:.tarballs/nuxt-devtools-assets.tgz" + "@nuxt/devtools-assets": "file:.tarballs/nuxt-devtools-assets.tgz", + "@nuxt/devtools-onboard": "file:.tarballs/nuxt-devtools-onboard.tgz" }, "devDependencies": { "@types/node": "^26.6.1", diff --git a/playgrounds-ecosystem/nuxt5/pnpm-lock.yaml b/playgrounds-ecosystem/nuxt5/pnpm-lock.yaml index c0d49c70c5..bb437c9f25 100644 --- a/playgrounds-ecosystem/nuxt5/pnpm-lock.yaml +++ b/playgrounds-ecosystem/nuxt5/pnpm-lock.yaml @@ -166,6 +166,7 @@ overrides: '@nuxt/devtools': file:.tarballs/nuxt-devtools.tgz '@nuxt/devtools-kit': file:.tarballs/nuxt-devtools-kit.tgz '@nuxt/devtools-assets': file:.tarballs/nuxt-devtools-assets.tgz + '@nuxt/devtools-onboard': file:.tarballs/nuxt-devtools-onboard.tgz vite: ^8.3.0 importers: @@ -178,6 +179,9 @@ importers: '@nuxt/devtools-assets': specifier: file:.tarballs/nuxt-devtools-assets.tgz version: file:.tarballs/nuxt-devtools-assets.tgz + '@nuxt/devtools-onboard': + specifier: file:.tarballs/nuxt-devtools-onboard.tgz + version: file:.tarballs/nuxt-devtools-onboard.tgz(@nuxt/devtools@file:.tarballs/nuxt-devtools.tgz(@nuxt/devtools-assets@file:.tarballs/nuxt-devtools-assets.tgz)(@nuxt/kit@4.5.2(magic-string@1.4.2)(magicast@0.5.5)(rolldown@1.2.12)(unplugin@3.4.0(rolldown@1.2.12)(vite@8.3.1)))(cac@7.0.0)(crossws@0.4.12(srvx@1.0.5))(db0@0.4.1)(ocache@0.3.0)(rolldown@1.2.12)(srvx@1.0.5)(vite@8.3.1)(vue@3.5.43))(@nuxt/kit@4.5.2(magic-string@1.4.2)(magicast@0.5.5)(rolldown@1.2.12)(unplugin@3.4.0(rolldown@1.2.12)(vite@8.3.1))) devDependencies: '@types/node': specifier: ^26.6.1 @@ -226,6 +230,9 @@ packages: peerDependencies: devframe: 1.1.0 + '@devframes/hub-ui-onboard@1.2.1': + resolution: {integrity: sha512-3EuCJMwg2A/N4mbQF+C0RuKBCb1pchrQ1KeqLugcukLAXDVTtjfgstf2r1ykPx1IvXjCPXBg18mP6fEHAofeIg==} + '@devframes/hub-ui@1.1.0': resolution: {integrity: sha512-+Y9sKa3QuFdd7/kbo6nmI0IvUoueYGeRU0jDsrvmjaqKNVOP5sg+pwj+LijJKaAZEmgGJgaCOpxQNYVtNlQpjw==} peerDependencies: @@ -414,8 +421,8 @@ packages: resolution: {integrity: sha512-qFnltjus6Gk8Lx6J1w2RXmr3YPN22MNT6qD6zjAkaiWIlFIFxWClz0rXHNuJF/KSUyn5YGhkSvXkWDbQHVLFEQ==} engines: {node: '>=20'} - '@nuxt/cli-nightly@4.0.0-20261003-160317-f140924f': - resolution: {integrity: sha512-kYNtlyg+wE0x8klSGcFZMFARpdUbReRy5TTXWysYJI1Cfz/rXLP0zdSVu8MMtShR1MBuRAlGhrxwUdrbiPPudA==} + '@nuxt/cli-nightly@4.0.0-20261005-072115-f140924f': + resolution: {integrity: sha512-y+aWYhGunxn/hgKTLqpzerzKAcxnI8Ohhl9q+RYMRQaQ2cl7iWYRDsubceNakunV0aR8bz0RM0c3WzatVrqEjQ==} engines: {node: ^22.21.0 || ^24.11.0 || >=26.0.0} hasBin: true peerDependencies: @@ -440,15 +447,15 @@ packages: optional: true '@nuxt/devtools-assets@file:.tarballs/nuxt-devtools-assets.tgz': - resolution: {integrity: sha512-0bhBuLRbrDlDo3j4oSQEo3QlqGqxQ5wPu96iION0JLUsJCFfQFv0UEvXY4Z4Ibifr1rYNdJ0fGhH9drKpxCFWw==, tarball: file:.tarballs/nuxt-devtools-assets.tgz} + resolution: {integrity: sha512-9TItU/zcIQFlYGJimthOBhmPU4zWVMMMH9N1LHimqY3uHoWXlh0EOWF1bgFza93zjYZCEKbjF0RbQiT1ssEv4g==, tarball: file:.tarballs/nuxt-devtools-assets.tgz} version: 4.0.0-beta.3 '@nuxt/devtools-kit@file:.tarballs/nuxt-devtools-kit.tgz': - resolution: {integrity: sha512-S7pPJ0o+zH0YJE49rJM5fPj/ErKRmP2Rk42mdsd0pNUg2Gh/kWR9iOUbqRGDtEkWy5BZf9CIENF4MAilMTSO6A==, tarball: file:.tarballs/nuxt-devtools-kit.tgz} + resolution: {integrity: sha512-6Im/Fia/gzzLxGfpvh9CUXzCZZo9H1hlRhAPrUTbX6zeVTDVVPU+znGj7Qvu+xHynCrbi6R/I0HHBQYZnO79+g==, tarball: file:.tarballs/nuxt-devtools-kit.tgz} version: 4.0.0-beta.3 peerDependencies: '@nuxt/kit': ^4.0.0-0 || ^5.0.0-0 - nitro: ^3.0.0-0 + nitro: '*' nitropack: ^2.0.0 vite: ^8.3.0 peerDependenciesMeta: @@ -457,13 +464,23 @@ packages: nitropack: optional: true + '@nuxt/devtools-onboard@file:.tarballs/nuxt-devtools-onboard.tgz': + resolution: {integrity: sha512-EcINNtawj65YjHt3z9y98g4BaOklU4SZJWysqQco2MscnrC3nAW4IhWxLBGkRIaKsKxknJaPK8a+si+tVhEp7g==, tarball: file:.tarballs/nuxt-devtools-onboard.tgz} + version: 4.0.0-beta.3 + peerDependencies: + '@nuxt/devtools': ^4.0.0-beta.3 + '@nuxt/kit': ^4.0.0-0 || ^5.0.0-0 + peerDependenciesMeta: + '@nuxt/devtools': + optional: true + '@nuxt/devtools@file:.tarballs/nuxt-devtools.tgz': - resolution: {integrity: sha512-q7qpgf0F3DNeou/9xvcG6GIa58oih4RO9CQS7WHA4eeQ9OtN0m96ilxWXkE5jSFY8q4SXoHb22ybGQrpWrQUPQ==, tarball: file:.tarballs/nuxt-devtools.tgz} + resolution: {integrity: sha512-zw7JGHwx8eAlR8fcKzfvWEZxb2KBWmDBHTkuzoMfa028+jN+QahvDhT/fE0BFHZW10O4aQoGm9MVAlmbEdvX4Q==, tarball: file:.tarballs/nuxt-devtools.tgz} version: 4.0.0-beta.3 peerDependencies: '@nuxt/devtools-assets': 4.0.0-beta.3 '@nuxt/kit': ^4.0.0-0 || ^5.0.0-0 - nitro: ^3.0.0-0 + nitro: '*' nitropack: ^2.0.0 vite: ^8.3.0 vite-plugin-inspect: ^12.0.2 @@ -1820,6 +1837,12 @@ snapshots: - crossws - ocache + '@devframes/hub-ui-onboard@1.2.1': + dependencies: + nostics: 1.3.0 + package-manager-detector: 1.8.0 + tinyexec: 1.3.1 + '@devframes/hub-ui@1.1.0(@devframes/hub@1.1.0(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.1.0)(ocache@0.3.0))(devframe@1.1.0)': dependencies: '@devframes/hub': 1.1.0(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.1.0)(ocache@0.3.0) @@ -2001,7 +2024,7 @@ snapshots: '@modelcontextprotocol/core': 2.2.0 zod: 4.6.5 - '@nuxt/cli-nightly@4.0.0-20261003-160317-f140924f(@nuxt/schema-nightly@5.0.0-29852495.9beb9427)(jiti@2.7.0)(rolldown@1.2.12)(vite@8.3.1)': + '@nuxt/cli-nightly@4.0.0-20261005-072115-f140924f(@nuxt/schema-nightly@5.0.0-29852495.9beb9427)(jiti@2.7.0)(rolldown@1.2.12)(vite@8.3.1)': dependencies: '@clack/prompts': 1.8.1 args-tokenizer: 0.3.0 @@ -2049,6 +2072,14 @@ snapshots: tinyexec: 1.3.1 vite: 8.3.1(@types/node@26.6.3)(@vitejs/devtools@0.7.6)(jiti@2.7.0) + '@nuxt/devtools-onboard@file:.tarballs/nuxt-devtools-onboard.tgz(@nuxt/devtools@file:.tarballs/nuxt-devtools.tgz(@nuxt/devtools-assets@file:.tarballs/nuxt-devtools-assets.tgz)(@nuxt/kit@4.5.2(magic-string@1.4.2)(magicast@0.5.5)(rolldown@1.2.12)(unplugin@3.4.0(rolldown@1.2.12)(vite@8.3.1)))(cac@7.0.0)(crossws@0.4.12(srvx@1.0.5))(db0@0.4.1)(ocache@0.3.0)(rolldown@1.2.12)(srvx@1.0.5)(vite@8.3.1)(vue@3.5.43))(@nuxt/kit@4.5.2(magic-string@1.4.2)(magicast@0.5.5)(rolldown@1.2.12)(unplugin@3.4.0(rolldown@1.2.12)(vite@8.3.1)))': + dependencies: + '@devframes/hub-ui-onboard': 1.2.1 + '@nuxt/kit': 4.5.2(magic-string@1.4.2)(magicast@0.5.5)(rolldown@1.2.12)(unplugin@3.4.0(rolldown@1.2.12)(vite@8.3.1)) + pkg-types: 2.3.3 + optionalDependencies: + '@nuxt/devtools': file:.tarballs/nuxt-devtools.tgz(@nuxt/devtools-assets@file:.tarballs/nuxt-devtools-assets.tgz)(@nuxt/kit@4.5.2(magic-string@1.4.2)(magicast@0.5.5)(rolldown@1.2.12)(unplugin@3.4.0(rolldown@1.2.12)(vite@8.3.1)))(cac@7.0.0)(crossws@0.4.12(srvx@1.0.5))(db0@0.4.1)(ocache@0.3.0)(rolldown@1.2.12)(srvx@1.0.5)(vite@8.3.1)(vue@3.5.43) + '@nuxt/devtools@file:.tarballs/nuxt-devtools.tgz(@nuxt/devtools-assets@file:.tarballs/nuxt-devtools-assets.tgz)(@nuxt/kit-nightly@5.0.0-29852495.9beb9427(@nuxt/schema-nightly@5.0.0-29852495.9beb9427)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.2)(mlly@1.8.2)(rolldown@1.2.12)(unplugin@3.4.0(rolldown@1.2.12)(vite@8.3.1)))(cac@7.0.0)(crossws@0.4.12(srvx@1.0.5))(db0@0.4.1)(ocache@0.3.0)(rolldown@1.2.12)(srvx@1.0.5)(vite@8.3.1)(vue@3.5.43)': dependencies: '@devframes/hub': 1.2.0(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.0)(ocache@0.3.0) @@ -3067,7 +3098,7 @@ snapshots: dependencies: '@dxup/nuxt': 0.5.10(magicast@0.5.5)(rolldown@1.2.12)(vite@8.3.1) '@jridgewell/trace-mapping': 0.3.31 - '@nuxt/cli': '@nuxt/cli-nightly@4.0.0-20261003-160317-f140924f(@nuxt/schema-nightly@5.0.0-29852495.9beb9427)(jiti@2.7.0)(rolldown@1.2.12)(vite@8.3.1)' + '@nuxt/cli': '@nuxt/cli-nightly@4.0.0-20261005-072115-f140924f(@nuxt/schema-nightly@5.0.0-29852495.9beb9427)(jiti@2.7.0)(rolldown@1.2.12)(vite@8.3.1)' '@nuxt/devtools': file:.tarballs/nuxt-devtools.tgz(@nuxt/devtools-assets@file:.tarballs/nuxt-devtools-assets.tgz)(@nuxt/kit-nightly@5.0.0-29852495.9beb9427(@nuxt/schema-nightly@5.0.0-29852495.9beb9427)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.2)(mlly@1.8.2)(rolldown@1.2.12)(unplugin@3.4.0(rolldown@1.2.12)(vite@8.3.1)))(cac@7.0.0)(crossws@0.4.12(srvx@1.0.5))(db0@0.4.1)(ocache@0.3.0)(rolldown@1.2.12)(srvx@1.0.5)(vite@8.3.1)(vue@3.5.43) '@nuxt/kit': '@nuxt/kit-nightly@5.0.0-29852495.9beb9427(@nuxt/schema-nightly@5.0.0-29852495.9beb9427)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.2)(mlly@1.8.2)(rolldown@1.2.12)(unplugin@3.4.0(rolldown@1.2.12)(vite@8.3.1))' '@nuxt/nitro-server': '@nuxt/nitro-server-nightly@5.0.0-29852495.9beb9427(@nuxt/schema-nightly@5.0.0-29852495.9beb9427)(@oxc-project/types@0.152.0)(acorn@8.18.0)(confbox@0.3.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(lightningcss@1.33.0)(mlly@1.8.2)(nuxt-nightly@5.0.0-29852495.9beb9427(@nuxt/devtools-assets@file:.tarballs/nuxt-devtools-assets.tgz)(@oxc-project/types@0.152.0)(@types/node@26.6.3)(@vitejs/devtools@0.7.6)(@vue/compiler-sfc@3.5.43)(acorn@8.18.0)(cac@7.0.0)(confbox@0.3.1)(crossws@0.4.12(srvx@1.0.5))(db0@0.4.1)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(lightningcss@1.33.0)(magicast@0.5.5)(mlly@1.8.2)(nuxt-nightly@5.0.0-29852495.9beb9427)(ocache@0.3.0)(rolldown@1.2.12)(srvx@1.0.5)(vite@8.3.1))(vite@8.3.1)' diff --git a/playgrounds-ecosystem/nuxt5/pnpm-workspace.yaml b/playgrounds-ecosystem/nuxt5/pnpm-workspace.yaml index 12b7f999ac..879f1f54c3 100644 --- a/playgrounds-ecosystem/nuxt5/pnpm-workspace.yaml +++ b/playgrounds-ecosystem/nuxt5/pnpm-workspace.yaml @@ -17,6 +17,7 @@ overrides: '@nuxt/devtools': file:.tarballs/nuxt-devtools.tgz '@nuxt/devtools-kit': file:.tarballs/nuxt-devtools-kit.tgz '@nuxt/devtools-assets': file:.tarballs/nuxt-devtools-assets.tgz + '@nuxt/devtools-onboard': file:.tarballs/nuxt-devtools-onboard.tgz # Vite 8.3+ auto-registers the Vite DevTools integration from the `devtools` # config option (vitejs/vite#23333) — this playground exercises that path # (nuxt4/ stays on the pre-8.3 manual-plugin fallback). @@ -45,3 +46,4 @@ minimumReleaseAgeExclude: - '@vitejs/devtools@0.7.5' - devframe@1.0.0 - '@types/node@26.6.1' + - '@devframes/hub-ui-onboard@1.2.1' diff --git a/playgrounds-ecosystem/scripts/pack-local.mjs b/playgrounds-ecosystem/scripts/pack-local.mjs index 684b5032c3..1126ad658c 100644 --- a/playgrounds-ecosystem/scripts/pack-local.mjs +++ b/playgrounds-ecosystem/scripts/pack-local.mjs @@ -40,8 +40,10 @@ const PLAYGROUNDS = ['nuxt4', 'nuxt5'] * and overridden together. `@nuxt/devtools-assets` carries the pre-built client * UI; it is an optional peer, so without it the client is fetched from the CDN * (which 404s for an unpublished local version) — the playgrounds install it - * directly. `@nuxt/devtools-ui-kit` is not a dependency of - * either, so it isn't packed. + * directly. `@nuxt/devtools-onboard` is the entry point Nuxt 5 ships; the + * playgrounds list it in `modules` so it hands off to the installed + * `@nuxt/devtools`. `@nuxt/devtools-ui-kit` is not a dependency of any of + * them, so it isn't packed. * * @type {Array<{ name: string, dir: string, out: string }>} */ @@ -49,6 +51,7 @@ const PACKAGES = [ { name: '@nuxt/devtools', dir: 'packages/devtools', out: 'nuxt-devtools.tgz' }, { name: '@nuxt/devtools-kit', dir: 'packages/devtools-kit', out: 'nuxt-devtools-kit.tgz' }, { name: '@nuxt/devtools-assets', dir: 'packages/devtools-assets', out: 'nuxt-devtools-assets.tgz' }, + { name: '@nuxt/devtools-onboard', dir: 'packages/devtools-onboard', out: 'nuxt-devtools-onboard.tgz' }, ] const skipBuild = process.argv.includes('--no-build') diff --git a/playgrounds/empty/nuxt.config.ts b/playgrounds/empty/nuxt.config.ts index f4166229fe..97d8b076cc 100644 --- a/playgrounds/empty/nuxt.config.ts +++ b/playgrounds/empty/nuxt.config.ts @@ -1,5 +1,7 @@ // https://nuxt.com/docs/api/configuration/nuxt-config -const devtoolsModule = process.env.NUXT_DEVTOOLS_LOCAL ? '../../local' : '@nuxt/devtools' +// `@nuxt/devtools-onboard` is the entry point Nuxt 5 ships; it loads the +// installed `@nuxt/devtools`, so this playground covers that hand-off. +const devtoolsModule = process.env.NUXT_DEVTOOLS_LOCAL ? '../../local' : '@nuxt/devtools-onboard' export default defineNuxtConfig({ modules: [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 126dce20c0..b2eb8af8f6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -196,7 +196,7 @@ catalogs: version: 15.0.0 exsolve: specifier: ^1.1.1 - version: 1.1.1 + version: 1.1.3 lightningcss: specifier: ^1.33.0 version: 1.33.0 @@ -398,7 +398,7 @@ catalogs: inlined: package-manager-detector: specifier: ^1.8.0 - version: 1.8.0 + version: 1.9.0 prod: consola: specifier: ^3.4.2 @@ -476,6 +476,7 @@ catalogs: overrides: '@devframes/hub': ^1.2.0 + '@devframes/hub-ui-onboard': ^1.2.0 '@devframes/json-render': ^1.2.0 '@devframes/plugin-code-server': ^1.2.0 '@devframes/plugin-data-inspector': ^1.2.0 @@ -520,6 +521,9 @@ importers: '@nuxt/devtools': specifier: workspace:* version: link:packages/devtools + '@nuxt/devtools-onboard': + specifier: workspace:* + version: link:packages/devtools-onboard '@nuxt/devtools-ui-kit': specifier: workspace:* version: link:packages/devtools-ui-kit @@ -769,7 +773,7 @@ importers: version: 3.4.16 exsolve: specifier: catalog:buildtools - version: 1.1.1 + version: 1.1.3 floating-vue: specifier: catalog:frontend version: 5.4.0(@nuxt/kit-nightly@5.0.0-2610052343-36eafab(@nuxt/schema-nightly@5.0.0-2610052343-36eafab)(confbox@0.2.4)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.2)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.12)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.12)(rollup@4.63.6)(vite@8.3.2)(webpack@5.111.1(cssnano@7.1.9(postcss@8.5.28))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.28)(svgo@4.1.0))))(vue@3.5.43(typescript@6.0.3)) @@ -802,7 +806,7 @@ importers: version: 1.5.1 package-manager-detector: specifier: catalog:inlined - version: 1.8.0 + version: 1.9.0 quicktype-core: specifier: catalog:frontend version: 22.0.0 @@ -906,6 +910,28 @@ importers: specifier: catalog:frontend version: 5.3.1(@vue/compiler-sfc@3.5.43)(esbuild@0.28.2)(rolldown@1.2.12)(rollup@4.63.6)(vite@8.3.2)(vue@3.5.43(typescript@6.0.3))(webpack@5.111.1(cssnano@7.1.9(postcss@8.5.28))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.28)(svgo@4.1.0)) + packages/devtools-onboard: + dependencies: + '@devframes/hub-ui-onboard': + specifier: ^1.2.0 + version: 1.2.2 + '@nuxt/devtools': + specifier: workspace:* + version: link:../devtools + '@nuxt/kit': + specifier: npm:@nuxt/kit-nightly@5.0.0-2610052343-36eafab + version: '@nuxt/kit-nightly@5.0.0-2610052343-36eafab(@nuxt/schema-nightly@5.0.0-2610052343-36eafab)(confbox@0.2.4)(dotenv@17.4.2)(giget@3.3.1)(jiti@2.7.0)(magic-string@1.4.2)(mlly@1.8.2)(oxc-parser@0.150.0)(rolldown@1.2.12)(unplugin@3.4.0(esbuild@0.28.2)(rolldown@1.2.12)(rollup@4.63.6)(vite@8.3.2)(webpack@5.111.1(cssnano@7.1.9(postcss@8.5.28))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.28)(svgo@4.1.0)))' + pkg-types: + specifier: catalog:prod + version: 2.3.3 + devDependencies: + '@nuxt/schema': + specifier: npm:@nuxt/schema-nightly@5.0.0-2610052343-36eafab + version: '@nuxt/schema-nightly@5.0.0-2610052343-36eafab' + nuxt: + specifier: npm:nuxt-nightly@5.0.0-2610052343-36eafab + version: nuxt-nightly@5.0.0-2610052343-36eafab(@oxc-project/types@0.152.0)(@parcel/watcher@2.6.0)(@types/node@26.6.4)(@vitejs/devtools-kit@0.7.6(@devframes/agentic@1.1.0)(cac@7.0.0)(crossws@0.4.12(srvx@1.0.5))(ocache@0.3.0)(srvx@1.0.5)(vite@8.3.2))(@vitejs/devtools@0.7.6)(@vue/compiler-sfc@3.5.43)(acorn@8.18.0)(autoprefixer@10.6.1(postcss@8.5.28))(confbox@0.2.4)(cssnano@7.1.9(postcss@8.5.28))(dotenv@17.4.2)(esbuild@0.28.2)(eslint@10.11.0(jiti@2.7.0)(supports-color@10.2.2))(giget@3.3.1)(jiti@2.7.0)(lightningcss@1.33.0)(mlly@1.8.2)(nuxt-nightly@5.0.0-2610052343-36eafab)(optionator@0.9.4)(oxc-parser@0.150.0)(rolldown@1.2.12)(rollup-plugin-visualizer@7.1.1(rolldown@1.2.12)(rollup@4.63.6))(rollup@4.63.6)(terser@5.51.2)(tsx@4.23.15)(typescript@6.0.3)(vite@8.3.2)(vue-tsc@3.3.11(typescript@6.0.3))(webpack@5.111.1(cssnano@7.1.9(postcss@8.5.28))(csso@5.0.5)(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.28)(svgo@4.1.0))(yaml@2.9.1) + packages/devtools-ui-kit: dependencies: '@iconify-json/carbon': @@ -1278,6 +1304,9 @@ packages: peerDependencies: devframe: ^1.2.0 + '@devframes/hub-ui-onboard@1.2.2': + resolution: {integrity: sha512-PSXiF2Kd5dZ9jDnA/hcyrmFSmuK016LTBq3OLHEoaB7t1J/eSLMqqYooEwZRWibPFCk6kw3hGwyX02/uhLI7YQ==} + '@devframes/hub-ui@1.2.0': resolution: {integrity: sha512-7q9zfo/i+Iiu5oO4RQdB3aWzt+4BWmKaK4L0UxwPxKibFx45xe3GrATNnoW1PY0kxY1gz2kqc9jdwXDOmXmmdw==} peerDependencies: @@ -7816,6 +7845,12 @@ snapshots: - crossws - ocache + '@devframes/hub-ui-onboard@1.2.2': + dependencies: + nostics: 1.3.0 + package-manager-detector: 1.9.0 + tinyexec: 1.3.1 + '@devframes/hub-ui@1.2.0(@devframes/hub@1.2.0(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.0)(ocache@0.3.0))(@devframes/json-render@1.2.0(@devframes/hub@1.2.0(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.0)(ocache@0.3.0))(devframe@1.2.0))(devframe@1.2.0)': dependencies: '@devframes/hub': 1.2.0(@devframes/agentic@1.1.0)(crossws@0.4.12(srvx@1.0.5))(devframe@1.2.0)(ocache@0.3.0) @@ -10832,7 +10867,7 @@ snapshots: confbox: 0.2.4 defu: 6.1.7 dotenv: 17.4.2 - exsolve: 1.1.1 + exsolve: 1.1.3 giget: 3.3.1 jiti: 2.7.0 ohash: 2.0.12 @@ -11220,7 +11255,7 @@ snapshots: env-runner@0.2.3: dependencies: crossws: 0.4.12(srvx@1.0.5) - exsolve: 1.1.1 + exsolve: 1.1.3 httpxy: 0.5.5 srvx: 1.0.5 @@ -13010,7 +13045,7 @@ snapshots: esbuild: 0.28.2 escape-string-regexp: 5.0.0 etag: 1.8.1 - exsolve: 1.1.1 + exsolve: 1.1.3 globby: 16.2.4 gzip-size: 7.0.0 h3: 1.15.11 @@ -13124,7 +13159,7 @@ snapshots: esbuild: 0.28.2 escape-string-regexp: 5.0.0 etag: 1.8.1 - exsolve: 1.1.1 + exsolve: 1.1.3 globby: 16.2.4 gzip-size: 7.0.0 h3: 1.15.11 @@ -14952,7 +14987,7 @@ snapshots: unwasm@0.5.3: dependencies: - exsolve: 1.1.1 + exsolve: 1.1.3 knitwork: 1.3.0 magic-string: 0.30.21 mlly: 1.8.2 @@ -15129,7 +15164,7 @@ snapshots: vite-plugin-vue-tracer@1.5.0(vite@8.3.2)(vue@3.5.43(typescript@6.0.3)): dependencies: estree-walker: 3.0.3 - exsolve: 1.1.1 + exsolve: 1.1.3 magic-string: 1.4.2 pathe: 2.0.3 source-map-js: 1.2.2 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 99c82c5129..83c9d087bb 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,6 +3,7 @@ ignoreWorkspaceRootCheck: true minimumReleaseAgeExcludePrune: true minimumReleaseAgeExclude: - '@devframes/hub' + - '@devframes/hub-ui-onboard' - '@devframes/json-render' - '@devframes/plugin-data-inspector' - '@devframes/plugin-code-server' @@ -93,6 +94,7 @@ packages: overrides: '@devframes/hub': &devframe ^1.2.0 + '@devframes/hub-ui-onboard': *devframe '@devframes/json-render': *devframe '@devframes/plugin-code-server': *devframe '@devframes/plugin-data-inspector': *devframe @@ -234,6 +236,7 @@ catalogs: package-manager-detector: ^1.8.0 prod: '@devframes/hub': *devframe + '@devframes/hub-ui-onboard': *devframe '@devframes/plugin-code-server': *devframe '@devframes/plugin-data-inspector': *devframe '@nuxt/kit': *nuxt-kit diff --git a/turbo.json b/turbo.json index 22b668d29d..ff60230a8d 100644 --- a/turbo.json +++ b/turbo.json @@ -49,6 +49,16 @@ "dist/**" ] }, + "@nuxt/devtools-onboard#build": { + // `@nuxt/devtools` is only an optional peer resolved at run time from + // the user's project; nothing of it is imported, so its build is not + // needed here. + "dependsOn": [], + "outputLogs": "new-only", + "outputs": [ + "dist/**" + ] + }, "@nuxt/devtools#build": { // The `@nuxt/devtools` *module* only depends on `@nuxt/devtools-kit`; // `@nuxt/devtools-assets` and `@nuxt/devtools-ui-kit` are workspace