From 09e9f11ea8deb2fd4bf1bf1264a2124575edd68a Mon Sep 17 00:00:00 2001 From: Jacob Lamb Date: Wed, 30 Aug 2023 12:09:37 -0700 Subject: [PATCH 1/8] Replaced preferred-pm and which-pm with @skarab/detect-package-manager, standardized variable names, and fixed integration addition command Replaced preferred-pm and which-pm with @skarab/detect-package-manager. Standardized variable names from `pkgManager` to `packageManager`. Fixed the `bunx astro add` command for adding integrations. --- .changeset/friendly-clocks-act.md | 11 +++++++ packages/astro/package.json | 3 +- packages/astro/src/cli/add/index.ts | 10 +++--- packages/astro/src/cli/index.ts | 6 +++- packages/astro/src/cli/info/index.ts | 4 +-- packages/astro/src/cli/install-package.ts | 7 ++-- packages/astro/src/cli/telemetry/index.ts | 4 +-- packages/astro/src/core/messages.ts | 4 +-- packages/create-astro/src/actions/context.ts | 8 +++-- .../create-astro/src/actions/dependencies.ts | 14 ++++---- .../create-astro/src/actions/next-steps.ts | 17 ++++++---- packages/create-astro/src/messages.ts | 4 ++- .../create-astro/test/dependencies.test.js | 10 +++--- packages/create-astro/test/next.test.js | 4 +-- packages/telemetry/src/project-info.ts | 10 ++++-- pnpm-lock.yaml | 32 +++++++++++++++---- 16 files changed, 99 insertions(+), 49 deletions(-) create mode 100644 .changeset/friendly-clocks-act.md diff --git a/.changeset/friendly-clocks-act.md b/.changeset/friendly-clocks-act.md new file mode 100644 index 000000000000..2b0ea38bc09c --- /dev/null +++ b/.changeset/friendly-clocks-act.md @@ -0,0 +1,11 @@ +--- +'create-astro': patch +'@astrojs/telemetry': patch +'astro': patch +--- + +With this PR, I want to propose the usage of @skarab/detect-package-manager for detecting package managers instead of preferred-pm and which-pm. + +Standardized variable naming by changing all instances of pkgManager to packageManager to ensure consistent wording throughout the codebase. + +Correctly runs `bunx astro add` when adding an integration. diff --git a/packages/astro/package.json b/packages/astro/package.json index 5315462b4a99..2dbef6c5ce87 100644 --- a/packages/astro/package.json +++ b/packages/astro/package.json @@ -129,6 +129,7 @@ "@babel/plugin-transform-react-jsx": "^7.22.5", "@babel/traverse": "^7.22.10", "@babel/types": "^7.22.10", + "@skarab/detect-package-manager": "^1.0.0", "@types/babel__core": "^7.20.1", "acorn": "^8.10.0", "boxen": "^7.1.1", @@ -156,7 +157,6 @@ "ora": "^7.0.1", "p-limit": "^4.0.0", "path-to-regexp": "^6.2.1", - "preferred-pm": "^3.0.3", "prompts": "^2.4.2", "rehype": "^12.0.1", "resolve": "^1.22.4", @@ -172,7 +172,6 @@ "vfile": "^5.3.7", "vite": "^4.4.9", "vitefu": "^0.2.4", - "which-pm": "^2.0.0", "yargs-parser": "^21.1.1", "zod": "3.21.1" }, diff --git a/packages/astro/src/cli/add/index.ts b/packages/astro/src/cli/add/index.ts index 07fc7b1a83a6..4686f3703644 100644 --- a/packages/astro/src/cli/add/index.ts +++ b/packages/astro/src/cli/add/index.ts @@ -6,7 +6,7 @@ import fsMod, { existsSync, promises as fs } from 'node:fs'; import path from 'node:path'; import { fileURLToPath, pathToFileURL } from 'node:url'; import ora from 'ora'; -import preferredPM from 'preferred-pm'; +import { detectAgent } from '@skarab/detect-package-manager'; import prompts from 'prompts'; import type yargs from 'yargs-parser'; import { loadTSConfig, resolveConfigPath, resolveRoot } from '../../core/config/index.js'; @@ -77,7 +77,7 @@ const OFFICIAL_ADAPTER_TO_IMPORT_MAP: Record = { // // A copy of this function also exists in the create-astro package async function getRegistry(): Promise { - const packageManager = (await preferredPM(process.cwd()))?.name || 'npm'; + const packageManager = (await detectAgent(process.cwd()))?.name || 'npm'; try { const { stdout } = await execa(packageManager, ['config', 'get', 'registry']); return stdout?.trim()?.replace(/\/$/, '') || 'https://registry.npmjs.org'; @@ -172,7 +172,7 @@ export async function add(names: string[], { flags }: AddOptions) { // we add an .npmrc to hoist them if ( integrations.find((integration) => integration.id === 'lit') && - (await preferredPM(fileURLToPath(root)))?.name === 'pnpm' + (await detectAgent(fileURLToPath(root)))?.name === 'pnpm' ) { await setupIntegrationConfig({ root, @@ -600,7 +600,7 @@ async function getInstallIntegrationsCommand({ logger: Logger; cwd?: string; }): Promise { - const pm = await preferredPM(cwd); + const pm = await detectAgent(cwd); logger.debug('add', `package manager: ${JSON.stringify(pm)}`); if (!pm) return null; @@ -620,6 +620,8 @@ async function getInstallIntegrationsCommand({ return { pm: 'yarn', command: 'add', flags: [], dependencies }; case 'pnpm': return { pm: 'pnpm', command: 'add', flags: [], dependencies }; + case 'bun': + return { pm: 'bun', command: 'add', flags: [], dependencies }; default: return null; } diff --git a/packages/astro/src/cli/index.ts b/packages/astro/src/cli/index.ts index 0421258a51ae..6bb3374916e2 100644 --- a/packages/astro/src/cli/index.ts +++ b/packages/astro/src/cli/index.ts @@ -2,6 +2,7 @@ import * as colors from 'kleur/colors'; import yargs from 'yargs-parser'; import { ASTRO_VERSION } from '../core/constants.js'; +import { detectAgent } from '@skarab/detect-package-manager'; type CLICommand = | 'help' @@ -127,8 +128,11 @@ async function runCommand(cmd: string, flags: yargs.Arguments) { process.env.NODE_ENV = cmd === 'dev' ? 'development' : 'production'; } + const detectedAgent = await detectAgent(process.cwd()); + const packageManager = detectedAgent?.name ?? 'npm'; + const { notify } = await import('./telemetry/index.js'); - await notify(); + await notify(packageManager); // These commands uses the logging and user config. All commands are assumed to have been handled // by the end of this switch statement. diff --git a/packages/astro/src/cli/info/index.ts b/packages/astro/src/cli/info/index.ts index 4944432e7bec..2afc47808f9f 100644 --- a/packages/astro/src/cli/info/index.ts +++ b/packages/astro/src/cli/info/index.ts @@ -1,7 +1,7 @@ /* eslint-disable no-console */ import * as colors from 'kleur/colors'; import { arch, platform } from 'node:os'; -import whichPm from 'which-pm'; +import { detectAgent } from '@skarab/detect-package-manager'; import type yargs from 'yargs-parser'; import { resolveConfig } from '../../core/config/index.js'; import { ASTRO_VERSION } from '../../core/constants.js'; @@ -13,7 +13,7 @@ interface InfoOptions { export async function printInfo({ flags }: InfoOptions) { const inlineConfig = flagsToAstroInlineConfig(flags); - const packageManager = await whichPm(process.cwd()); + const packageManager = await detectAgent(process.cwd()); let adapter = "Couldn't determine."; let integrations = []; diff --git a/packages/astro/src/cli/install-package.ts b/packages/astro/src/cli/install-package.ts index f6af1d346c9f..b09ee55d20af 100644 --- a/packages/astro/src/cli/install-package.ts +++ b/packages/astro/src/cli/install-package.ts @@ -4,7 +4,7 @@ import { bold, cyan, dim, magenta } from 'kleur/colors'; import ora from 'ora'; import prompts from 'prompts'; import resolvePackage from 'resolve'; -import whichPm from 'which-pm'; +import { detectAgent } from '@skarab/detect-package-manager'; import { type Logger } from '../core/logger/core.js'; type GetPackageOptions = { @@ -67,6 +67,8 @@ function getInstallCommand(packages: string[], packageManager: string) { return { pm: 'yarn', command: 'add', flags: [], dependencies: packages }; case 'pnpm': return { pm: 'pnpm', command: 'add', flags: [], dependencies: packages }; + case 'bun': + return { pm: 'bun', command: 'add', flags: [], dependencies: packages }; default: return null; } @@ -78,7 +80,8 @@ async function installPackage( logger: Logger ): Promise { const cwd = options.cwd ?? process.cwd(); - const packageManager = (await whichPm(cwd)).name ?? 'npm'; + const detectedAgent = await detectAgent(cwd); + const packageManager = detectedAgent?.name ?? 'npm'; const installCommand = getInstallCommand(packageNames, packageManager); if (!installCommand) { diff --git a/packages/astro/src/cli/telemetry/index.ts b/packages/astro/src/cli/telemetry/index.ts index b702a5baad18..367736c76d45 100644 --- a/packages/astro/src/cli/telemetry/index.ts +++ b/packages/astro/src/cli/telemetry/index.ts @@ -7,9 +7,9 @@ interface TelemetryOptions { flags: yargs.Arguments; } -export async function notify() { +export async function notify(packageManager = 'npm') { await telemetry.notify(() => { - console.log(msg.telemetryNotice() + '\n'); + console.log(msg.telemetryNotice(packageManager) + '\n'); return true; }); } diff --git a/packages/astro/src/core/messages.ts b/packages/astro/src/core/messages.ts index 974bf79bf402..758f5e5813c4 100644 --- a/packages/astro/src/core/messages.ts +++ b/packages/astro/src/core/messages.ts @@ -105,10 +105,10 @@ export function serverStart({ .join('\n'); } -export function telemetryNotice() { +export function telemetryNotice(packageManager = 'npm') { const headline = `${cyan('◆')} Astro collects completely anonymous usage data.`; const why = dim(' This optional program helps shape our roadmap.'); - const disable = dim(' Run `npm run astro telemetry disable` to opt-out.'); + const disable = dim(` Run \`${packageManager} run astro telemetry disable\` to opt-out.`); const details = ` Details: ${underline('https://astro.build/telemetry')}`; return [headline, why, disable, details].map((v) => ' ' + v).join('\n'); } diff --git a/packages/create-astro/src/actions/context.ts b/packages/create-astro/src/actions/context.ts index 5c2c0e9c05c8..05ed531fdb68 100644 --- a/packages/create-astro/src/actions/context.ts +++ b/packages/create-astro/src/actions/context.ts @@ -9,7 +9,7 @@ export interface Context { help: boolean; prompt: typeof prompt; cwd: string; - pkgManager: string; + packageManager: string; username: string; version: string; skipHouston: boolean; @@ -51,7 +51,9 @@ export async function getContext(argv: string[]): Promise { { argv, permissive: true } ); - const pkgManager = detectPackageManager()?.name ?? 'npm'; + const packageManager = process.env.BUN_INSTALL + ? detectPackageManager()?.name || 'bun' + : detectPackageManager()?.name || 'npm'; const [username, version] = await Promise.all([getName(), getVersion()]); let cwd = flags['_'][0]; let { @@ -85,7 +87,7 @@ export async function getContext(argv: string[]): Promise { const context: Context = { help, prompt, - pkgManager, + packageManager, username, version, skipHouston, diff --git a/packages/create-astro/src/actions/dependencies.ts b/packages/create-astro/src/actions/dependencies.ts index 339e3379f6ac..f05e9e93ae02 100644 --- a/packages/create-astro/src/actions/dependencies.ts +++ b/packages/create-astro/src/actions/dependencies.ts @@ -6,7 +6,7 @@ import { shell } from '../shell.js'; import type { Context } from './context'; export async function dependencies( - ctx: Pick + ctx: Pick ) { let deps = ctx.install ?? ctx.yes; if (deps === undefined) { @@ -25,15 +25,15 @@ export async function dependencies( await info('--dry-run', `Skipping dependency installation`); } else if (deps) { await spinner({ - start: `Installing dependencies with ${ctx.pkgManager}...`, + start: `Installing dependencies with ${ctx.packageManager}...`, end: 'Dependencies installed', while: () => { - return install({ pkgManager: ctx.pkgManager, cwd: ctx.cwd }).catch((e) => { + return install({ packageManager: ctx.packageManager, cwd: ctx.cwd }).catch((e) => { error('error', e); error( 'error', `Dependencies failed to install, please run ${color.bold( - ctx.pkgManager + ' install' + ctx.packageManager + ' install' )} to install them manually after setup.` ); }); @@ -47,9 +47,9 @@ export async function dependencies( } } -async function install({ pkgManager, cwd }: { pkgManager: string; cwd: string }) { - if (pkgManager === 'yarn') await ensureYarnLock({ cwd }); - return shell(pkgManager, ['install'], { cwd, timeout: 90_000, stdio: 'ignore' }); +async function install({ packageManager, cwd }: { packageManager: string; cwd: string }) { + if (packageManager === 'yarn') await ensureYarnLock({ cwd }); + return shell(packageManager, ['install'], { cwd, timeout: 90_000, stdio: 'ignore' }); } async function ensureYarnLock({ cwd }: { cwd: string }) { diff --git a/packages/create-astro/src/actions/next-steps.ts b/packages/create-astro/src/actions/next-steps.ts index 01c1963d9826..c79a80525428 100644 --- a/packages/create-astro/src/actions/next-steps.ts +++ b/packages/create-astro/src/actions/next-steps.ts @@ -3,14 +3,17 @@ import type { Context } from './context'; import { nextSteps, say } from '../messages.js'; -export async function next(ctx: Pick) { +export async function next(ctx: Pick) { let projectDir = path.relative(process.cwd(), ctx.cwd); - const devCmd = - ctx.pkgManager === 'npm' - ? 'npm run dev' - : ctx.pkgManager === 'bun' - ? 'bun run dev' - : `${ctx.pkgManager} dev`; + + const commandMap: { [key: string]: string } = { + npm: 'npm run dev', + bun: 'bun run dev', + yarn: 'yarn dev', + pnpm: 'pnpm dev', + }; + + const devCmd = commandMap[ctx.packageManager as keyof typeof commandMap] || 'npm run dev'; await nextSteps({ projectDir, devCmd }); if (!ctx.skipHouston) { diff --git a/packages/create-astro/src/messages.ts b/packages/create-astro/src/messages.ts index fbf276794b90..fb0f58c6cb08 100644 --- a/packages/create-astro/src/messages.ts +++ b/packages/create-astro/src/messages.ts @@ -12,7 +12,9 @@ import { shell } from './shell.js'; // // A copy of this function also exists in the astro package async function getRegistry(): Promise { - const packageManager = detectPackageManager()?.name || 'npm'; + const packageManager = process.env.BUN_INSTALL + ? detectPackageManager()?.name || 'bun' + : detectPackageManager()?.name || 'npm'; try { const { stdout } = await shell(packageManager, ['config', 'get', 'registry']); return stdout?.trim()?.replace(/\/$/, '') || 'https://registry.npmjs.org'; diff --git a/packages/create-astro/test/dependencies.test.js b/packages/create-astro/test/dependencies.test.js index 88e43597bb71..705cf8354741 100644 --- a/packages/create-astro/test/dependencies.test.js +++ b/packages/create-astro/test/dependencies.test.js @@ -10,7 +10,7 @@ describe('dependencies', () => { const context = { cwd: '', yes: true, - pkgManager: 'npm', + packageManager: 'npm', dryRun: true, prompt: () => ({ deps: true }), }; @@ -21,7 +21,7 @@ describe('dependencies', () => { it('prompt yes', async () => { const context = { cwd: '', - pkgManager: 'npm', + packageManager: 'npm', dryRun: true, prompt: () => ({ deps: true }), install: undefined, @@ -34,7 +34,7 @@ describe('dependencies', () => { it('prompt no', async () => { const context = { cwd: '', - pkgManager: 'npm', + packageManager: 'npm', dryRun: true, prompt: () => ({ deps: false }), install: undefined, @@ -48,7 +48,7 @@ describe('dependencies', () => { const context = { cwd: '', install: true, - pkgManager: 'npm', + packageManager: 'npm', dryRun: true, prompt: () => ({ deps: false }), }; @@ -61,7 +61,7 @@ describe('dependencies', () => { const context = { cwd: '', install: false, - pkgManager: 'npm', + packageManager: 'npm', dryRun: true, prompt: () => ({ deps: false }), }; diff --git a/packages/create-astro/test/next.test.js b/packages/create-astro/test/next.test.js index efc0e6728b26..07de90d50edb 100644 --- a/packages/create-astro/test/next.test.js +++ b/packages/create-astro/test/next.test.js @@ -7,14 +7,14 @@ describe('next steps', () => { const fixture = setup(); it('no arguments', async () => { - await next({ skipHouston: false, cwd: './it/fixtures/not-empty', pkgManager: 'npm' }); + await next({ skipHouston: false, cwd: './it/fixtures/not-empty', packageManager: 'npm' }); expect(fixture.hasMessage('Liftoff confirmed.')).to.be.true; expect(fixture.hasMessage('npm run dev')).to.be.true; expect(fixture.hasMessage('Good luck out there, astronaut!')).to.be.true; }); it('--skip-houston', async () => { - await next({ skipHouston: true, cwd: './it/fixtures/not-empty', pkgManager: 'npm' }); + await next({ skipHouston: true, cwd: './it/fixtures/not-empty', packageManager: 'npm' }); expect(fixture.hasMessage('Good luck out there, astronaut!')).to.be.false; }); }); diff --git a/packages/telemetry/src/project-info.ts b/packages/telemetry/src/project-info.ts index 16ea50f3b49a..54be3558889c 100644 --- a/packages/telemetry/src/project-info.ts +++ b/packages/telemetry/src/project-info.ts @@ -106,11 +106,15 @@ function getProjectId(isCI: boolean): Pick=14', pnpm: '>=7'} + dev: false + /@solidjs/router@0.8.3(solid-js@1.7.11): resolution: {integrity: sha512-oJuqQo10rVTiQYhe1qXIG1NyZIZ2YOwHnlLc8Xx+g/iJhFCJo1saLOIrD/Dkh2fpIaIny5ZMkz1cYYqoTYGJbg==} peerDependencies: @@ -11596,6 +11598,7 @@ packages: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 + dev: true /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} @@ -11603,12 +11606,14 @@ packages: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 + dev: true /find-yarn-workspace-root2@1.2.16: resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} dependencies: micromatch: 4.0.5 pkg-dir: 4.2.0 + dev: true /flat-cache@3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} @@ -13022,6 +13027,7 @@ packages: js-yaml: 3.14.1 pify: 4.0.1 strip-bom: 3.0.0 + dev: true /local-pkg@0.4.3: resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} @@ -13036,12 +13042,14 @@ packages: engines: {node: '>=8'} dependencies: p-locate: 4.1.0 + dev: true /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} dependencies: p-locate: 5.0.0 + dev: true /lodash.chunk@4.2.0: resolution: {integrity: sha512-ZzydJKfUHJwHa+hF5X66zLFCBrWn5GeF28OHEr4WVWtNDXlQ/IjWKPBiikqKo2ne0+v6JgCgJ0GzJp8k8bHC7w==} @@ -14478,12 +14486,14 @@ packages: engines: {node: '>=6'} dependencies: p-try: 2.2.0 + dev: true /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 + dev: true /p-limit@4.0.0: resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} @@ -14497,12 +14507,14 @@ packages: engines: {node: '>=8'} dependencies: p-limit: 2.3.0 + dev: true /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} dependencies: p-limit: 3.1.0 + dev: true /p-map@2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} @@ -14519,6 +14531,7 @@ packages: /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + dev: true /pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} @@ -14614,6 +14627,7 @@ packages: /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + dev: true /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} @@ -14692,6 +14706,7 @@ packages: /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} + dev: true /pirates@4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} @@ -14702,6 +14717,7 @@ packages: engines: {node: '>=8'} dependencies: find-up: 4.1.0 + dev: true /pkg-types@1.0.3: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} @@ -15153,6 +15169,7 @@ packages: find-yarn-workspace-root2: 1.2.16 path-exists: 4.0.0 which-pm: 2.0.0 + dev: true /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -16408,6 +16425,7 @@ packages: /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} + dev: true /strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} @@ -17838,6 +17856,7 @@ packages: dependencies: load-yaml-file: 0.2.0 path-exists: 4.0.0 + dev: true /which-typed-array@1.1.11: resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} @@ -18275,6 +18294,7 @@ packages: /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + dev: true /yocto-queue@1.0.0: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} From f50bfd59c54b441f6bd8009019d53644de256e9d Mon Sep 17 00:00:00 2001 From: Jacob Lamb Date: Thu, 31 Aug 2023 13:21:01 -0700 Subject: [PATCH 2/8] refactor: simplify packageManager assignment logic --- packages/create-astro/src/actions/context.ts | 4 +--- packages/create-astro/src/messages.ts | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/create-astro/src/actions/context.ts b/packages/create-astro/src/actions/context.ts index 05ed531fdb68..d71cf05dcde3 100644 --- a/packages/create-astro/src/actions/context.ts +++ b/packages/create-astro/src/actions/context.ts @@ -51,9 +51,7 @@ export async function getContext(argv: string[]): Promise { { argv, permissive: true } ); - const packageManager = process.env.BUN_INSTALL - ? detectPackageManager()?.name || 'bun' - : detectPackageManager()?.name || 'npm'; + const packageManager = process.env.BUN_INSTALL ? 'bun' : detectPackageManager()?.name || 'npm'; const [username, version] = await Promise.all([getName(), getVersion()]); let cwd = flags['_'][0]; let { diff --git a/packages/create-astro/src/messages.ts b/packages/create-astro/src/messages.ts index fb0f58c6cb08..d9b3736bc8f6 100644 --- a/packages/create-astro/src/messages.ts +++ b/packages/create-astro/src/messages.ts @@ -12,9 +12,7 @@ import { shell } from './shell.js'; // // A copy of this function also exists in the astro package async function getRegistry(): Promise { - const packageManager = process.env.BUN_INSTALL - ? detectPackageManager()?.name || 'bun' - : detectPackageManager()?.name || 'npm'; + const packageManager = process.env.BUN_INSTALL ? 'bun' : detectPackageManager()?.name || 'npm'; try { const { stdout } = await shell(packageManager, ['config', 'get', 'registry']); return stdout?.trim()?.replace(/\/$/, '') || 'https://registry.npmjs.org'; From 78aefdc428b04ef3a9f2b66ab9e29472bb13ef32 Mon Sep 17 00:00:00 2001 From: Jacob Lamb Date: Fri, 1 Sep 2023 07:51:17 -0700 Subject: [PATCH 3/8] `which-pm-runs` package now supports bun --- packages/create-astro/src/actions/context.ts | 2 +- packages/create-astro/src/messages.ts | 2 +- packages/telemetry/src/project-info.ts | 9 +++------ 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/packages/create-astro/src/actions/context.ts b/packages/create-astro/src/actions/context.ts index d71cf05dcde3..fcfe8ac4cd60 100644 --- a/packages/create-astro/src/actions/context.ts +++ b/packages/create-astro/src/actions/context.ts @@ -51,7 +51,7 @@ export async function getContext(argv: string[]): Promise { { argv, permissive: true } ); - const packageManager = process.env.BUN_INSTALL ? 'bun' : detectPackageManager()?.name || 'npm'; + const packageManager = detectPackageManager()?.name || 'npm'; const [username, version] = await Promise.all([getName(), getVersion()]); let cwd = flags['_'][0]; let { diff --git a/packages/create-astro/src/messages.ts b/packages/create-astro/src/messages.ts index d9b3736bc8f6..fbf276794b90 100644 --- a/packages/create-astro/src/messages.ts +++ b/packages/create-astro/src/messages.ts @@ -12,7 +12,7 @@ import { shell } from './shell.js'; // // A copy of this function also exists in the astro package async function getRegistry(): Promise { - const packageManager = process.env.BUN_INSTALL ? 'bun' : detectPackageManager()?.name || 'npm'; + const packageManager = detectPackageManager()?.name || 'npm'; try { const { stdout } = await shell(packageManager, ['config', 'get', 'registry']); return stdout?.trim()?.replace(/\/$/, '') || 'https://registry.npmjs.org'; diff --git a/packages/telemetry/src/project-info.ts b/packages/telemetry/src/project-info.ts index 54be3558889c..37a53017b85f 100644 --- a/packages/telemetry/src/project-info.ts +++ b/packages/telemetry/src/project-info.ts @@ -106,15 +106,12 @@ function getProjectId(isCI: boolean): Pick Date: Fri, 1 Sep 2023 08:19:14 -0700 Subject: [PATCH 4/8] Revert to original code --- packages/create-astro/src/actions/context.ts | 2 +- packages/telemetry/src/project-info.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/create-astro/src/actions/context.ts b/packages/create-astro/src/actions/context.ts index fcfe8ac4cd60..c91a0caae48c 100644 --- a/packages/create-astro/src/actions/context.ts +++ b/packages/create-astro/src/actions/context.ts @@ -51,7 +51,7 @@ export async function getContext(argv: string[]): Promise { { argv, permissive: true } ); - const packageManager = detectPackageManager()?.name || 'npm'; + const packageManager = detectPackageManager()?.name ?? 'npm'; const [username, version] = await Promise.all([getName(), getVersion()]); let cwd = flags['_'][0]; let { diff --git a/packages/telemetry/src/project-info.ts b/packages/telemetry/src/project-info.ts index 37a53017b85f..16ea50f3b49a 100644 --- a/packages/telemetry/src/project-info.ts +++ b/packages/telemetry/src/project-info.ts @@ -107,7 +107,6 @@ function getProjectId(isCI: boolean): Pick Date: Sun, 3 Sep 2023 20:25:13 -0700 Subject: [PATCH 5/8] Revert initial changes --- .changeset/friendly-clocks-act.md | 6 +- packages/astro/package.json | 3 +- packages/astro/src/cli/add/index.ts | 12 +- packages/astro/src/cli/index.ts | 5 +- packages/astro/src/cli/install-package.ts | 5 +- pnpm-lock.yaml | 172 ++++++++++++++++++---- 6 files changed, 156 insertions(+), 47 deletions(-) diff --git a/.changeset/friendly-clocks-act.md b/.changeset/friendly-clocks-act.md index 2b0ea38bc09c..dcce8293aeca 100644 --- a/.changeset/friendly-clocks-act.md +++ b/.changeset/friendly-clocks-act.md @@ -4,8 +4,10 @@ 'astro': patch --- -With this PR, I want to propose the usage of @skarab/detect-package-manager for detecting package managers instead of preferred-pm and which-pm. +Update preferred-pm and which-pm-runs packages as the latest versions now support Bun. Standardized variable naming by changing all instances of pkgManager to packageManager to ensure consistent wording throughout the codebase. -Correctly runs `bunx astro add` when adding an integration. +`bunx astro add` command correctly uses bun. + +Telemetry notice returns package manager. diff --git a/packages/astro/package.json b/packages/astro/package.json index 4105b39258ac..216f98a365df 100644 --- a/packages/astro/package.json +++ b/packages/astro/package.json @@ -129,7 +129,6 @@ "@babel/plugin-transform-react-jsx": "^7.22.5", "@babel/traverse": "^7.22.10", "@babel/types": "^7.22.10", - "@skarab/detect-package-manager": "^1.0.0", "@types/babel__core": "^7.20.1", "acorn": "^8.10.0", "boxen": "^7.1.1", @@ -157,6 +156,7 @@ "ora": "^7.0.1", "p-limit": "^4.0.0", "path-to-regexp": "^6.2.1", + "preferred-pm": "^3.1.1", "prompts": "^2.4.2", "rehype": "^12.0.1", "resolve": "^1.22.4", @@ -172,6 +172,7 @@ "vfile": "^5.3.7", "vite": "^4.4.9", "vitefu": "^0.2.4", + "which-pm": "^2.1.1", "yargs-parser": "^21.1.1", "zod": "3.21.1" }, diff --git a/packages/astro/src/cli/add/index.ts b/packages/astro/src/cli/add/index.ts index 4686f3703644..8cca91fe983e 100644 --- a/packages/astro/src/cli/add/index.ts +++ b/packages/astro/src/cli/add/index.ts @@ -6,7 +6,7 @@ import fsMod, { existsSync, promises as fs } from 'node:fs'; import path from 'node:path'; import { fileURLToPath, pathToFileURL } from 'node:url'; import ora from 'ora'; -import { detectAgent } from '@skarab/detect-package-manager'; +import preferredPM from 'preferred-pm'; import prompts from 'prompts'; import type yargs from 'yargs-parser'; import { loadTSConfig, resolveConfigPath, resolveRoot } from '../../core/config/index.js'; @@ -77,7 +77,7 @@ const OFFICIAL_ADAPTER_TO_IMPORT_MAP: Record = { // // A copy of this function also exists in the create-astro package async function getRegistry(): Promise { - const packageManager = (await detectAgent(process.cwd()))?.name || 'npm'; + const packageManager = (await preferredPM(process.cwd()))?.name || 'npm'; try { const { stdout } = await execa(packageManager, ['config', 'get', 'registry']); return stdout?.trim()?.replace(/\/$/, '') || 'https://registry.npmjs.org'; @@ -172,7 +172,7 @@ export async function add(names: string[], { flags }: AddOptions) { // we add an .npmrc to hoist them if ( integrations.find((integration) => integration.id === 'lit') && - (await detectAgent(fileURLToPath(root)))?.name === 'pnpm' + (await preferredPM(fileURLToPath(root)))?.name === 'pnpm' ) { await setupIntegrationConfig({ root, @@ -600,7 +600,7 @@ async function getInstallIntegrationsCommand({ logger: Logger; cwd?: string; }): Promise { - const pm = await detectAgent(cwd); + const pm = await preferredPM(cwd); logger.debug('add', `package manager: ${JSON.stringify(pm)}`); if (!pm) return null; @@ -620,8 +620,8 @@ async function getInstallIntegrationsCommand({ return { pm: 'yarn', command: 'add', flags: [], dependencies }; case 'pnpm': return { pm: 'pnpm', command: 'add', flags: [], dependencies }; - case 'bun': - return { pm: 'bun', command: 'add', flags: [], dependencies }; + // case 'bun': + // return { pm: 'bun', command: 'add', flags: [], dependencies }; default: return null; } diff --git a/packages/astro/src/cli/index.ts b/packages/astro/src/cli/index.ts index 6bb3374916e2..6c5295421acd 100644 --- a/packages/astro/src/cli/index.ts +++ b/packages/astro/src/cli/index.ts @@ -2,7 +2,7 @@ import * as colors from 'kleur/colors'; import yargs from 'yargs-parser'; import { ASTRO_VERSION } from '../core/constants.js'; -import { detectAgent } from '@skarab/detect-package-manager'; +import whichPm from 'which-pm'; type CLICommand = | 'help' @@ -128,8 +128,7 @@ async function runCommand(cmd: string, flags: yargs.Arguments) { process.env.NODE_ENV = cmd === 'dev' ? 'development' : 'production'; } - const detectedAgent = await detectAgent(process.cwd()); - const packageManager = detectedAgent?.name ?? 'npm'; + const packageManager = (await whichPm(process.cwd())).name ?? 'npm'; const { notify } = await import('./telemetry/index.js'); await notify(packageManager); diff --git a/packages/astro/src/cli/install-package.ts b/packages/astro/src/cli/install-package.ts index b09ee55d20af..689f81e3e879 100644 --- a/packages/astro/src/cli/install-package.ts +++ b/packages/astro/src/cli/install-package.ts @@ -4,7 +4,7 @@ import { bold, cyan, dim, magenta } from 'kleur/colors'; import ora from 'ora'; import prompts from 'prompts'; import resolvePackage from 'resolve'; -import { detectAgent } from '@skarab/detect-package-manager'; +import whichPm from 'which-pm'; import { type Logger } from '../core/logger/core.js'; type GetPackageOptions = { @@ -80,8 +80,7 @@ async function installPackage( logger: Logger ): Promise { const cwd = options.cwd ?? process.cwd(); - const detectedAgent = await detectAgent(cwd); - const packageManager = detectedAgent?.name ?? 'npm'; + const packageManager = (await whichPm(cwd)).name ?? 'npm'; const installCommand = getInstallCommand(packageNames, packageManager); if (!installCommand) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c713c8f57bd7..c4f042fa0baa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -512,9 +512,6 @@ importers: '@babel/types': specifier: ^7.22.10 version: 7.22.10 - '@skarab/detect-package-manager': - specifier: ^1.0.0 - version: 1.0.0 '@types/babel__core': specifier: ^7.20.1 version: 7.20.1 @@ -596,6 +593,9 @@ importers: path-to-regexp: specifier: ^6.2.1 version: 6.2.1 + preferred-pm: + specifier: ^3.1.1 + version: 3.1.1 prompts: specifier: ^2.4.2 version: 2.4.2 @@ -637,10 +637,13 @@ importers: version: 5.3.7 vite: specifier: ^4.4.9 - version: 4.4.9(@types/node@18.17.8)(sass@1.66.1) + version: 4.4.9(sass@1.66.1) vitefu: specifier: ^0.2.4 version: 0.2.4(vite@4.4.9) + which-pm: + specifier: ^2.1.1 + version: 2.1.1 yargs-parser: specifier: ^21.1.1 version: 21.1.1 @@ -650,7 +653,7 @@ importers: devDependencies: '@astrojs/check': specifier: ^0.1.0 - version: 0.1.0(prettier-plugin-astro@0.12.0)(prettier@3.0.2)(typescript@5.1.6) + version: 0.1.0 '@playwright/test': specifier: ^1.37.1 version: 1.37.1 @@ -740,7 +743,7 @@ importers: version: 10.2.0 network-information-types: specifier: ^0.1.1 - version: 0.1.1(typescript@5.1.6) + version: 0.1.1 node-mocks-http: specifier: ^1.13.0 version: 1.13.0 @@ -5131,6 +5134,22 @@ packages: lite-youtube-embed: 0.2.0 dev: false + /@astrojs/check@0.1.0: + resolution: {integrity: sha512-tgjq+Vehgv0dwdsRlT4ai3QgT3etn8W5C4E4dvQ0Xe9ccwjKdMTWmpty5exfBtHLLAAOvwe5/OkYQsQ9OyKoVw==} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + dependencies: + '@astrojs/language-server': 2.3.0 + chokidar: 3.5.3 + fast-glob: 3.3.1 + kleur: 4.1.5 + yargs: 17.7.2 + transitivePeerDependencies: + - prettier + - prettier-plugin-astro + dev: true + /@astrojs/check@0.1.0(prettier-plugin-astro@0.12.0)(prettier@3.0.2)(typescript@5.1.6): resolution: {integrity: sha512-tgjq+Vehgv0dwdsRlT4ai3QgT3etn8W5C4E4dvQ0Xe9ccwjKdMTWmpty5exfBtHLLAAOvwe5/OkYQsQ9OyKoVw==} hasBin: true @@ -5168,6 +5187,40 @@ packages: resolution: {integrity: sha512-DfBR7Cf+tOgQ4n7TIgTtU5x5SEA/08DNshpEPcT+91A0KbBlmUOYMBM/O6qAaHkmVo1KIoXQYhAmfdTT1zx9PQ==} dev: false + /@astrojs/language-server@2.3.0: + resolution: {integrity: sha512-NFSzszjR4+f0+fTUCuFKXrLWusJFqWvHMrIzHB0lXUE8dt3Dm1Ok9Emrdj3s3BvlguJz05MV9xSIz1puMvomtQ==} + hasBin: true + peerDependencies: + prettier: ^3.0.0 + prettier-plugin-astro: '>=0.11.0' + peerDependenciesMeta: + prettier: + optional: true + prettier-plugin-astro: + optional: true + dependencies: + '@astrojs/compiler': 1.5.7 + '@jridgewell/sourcemap-codec': 1.4.15 + '@volar/kit': 1.10.0 + '@volar/language-core': 1.10.0 + '@volar/language-server': 1.10.0 + '@volar/language-service': 1.10.0 + '@volar/source-map': 1.10.0 + '@volar/typescript': 1.10.0 + fast-glob: 3.3.1 + muggle-string: 0.3.1 + volar-service-css: 0.0.11(@volar/language-service@1.10.0) + volar-service-emmet: 0.0.11(@volar/language-service@1.10.0) + volar-service-html: 0.0.11(@volar/language-service@1.10.0) + volar-service-prettier: 0.0.11(@volar/language-service@1.10.0) + volar-service-typescript: 0.0.11(@volar/language-service@1.10.0)(@volar/typescript@1.10.0) + volar-service-typescript-twoslash-queries: 0.0.11(@volar/language-service@1.10.0) + vscode-html-languageservice: 5.0.6 + vscode-uri: 3.0.7 + transitivePeerDependencies: + - typescript + dev: true + /@astrojs/language-server@2.3.0(prettier-plugin-astro@0.12.0)(prettier@3.0.2)(typescript@5.1.6): resolution: {integrity: sha512-NFSzszjR4+f0+fTUCuFKXrLWusJFqWvHMrIzHB0lXUE8dt3Dm1Ok9Emrdj3s3BvlguJz05MV9xSIz1puMvomtQ==} hasBin: true @@ -8500,11 +8553,6 @@ packages: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: false - /@skarab/detect-package-manager@1.0.0: - resolution: {integrity: sha512-CuU1x6LgkJIF+H8FCnKijx6DbWVP1Y7kqPk88LSxNe0ulbe3BZ37qd3AaX3t5vnFZESLFMcjQd2dlPhdvWNSdQ==} - engines: {node: '>=14', pnpm: '>=7'} - dev: false - /@solidjs/router@0.8.3(solid-js@1.7.11): resolution: {integrity: sha512-oJuqQo10rVTiQYhe1qXIG1NyZIZ2YOwHnlLc8Xx+g/iJhFCJo1saLOIrD/Dkh2fpIaIny5ZMkz1cYYqoTYGJbg==} peerDependencies: @@ -9188,6 +9236,17 @@ packages: pretty-format: 29.6.3 dev: false + /@volar/kit@1.10.0: + resolution: {integrity: sha512-3ijH2Gqe8kWnij58rwaBID22J/b+VT457ZEf5TwyPDqHTrfNCZIVitpdD5WlLD4Wy/D0Vymwj2ct9TNc1hkOmQ==} + peerDependencies: + typescript: '*' + dependencies: + '@volar/language-service': 1.10.0 + typesafe-path: 0.2.2 + vscode-languageserver-textdocument: 1.0.8 + vscode-uri: 3.0.7 + dev: true + /@volar/kit@1.10.0(typescript@5.1.6): resolution: {integrity: sha512-3ijH2Gqe8kWnij58rwaBID22J/b+VT457ZEf5TwyPDqHTrfNCZIVitpdD5WlLD4Wy/D0Vymwj2ct9TNc1hkOmQ==} peerDependencies: @@ -11598,7 +11657,6 @@ packages: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - dev: true /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} @@ -11606,14 +11664,12 @@ packages: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true /find-yarn-workspace-root2@1.2.16: resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} dependencies: micromatch: 4.0.5 pkg-dir: 4.2.0 - dev: true /flat-cache@3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} @@ -13027,7 +13083,6 @@ packages: js-yaml: 3.14.1 pify: 4.0.1 strip-bom: 3.0.0 - dev: true /local-pkg@0.4.3: resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} @@ -13042,14 +13097,12 @@ packages: engines: {node: '>=8'} dependencies: p-locate: 4.1.0 - dev: true /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} dependencies: p-locate: 5.0.0 - dev: true /lodash.chunk@4.2.0: resolution: {integrity: sha512-ZzydJKfUHJwHa+hF5X66zLFCBrWn5GeF28OHEr4WVWtNDXlQ/IjWKPBiikqKo2ne0+v6JgCgJ0GzJp8k8bHC7w==} @@ -14170,12 +14223,10 @@ packages: engines: {node: '>= 0.6'} dev: true - /network-information-types@0.1.1(typescript@5.1.6): + /network-information-types@0.1.1: resolution: {integrity: sha512-mLXNafJYOkiJB6IlF727YWssTRpXitR+tKSLyA5VAdBi3SOvLf5gtizHgxf241YHPWocnAO/fAhVrB/68tPHDw==} peerDependencies: typescript: '>= 3.0.0' - dependencies: - typescript: 5.1.6 dev: true /nice-try@1.0.5: @@ -14486,14 +14537,12 @@ packages: engines: {node: '>=6'} dependencies: p-try: 2.2.0 - dev: true /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 - dev: true /p-limit@4.0.0: resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} @@ -14507,14 +14556,12 @@ packages: engines: {node: '>=8'} dependencies: p-limit: 2.3.0 - dev: true /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} dependencies: p-limit: 3.1.0 - dev: true /p-map@2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} @@ -14531,7 +14578,6 @@ packages: /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - dev: true /pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} @@ -14627,7 +14673,6 @@ packages: /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - dev: true /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} @@ -14706,7 +14751,6 @@ packages: /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - dev: true /pirates@4.0.5: resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==} @@ -14717,7 +14761,6 @@ packages: engines: {node: '>=8'} dependencies: find-up: 4.1.0 - dev: true /pkg-types@1.0.3: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} @@ -15171,6 +15214,16 @@ packages: which-pm: 2.0.0 dev: true + /preferred-pm@3.1.1: + resolution: {integrity: sha512-CsZgOVLKHifdoRu2y66P1s6oLb2WfT5Njkcgi80I/52FWTTVkWG6z0Z13vPkXC4hsT0nMrYXqX30buH8+D2eRQ==} + engines: {node: '>=10'} + dependencies: + find-up: 5.0.0 + find-yarn-workspace-root2: 1.2.16 + path-exists: 4.0.0 + which-pm: 2.0.0 + dev: false + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -16425,7 +16478,6 @@ packages: /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - dev: true /strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} @@ -17528,6 +17580,42 @@ packages: fsevents: 2.3.3 dev: false + /vite@4.4.9(sass@1.66.1): + resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.18.20 + postcss: 8.4.28 + rollup: 3.28.1 + sass: 1.66.1 + optionalDependencies: + fsevents: 2.3.3 + dev: false + /vitefu@0.2.4(vite@4.4.9): resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} peerDependencies: @@ -17536,7 +17624,7 @@ packages: vite: optional: true dependencies: - vite: 4.4.9(@types/node@18.17.8)(sass@1.66.1) + vite: 4.4.9(sass@1.66.1) dev: false /vitest@0.34.2: @@ -17643,6 +17731,20 @@ packages: vscode-uri: 3.0.7 dev: true + /volar-service-prettier@0.0.11(@volar/language-service@1.10.0): + resolution: {integrity: sha512-A4vEU5BUitNNAySb+t/fCjEoL01uYUkoe/Fe5UxR3JJbdgr2nTeXb5IlW90/1vzmnTKZznadJV4i1SoAf2CRbg==} + peerDependencies: + '@volar/language-service': ~1.10.0 + prettier: ^2.2 || ^3.0 + peerDependenciesMeta: + '@volar/language-service': + optional: true + prettier: + optional: true + dependencies: + '@volar/language-service': 1.10.0 + dev: true + /volar-service-prettier@0.0.11(@volar/language-service@1.10.0)(prettier@3.0.2): resolution: {integrity: sha512-A4vEU5BUitNNAySb+t/fCjEoL01uYUkoe/Fe5UxR3JJbdgr2nTeXb5IlW90/1vzmnTKZznadJV4i1SoAf2CRbg==} peerDependencies: @@ -17856,7 +17958,14 @@ packages: dependencies: load-yaml-file: 0.2.0 path-exists: 4.0.0 - dev: true + + /which-pm@2.1.1: + resolution: {integrity: sha512-xzzxNw2wMaoCWXiGE8IJ9wuPMU+EYhFksjHxrRT8kMT5SnocBPRg69YAMtyV4D12fP582RA+k3P8H9J5EMdIxQ==} + engines: {node: '>=8.15'} + dependencies: + load-yaml-file: 0.2.0 + path-exists: 4.0.0 + dev: false /which-typed-array@1.1.11: resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} @@ -18294,7 +18403,6 @@ packages: /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - dev: true /yocto-queue@1.0.0: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} From 45c5321cf241698c8fbf1530598b8335ae54e246 Mon Sep 17 00:00:00 2001 From: Jacob Lamb Date: Mon, 4 Sep 2023 17:04:18 -0700 Subject: [PATCH 6/8] Update preferred-pm --- packages/astro/package.json | 2 +- packages/astro/src/cli/add/index.ts | 4 +- pnpm-lock.yaml | 144 +++------------------------- 3 files changed, 15 insertions(+), 135 deletions(-) diff --git a/packages/astro/package.json b/packages/astro/package.json index 9af9fa28486c..a2cddd217b49 100644 --- a/packages/astro/package.json +++ b/packages/astro/package.json @@ -156,7 +156,7 @@ "ora": "^7.0.1", "p-limit": "^4.0.0", "path-to-regexp": "^6.2.1", - "preferred-pm": "^3.1.1", + "preferred-pm": "^3.1.2", "prompts": "^2.4.2", "rehype": "^12.0.1", "resolve": "^1.22.4", diff --git a/packages/astro/src/cli/add/index.ts b/packages/astro/src/cli/add/index.ts index 8cca91fe983e..62cec7a7193e 100644 --- a/packages/astro/src/cli/add/index.ts +++ b/packages/astro/src/cli/add/index.ts @@ -620,8 +620,8 @@ async function getInstallIntegrationsCommand({ return { pm: 'yarn', command: 'add', flags: [], dependencies }; case 'pnpm': return { pm: 'pnpm', command: 'add', flags: [], dependencies }; - // case 'bun': - // return { pm: 'bun', command: 'add', flags: [], dependencies }; + case 'bun': + return { pm: 'bun', command: 'add', flags: [], dependencies }; default: return null; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 44cc4ace9ee4..9f7f4fcd4d3a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -594,8 +594,8 @@ importers: specifier: ^6.2.1 version: 6.2.1 preferred-pm: - specifier: ^3.1.1 - version: 3.1.1 + specifier: ^3.1.2 + version: 3.1.2 prompts: specifier: ^2.4.2 version: 2.4.2 @@ -637,7 +637,7 @@ importers: version: 5.3.7 vite: specifier: ^4.4.9 - version: 4.4.9(sass@1.66.1) + version: 4.4.9(@types/node@18.17.8)(sass@1.66.1) vitefu: specifier: ^0.2.4 version: 0.2.4(vite@4.4.9) @@ -653,7 +653,7 @@ importers: devDependencies: '@astrojs/check': specifier: ^0.1.0 - version: 0.1.0 + version: 0.1.0(prettier-plugin-astro@0.12.0)(prettier@3.0.2)(typescript@5.1.6) '@playwright/test': specifier: ^1.37.1 version: 1.37.1 @@ -743,7 +743,7 @@ importers: version: 10.2.0 network-information-types: specifier: ^0.1.1 - version: 0.1.1 + version: 0.1.1(typescript@5.1.6) node-mocks-http: specifier: ^1.13.0 version: 1.13.0 @@ -5134,22 +5134,6 @@ packages: lite-youtube-embed: 0.2.0 dev: false - /@astrojs/check@0.1.0: - resolution: {integrity: sha512-tgjq+Vehgv0dwdsRlT4ai3QgT3etn8W5C4E4dvQ0Xe9ccwjKdMTWmpty5exfBtHLLAAOvwe5/OkYQsQ9OyKoVw==} - hasBin: true - peerDependencies: - typescript: ^5.0.0 - dependencies: - '@astrojs/language-server': 2.3.0 - chokidar: 3.5.3 - fast-glob: 3.3.1 - kleur: 4.1.5 - yargs: 17.7.2 - transitivePeerDependencies: - - prettier - - prettier-plugin-astro - dev: true - /@astrojs/check@0.1.0(prettier-plugin-astro@0.12.0)(prettier@3.0.2)(typescript@5.1.6): resolution: {integrity: sha512-tgjq+Vehgv0dwdsRlT4ai3QgT3etn8W5C4E4dvQ0Xe9ccwjKdMTWmpty5exfBtHLLAAOvwe5/OkYQsQ9OyKoVw==} hasBin: true @@ -5187,40 +5171,6 @@ packages: resolution: {integrity: sha512-DfBR7Cf+tOgQ4n7TIgTtU5x5SEA/08DNshpEPcT+91A0KbBlmUOYMBM/O6qAaHkmVo1KIoXQYhAmfdTT1zx9PQ==} dev: false - /@astrojs/language-server@2.3.0: - resolution: {integrity: sha512-NFSzszjR4+f0+fTUCuFKXrLWusJFqWvHMrIzHB0lXUE8dt3Dm1Ok9Emrdj3s3BvlguJz05MV9xSIz1puMvomtQ==} - hasBin: true - peerDependencies: - prettier: ^3.0.0 - prettier-plugin-astro: '>=0.11.0' - peerDependenciesMeta: - prettier: - optional: true - prettier-plugin-astro: - optional: true - dependencies: - '@astrojs/compiler': 1.5.7 - '@jridgewell/sourcemap-codec': 1.4.15 - '@volar/kit': 1.10.0 - '@volar/language-core': 1.10.0 - '@volar/language-server': 1.10.0 - '@volar/language-service': 1.10.0 - '@volar/source-map': 1.10.0 - '@volar/typescript': 1.10.0 - fast-glob: 3.3.1 - muggle-string: 0.3.1 - volar-service-css: 0.0.11(@volar/language-service@1.10.0) - volar-service-emmet: 0.0.11(@volar/language-service@1.10.0) - volar-service-html: 0.0.11(@volar/language-service@1.10.0) - volar-service-prettier: 0.0.11(@volar/language-service@1.10.0) - volar-service-typescript: 0.0.11(@volar/language-service@1.10.0)(@volar/typescript@1.10.0) - volar-service-typescript-twoslash-queries: 0.0.11(@volar/language-service@1.10.0) - vscode-html-languageservice: 5.0.6 - vscode-uri: 3.0.7 - transitivePeerDependencies: - - typescript - dev: true - /@astrojs/language-server@2.3.0(prettier-plugin-astro@0.12.0)(prettier@3.0.2)(typescript@5.1.6): resolution: {integrity: sha512-NFSzszjR4+f0+fTUCuFKXrLWusJFqWvHMrIzHB0lXUE8dt3Dm1Ok9Emrdj3s3BvlguJz05MV9xSIz1puMvomtQ==} hasBin: true @@ -6845,7 +6795,7 @@ packages: meow: 6.1.1 outdent: 0.5.0 p-limit: 2.3.0 - preferred-pm: 3.0.3 + preferred-pm: 3.1.2 resolve-from: 5.0.0 semver: 7.5.4 spawndamnit: 2.0.0 @@ -9236,17 +9186,6 @@ packages: pretty-format: 29.6.3 dev: false - /@volar/kit@1.10.0: - resolution: {integrity: sha512-3ijH2Gqe8kWnij58rwaBID22J/b+VT457ZEf5TwyPDqHTrfNCZIVitpdD5WlLD4Wy/D0Vymwj2ct9TNc1hkOmQ==} - peerDependencies: - typescript: '*' - dependencies: - '@volar/language-service': 1.10.0 - typesafe-path: 0.2.2 - vscode-languageserver-textdocument: 1.0.8 - vscode-uri: 3.0.7 - dev: true - /@volar/kit@1.10.0(typescript@5.1.6): resolution: {integrity: sha512-3ijH2Gqe8kWnij58rwaBID22J/b+VT457ZEf5TwyPDqHTrfNCZIVitpdD5WlLD4Wy/D0Vymwj2ct9TNc1hkOmQ==} peerDependencies: @@ -14223,10 +14162,12 @@ packages: engines: {node: '>= 0.6'} dev: true - /network-information-types@0.1.1: + /network-information-types@0.1.1(typescript@5.1.6): resolution: {integrity: sha512-mLXNafJYOkiJB6IlF727YWssTRpXitR+tKSLyA5VAdBi3SOvLf5gtizHgxf241YHPWocnAO/fAhVrB/68tPHDw==} peerDependencies: typescript: '>= 3.0.0' + dependencies: + typescript: 5.1.6 dev: true /nice-try@1.0.5: @@ -15204,25 +15145,14 @@ packages: tar-fs: 2.1.1 tunnel-agent: 0.6.0 - /preferred-pm@3.0.3: - resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} + /preferred-pm@3.1.2: + resolution: {integrity: sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==} engines: {node: '>=10'} dependencies: find-up: 5.0.0 find-yarn-workspace-root2: 1.2.16 path-exists: 4.0.0 which-pm: 2.0.0 - dev: true - - /preferred-pm@3.1.1: - resolution: {integrity: sha512-CsZgOVLKHifdoRu2y66P1s6oLb2WfT5Njkcgi80I/52FWTTVkWG6z0Z13vPkXC4hsT0nMrYXqX30buH8+D2eRQ==} - engines: {node: '>=10'} - dependencies: - find-up: 5.0.0 - find-yarn-workspace-root2: 1.2.16 - path-exists: 4.0.0 - which-pm: 2.0.0 - dev: false /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -17580,42 +17510,6 @@ packages: fsevents: 2.3.3 dev: false - /vite@4.4.9(sass@1.66.1): - resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - dependencies: - esbuild: 0.18.20 - postcss: 8.4.28 - rollup: 3.28.1 - sass: 1.66.1 - optionalDependencies: - fsevents: 2.3.3 - dev: false - /vitefu@0.2.4(vite@4.4.9): resolution: {integrity: sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==} peerDependencies: @@ -17624,7 +17518,7 @@ packages: vite: optional: true dependencies: - vite: 4.4.9(sass@1.66.1) + vite: 4.4.9(@types/node@18.17.8)(sass@1.66.1) dev: false /vitest@0.34.2: @@ -17731,20 +17625,6 @@ packages: vscode-uri: 3.0.7 dev: true - /volar-service-prettier@0.0.11(@volar/language-service@1.10.0): - resolution: {integrity: sha512-A4vEU5BUitNNAySb+t/fCjEoL01uYUkoe/Fe5UxR3JJbdgr2nTeXb5IlW90/1vzmnTKZznadJV4i1SoAf2CRbg==} - peerDependencies: - '@volar/language-service': ~1.10.0 - prettier: ^2.2 || ^3.0 - peerDependenciesMeta: - '@volar/language-service': - optional: true - prettier: - optional: true - dependencies: - '@volar/language-service': 1.10.0 - dev: true - /volar-service-prettier@0.0.11(@volar/language-service@1.10.0)(prettier@3.0.2): resolution: {integrity: sha512-A4vEU5BUitNNAySb+t/fCjEoL01uYUkoe/Fe5UxR3JJbdgr2nTeXb5IlW90/1vzmnTKZznadJV4i1SoAf2CRbg==} peerDependencies: From 523d7f46bcf92ab9c1d50bf5766458ce9092b4df Mon Sep 17 00:00:00 2001 From: Jacob Lamb Date: Tue, 5 Sep 2023 08:08:03 -0700 Subject: [PATCH 7/8] Update .changeset/friendly-clocks-act.md Co-authored-by: Bjorn Lu --- .changeset/friendly-clocks-act.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/.changeset/friendly-clocks-act.md b/.changeset/friendly-clocks-act.md index dcce8293aeca..37caa1ac34c0 100644 --- a/.changeset/friendly-clocks-act.md +++ b/.changeset/friendly-clocks-act.md @@ -4,10 +4,4 @@ 'astro': patch --- -Update preferred-pm and which-pm-runs packages as the latest versions now support Bun. - -Standardized variable naming by changing all instances of pkgManager to packageManager to ensure consistent wording throughout the codebase. - -`bunx astro add` command correctly uses bun. - -Telemetry notice returns package manager. +Support detecting Bun when logging messages with package manager information From b075b65bdcffe8f67389477756410ab3980eebec Mon Sep 17 00:00:00 2001 From: Jacob Lamb Date: Tue, 5 Sep 2023 08:18:01 -0700 Subject: [PATCH 8/8] Simplify changeset and move line into the notify() function --- .changeset/friendly-clocks-act.md | 3 +-- packages/astro/src/cli/index.ts | 5 +---- packages/astro/src/cli/telemetry/index.ts | 5 ++++- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.changeset/friendly-clocks-act.md b/.changeset/friendly-clocks-act.md index 37caa1ac34c0..43c6948804d0 100644 --- a/.changeset/friendly-clocks-act.md +++ b/.changeset/friendly-clocks-act.md @@ -1,7 +1,6 @@ --- 'create-astro': patch -'@astrojs/telemetry': patch 'astro': patch --- -Support detecting Bun when logging messages with package manager information +Support detecting Bun when logging messages with package manager information. diff --git a/packages/astro/src/cli/index.ts b/packages/astro/src/cli/index.ts index 6c5295421acd..0421258a51ae 100644 --- a/packages/astro/src/cli/index.ts +++ b/packages/astro/src/cli/index.ts @@ -2,7 +2,6 @@ import * as colors from 'kleur/colors'; import yargs from 'yargs-parser'; import { ASTRO_VERSION } from '../core/constants.js'; -import whichPm from 'which-pm'; type CLICommand = | 'help' @@ -128,10 +127,8 @@ async function runCommand(cmd: string, flags: yargs.Arguments) { process.env.NODE_ENV = cmd === 'dev' ? 'development' : 'production'; } - const packageManager = (await whichPm(process.cwd())).name ?? 'npm'; - const { notify } = await import('./telemetry/index.js'); - await notify(packageManager); + await notify(); // These commands uses the logging and user config. All commands are assumed to have been handled // by the end of this switch statement. diff --git a/packages/astro/src/cli/telemetry/index.ts b/packages/astro/src/cli/telemetry/index.ts index 367736c76d45..a6ebd09c3b2f 100644 --- a/packages/astro/src/cli/telemetry/index.ts +++ b/packages/astro/src/cli/telemetry/index.ts @@ -2,12 +2,15 @@ import type yargs from 'yargs-parser'; import * as msg from '../../core/messages.js'; import { telemetry } from '../../events/index.js'; +import whichPm from 'which-pm'; interface TelemetryOptions { flags: yargs.Arguments; } -export async function notify(packageManager = 'npm') { + +export async function notify() { + const packageManager = (await whichPm(process.cwd())).name ?? 'npm'; await telemetry.notify(() => { console.log(msg.telemetryNotice(packageManager) + '\n'); return true;