From f47036c271dc4fc2383b845cce1d8a322111a0a8 Mon Sep 17 00:00:00 2001 From: Ben McCann <322311+benmccann@users.noreply.github.com> Date: Sun, 2 Mar 2025 14:18:55 -0800 Subject: [PATCH 1/2] chore: detect package manager asynchronously --- packages/cli/commands/add/index.ts | 6 +++--- packages/cli/commands/add/workspace.ts | 10 +++++----- packages/cli/commands/create.ts | 5 +++-- packages/cli/lib/install.ts | 4 ++-- packages/cli/utils/package-manager.ts | 4 ++-- 5 files changed, 15 insertions(+), 14 deletions(-) diff --git a/packages/cli/commands/add/index.ts b/packages/cli/commands/add/index.ts index 054b47b8e..bd11bf73c 100644 --- a/packages/cli/commands/add/index.ts +++ b/packages/cli/commands/add/index.ts @@ -280,7 +280,7 @@ export async function runAddCommand( } // prepare official addons - let workspace = createWorkspace({ cwd: options.cwd }); + let workspace = await createWorkspace({ cwd: options.cwd }); const addonSetupResults = setupAddons(officialAddons, workspace); // prompt which addons to apply @@ -312,7 +312,7 @@ export async function runAddCommand( // add inter-addon dependencies for (const { addon } of selectedAddons) { - workspace = createWorkspace(workspace); + workspace = await createWorkspace(workspace); const setupResult = addonSetupResults[addon.id]; const missingDependencies = setupResult.dependsOn.filter( @@ -464,7 +464,7 @@ export async function runAddCommand( } // format modified/created files with prettier (if available) - workspace = createWorkspace(workspace); + workspace = await createWorkspace(workspace); if (filesToFormat.length > 0 && packageManager && !!workspace.dependencyVersion('prettier')) { const { start, stop } = p.spinner(); start('Formatting modified files'); diff --git a/packages/cli/commands/add/workspace.ts b/packages/cli/commands/add/workspace.ts index a73b6358d..ac1188538 100644 --- a/packages/cli/commands/add/workspace.ts +++ b/packages/cli/commands/add/workspace.ts @@ -3,7 +3,7 @@ import path from 'node:path'; import * as find from 'empathic/find'; import { common, object, type AstTypes } from '@sveltejs/cli-core/js'; import { parseScript } from '@sveltejs/cli-core/parsers'; -import { detectSync } from 'package-manager-detector'; +import { detect } from 'package-manager-detector'; import type { OptionValues, PackageManager, Workspace } from '@sveltejs/cli-core'; import { TESTING } from '../../utils/env.ts'; import { commonFilePaths, getPackageJson, readFile } from './utils.ts'; @@ -14,11 +14,11 @@ type CreateWorkspaceOptions = { packageManager?: PackageManager; options?: OptionValues; }; -export function createWorkspace({ +export async function createWorkspace({ cwd, options = {}, - packageManager = detectSync({ cwd })?.name ?? getUserAgent() ?? 'npm' -}: CreateWorkspaceOptions): Workspace { + packageManager +}: CreateWorkspaceOptions): Promise> { const resolvedCwd = path.resolve(cwd); const viteConfigPath = path.join(resolvedCwd, commonFilePaths.viteConfigTS); let usesTypescript = fs.existsSync(viteConfigPath); @@ -53,7 +53,7 @@ export function createWorkspace({ return { cwd: resolvedCwd, options, - packageManager, + packageManager: packageManager ?? (await detect({ cwd }))?.name ?? getUserAgent() ?? 'npm', typescript: usesTypescript, kit: dependencies['@sveltejs/kit'] ? parseKitOptions(resolvedCwd) : undefined, dependencyVersion: (pkg) => dependencies[pkg] diff --git a/packages/cli/commands/create.ts b/packages/cli/commands/create.ts index d5a4a0cf8..a42b18937 100644 --- a/packages/cli/commands/create.ts +++ b/packages/cli/commands/create.ts @@ -13,7 +13,7 @@ import { } from '@sveltejs/create'; import * as common from '../utils/common.ts'; import { runAddCommand } from './add/index.ts'; -import { detectSync, resolveCommand, type AgentName } from 'package-manager-detector'; +import { detect, resolveCommand, type AgentName } from 'package-manager-detector'; import { addPnpmBuildDependendencies, getUserAgent, @@ -65,7 +65,8 @@ export const create = new Command('create') let i = 1; const initialSteps: string[] = []; const relative = path.relative(process.cwd(), directory); - const pm = packageManager ?? detectSync({ cwd: directory })?.name ?? getUserAgent() ?? 'npm'; + const pm = + packageManager ?? (await detect({ cwd: directory }))?.name ?? getUserAgent() ?? 'npm'; if (relative !== '') { const pathHasSpaces = relative.includes(' '); initialSteps.push( diff --git a/packages/cli/lib/install.ts b/packages/cli/lib/install.ts index 6f98ce43d..504c470ae 100644 --- a/packages/cli/lib/install.ts +++ b/packages/cli/lib/install.ts @@ -34,7 +34,7 @@ export async function installAddon({ options, packageManager = 'npm' }: InstallOptions): Promise> { - const workspace = createWorkspace({ cwd, packageManager }); + const workspace = await createWorkspace({ cwd, packageManager }); const addonSetupResults = setupAddons(Object.values(addons), workspace); return await applyAddons({ addons, workspace, options, addonSetupResults }); @@ -62,7 +62,7 @@ export async function applyAddons({ const ordered = orderAddons(mapped, addonSetupResults); for (const addon of ordered) { - workspace = createWorkspace({ ...workspace, options: options[addon.id] }); + workspace = await createWorkspace({ ...workspace, options: options[addon.id] }); const { files, pnpmBuildDependencies } = await runAddon({ workspace, diff --git a/packages/cli/utils/package-manager.ts b/packages/cli/utils/package-manager.ts index fe9a8f869..3ca1da020 100644 --- a/packages/cli/utils/package-manager.ts +++ b/packages/cli/utils/package-manager.ts @@ -8,7 +8,7 @@ import { AGENTS, COMMANDS, constructCommand, - detectSync, + detect, type AgentName } from 'package-manager-detector'; import { parseJson } from '@sveltejs/cli-core/parsers'; @@ -19,7 +19,7 @@ agentOptions.unshift({ label: 'None', value: undefined }); type PackageManagerOptions = Array<{ value: AgentName | undefined; label: AgentName | 'None' }>; export async function packageManagerPrompt(cwd: string): Promise { - const detected = detectSync({ cwd }); + const detected = await detect({ cwd }); const agent = detected?.name ?? getUserAgent(); const pm = await p.select({ From 263640c0edd51ceafcafe79498951ef7d88e51a9 Mon Sep 17 00:00:00 2001 From: Manuel <30698007+manuel3108@users.noreply.github.com> Date: Thu, 6 Mar 2025 16:37:00 +0100 Subject: [PATCH 2/2] Create quiet-fans-lick.md --- .changeset/quiet-fans-lick.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/quiet-fans-lick.md diff --git a/.changeset/quiet-fans-lick.md b/.changeset/quiet-fans-lick.md new file mode 100644 index 000000000..6d073a694 --- /dev/null +++ b/.changeset/quiet-fans-lick.md @@ -0,0 +1,5 @@ +--- +"sv": patch +--- + +chore: detect package manager asynchronously