summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jacob Lamb <jacobtlamb@hey.com> 2023-09-06 02:15:10 -0700
committerGravatar GitHub <noreply@github.com> 2023-09-06 17:15:10 +0800
commitd2f2a11cdb42b0de79be21c798eda8e7e7b2a277 (patch)
treea1619904a1ec51bd6f25d0909db8707e57cf1f3d
parenteb8c4cc2fc578095e73f80c712615f323c7cbc61 (diff)
downloadastro-d2f2a11cdb42b0de79be21c798eda8e7e7b2a277.tar.gz
astro-d2f2a11cdb42b0de79be21c798eda8e7e7b2a277.tar.zst
astro-d2f2a11cdb42b0de79be21c798eda8e7e7b2a277.zip
Improve Package Detection (#8306)
-rw-r--r--.changeset/friendly-clocks-act.md6
-rw-r--r--packages/astro/package.json4
-rw-r--r--packages/astro/src/cli/add/index.ts2
-rw-r--r--packages/astro/src/cli/install-package.ts2
-rw-r--r--packages/astro/src/cli/telemetry/index.ts5
-rw-r--r--packages/astro/src/core/messages.ts4
-rw-r--r--packages/create-astro/src/actions/context.ts6
-rw-r--r--packages/create-astro/src/actions/dependencies.ts14
-rw-r--r--packages/create-astro/src/actions/next-steps.ts17
-rw-r--r--packages/create-astro/test/dependencies.test.js10
-rw-r--r--packages/create-astro/test/next.test.js4
-rw-r--r--pnpm-lock.yaml22
12 files changed, 60 insertions, 36 deletions
diff --git a/.changeset/friendly-clocks-act.md b/.changeset/friendly-clocks-act.md
new file mode 100644
index 000000000..43c694880
--- /dev/null
+++ b/.changeset/friendly-clocks-act.md
@@ -0,0 +1,6 @@
+---
+'create-astro': patch
+'astro': patch
+---
+
+Support detecting Bun when logging messages with package manager information.
diff --git a/packages/astro/package.json b/packages/astro/package.json
index 528f27d28..a2cddd217 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.0.3",
+ "preferred-pm": "^3.1.2",
"prompts": "^2.4.2",
"rehype": "^12.0.1",
"resolve": "^1.22.4",
@@ -172,7 +172,7 @@
"vfile": "^5.3.7",
"vite": "^4.4.9",
"vitefu": "^0.2.4",
- "which-pm": "^2.0.0",
+ "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 07fc7b1a8..62cec7a71 100644
--- a/packages/astro/src/cli/add/index.ts
+++ b/packages/astro/src/cli/add/index.ts
@@ -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/install-package.ts b/packages/astro/src/cli/install-package.ts
index f6af1d346..689f81e3e 100644
--- a/packages/astro/src/cli/install-package.ts
+++ b/packages/astro/src/cli/install-package.ts
@@ -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;
}
diff --git a/packages/astro/src/cli/telemetry/index.ts b/packages/astro/src/cli/telemetry/index.ts
index b702a5baa..a6ebd09c3 100644
--- a/packages/astro/src/cli/telemetry/index.ts
+++ b/packages/astro/src/cli/telemetry/index.ts
@@ -2,14 +2,17 @@
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() {
+ const packageManager = (await whichPm(process.cwd())).name ?? '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 974bf79bf..758f5e581 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 5c2c0e9c0..c91a0caae 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,7 @@ export async function getContext(argv: string[]): Promise<Context> {
{ argv, permissive: true }
);
- const pkgManager = detectPackageManager()?.name ?? 'npm';
+ const packageManager = detectPackageManager()?.name ?? 'npm';
const [username, version] = await Promise.all([getName(), getVersion()]);
let cwd = flags['_'][0];
let {
@@ -85,7 +85,7 @@ export async function getContext(argv: string[]): Promise<Context> {
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 339e3379f..f05e9e93a 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<Context, 'install' | 'yes' | 'prompt' | 'pkgManager' | 'cwd' | 'dryRun'>
+ ctx: Pick<Context, 'install' | 'yes' | 'prompt' | 'packageManager' | 'cwd' | 'dryRun'>
) {
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 01c1963d9..c79a80525 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<Context, 'cwd' | 'pkgManager' | 'skipHouston'>) {
+export async function next(ctx: Pick<Context, 'cwd' | 'packageManager' | 'skipHouston'>) {
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/test/dependencies.test.js b/packages/create-astro/test/dependencies.test.js
index 88e43597b..705cf8354 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 efc0e6728..07de90d50 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/pnpm-lock.yaml b/pnpm-lock.yaml
index ff3a57a4c..c2f3c68e7 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.0.3
- version: 3.0.3
+ specifier: ^3.1.2
+ version: 3.1.2
prompts:
specifier: ^2.4.2
version: 2.4.2
@@ -642,8 +642,8 @@ importers:
specifier: ^0.2.4
version: 0.2.4(vite@4.4.9)
which-pm:
- specifier: ^2.0.0
- version: 2.0.0
+ specifier: ^2.1.1
+ version: 2.1.1
yargs-parser:
specifier: ^21.1.1
version: 21.1.1
@@ -6816,7 +6816,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
@@ -15166,8 +15166,8 @@ 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
@@ -17860,6 +17860,14 @@ packages:
load-yaml-file: 0.2.0
path-exists: 4.0.0
+ /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==}
engines: {node: '>= 0.4'}