diff --git a/docs/.vitepress/loaders/cli.data.ts b/docs/.vitepress/loaders/cli.data.ts index c99d94844..77327e703 100644 --- a/docs/.vitepress/loaders/cli.data.ts +++ b/docs/.vitepress/loaders/cli.data.ts @@ -1,6 +1,6 @@ -import { resolve, join } from 'node:path'; +import { resolve } from 'node:path'; import consola from 'consola'; -import { execaCommand } from 'execa'; +import spawn from 'nano-spawn'; const cliDir = resolve('packages/wxt/src/cli/commands'); const cliDirGlob = resolve(cliDir, '**'); @@ -37,7 +37,8 @@ export default { }; async function getHelp(command: string): Promise { - const res = await execaCommand(command + ' --help', { + const args = command.split(' '); + const res = await spawn(args[0], [...args.slice(1), '--help'], { cwd: 'packages/wxt', }); return res.stdout; diff --git a/package.json b/package.json index bc0e1a55d..1a3a4e651 100644 --- a/package.json +++ b/package.json @@ -24,11 +24,11 @@ "changelogen": "^0.5.7", "consola": "^3.2.3", "dependency-graph": "^1.0.0", - "execa": "^9.4.0", "fast-glob": "^3.3.2", "fs-extra": "^11.2.0", "hasha": "^6.0.0", "lint-staged": "^15.2.10", + "nano-spawn": "^0.1.0", "npm-run-all": "^4.1.5", "prettier": "^3.3.3", "simple-git-hooks": "^2.11.1", diff --git a/packages/wxt/e2e/tests/auto-imports.test.ts b/packages/wxt/e2e/tests/auto-imports.test.ts index c1eecb5fa..167b33a44 100644 --- a/packages/wxt/e2e/tests/auto-imports.test.ts +++ b/packages/wxt/e2e/tests/auto-imports.test.ts @@ -1,6 +1,6 @@ import { describe, it, expect } from 'vitest'; import { TestProject } from '../utils'; -import { execaCommand } from 'execa'; +import spawn from 'nano-spawn'; describe('Auto Imports', () => { describe('imports: { ... }', () => { @@ -180,7 +180,7 @@ describe('Auto Imports', () => { await project.prepare({ imports: { eslintrc: { enabled: version } }, }); - return await execaCommand('pnpm eslint entrypoints/background.js', { + return await spawn('pnpm', ['eslint', 'entrypoints/background.js'], { cwd: project.root, }); } @@ -205,7 +205,8 @@ describe('Auto Imports', () => { ); await expect(runEslint(project, 9)).rejects.toMatchObject({ - message: expect.stringContaining( + exitCode: 1, + stdout: expect.stringContaining( "'defineBackground' is not defined", ), }); @@ -253,7 +254,8 @@ describe('Auto Imports', () => { ); await expect(runEslint(project, 8)).rejects.toMatchObject({ - message: expect.stringContaining( + exitCode: 1, + stdout: expect.stringContaining( "'defineBackground' is not defined", ), }); diff --git a/packages/wxt/e2e/tests/init.test.ts b/packages/wxt/e2e/tests/init.test.ts index 269a86ce0..a004be045 100644 --- a/packages/wxt/e2e/tests/init.test.ts +++ b/packages/wxt/e2e/tests/init.test.ts @@ -1,6 +1,6 @@ import { describe, it, expect } from 'vitest'; import { TestProject, WXT_PACKAGE_DIR } from '../utils'; -import { execaCommand } from 'execa'; +import spawn from 'nano-spawn'; import glob from 'fast-glob'; import { mkdir, writeJson } from 'fs-extra'; @@ -8,11 +8,15 @@ describe('Init command', () => { it('should download and create a template', async () => { const project = new TestProject(); - await execaCommand(`pnpm -s wxt init ${project.root} -t vue --pm npm`, { - env: { ...process.env, CI: 'true' }, - stdio: 'ignore', - cwd: WXT_PACKAGE_DIR, - }); + await spawn( + 'pnpm', + ['-s', 'wxt', 'init', project.root, '-t', 'vue', '--pm', 'npm'], + { + env: { CI: 'true' }, + stdio: 'ignore', + cwd: WXT_PACKAGE_DIR, + }, + ); const files = await glob('**/*', { cwd: project.root, onlyFiles: true, @@ -51,11 +55,15 @@ describe('Init command', () => { await writeJson(project.resolvePath('package.json'), {}); await expect(() => - execaCommand(`pnpm -s wxt init ${project.root} -t vue --pm npm`, { - env: { ...process.env, CI: 'true' }, - stdio: 'ignore', - cwd: WXT_PACKAGE_DIR, - }), + spawn( + 'pnpm', + ['-s', 'wxt', 'init', project.root, '-t', 'vue', '--pm', 'npm'], + { + env: { CI: 'true' }, + stdio: 'ignore', + cwd: WXT_PACKAGE_DIR, + }, + ), ).rejects.toThrowError('Command failed with exit code 1:'); }); }); diff --git a/packages/wxt/e2e/tests/zip.test.ts b/packages/wxt/e2e/tests/zip.test.ts index 713ad68ab..e20fccc10 100644 --- a/packages/wxt/e2e/tests/zip.test.ts +++ b/packages/wxt/e2e/tests/zip.test.ts @@ -1,7 +1,7 @@ import { describe, expect, it } from 'vitest'; import { TestProject } from '../utils'; import extract from 'extract-zip'; -import { execaCommand } from 'execa'; +import spawn from 'nano-spawn'; import { readFile, writeFile } from 'fs-extra'; process.env.WXT_PNPM_IGNORE_WORKSPACE = 'true'; @@ -41,13 +41,15 @@ describe('Zipping', () => { // Build zipped extension await expect( - execaCommand('pnpm i --ignore-workspace --frozen-lockfile false', { + spawn('pnpm', ['i', '--ignore-workspace', '--frozen-lockfile', 'false'], { cwd: unzipDir, }), - ).resolves.toMatchObject({ exitCode: 0 }); + ).resolves.not.toHaveProperty('exitCode'); await expect( - execaCommand('pnpm wxt build -b firefox', { cwd: unzipDir }), - ).resolves.toMatchObject({ exitCode: 0 }); + spawn('pnpm', ['wxt', 'build', '-b', 'firefox'], { + cwd: unzipDir, + }), + ).resolves.not.toHaveProperty('exitCode'); await expect(project.fileExists(unzipDir, '.output')).resolves.toBe(true); expect( diff --git a/packages/wxt/e2e/utils.ts b/packages/wxt/e2e/utils.ts index a57943d7b..8a44c9859 100644 --- a/packages/wxt/e2e/utils.ts +++ b/packages/wxt/e2e/utils.ts @@ -1,7 +1,7 @@ import { dirname, relative, resolve } from 'path'; import fs, { mkdir } from 'fs-extra'; import glob from 'fast-glob'; -import { execaCommand } from 'execa'; +import spawn from 'nano-spawn'; import { InlineConfig, UserConfig, @@ -119,7 +119,7 @@ export class TestProject { await fs.writeFile(filePath, content ?? '', 'utf-8'); } - await execaCommand('pnpm --ignore-workspace i --ignore-scripts', { + await spawn('pnpm', ['--ignore-workspace', 'i', '--ignore-scripts'], { cwd: this.root, }); await mkdir(resolve(this.root, 'public'), { recursive: true }).catch( diff --git a/packages/wxt/package.json b/packages/wxt/package.json index 12656d1c1..2e7fbd492 100644 --- a/packages/wxt/package.json +++ b/packages/wxt/package.json @@ -97,7 +97,6 @@ "dequal": "^2.0.3", "dotenv": "^16.4.5", "esbuild": "^0.24.0", - "execa": "^9.4.0", "fast-glob": "^3.3.2", "filesize": "^10.1.6", "fs-extra": "^11.2.0", @@ -111,6 +110,7 @@ "linkedom": "^0.18.5", "magicast": "^0.3.5", "minimatch": "^10.0.1", + "nano-spawn": "^0.1.0", "natural-compare": "^1.4.0", "normalize-path": "^3.0.0", "nypm": "^0.3.12", diff --git a/packages/wxt/src/cli/cli-utils.ts b/packages/wxt/src/cli/cli-utils.ts index 952416a17..2f525ae6f 100644 --- a/packages/wxt/src/cli/cli-utils.ts +++ b/packages/wxt/src/cli/cli-utils.ts @@ -5,6 +5,7 @@ import { printHeader } from '../core/utils/log'; import { formatDuration } from '../core/utils/time'; import { ValidationError } from '../core/utils/validation'; import { registerWxt } from '../core/wxt'; +import spawn from 'nano-spawn'; /** * Wrap an action handler to add a timer, error handling, and maybe enable debug mode. @@ -87,8 +88,7 @@ export function createAliasedCommand( const args = process.argv.slice( process.argv.indexOf(aliasedCommand.name) + 1, ); - const { execa } = await import('execa'); - await execa(bin, args, { + await spawn(bin, args, { stdio: 'inherit', }); } catch { diff --git a/packages/wxt/src/core/package-managers/__tests__/npm.test.ts b/packages/wxt/src/core/package-managers/__tests__/npm.test.ts index 5e27e3e10..de2e8e2ae 100644 --- a/packages/wxt/src/core/package-managers/__tests__/npm.test.ts +++ b/packages/wxt/src/core/package-managers/__tests__/npm.test.ts @@ -1,7 +1,7 @@ import { beforeAll, describe, expect, it } from 'vitest'; import path from 'node:path'; import { npm } from '../npm'; -import { execaCommand } from 'execa'; +import spawn from 'nano-spawn'; import { exists } from 'fs-extra'; describe('NPM Package Management Utils', () => { @@ -9,7 +9,7 @@ describe('NPM Package Management Utils', () => { const cwd = path.resolve(__dirname, 'fixtures/simple-npm-project'); beforeAll(async () => { // NPM needs the modules installed for 'npm ls' to work - await execaCommand('npm i', { cwd }); + await spawn('npm', ['i'], { cwd }); }, 60e3); it('should list direct dependencies', async () => { diff --git a/packages/wxt/src/core/package-managers/__tests__/pnpm.test.ts b/packages/wxt/src/core/package-managers/__tests__/pnpm.test.ts index 34b48811d..20b6312c8 100644 --- a/packages/wxt/src/core/package-managers/__tests__/pnpm.test.ts +++ b/packages/wxt/src/core/package-managers/__tests__/pnpm.test.ts @@ -1,7 +1,7 @@ import { beforeAll, describe, expect, it } from 'vitest'; import path from 'node:path'; import { pnpm } from '../pnpm'; -import { execaCommand } from 'execa'; +import spawn from 'nano-spawn'; process.env.WXT_PNPM_IGNORE_WORKSPACE = 'true'; @@ -10,7 +10,7 @@ describe('PNPM Package Management Utils', () => { const cwd = path.resolve(__dirname, 'fixtures/simple-pnpm-project'); beforeAll(async () => { // PNPM needs the modules installed, or 'pnpm ls' will return a blank list. - await execaCommand('pnpm i --ignore-workspace', { cwd }); + await spawn('pnpm', ['i', '--ignore-workspace'], { cwd }); }); it('should list direct dependencies', async () => { diff --git a/packages/wxt/src/core/package-managers/bun.ts b/packages/wxt/src/core/package-managers/bun.ts index 8296c0154..e06882d11 100644 --- a/packages/wxt/src/core/package-managers/bun.ts +++ b/packages/wxt/src/core/package-managers/bun.ts @@ -1,5 +1,6 @@ import { dedupeDependencies, npm } from './npm'; import { WxtPackageManagerImpl } from './types'; +import spawn from 'nano-spawn'; export const bun: WxtPackageManagerImpl = { overridesKey: 'overrides', // But also supports "resolutions" @@ -11,8 +12,7 @@ export const bun: WxtPackageManagerImpl = { if (options?.all) { args.push('--all'); } - const { execa } = await import('execa'); - const res = await execa('bun', args, { cwd: options?.cwd }); + const res = await spawn('bun', args, { cwd: options?.cwd }); return dedupeDependencies( res.stdout .split('\n') diff --git a/packages/wxt/src/core/package-managers/npm.ts b/packages/wxt/src/core/package-managers/npm.ts index 4137b962c..7ad5386f8 100644 --- a/packages/wxt/src/core/package-managers/npm.ts +++ b/packages/wxt/src/core/package-managers/npm.ts @@ -2,13 +2,13 @@ import { Dependency } from '../../types'; import { WxtPackageManagerImpl } from './types'; import path from 'node:path'; import { ensureDir } from 'fs-extra'; +import spawn from 'nano-spawn'; export const npm: WxtPackageManagerImpl = { overridesKey: 'overrides', async downloadDependency(id, downloadDir) { await ensureDir(downloadDir); - const { execa } = await import('execa'); - const res = await execa('npm', ['pack', id, '--json'], { + const res = await spawn('npm', ['pack', id, '--json'], { cwd: downloadDir, }); const packed: PackedDependency[] = JSON.parse(res.stdout); @@ -19,8 +19,7 @@ export const npm: WxtPackageManagerImpl = { if (options?.all) { args.push('--depth', 'Infinity'); } - const { execa } = await import('execa'); - const res = await execa('npm', args, { cwd: options?.cwd }); + const res = await spawn('npm', args, { cwd: options?.cwd }); const project: NpmListProject = JSON.parse(res.stdout); return flattenNpmListOutput([project]); diff --git a/packages/wxt/src/core/package-managers/pnpm.ts b/packages/wxt/src/core/package-managers/pnpm.ts index 891fe18a3..32d89b609 100644 --- a/packages/wxt/src/core/package-managers/pnpm.ts +++ b/packages/wxt/src/core/package-managers/pnpm.ts @@ -1,5 +1,6 @@ import { NpmListProject, flattenNpmListOutput, npm } from './npm'; import { WxtPackageManagerImpl } from './types'; +import spawn from 'nano-spawn'; export const pnpm: WxtPackageManagerImpl = { overridesKey: 'resolutions', // "pnpm.overrides" has a higher priority, but I don't want to deal with nesting @@ -19,8 +20,7 @@ export const pnpm: WxtPackageManagerImpl = { ) { args.push('--ignore-workspace'); } - const { execa } = await import('execa'); - const res = await execa('pnpm', args, { cwd: options?.cwd }); + const res = await spawn('pnpm', args, { cwd: options?.cwd }); const projects: NpmListProject[] = JSON.parse(res.stdout); return flattenNpmListOutput(projects); diff --git a/packages/wxt/src/core/package-managers/yarn.ts b/packages/wxt/src/core/package-managers/yarn.ts index c313ca8d6..8b5449329 100644 --- a/packages/wxt/src/core/package-managers/yarn.ts +++ b/packages/wxt/src/core/package-managers/yarn.ts @@ -1,6 +1,7 @@ import { Dependency } from '../../types'; import { WxtPackageManagerImpl } from './types'; import { dedupeDependencies, npm } from './npm'; +import spawn from 'nano-spawn'; export const yarn: WxtPackageManagerImpl = { overridesKey: 'resolutions', @@ -12,8 +13,7 @@ export const yarn: WxtPackageManagerImpl = { if (options?.all) { args.push('--depth', 'Infinity'); } - const { execa } = await import('execa'); - const res = await execa('yarn', args, { cwd: options?.cwd }); + const res = await spawn('yarn', args, { cwd: options?.cwd }); const tree = res.stdout .split('\n') .map((line) => JSON.parse(line)) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4a0ccf1ff..1e77c65e1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,9 +29,6 @@ importers: dependency-graph: specifier: ^1.0.0 version: 1.0.0 - execa: - specifier: ^9.4.0 - version: 9.4.0 fast-glob: specifier: ^3.3.2 version: 3.3.2 @@ -44,6 +41,9 @@ importers: lint-staged: specifier: ^15.2.10 version: 15.2.10 + nano-spawn: + specifier: ^0.1.0 + version: 0.1.0 npm-run-all: specifier: ^4.1.5 version: 4.1.5 @@ -287,7 +287,7 @@ importers: version: 2.0.0(sass@1.79.4)(typescript@5.6.2) unocss: specifier: ^0.63.3 - version: 0.63.3(postcss@8.4.39)(rollup@3.29.4)(vite@5.4.8(@types/node@20.16.10)(sass@1.79.4)) + version: 0.63.3(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.10)(sass@1.79.4)) wxt: specifier: workspace:* version: link:../wxt @@ -342,9 +342,6 @@ importers: esbuild: specifier: ^0.24.0 version: 0.24.0 - execa: - specifier: ^9.4.0 - version: 9.4.0 fast-glob: specifier: ^3.3.2 version: 3.3.2 @@ -384,6 +381,9 @@ importers: minimatch: specifier: ^10.0.1 version: 10.0.1 + nano-spawn: + specifier: ^0.1.0 + version: 0.1.0 natural-compare: specifier: ^1.4.0 version: 1.4.0 @@ -1801,9 +1801,6 @@ packages: cpu: [x64] os: [win32] - '@sec-ant/readable-stream@0.4.1': - resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - '@shikijs/core@1.21.0': resolution: {integrity: sha512-zAPMJdiGuqXpZQ+pWNezQAk5xhzRXBNiECFPcJLtUdsFM3f//G95Z15EHTnHchYycU8kIIysqGgxp8OVSj1SPQ==} @@ -1826,10 +1823,6 @@ packages: resolution: {integrity: sha512-axlrvsHlHlFmKKMEg4VyvMzFr93JWJj4eIfXY1STVuO2fsImCa7ncaiG5gC8HKOX590AW5RtRsC41/B+OfrSqw==} engines: {node: '>=14.16'} - '@sindresorhus/merge-streams@4.0.0': - resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} - engines: {node: '>=18'} - '@sveltejs/vite-plugin-svelte-inspector@2.1.0': resolution: {integrity: sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==} engines: {node: ^18.0.0 || >=20} @@ -2927,10 +2920,6 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} - execa@9.4.0: - resolution: {integrity: sha512-yKHlle2YGxZE842MERVIplWwNH5VYmqqcPFgtnlU//K8gxuFFXu0pwd/CrfXTumFpeEiufsP7+opT/bPJa1yVw==} - engines: {node: ^18.19.0 || >=20.5.0} - extract-zip@2.0.1: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} @@ -2954,10 +2943,6 @@ packages: picomatch: optional: true - figures@6.1.0: - resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} - engines: {node: '>=18'} - filesize@10.1.6: resolution: {integrity: sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==} engines: {node: '>= 10.4.0'} @@ -3059,10 +3044,6 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} - get-stream@9.0.1: - resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} - engines: {node: '>=18'} - get-symbol-description@1.0.0: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} @@ -3224,10 +3205,6 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} - human-signals@8.0.0: - resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==} - engines: {node: '>=18.18.0'} - ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -3387,10 +3364,6 @@ packages: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} - is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - is-plain-object@2.0.4: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} @@ -3427,10 +3400,6 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-stream@4.0.1: - resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} - engines: {node: '>=18'} - is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} @@ -3877,6 +3846,10 @@ packages: nan@2.17.0: resolution: {integrity: sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==} + nano-spawn@0.1.0: + resolution: {integrity: sha512-Q0fYRut0GGSoysqrS6hF1jlQEc3yOglnGXwsS+DcoaLwu6NCkUxOB8om08hvUF0V+bNRjExzKM3v8ATbfrLWyQ==} + engines: {node: '>=18.19'} + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -3949,10 +3922,6 @@ packages: resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - npm-run-path@6.0.0: - resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} - engines: {node: '>=18'} - nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} @@ -4058,10 +4027,6 @@ packages: resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} engines: {node: '>=16'} - parse-ms@4.0.0: - resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} - engines: {node: '>=18'} - parse5-htmlparser2-tree-adapter@6.0.1: resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} @@ -4344,10 +4309,6 @@ packages: resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} engines: {node: ^14.13.1 || >=16.0.0} - pretty-ms@9.0.0: - resolution: {integrity: sha512-E9e9HJ9R9NasGOgPaPE8VMeiPKAyWR5jcFpNnwIejslIhWqdqOrb2wShBsncMPUb+BcCd2OPYfh7p2W6oemTng==} - engines: {node: '>=18'} - process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -4788,10 +4749,6 @@ packages: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} - strip-final-newline@4.0.0: - resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} - engines: {node: '>=18'} - strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} @@ -5004,10 +4961,6 @@ packages: undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - unicorn-magic@0.3.0: - resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} - engines: {node: '>=18'} - unimport@3.13.1: resolution: {integrity: sha512-nNrVzcs93yrZQOW77qnyOVHtb68LegvhYFwxFMfuuWScmwQmyVCG/NBuN8tYsaGzgQUVYv34E/af+Cc9u4og4A==} @@ -5369,10 +5322,6 @@ packages: yauzl@2.10.0: resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} - yoctocolors@2.0.2: - resolution: {integrity: sha512-Ct97huExsu7cWeEjmrXlofevF8CvzUglJ4iGUet5B8xn1oumtAZBpHU4GzYuoE6PVqcZ5hghtBrSlhwHuR1Jmw==} - engines: {node: '>=18'} - zip-dir@2.0.0: resolution: {integrity: sha512-uhlsJZWz26FLYXOD6WVuq+fIcZ3aBPGo/cFdiLlv3KNwpa52IF3ISV8fLhQLiqVu5No3VhlqlgthN6gehil1Dg==} @@ -6360,14 +6309,6 @@ snapshots: optionalDependencies: rollup: 3.29.4 - '@rollup/pluginutils@5.1.2(rollup@3.29.4)': - dependencies: - '@types/estree': 1.0.5 - estree-walker: 2.0.2 - picomatch: 2.3.1 - optionalDependencies: - rollup: 3.29.4 - '@rollup/pluginutils@5.1.2(rollup@4.24.0)': dependencies: '@types/estree': 1.0.5 @@ -6424,8 +6365,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.24.0': optional: true - '@sec-ant/readable-stream@0.4.1': {} - '@shikijs/core@1.21.0': dependencies: '@shikijs/engine-javascript': 1.21.0 @@ -6459,8 +6398,6 @@ snapshots: '@sindresorhus/is@5.4.1': {} - '@sindresorhus/merge-streams@4.0.0': {} - '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.18)(vite@5.4.8(@types/node@20.16.10)(sass@1.79.4)))(svelte@4.2.18)(vite@5.4.8(@types/node@20.16.10)(sass@1.79.4))': dependencies: '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.18)(vite@5.4.8(@types/node@20.16.10)(sass@1.79.4)) @@ -6612,21 +6549,21 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@unocss/astro@0.63.3(rollup@3.29.4)(vite@5.4.8(@types/node@20.16.10)(sass@1.79.4))': + '@unocss/astro@0.63.3(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.10)(sass@1.79.4))': dependencies: '@unocss/core': 0.63.3 '@unocss/reset': 0.63.3 - '@unocss/vite': 0.63.3(rollup@3.29.4)(vite@5.4.8(@types/node@20.16.10)(sass@1.79.4)) + '@unocss/vite': 0.63.3(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.10)(sass@1.79.4)) optionalDependencies: vite: 5.4.8(@types/node@20.16.10)(sass@1.79.4) transitivePeerDependencies: - rollup - supports-color - '@unocss/cli@0.63.3(rollup@3.29.4)': + '@unocss/cli@0.63.3(rollup@4.24.0)': dependencies: '@ampproject/remapping': 2.3.0 - '@rollup/pluginutils': 5.1.2(rollup@3.29.4) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) '@unocss/config': 0.63.3 '@unocss/core': 0.63.3 '@unocss/preset-uno': 0.63.3 @@ -6662,13 +6599,13 @@ snapshots: gzip-size: 6.0.0 sirv: 2.0.4 - '@unocss/postcss@0.63.3(postcss@8.4.39)': + '@unocss/postcss@0.63.3(postcss@8.4.47)': dependencies: '@unocss/config': 0.63.3 '@unocss/core': 0.63.3 '@unocss/rule-utils': 0.63.3 css-tree: 3.0.0 - postcss: 8.4.39 + postcss: 8.4.47 tinyglobby: 0.2.9 transitivePeerDependencies: - supports-color @@ -6743,10 +6680,10 @@ snapshots: dependencies: '@unocss/core': 0.63.3 - '@unocss/vite@0.63.3(rollup@3.29.4)(vite@5.4.8(@types/node@20.16.10)(sass@1.79.4))': + '@unocss/vite@0.63.3(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.10)(sass@1.79.4))': dependencies: '@ampproject/remapping': 2.3.0 - '@rollup/pluginutils': 5.1.2(rollup@3.29.4) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) '@unocss/config': 0.63.3 '@unocss/core': 0.63.3 '@unocss/inspector': 0.63.3 @@ -7853,21 +7790,6 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 - execa@9.4.0: - dependencies: - '@sindresorhus/merge-streams': 4.0.0 - cross-spawn: 7.0.3 - figures: 6.1.0 - get-stream: 9.0.1 - human-signals: 8.0.0 - is-plain-obj: 4.1.0 - is-stream: 4.0.1 - npm-run-path: 6.0.0 - pretty-ms: 9.0.0 - signal-exit: 4.1.0 - strip-final-newline: 4.0.0 - yoctocolors: 2.0.2 - extract-zip@2.0.1: dependencies: debug: 4.3.4 @@ -7898,10 +7820,6 @@ snapshots: optionalDependencies: picomatch: 4.0.2 - figures@6.1.0: - dependencies: - is-unicode-supported: 2.0.0 - filesize@10.1.6: {} fill-range@7.1.1: @@ -8002,11 +7920,6 @@ snapshots: get-stream@8.0.1: {} - get-stream@9.0.1: - dependencies: - '@sec-ant/readable-stream': 0.4.1 - is-stream: 4.0.1 - get-symbol-description@1.0.0: dependencies: call-bind: 1.0.2 @@ -8194,8 +8107,6 @@ snapshots: human-signals@5.0.0: {} - human-signals@8.0.0: {} - ieee754@1.2.1: {} ignore-walk@5.0.1: @@ -8331,8 +8242,6 @@ snapshots: is-path-inside@3.0.3: {} - is-plain-obj@4.1.0: {} - is-plain-object@2.0.4: dependencies: isobject: 3.0.1 @@ -8364,8 +8273,6 @@ snapshots: is-stream@3.0.0: {} - is-stream@4.0.1: {} - is-string@1.0.7: dependencies: has-tostringtag: 1.0.0 @@ -8817,6 +8724,8 @@ snapshots: nan@2.17.0: optional: true + nano-spawn@0.1.0: {} + nanoid@3.3.7: {} natural-compare@1.4.0: {} @@ -8889,11 +8798,6 @@ snapshots: dependencies: path-key: 4.0.0 - npm-run-path@6.0.0: - dependencies: - path-key: 4.0.0 - unicorn-magic: 0.3.0 - nth-check@2.1.1: dependencies: boolbase: 1.0.0 @@ -9035,8 +8939,6 @@ snapshots: lines-and-columns: 2.0.3 type-fest: 3.13.1 - parse-ms@4.0.0: {} - parse5-htmlparser2-tree-adapter@6.0.1: dependencies: parse5: 6.0.1 @@ -9284,10 +9186,6 @@ snapshots: pretty-bytes@6.1.1: {} - pretty-ms@9.0.0: - dependencies: - parse-ms: 4.0.0 - process-nextick-args@2.0.1: {} promise-toolbox@0.21.0: @@ -9787,8 +9685,6 @@ snapshots: strip-final-newline@3.0.0: {} - strip-final-newline@4.0.0: {} - strip-json-comments@2.0.1: {} strip-json-comments@5.0.1: {} @@ -10020,8 +9916,6 @@ snapshots: undici-types@6.19.8: {} - unicorn-magic@0.3.0: {} - unimport@3.13.1(rollup@4.24.0)(webpack-sources@3.2.3): dependencies: '@rollup/pluginutils': 5.1.2(rollup@4.24.0) @@ -10072,12 +9966,12 @@ snapshots: universalify@2.0.0: {} - unocss@0.63.3(postcss@8.4.39)(rollup@3.29.4)(vite@5.4.8(@types/node@20.16.10)(sass@1.79.4)): + unocss@0.63.3(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.10)(sass@1.79.4)): dependencies: - '@unocss/astro': 0.63.3(rollup@3.29.4)(vite@5.4.8(@types/node@20.16.10)(sass@1.79.4)) - '@unocss/cli': 0.63.3(rollup@3.29.4) + '@unocss/astro': 0.63.3(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.10)(sass@1.79.4)) + '@unocss/cli': 0.63.3(rollup@4.24.0) '@unocss/core': 0.63.3 - '@unocss/postcss': 0.63.3(postcss@8.4.39) + '@unocss/postcss': 0.63.3(postcss@8.4.47) '@unocss/preset-attributify': 0.63.3 '@unocss/preset-icons': 0.63.3 '@unocss/preset-mini': 0.63.3 @@ -10090,7 +9984,7 @@ snapshots: '@unocss/transformer-compile-class': 0.63.3 '@unocss/transformer-directives': 0.63.3 '@unocss/transformer-variant-group': 0.63.3 - '@unocss/vite': 0.63.3(rollup@3.29.4)(vite@5.4.8(@types/node@20.16.10)(sass@1.79.4)) + '@unocss/vite': 0.63.3(rollup@4.24.0)(vite@5.4.8(@types/node@20.16.10)(sass@1.79.4)) optionalDependencies: vite: 5.4.8(@types/node@20.16.10)(sass@1.79.4) transitivePeerDependencies: @@ -10493,8 +10387,6 @@ snapshots: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 - yoctocolors@2.0.2: {} - zip-dir@2.0.0: dependencies: async: 3.2.4 diff --git a/scripts/bump-package-version.ts b/scripts/bump-package-version.ts index 86d5603ed..838636539 100644 --- a/scripts/bump-package-version.ts +++ b/scripts/bump-package-version.ts @@ -5,7 +5,7 @@ import { generateMarkDown, parseChangelogMarkdown, } from 'changelogen'; -import { execa } from 'execa'; +import spawn from 'nano-spawn'; import { getPkgTag, grabPackageDetails, listCommitsInDir } from './git'; import { consola } from 'consola'; import fs from 'fs-extra'; @@ -36,7 +36,7 @@ if (currentVersion.startsWith('0.')) { bumpType = 'patch'; } } -await execa('pnpm', ['version', bumpType], { +await spawn('pnpm', ['version', bumpType], { cwd: pkgDir, }); const updatedPkgJson = await fs.readJson(pkgJsonPath); @@ -82,11 +82,11 @@ await fs.writeFile(changelogPath, newChangelog, 'utf8'); consola.success('Updated changelog'); // Commit changes -await execa('git', ['add', pkgJsonPath, changelogPath]); -await execa('git', [ +await spawn('git', ['add', pkgJsonPath, changelogPath]); +await spawn('git', [ 'commit', '-m', `chore(release): ${pkgName} v${newVersion}`, ]); -await execa('git', ['tag', newTag]); +await spawn('git', ['tag', newTag]); consola.success('Committed version and changelog');