From 4f71f560d728ed8d1a52b28bcb3651baa7e7e6d2 Mon Sep 17 00:00:00 2001 From: yuyinws Date: Thu, 16 Jul 2026 15:49:40 +0800 Subject: [PATCH 1/6] fix(oxc): start standalone dev server directly --- package.json | 1 + packages/oxc/src/modules/{rpc.js => rpc.ts} | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) rename packages/oxc/src/modules/{rpc.js => rpc.ts} (74%) diff --git a/package.json b/package.json index e70c8cca..a3605210 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "watch": "pnpm -r run watch", "dev:rolldown": "pnpm -C packages/rolldown run dev", "dev:vite": "pnpm -C packages/vite run dev", + "dev:oxc": "pnpm -C packages/oxc run dev", "docs": "pnpm -C docs run docs", "docs:build": "pnpm build && pnpm -C docs run docs:build", "docs:serve": "pnpm -C docs run docs:serve", diff --git a/packages/oxc/src/modules/rpc.js b/packages/oxc/src/modules/rpc.ts similarity index 74% rename from packages/oxc/src/modules/rpc.js rename to packages/oxc/src/modules/rpc.ts index 4b83a577..ba2813e0 100644 --- a/packages/oxc/src/modules/rpc.js +++ b/packages/oxc/src/modules/rpc.ts @@ -1,6 +1,6 @@ import { addVitePlugin, defineNuxtModule } from '@nuxt/kit' import { DevTools } from '@vitejs/devtools' -import { DevToolsOxc } from '../../src/vite' +import { DevToolsOxc } from '../vite' export default defineNuxtModule({ meta: { @@ -10,7 +10,7 @@ export default defineNuxtModule({ async setup() { addVitePlugin(DevToolsOxc()) - const devtools = await DevTools() + const devtools = await DevTools({ builtinDevTools: false }) addVitePlugin(devtools) }, }) From 8ed9bdcada17c299f8656106face2fcbff61ffdd Mon Sep 17 00:00:00 2001 From: yuyinws Date: Thu, 16 Jul 2026 16:50:33 +0800 Subject: [PATCH 2/6] refactor(oxc): remove lint log cli --- docs/oxc/index.md | 2 +- packages/oxc/README.md | 6 -- packages/oxc/package.json | 2 - .../oxc/src/app/pages/lint/report/index.vue | 20 +--- packages/oxc/src/commands/lint.ts | 90 ---------------- packages/oxc/src/commands/main.ts | 4 +- packages/oxc/src/index.ts | 4 - packages/oxc/src/node/diagnostics.ts | 7 +- packages/oxc/src/node/utils/oxlint.ts | 100 +----------------- packages/oxc/tsconfig.json | 16 --- pnpm-lock.yaml | 66 +++++------- pnpm-workspace.yaml | 1 - 12 files changed, 30 insertions(+), 288 deletions(-) delete mode 100644 packages/oxc/src/commands/lint.ts delete mode 100644 packages/oxc/tsconfig.json diff --git a/docs/oxc/index.md b/docs/oxc/index.md index af491d20..fe44b72c 100644 --- a/docs/oxc/index.md +++ b/docs/oxc/index.md @@ -25,4 +25,4 @@ export default defineConfig({ }) ``` -It also runs standalone from the CLI — generate lint logs with `npx @vitejs/devtools-oxc lint`, then launch the UI with `npx @vitejs/devtools-oxc`. +It also runs standalone from the CLI with `npx @vitejs/devtools-oxc`. diff --git a/packages/oxc/README.md b/packages/oxc/README.md index 6a00a0c1..ec241b3f 100644 --- a/packages/oxc/README.md +++ b/packages/oxc/README.md @@ -40,12 +40,6 @@ yarn add -D @vitejs/devtools-oxc bun add -D @vitejs/devtools-oxc ``` -### Generate lint logs - -```sh -npx @vitejs/devtools-oxc lint -``` - ### Launch UI ```sh diff --git a/packages/oxc/package.json b/packages/oxc/package.json index 3f470bf0..d6604a8b 100644 --- a/packages/oxc/package.json +++ b/packages/oxc/package.json @@ -43,9 +43,7 @@ "typecheck": "vue-tsc --noEmit" }, "dependencies": { - "@clack/prompts": "catalog:inlined", "@vitejs/devtools-kit": "workspace:*", - "ansis": "catalog:deps", "devframe": "catalog:deps", "gunshi": "catalog:deps", "nostics": "catalog:deps", diff --git a/packages/oxc/src/app/pages/lint/report/index.vue b/packages/oxc/src/app/pages/lint/report/index.vue index c09593bf..68e9e3e2 100644 --- a/packages/oxc/src/app/pages/lint/report/index.vue +++ b/packages/oxc/src/app/pages/lint/report/index.vue @@ -45,27 +45,9 @@ const filteredSessionMetaList = computed(() => { - - diff --git a/packages/oxc/src/commands/lint.ts b/packages/oxc/src/commands/lint.ts deleted file mode 100644 index 15746810..00000000 --- a/packages/oxc/src/commands/lint.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { intro, outro, spinner, log } from '@clack/prompts' -import { define } from 'gunshi' -import { - execOxlintCommand, - getOxlintConfig, - getOxlintVersion, - groupByFilename, -} from '../node/utils/oxlint' -import { mkdir, readFile, writeFile } from 'node:fs/promises' -import { cwd } from 'node:process' -import c from 'ansis' -import { relative, resolve } from 'pathe' -import { version } from '../../package.json' - -export const lint = define({ - name: 'lint', - description: 'Generate oxlint logs', - run: async ({ _ }) => { - const spin = spinner() - - intro(`Oxc Inspector ${c.cyan(`v${version}`)}`) - - const gitignorePath = resolve(cwd(), '.gitignore') - let appended = false - try { - const content = await readFile(gitignorePath, 'utf-8') - const hasEntry = content.split('\n').some(line => { - const trimmed = line.trim() - return trimmed !== '' && !trimmed.startsWith('#') && /\.devtools-oxc/.test(trimmed) - }) - if (!hasEntry) { - const append = content.endsWith('\n') ? '.devtools-oxc\n' : '\n.devtools-oxc\n' - await writeFile(gitignorePath, content + append, 'utf-8') - appended = true - } - } catch (err) { - if ((err as NodeJS.ErrnoException).code === 'ENOENT') { - await writeFile(gitignorePath, '.devtools-oxc\n', 'utf-8') - appended = true - } else { - throw err - } - } - if (appended) { - log.info('Appended .devtools-oxc to .gitignore') - } - - spin.start('Running Oxlint...') - - const oxLintVersion = await getOxlintVersion() - const config = await getOxlintConfig() - const rawOutput = execOxlintCommand(_) - const groupedOutput = await groupByFilename(rawOutput) - - const logsRootDir = resolve(cwd(), '.devtools-oxc', 'lint') - await mkdir(logsRootDir, { recursive: true }) - const sessionId = Date.now() - const sessionDir = resolve(logsRootDir, String(sessionId)) - await mkdir(sessionDir, { recursive: true }) - await writeFile( - resolve(sessionDir, 'meta.json'), - JSON.stringify( - { - version: oxLintVersion, - timestamp: sessionId, - summary: groupedOutput.summary, - }, - null, - 2, - ), - 'utf-8', - ) - await writeFile( - resolve(sessionDir, 'logs.json'), - JSON.stringify( - { - files: groupedOutput.files, - config: config ? JSON.parse(config) : null, - }, - null, - 2, - ), - 'utf-8', - ) - spin.stop() - - outro(`Oxlint logs generated in ${c.cyan(relative(cwd(), sessionDir))}`) - process.exit(0) - }, -}) diff --git a/packages/oxc/src/commands/main.ts b/packages/oxc/src/commands/main.ts index f112fab0..111992f1 100644 --- a/packages/oxc/src/commands/main.ts +++ b/packages/oxc/src/commands/main.ts @@ -1,7 +1,5 @@ import { define } from 'gunshi' import { createDevServer } from 'devframe/adapters/dev' -import c from 'ansis' -import { log } from '@clack/prompts' import { oxcDevframe, OXC_DEVTOOLS_BASE } from '../node/devframe' export const mainCommand = define({ @@ -13,7 +11,7 @@ export const mainCommand = define({ // CLI shell stays framework-agnostic. await createDevServer(oxcDevframe, { onReady: ({ origin }) => { - log.info(`Oxc Inspector UI is running on ${c.cyan(`${origin}${OXC_DEVTOOLS_BASE}`)}`) + console.log(`Oxc Inspector UI is running on ${origin}${OXC_DEVTOOLS_BASE}`) }, }) }, diff --git a/packages/oxc/src/index.ts b/packages/oxc/src/index.ts index e4cbbbd4..04b785c4 100644 --- a/packages/oxc/src/index.ts +++ b/packages/oxc/src/index.ts @@ -1,14 +1,10 @@ import { argv } from 'node:process' import { cli } from 'gunshi' import { mainCommand } from './commands/main' -import { lint } from './commands/lint' import { version } from '../package.json' cli(argv.slice(2), mainCommand, { name: 'oxc-devtools', version, renderHeader: () => Promise.resolve(''), - subCommands: { - lint, - }, }) diff --git a/packages/oxc/src/node/diagnostics.ts b/packages/oxc/src/node/diagnostics.ts index bb53e78e..29707229 100644 --- a/packages/oxc/src/node/diagnostics.ts +++ b/packages/oxc/src/node/diagnostics.ts @@ -9,10 +9,5 @@ import { createConsoleReporter, defineDiagnostics } from 'nostics' export const diagnostics = /* #__PURE__ */ defineDiagnostics({ docsBase: 'https://devtools.vite.dev/errors', reporters: [createConsoleReporter()], - codes: { - OXDT0001: { - why: 'Oxc logs directory `.devtools-oxc` not found, you might want to run build with `npx @vitejs/devtools-oxc` to generate it first.', - fix: 'Run `npx @vitejs/devtools-oxc lint` to generate lint logs before launching the UI.', - }, - }, + codes: {}, }) diff --git a/packages/oxc/src/node/utils/oxlint.ts b/packages/oxc/src/node/utils/oxlint.ts index 4a68ab5a..cb9333f6 100644 --- a/packages/oxc/src/node/utils/oxlint.ts +++ b/packages/oxc/src/node/utils/oxlint.ts @@ -1,20 +1,9 @@ -import { execSync } from 'node:child_process' import { readFile } from 'node:fs/promises' import { dirname } from 'node:path' -import { cwd, exit } from 'node:process' +import { cwd } from 'node:process' import { fileURLToPath } from 'node:url' import { resolve } from 'pathe' -export async function getOxlintVersion() { - try { - const version = execSync('npx oxlint --version', { encoding: 'utf-8' }) - return version.split(' ')[1]?.replaceAll('\n', '') ?? undefined - } catch { - console.error('Oxlint is not installed, please install it first') - exit(1) - } -} - export async function getOxlintConfig() { // Read the .oxlintrc.json file in the current directory const configPath = resolve(cwd(), '.oxlintrc.json') @@ -27,91 +16,4 @@ export async function getOxlintConfig() { } } -function wrapOxlintCommand(rawArgs: string[]) { - const args = rawArgs.slice(1) - const commandArgs = ['npx', '--yes', 'oxlint', '-f', 'json', ...args] - return commandArgs.join(' ') -} - -export function execOxlintCommand(rawArgs: string[]) { - try { - const oxlintCommand = wrapOxlintCommand(rawArgs) - const output = execSync(oxlintCommand, { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] }) - return output - } catch (error) { - if (error instanceof Error && 'stdout' in error) { - return error.stdout as string - } - throw error - } -} - export const clientDir = resolve(dirname(fileURLToPath(import.meta.url)), './client/public') - -// Group diagnostics by filename -export async function groupByFilename(oxlintOutput: string) { - try { - const data = JSON.parse(oxlintOutput) - const diagnostics = data.diagnostics || [] - - // Group by filename - const grouped = diagnostics.reduce((acc: Record, diagnostic: any) => { - const filename = diagnostic.filename - if (!acc[filename]) { - acc[filename] = { - filename, - lines: {}, - } - } - - // Group by line - const line = diagnostic.labels?.[0]?.span?.line || 1 - if (!acc[filename].lines[line]) { - acc[filename].lines[line] = [] - } - acc[filename].lines[line].push(diagnostic) - - return acc - }, {}) - - // Convert to array format, turn the lines object into an array, and read each file's contents - const result = await Promise.all( - Object.values(grouped).map(async (file: any) => { - let source = '' - try { - source = await readFile(file.filename, 'utf-8') - } catch (error) { - console.warn(`Can not read file ${file.filename}:`, error) - source = '' - } - - return { - filename: file.filename, - source, - lines: Object.entries(file.lines) - .map(([line, messages]: [string, any]) => ({ - line: Number.parseInt(line), - messages, - })) - .sort((a, b) => a.line - b.line), // Sort by line number - } - }), - ) - - return { - files: result, - summary: { - number_of_files: data.number_of_files, - number_of_rules: data.number_of_rules, - threads_count: data.threads_count, - start_time: data.start_time, - files_with_issues: result.length, - error_count: diagnostics.filter((d: any) => d.severity === 'error').length, - warning_count: diagnostics.filter((d: any) => d.severity === 'warning').length, - }, - } - } catch (error) { - console.error('Failed to parse oxlint output:', error) - return { files: [], summary: {} } - } -} diff --git a/packages/oxc/tsconfig.json b/packages/oxc/tsconfig.json deleted file mode 100644 index 99e6e8b5..00000000 --- a/packages/oxc/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "compilerOptions": { - "composite": true, - "lib": ["esnext", "dom"] - }, - "include": [ - "src/index.ts", - "src/vite.ts", - "src/dirs.ts", - "src/commands", - "src/node", - "src/types", - "bin" - ] -} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 77708dc7..37a2e57d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -58,9 +58,6 @@ catalogs: actionspack: specifier: ^0.1.5 version: 0.1.5 - ansis: - specifier: ^4.3.1 - version: 4.3.1 birpc: specifier: ^4.0.0 version: 4.0.0 @@ -505,7 +502,7 @@ importers: version: 3.2.4(@vitejs/devtools@0.3.4)(vite@8.1.4)(vue@3.5.39(typescript@6.0.3)) '@nuxt/eslint': specifier: catalog:devtools - version: 1.16.0(@typescript-eslint/utils@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(@vue/compiler-sfc@3.5.39)(crossws@0.4.9(srvx@0.11.15))(esbuild@0.28.1)(eslint@10.7.0(jiti@2.7.0))(magicast@0.5.2)(oxc-parser@0.133.0)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) + version: 1.16.0(@typescript-eslint/utils@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(@vue/compiler-sfc@3.5.39)(crossws@0.4.10(srvx@0.11.15))(esbuild@0.28.1)(eslint@10.7.0(jiti@2.7.0))(magicast@0.5.2)(oxc-parser@0.133.0)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) '@nuxt/icon': specifier: catalog:build version: 2.3.1(magicast@0.5.2)(vite@8.1.4)(vue@3.5.39(typescript@6.0.3)) @@ -925,15 +922,9 @@ importers: packages/oxc: dependencies: - '@clack/prompts': - specifier: catalog:inlined - version: 1.7.0 '@vitejs/devtools-kit': specifier: workspace:* version: link:../kit - ansis: - specifier: catalog:deps - version: 4.3.1 devframe: specifier: catalog:deps version: 0.7.2(cac@7.0.0)(srvx@0.11.15)(typescript@6.0.3) @@ -10090,10 +10081,10 @@ snapshots: '@colordx/core@5.4.3': {} - '@devframes/hub@0.5.4(devframe@0.5.4(crossws@0.4.9(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1))': + '@devframes/hub@0.5.4(devframe@0.5.4(crossws@0.4.10(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1))': dependencies: birpc: 4.0.0 - devframe: 0.5.4(crossws@0.4.9(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) + devframe: 0.5.4(crossws@0.4.10(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) nostics: 0.2.0(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) pathe: 2.0.3 perfect-debounce: 2.1.0 @@ -10405,12 +10396,12 @@ snapshots: dependencies: '@eslint/core': 1.2.1 - '@eslint/config-inspector@3.0.4(crossws@0.4.9(srvx@0.11.15))(esbuild@0.28.1)(eslint@10.7.0(jiti@2.7.0))(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1))': + '@eslint/config-inspector@3.0.4(crossws@0.4.10(srvx@0.11.15))(esbuild@0.28.1)(eslint@10.7.0(jiti@2.7.0))(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1))': dependencies: ansis: 4.3.1 cac: 7.0.0 chokidar: 5.0.0 - devframe: 0.5.4(crossws@0.4.9(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) + devframe: 0.5.4(crossws@0.4.10(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) eslint: 10.7.0(jiti@2.7.0) jiti: 2.7.0 tinyglobby: 0.2.17 @@ -10829,7 +10820,7 @@ snapshots: which: 6.0.1 ws: 8.21.0 optionalDependencies: - '@vitejs/devtools': 0.3.4(crossws@0.4.9(srvx@0.11.15))(db0@0.3.4)(esbuild@0.28.1)(idb-keyval@6.3.0)(ioredis@5.10.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) + '@vitejs/devtools': 0.3.4(crossws@0.4.10(srvx@0.11.15))(db0@0.3.4)(esbuild@0.28.1)(idb-keyval@6.3.0)(ioredis@5.10.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) transitivePeerDependencies: - bufferutil - supports-color @@ -10919,9 +10910,9 @@ snapshots: - supports-color - typescript - '@nuxt/eslint@1.16.0(@typescript-eslint/utils@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(@vue/compiler-sfc@3.5.39)(crossws@0.4.9(srvx@0.11.15))(esbuild@0.28.1)(eslint@10.7.0(jiti@2.7.0))(magicast@0.5.2)(oxc-parser@0.133.0)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1))': + '@nuxt/eslint@1.16.0(@typescript-eslint/utils@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(@vue/compiler-sfc@3.5.39)(crossws@0.4.10(srvx@0.11.15))(esbuild@0.28.1)(eslint@10.7.0(jiti@2.7.0))(magicast@0.5.2)(oxc-parser@0.133.0)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1))': dependencies: - '@eslint/config-inspector': 3.0.4(crossws@0.4.9(srvx@0.11.15))(esbuild@0.28.1)(eslint@10.7.0(jiti@2.7.0))(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) + '@eslint/config-inspector': 3.0.4(crossws@0.4.10(srvx@0.11.15))(esbuild@0.28.1)(eslint@10.7.0(jiti@2.7.0))(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@8.1.4) '@nuxt/eslint-config': 1.16.0(@typescript-eslint/utils@8.64.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3))(@vue/compiler-sfc@3.5.39)(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) '@nuxt/eslint-plugin': 1.16.0(eslint@10.7.0(jiti@2.7.0))(typescript@6.0.3) @@ -13362,11 +13353,11 @@ snapshots: - rollup - supports-color - '@vitejs/devtools-kit@0.3.4(crossws@0.4.9(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1))': + '@vitejs/devtools-kit@0.3.4(crossws@0.4.10(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1))': dependencies: - '@devframes/hub': 0.5.4(devframe@0.5.4(crossws@0.4.9(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) + '@devframes/hub': 0.5.4(devframe@0.5.4(crossws@0.4.10(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) birpc: 4.0.0 - devframe: 0.5.4(crossws@0.4.9(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) + devframe: 0.5.4(crossws@0.4.10(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) mlly: 1.8.2 nostics: 1.1.4 pathe: 2.0.3 @@ -13401,18 +13392,18 @@ snapshots: - srvx - typescript - '@vitejs/devtools-rolldown@0.3.4(crossws@0.4.9(srvx@0.11.15))(db0@0.3.4)(esbuild@0.28.1)(idb-keyval@6.3.0)(ioredis@5.10.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(vue@3.5.39(typescript@6.0.3))(webpack@5.104.1(esbuild@0.28.1))': + '@vitejs/devtools-rolldown@0.3.4(crossws@0.4.10(srvx@0.11.15))(db0@0.3.4)(esbuild@0.28.1)(idb-keyval@6.3.0)(ioredis@5.10.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(vue@3.5.39(typescript@6.0.3))(webpack@5.104.1(esbuild@0.28.1))': dependencies: '@floating-ui/dom': 1.8.0 '@rolldown/debug': 1.1.5 - '@vitejs/devtools-kit': 0.3.4(crossws@0.4.9(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) + '@vitejs/devtools-kit': 0.3.4(crossws@0.4.10(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) birpc: 4.0.0 cac: 7.0.0 d3-shape: 3.2.0 - devframe: 0.5.4(crossws@0.4.9(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) + devframe: 0.5.4(crossws@0.4.10(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) diff: 9.0.0 get-port-please: 3.2.0 - h3: 2.0.1-rc.22(crossws@0.4.9(srvx@0.11.15)) + h3: 2.0.1-rc.22(crossws@0.4.10(srvx@0.11.15)) mlly: 1.8.2 mrmime: 2.0.1 nostics: 1.1.4 @@ -13479,15 +13470,15 @@ snapshots: - vue optional: true - '@vitejs/devtools@0.3.4(crossws@0.4.9(srvx@0.11.15))(db0@0.3.4)(esbuild@0.28.1)(idb-keyval@6.3.0)(ioredis@5.10.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1))': + '@vitejs/devtools@0.3.4(crossws@0.4.10(srvx@0.11.15))(db0@0.3.4)(esbuild@0.28.1)(idb-keyval@6.3.0)(ioredis@5.10.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1))': dependencies: - '@devframes/hub': 0.5.4(devframe@0.5.4(crossws@0.4.9(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) - '@vitejs/devtools-kit': 0.3.4(crossws@0.4.9(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) - '@vitejs/devtools-rolldown': 0.3.4(crossws@0.4.9(srvx@0.11.15))(db0@0.3.4)(esbuild@0.28.1)(idb-keyval@6.3.0)(ioredis@5.10.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(vue@3.5.39(typescript@6.0.3))(webpack@5.104.1(esbuild@0.28.1)) + '@devframes/hub': 0.5.4(devframe@0.5.4(crossws@0.4.10(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) + '@vitejs/devtools-kit': 0.3.4(crossws@0.4.10(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) + '@vitejs/devtools-rolldown': 0.3.4(crossws@0.4.10(srvx@0.11.15))(db0@0.3.4)(esbuild@0.28.1)(idb-keyval@6.3.0)(ioredis@5.10.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(vue@3.5.39(typescript@6.0.3))(webpack@5.104.1(esbuild@0.28.1)) birpc: 4.0.0 cac: 7.0.0 - devframe: 0.5.4(crossws@0.4.9(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) - h3: 2.0.1-rc.22(crossws@0.4.9(srvx@0.11.15)) + devframe: 0.5.4(crossws@0.4.10(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) + h3: 2.0.1-rc.22(crossws@0.4.10(srvx@0.11.15)) mlly: 1.8.2 nostics: 1.1.4 obug: 2.1.3 @@ -14900,12 +14891,12 @@ snapshots: devalue@5.8.1: {} - devframe@0.5.4(crossws@0.4.9(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)): + devframe@0.5.4(crossws@0.4.10(srvx@0.11.15))(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)): dependencies: '@valibot/to-json-schema': 1.7.1(valibot@1.4.2(typescript@6.0.3)) birpc: 4.0.0 cac: 7.0.0 - h3: 2.0.1-rc.22(crossws@0.4.9(srvx@0.11.15)) + h3: 2.0.1-rc.22(crossws@0.4.10(srvx@0.11.15)) mrmime: 2.0.1 nostics: 0.2.0(esbuild@0.28.1)(rolldown@1.1.5)(rollup@4.60.2)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) pathe: 2.0.3 @@ -15737,13 +15728,6 @@ snapshots: optionalDependencies: crossws: 0.4.10(srvx@0.11.15) - h3@2.0.1-rc.22(crossws@0.4.9(srvx@0.11.15)): - dependencies: - rou3: 0.8.1 - srvx: 0.11.15 - optionalDependencies: - crossws: 0.4.9(srvx@0.11.15) - hachure-fill@0.5.2: {} has-flag@4.0.0: {} @@ -18770,7 +18754,7 @@ snapshots: tree-kill: 1.2.2 unconfig-core: 7.5.0 optionalDependencies: - '@vitejs/devtools': 0.3.4(crossws@0.4.9(srvx@0.11.15))(db0@0.3.4)(esbuild@0.28.1)(idb-keyval@6.3.0)(ioredis@5.10.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) + '@vitejs/devtools': 0.3.4(crossws@0.4.10(srvx@0.11.15))(db0@0.3.4)(esbuild@0.28.1)(idb-keyval@6.3.0)(ioredis@5.10.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) publint: 0.3.21 tsx: 4.23.1 typescript: 6.0.3 @@ -19456,7 +19440,7 @@ snapshots: tinyglobby: 0.2.17 optionalDependencies: '@types/node': 25.0.3 - '@vitejs/devtools': 0.3.4(crossws@0.4.9(srvx@0.11.15))(db0@0.3.4)(esbuild@0.28.1)(idb-keyval@6.3.0)(ioredis@5.10.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) + '@vitejs/devtools': 0.3.4(crossws@0.4.10(srvx@0.11.15))(db0@0.3.4)(esbuild@0.28.1)(idb-keyval@6.3.0)(ioredis@5.10.1)(rolldown@1.1.5)(rollup@4.60.2)(typescript@6.0.3)(vite@8.1.4)(webpack@5.104.1(esbuild@0.28.1)) esbuild: 0.28.1 fsevents: 2.3.3 jiti: 2.7.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index dd0bdc3a..2cfc9db0 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -65,7 +65,6 @@ catalogs: '@devframes/plugin-terminals': ^0.7.2 '@rolldown/debug': ^1.1.5 actionspack: ^0.1.5 - ansis: ^4.3.1 birpc: ^4.0.0 cac: ^7.0.0 devframe: ^0.7.2 From 54aef9f057dc7313e82fe74f7438fe5eee3c9d2c Mon Sep 17 00:00:00 2001 From: yuyinws Date: Thu, 16 Jul 2026 17:16:26 +0800 Subject: [PATCH 3/6] refactor(oxc): use cac for cli --- packages/oxc/package.json | 2 +- packages/oxc/src/commands/main.ts | 18 ------------------ packages/oxc/src/index.ts | 21 +++++++++++++++------ packages/oxc/src/node/devframe.ts | 2 +- pnpm-lock.yaml | 15 +++------------ pnpm-workspace.yaml | 1 - 6 files changed, 20 insertions(+), 39 deletions(-) delete mode 100644 packages/oxc/src/commands/main.ts diff --git a/packages/oxc/package.json b/packages/oxc/package.json index d6604a8b..8f4307d2 100644 --- a/packages/oxc/package.json +++ b/packages/oxc/package.json @@ -44,8 +44,8 @@ }, "dependencies": { "@vitejs/devtools-kit": "workspace:*", + "cac": "catalog:deps", "devframe": "catalog:deps", - "gunshi": "catalog:deps", "nostics": "catalog:deps", "pathe": "catalog:deps", "tinyexec": "catalog:deps" diff --git a/packages/oxc/src/commands/main.ts b/packages/oxc/src/commands/main.ts deleted file mode 100644 index 111992f1..00000000 --- a/packages/oxc/src/commands/main.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { define } from 'gunshi' -import { createDevServer } from 'devframe/adapters/dev' -import { oxcDevframe, OXC_DEVTOOLS_BASE } from '../node/devframe' - -export const mainCommand = define({ - name: 'main', - description: 'Start oxc-devtools ui', - run: async () => { - // Spin up the devframe-powered dev server (h3 + WebSocket RPC + the SPA). - // We drive it directly from gunshi rather than devframe's `createCli` so the - // CLI shell stays framework-agnostic. - await createDevServer(oxcDevframe, { - onReady: ({ origin }) => { - console.log(`Oxc Inspector UI is running on ${origin}${OXC_DEVTOOLS_BASE}`) - }, - }) - }, -}) diff --git a/packages/oxc/src/index.ts b/packages/oxc/src/index.ts index 04b785c4..0277ad57 100644 --- a/packages/oxc/src/index.ts +++ b/packages/oxc/src/index.ts @@ -1,10 +1,19 @@ import { argv } from 'node:process' -import { cli } from 'gunshi' -import { mainCommand } from './commands/main' +import cac from 'cac' +import { createDevServer } from 'devframe/adapters/dev' import { version } from '../package.json' +import { oxcDevframe, OXC_DEVTOOLS_BASE } from './node/devframe' -cli(argv.slice(2), mainCommand, { - name: 'oxc-devtools', - version, - renderHeader: () => Promise.resolve(''), +const cli = cac('oxc-devtools') + +cli.command('', 'Start Oxc DevTools').action(async () => { + await createDevServer(oxcDevframe, { + onReady: ({ origin }) => { + console.log(`Oxc Inspector UI is running on ${origin}${OXC_DEVTOOLS_BASE}`) + }, + }) }) + +cli.version(version) +cli.help() +cli.parse(argv) diff --git a/packages/oxc/src/node/devframe.ts b/packages/oxc/src/node/devframe.ts index f226986f..5b6f2eab 100644 --- a/packages/oxc/src/node/devframe.ts +++ b/packages/oxc/src/node/devframe.ts @@ -13,7 +13,7 @@ export const OXC_DEVTOOLS_BASE = '/__devtools-oxc/' * * - **embedded** in Vite DevTools via kit's `createPluginFromDevframe` * (see `../vite.ts`), and - * - **standalone** via devframe's `createDevServer` (see `../commands/main.ts`). + * - **standalone** via devframe's `createDevServer` (see `../../index.ts`). * * `setup(ctx)` only registers RPC functions — the SPA hosting and dock entry * are derived from this metadata by the respective adapter. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 37a2e57d..48eeaf15 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -73,9 +73,6 @@ catalogs: get-port-please: specifier: ^3.2.0 version: 3.2.0 - gunshi: - specifier: ^0.36.0 - version: 0.36.0 h3: specifier: 2.0.1-rc.22 version: 2.0.1-rc.22 @@ -925,12 +922,12 @@ importers: '@vitejs/devtools-kit': specifier: workspace:* version: link:../kit + cac: + specifier: ^7.0.0 + version: 7.0.0 devframe: specifier: catalog:deps version: 0.7.2(cac@7.0.0)(srvx@0.11.15)(typescript@6.0.3) - gunshi: - specifier: catalog:deps - version: 0.36.0 nostics: specifier: catalog:deps version: 1.1.4 @@ -6832,10 +6829,6 @@ packages: resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} engines: {node: '>=6.0'} - gunshi@0.36.0: - resolution: {integrity: sha512-LJhM/2YiC4GfsaT2fnvccNkGXzbtMCBkgXpyLSM+1QVal2n7k8VJZol8qm1qgm2wmaQ6NBVmcGZIOkB/ms+6uQ==} - engines: {node: '>= 22'} - gzip-size@6.0.0: resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} engines: {node: '>=10'} @@ -15699,8 +15692,6 @@ snapshots: section-matter: 1.0.0 strip-bom-string: 1.0.0 - gunshi@0.36.0: {} - gzip-size@6.0.0: dependencies: duplexer: 0.1.2 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 2cfc9db0..4e52f7b1 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -71,7 +71,6 @@ catalogs: diff: ^9.0.0 envinfo: ^7.21.0 get-port-please: ^3.2.0 - gunshi: ^0.36.0 h3: 2.0.1-rc.22 local-pkg: ^1.2.1 mlly: ^1.8.2 From 526adf22bd4158f506617313a227fe45104f7d93 Mon Sep 17 00:00:00 2001 From: yuyinws Date: Thu, 16 Jul 2026 17:21:02 +0800 Subject: [PATCH 4/6] chore: clean code --- packages/oxc/src/commands/fmt.ts | 1 - 1 file changed, 1 deletion(-) delete mode 100644 packages/oxc/src/commands/fmt.ts diff --git a/packages/oxc/src/commands/fmt.ts b/packages/oxc/src/commands/fmt.ts deleted file mode 100644 index acb6ccd8..00000000 --- a/packages/oxc/src/commands/fmt.ts +++ /dev/null @@ -1 +0,0 @@ -export const fmt = '' From 1163c49b3ecee8e124e6db6f266468bcec7754a1 Mon Sep 17 00:00:00 2001 From: yuyinws Date: Fri, 17 Jul 2026 15:05:31 +0800 Subject: [PATCH 5/6] feat: reorganize page structure --- packages/oxc/src/app/app.vue | 4 +- .../oxc/src/app/components/SessionCard.vue | 2 +- packages/oxc/src/app/pages/index.vue | 357 ++++++++---------- packages/oxc/src/app/pages/oxfmt.vue | 31 ++ .../src/app/pages/{fmt => oxfmt}/config.vue | 0 .../oxc/src/app/pages/oxfmt/documents.vue | 10 + packages/oxc/src/app/pages/oxlint.vue | 36 ++ .../src/app/pages/{lint => oxlint}/config.vue | 0 .../oxc/src/app/pages/oxlint/documents.vue | 10 + .../report/index.vue => oxlint/lint.vue} | 0 .../{lint/report => oxlint/lint}/[id].vue | 0 .../src/node/__tests__/config-files.test.ts | 74 ++++ .../node/rpc/functions/get-config-files.ts | 12 + packages/oxc/src/node/rpc/index.ts | 2 + packages/oxc/src/node/utils/config-files.ts | 99 +++++ packages/oxc/src/nuxt.config.ts | 19 +- 16 files changed, 439 insertions(+), 217 deletions(-) create mode 100644 packages/oxc/src/app/pages/oxfmt.vue rename packages/oxc/src/app/pages/{fmt => oxfmt}/config.vue (100%) create mode 100644 packages/oxc/src/app/pages/oxfmt/documents.vue create mode 100644 packages/oxc/src/app/pages/oxlint.vue rename packages/oxc/src/app/pages/{lint => oxlint}/config.vue (100%) create mode 100644 packages/oxc/src/app/pages/oxlint/documents.vue rename packages/oxc/src/app/pages/{lint/report/index.vue => oxlint/lint.vue} (100%) rename packages/oxc/src/app/pages/{lint/report => oxlint/lint}/[id].vue (100%) create mode 100644 packages/oxc/src/node/__tests__/config-files.test.ts create mode 100644 packages/oxc/src/node/rpc/functions/get-config-files.ts create mode 100644 packages/oxc/src/node/utils/config-files.ts diff --git a/packages/oxc/src/app/app.vue b/packages/oxc/src/app/app.vue index 7a793338..659cffd6 100644 --- a/packages/oxc/src/app/app.vue +++ b/packages/oxc/src/app/app.vue @@ -12,7 +12,5 @@ connect() {{ connectionState.error }} -
- -
+ diff --git a/packages/oxc/src/app/components/SessionCard.vue b/packages/oxc/src/app/components/SessionCard.vue index 1b2d3701..b5ba53af 100644 --- a/packages/oxc/src/app/components/SessionCard.vue +++ b/packages/oxc/src/app/components/SessionCard.vue @@ -12,7 +12,7 @@ const failed = computed(() => {