diff --git a/packages/devtools/package.json b/packages/devtools/package.json index 33ce5d1242..9ae8b46fca 100644 --- a/packages/devtools/package.json +++ b/packages/devtools/package.json @@ -80,9 +80,9 @@ "perfect-debounce": "catalog:frontend", "pkg-types": "catalog:prod", "semver": "catalog:prod", - "simple-git": "catalog:prod", "sirv": "catalog:prod", "structured-clone-es": "catalog:frontend", + "tinyexec": "catalog:prod", "tinyglobby": "catalog:prod", "unstorage": "catalog:prod", "vite-plugin-inspect": "catalog:prod", diff --git a/packages/devtools/src/server-rpc/analyze-build.ts b/packages/devtools/src/server-rpc/analyze-build.ts index 850616560c..c2a86d5dca 100644 --- a/packages/devtools/src/server-rpc/analyze-build.ts +++ b/packages/devtools/src/server-rpc/analyze-build.ts @@ -4,7 +4,7 @@ import fs from 'node:fs' import fsp from 'node:fs/promises' import { startSubprocess } from '@nuxt/devtools-kit' import { dirname, join } from 'pathe' -import Git from 'simple-git' +import { x } from 'tinyexec' import { glob } from 'tinyglobby' const COLON_RE = /:/g @@ -87,14 +87,18 @@ export function setupAnalyzeBuildRPC({ nuxt, refresh, ensureDevAuthToken }: Nuxt return builds.sort((a, b) => b.endTime - a.endTime) } + async function git(...args: string[]): Promise { + const result = await x('git', args, { nodeOptions: { cwd: nuxt.options.rootDir }, throwOnError: true }) + return result.stdout.trim() + } + async function generateAnalyzeBuildName() { try { - const git = Git(nuxt.options.rootDir) - const branch = await git.branch() - const branchName = branch.current || 'head' - const sha = await git.revparse(['--short', 'HEAD']) - const isWorkingTreeClean = (await git.status()).isClean() - if (isWorkingTreeClean) + const branchName = await git('rev-parse', '--abbrev-ref', 'HEAD') || 'head' + const sha = await git('rev-parse', '--short', 'HEAD') + const status = await git('status', '--porcelain') + const isClean = status === '' + if (isClean) return `${branchName}#${sha}` return `${branchName}#${sha}-dirty` } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2774937fd1..154b1610b0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -332,12 +332,12 @@ catalogs: pkg-types: specifier: ^2.3.1 version: 2.3.1 - simple-git: - specifier: ^3.36.0 - version: 3.36.0 sirv: specifier: ^3.0.2 version: 3.0.2 + tinyexec: + specifier: ^1.3.0 + version: 1.3.0 tinyglobby: specifier: ^0.2.17 version: 0.2.17 @@ -579,15 +579,15 @@ importers: semver: specifier: ^7.8.5 version: 7.8.5 - simple-git: - specifier: catalog:prod - version: 3.36.0(supports-color@8.1.1) sirv: specifier: catalog:prod version: 3.0.2 structured-clone-es: specifier: ^2.0.1 version: 2.0.1 + tinyexec: + specifier: catalog:prod + version: 1.3.0 tinyglobby: specifier: catalog:prod version: 0.2.17 @@ -1859,12 +1859,6 @@ packages: resolution: {integrity: sha512-Rfyvq70Zrb561BqSuXLsl0rG0/1tz913EQDL/4zpkp+laFGUxXIVPSaJWcdREJwADXLZDkQyaWplzEaPQvh+7A==} hasBin: true - '@kwsites/file-exists@1.1.1': - resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} - - '@kwsites/promise-deferred@1.1.1': - resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} - '@lezer/common@1.2.3': resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==} @@ -3033,12 +3027,6 @@ packages: '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} - '@simple-git/args-pathspec@1.0.3': - resolution: {integrity: sha512-ngJMaHlsWDTfjyq9F3VIQ8b7NXbBLq5j9i5bJ6XLYtD6qlDXT7fdKY2KscWWUF8t18xx052Y/PUO1K1TRc9yKA==} - - '@simple-git/argv-parser@1.1.1': - resolution: {integrity: sha512-Q9lBcfQ+VQCpQqGJFHe5yooOS5hGdLFFbJ5R+R5aDsnkPCahtn1hSkMcORX65J2Z5lxSkD0lQorMsncuBQxYUw==} - '@sindresorhus/base62@1.0.0': resolution: {integrity: sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==} engines: {node: '>=18'} @@ -7889,9 +7877,6 @@ packages: resolution: {integrity: sha512-WszCLXwT4h2k1ufIXAgsbiTOazqqevFCIncOuUBZJ91DdvWcC5+OFkluWRQPrcuSYd8fjq+o2y1QfWqYMoAToQ==} hasBin: true - simple-git@3.36.0: - resolution: {integrity: sha512-cGQjLjK8bxJw4QuYT7gxHw3/IouVESbhahSsHrX97MzCL1gu2u7oy38W6L2ZIGECEfIBG4BabsWDPjBxJENv9Q==} - sirv@3.0.2: resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==} engines: {node: '>=18'} @@ -9252,7 +9237,7 @@ snapshots: '@antfu/install-pkg@1.1.0': dependencies: package-manager-detector: 1.8.0 - tinyexec: 1.2.4 + tinyexec: 1.3.0 '@antfu/ni@30.3.0': dependencies: @@ -9756,7 +9741,7 @@ snapshots: nostics: 1.2.0 pathe: 2.0.3 perfect-debounce: 2.1.0 - tinyexec: 1.2.4 + tinyexec: 1.3.0 zigpty: 0.2.1 '@devframes/hub@0.7.15(devframe@0.7.15(cac@7.0.0)(srvx@0.12.4)(typescript@5.9.3))': @@ -9767,7 +9752,7 @@ snapshots: nostics: 1.2.0 pathe: 2.0.3 perfect-debounce: 2.1.0 - tinyexec: 1.2.4 + tinyexec: 1.3.0 zigpty: 0.2.1 '@devframes/json-render@0.7.15(@devframes/hub@0.7.15(devframe@0.7.15(cac@7.0.0)(srvx@0.11.22)(typescript@5.9.3)))(devframe@0.7.15(cac@7.0.0)(srvx@0.11.22)(typescript@5.9.3))': @@ -10325,14 +10310,6 @@ snapshots: '@jsonquerylang/jsonquery@4.1.1': {} - '@kwsites/file-exists@1.1.1(supports-color@8.1.1)': - dependencies: - debug: 4.4.3(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - - '@kwsites/promise-deferred@1.1.1': {} - '@lezer/common@1.2.3': {} '@lezer/highlight@1.2.1': @@ -11265,7 +11242,7 @@ snapshots: radix3: 1.1.2 scule: 1.3.0 std-env: 4.1.0 - tinyexec: 1.2.4 + tinyexec: 1.3.0 ufo: 1.6.4 unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.1)(rollup@4.62.4)(vite@8.2.0)(webpack@5.98.0(esbuild@0.28.1)(uglify-js@3.19.3)) vitest-environment-nuxt: 2.0.0(@vitest/ui@4.1.10)(crossws@0.4.10(srvx@0.12.4))(esbuild@0.28.1)(magicast@0.5.4)(rolldown@1.2.1)(rollup@4.62.4)(typescript@5.9.3)(vite@8.2.0)(vitest@4.1.10)(webpack@5.98.0(esbuild@0.28.1)(uglify-js@3.19.3)) @@ -11312,7 +11289,7 @@ snapshots: radix3: 1.1.2 scule: 1.3.0 std-env: 4.2.0 - tinyexec: 1.2.4 + tinyexec: 1.3.0 ufo: 1.6.4 unplugin: 3.3.0(esbuild@0.28.1)(rolldown@1.2.1)(rollup@4.62.4)(vite@8.2.0)(webpack@5.98.0(esbuild@0.28.1)(uglify-js@3.19.3)) vitest-environment-nuxt: 2.0.0(@vitest/ui@4.1.10)(crossws@0.4.10(srvx@0.12.4))(esbuild@0.28.1)(magicast@0.5.4)(rolldown@1.2.1)(rollup@4.62.4)(typescript@5.9.3)(vite@8.2.0)(vitest@4.1.10)(webpack@5.98.0(esbuild@0.28.1)(uglify-js@3.19.3)) @@ -12154,12 +12131,6 @@ snapshots: '@shikijs/vscode-textmate@10.0.2': {} - '@simple-git/args-pathspec@1.0.3': {} - - '@simple-git/argv-parser@1.1.1': - dependencies: - '@simple-git/args-pathspec': 1.0.3 - '@sindresorhus/base62@1.0.0': {} '@sindresorhus/is@7.0.2': {} @@ -18992,16 +18963,6 @@ snapshots: simple-git-hooks@2.13.1: {} - simple-git@3.36.0(supports-color@8.1.1): - dependencies: - '@kwsites/file-exists': 1.1.1(supports-color@8.1.1) - '@kwsites/promise-deferred': 1.1.1 - '@simple-git/args-pathspec': 1.0.3 - '@simple-git/argv-parser': 1.1.1 - debug: 4.4.3(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - sirv@3.0.2: dependencies: '@polka/url': 1.0.0-next.28 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 66a42a4b0b..e46a990731 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -156,8 +156,8 @@ catalogs: package-manager-detector: ^1.8.0 pkg-types: ^2.3.1 semver: ^7.8.5 - simple-git: ^3.36.0 sirv: ^3.0.2 + tinyexec: ^1.3.0 tinyglobby: ^0.2.17 unstorage: ^1.17.5 vite-plugin-inspect: ^11.4.1