diff --git a/.changeset/cold-buses-jam.md b/.changeset/cold-buses-jam.md new file mode 100644 index 0000000..db2e7d2 --- /dev/null +++ b/.changeset/cold-buses-jam.md @@ -0,0 +1,5 @@ +--- +"create-better-t-stack": patch +--- + +fix package manager detection diff --git a/apps/cli/package.json b/apps/cli/package.json index 23800fb..b9636e9 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -21,7 +21,6 @@ "@inquirer/prompts": "^7.3.1", "chalk": "^5.3.0", "commander": "^13.1.0", - "detect-package-manager": "^3.0.2", "execa": "^8.0.1", "fs-extra": "^11.2.0", "gradient-string": "^3.0.0", diff --git a/apps/cli/src/create-project.ts b/apps/cli/src/create-project.ts index ba1cd52..6908476 100644 --- a/apps/cli/src/create-project.ts +++ b/apps/cli/src/create-project.ts @@ -1,11 +1,11 @@ import path from "node:path"; import { confirm, select } from "@inquirer/prompts"; -import { detect } from "detect-package-manager"; import { execa } from "execa"; import fs from "fs-extra"; import ora from "ora"; import { setupTurso } from "./helpers/db-setup"; import type { PackageManager, ProjectConfig } from "./types"; +import { getUserPkgManager } from "./utils/get-package-manager"; import { logger } from "./utils/logger"; export async function createProject(options: ProjectConfig) { @@ -38,7 +38,7 @@ export async function createProject(options: ProjectConfig) { let packageManager = options.packageManager; if (!packageManager) { - const detectedPackageManager = await detect(); + const detectedPackageManager = getUserPkgManager(); const useDetectedPackageManager = await confirm({ message: `Use detected package manager (${detectedPackageManager})?`, diff --git a/apps/cli/src/utils/generate-reproducible-command.ts b/apps/cli/src/utils/generate-reproducible-command.ts index b2a8815..d674a90 100644 --- a/apps/cli/src/utils/generate-reproducible-command.ts +++ b/apps/cli/src/utils/generate-reproducible-command.ts @@ -1,8 +1,10 @@ import { DEFAULT_CONFIG } from "../consts"; import type { ProjectConfig } from "../types"; +import { getUserPkgManager } from "./get-package-manager"; export function generateReproducibleCommand(config: ProjectConfig): string { const flags: string[] = []; + const defaultPackageManager = getUserPkgManager(); if (config.database !== DEFAULT_CONFIG.database) { flags.push(`--database ${config.database}`); @@ -12,7 +14,7 @@ export function generateReproducibleCommand(config: ProjectConfig): string { } if ( config.packageManager && - config.packageManager !== DEFAULT_CONFIG.packageManager + config.packageManager !== defaultPackageManager ) { flags.push(`--package-manager ${config.packageManager}`); } diff --git a/apps/cli/src/utils/get-package-manager.ts b/apps/cli/src/utils/get-package-manager.ts new file mode 100644 index 0000000..add4eb0 --- /dev/null +++ b/apps/cli/src/utils/get-package-manager.ts @@ -0,0 +1,16 @@ +export type PackageManager = "npm" | "pnpm" | "yarn" | "bun"; + +export const getUserPkgManager: () => PackageManager = () => { + const userAgent = process.env.npm_config_user_agent; + + if (userAgent?.startsWith("yarn")) { + return "yarn"; + } + if (userAgent?.startsWith("pnpm")) { + return "pnpm"; + } + if (userAgent?.startsWith("bun")) { + return "bun"; + } + return "npm"; +}; diff --git a/bun.lock b/bun.lock index 6a50a99..35ac1e7 100644 --- a/bun.lock +++ b/bun.lock @@ -14,7 +14,7 @@ }, "apps/cli": { "name": "create-better-t-stack", - "version": "0.2.1", + "version": "0.3.0", "bin": { "create-better-t-stack": "dist/index.js" }, @@ -22,7 +22,6 @@ "@inquirer/prompts": "^7.3.1", "chalk": "^5.3.0", "commander": "^13.1.0", - "detect-package-manager": "^3.0.2", "execa": "^8.0.1", "fs-extra": "^11.2.0", "gradient-string": "^3.0.0", @@ -723,8 +722,6 @@ "detect-node-es": ["detect-node-es@1.1.0", "", {}, "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ=="], - "detect-package-manager": ["detect-package-manager@3.0.2", "", { "dependencies": { "execa": "^5.1.1" } }, "sha512-8JFjJHutStYrfWwzfretQoyNGoZVW1Fsrp4JO9spa7h/fBfwgTMEIy4/LBzRDGsxwVPHU0q+T9YvwLDJoOApLQ=="], - "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], "diff-sequences": ["diff-sequences@29.6.3", "", {}, "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q=="], @@ -1779,8 +1776,6 @@ "cli-truncate/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], - "detect-package-manager/execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="], - "enquirer/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "eslint/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], @@ -1925,20 +1920,6 @@ "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], - "detect-package-manager/execa/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="], - - "detect-package-manager/execa/human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="], - - "detect-package-manager/execa/is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="], - - "detect-package-manager/execa/npm-run-path": ["npm-run-path@4.0.1", "", { "dependencies": { "path-key": "^3.0.0" } }, "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw=="], - - "detect-package-manager/execa/onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], - - "detect-package-manager/execa/signal-exit": ["signal-exit@3.0.7", "", {}, "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="], - - "detect-package-manager/execa/strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="], - "enquirer/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], "eslint/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], @@ -2023,8 +2004,6 @@ "@manypkg/find-root/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], - "detect-package-manager/execa/onetime/mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], - "log-update/cli-cursor/restore-cursor/onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="], } }