Skip to content

Commit 1bcdfb0

Browse files
Inv1xtannerlinsley
andauthored
feat: normalize all package manager execute commands (#333)
* chore: add ignoredBuiltDependencies to package.json * feat: add getPackageManagerExecuteScript EJS helper and convert templates to EJS Convert add-on README, env, and demo files to EJS templates so they can use package-manager-aware commands (e.g. npx/bunx/pnpm dlx) via the new getPackageManagerExecuteScript template helper. * feat: normalize all package manager execute commands in translateExecuteCommand Rename translateNpxCommand to translateExecuteCommand and extend it to recognize all known execute-command formats (npx, bunx, pnpx, pnpm dlx, yarn dlx, deno run npm:*). This ensures add-on commands specified in any format are correctly translated to the user's chosen package manager. * chore: remove ignoredBuiltDependencies like in original repo * fix: readme files addons --------- Co-authored-by: Tanner Linsley <tannerlinsley@gmail.com>
1 parent 76a3782 commit 1bcdfb0

File tree

23 files changed

+269
-34
lines changed

23 files changed

+269
-34
lines changed

packages/create/src/create-app.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { writeConfigFileToEnvironment } from './config-file.js'
66
import {
77
getPackageManagerScriptCommand,
88
packageManagerInstall,
9+
translateExecuteCommand,
910
} from './package-manager.js'
1011
import { createPackageJSON } from './package-json.js'
1112
import { createTemplateFile } from './template-file.js'
@@ -181,18 +182,19 @@ async function runCommandsAndInstallDependencies(
181182
addOn.phase === phase && addOn.command && addOn.command.command,
182183
)) {
183184
s.start(`Running commands for ${addOn.name}...`)
184-
const cmd = formatCommand({
185+
const translated = translateExecuteCommand(options.packageManager, {
185186
command: addOn.command!.command,
186187
args: addOn.command!.args || [],
187188
})
189+
const cmd = formatCommand(translated)
188190
environment.startStep({
189191
id: 'run-commands',
190192
type: 'command',
191193
message: cmd,
192194
})
193195
await environment.execute(
194-
addOn.command!.command,
195-
addOn.command!.args || [],
196+
translated.command,
197+
translated.args,
196198
options.targetDir,
197199
{ inherit: true },
198200
)
@@ -208,19 +210,20 @@ async function runCommandsAndInstallDependencies(
208210
options.starter.command.command
209211
) {
210212
s.start(`Setting up starter ${options.starter.name}...`)
211-
const cmd = formatCommand({
213+
const starterTranslated = translateExecuteCommand(options.packageManager, {
212214
command: options.starter.command.command,
213215
args: options.starter.command.args || [],
214216
})
217+
const cmd = formatCommand(starterTranslated)
215218
environment.startStep({
216219
id: 'run-starter-command',
217220
type: 'command',
218221
message: cmd,
219222
})
220223

221224
await environment.execute(
222-
options.starter.command.command,
223-
options.starter.command.args || [],
225+
starterTranslated.command,
226+
starterTranslated.args,
224227
options.targetDir,
225228
{ inherit: true },
226229
)

packages/create/src/frameworks.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,15 @@ export function scanAddOnDirectories(addOnsDirectories: Array<string>) {
7272
}
7373

7474
let readme: string | undefined
75+
let readmeIsEjs = false
7576
if (existsSync(resolve(addOnsBase, dir, 'README.md'))) {
7677
readme = readFileSync(resolve(addOnsBase, dir, 'README.md'), 'utf-8')
78+
} else if (existsSync(resolve(addOnsBase, dir, 'README.md.ejs'))) {
79+
readme = readFileSync(
80+
resolve(addOnsBase, dir, 'README.md.ejs'),
81+
'utf-8',
82+
)
83+
readmeIsEjs = true
7784
}
7885

7986
let smallLogo: string | undefined
@@ -107,6 +114,7 @@ export function scanAddOnDirectories(addOnsDirectories: Array<string>) {
107114
packageAdditions,
108115
packageTemplate,
109116
readme,
117+
readmeIsEjs,
110118
files,
111119
smallLogo,
112120
getFiles,

packages/create/src/frameworks/react/add-ons/better-auth/README.md renamed to packages/create/src/frameworks/react/add-ons/better-auth/README.md.ejs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
1. Generate and set the `BETTER_AUTH_SECRET` environment variable in your `.env.local`:
44

55
```bash
6-
npx @better-auth/cli secret
6+
<%- getPackageManagerExecuteScript('@better-auth/cli', ['secret']) %>
77
```
88

99
2. Visit the [Better Auth documentation](https://www.better-auth.com) to unlock the full potential of authentication in your app.
@@ -28,5 +28,5 @@ export const auth = betterAuth({
2828
Then run migrations:
2929

3030
```bash
31-
npx @better-auth/cli migrate
31+
<%- getPackageManagerExecuteScript('@better-auth/cli', ['migrate']) %>
3232
```

packages/create/src/frameworks/react/add-ons/better-auth/assets/_dot_env.local.append

Lines changed: 0 additions & 3 deletions
This file was deleted.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Better Auth configuration
2+
BETTER_AUTH_URL=http://localhost:3000
3+
BETTER_AUTH_SECRET= # Generate a secret key: `<%- getPackageManagerExecuteScript('@better-auth/cli', ['secret']) %>`

packages/create/src/frameworks/react/add-ons/convex/README.md

Lines changed: 0 additions & 4 deletions
This file was deleted.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
## Setting up Convex
2+
3+
- Set the `VITE_CONVEX_URL` and `CONVEX_DEPLOYMENT` environment variables in your `.env.local`. (Or run `<%- getPackageManagerExecuteScript('convex', ['init']) %>` to set them automatically.)
4+
- Run `<%- getPackageManagerExecuteScript('convex', ['dev']) %>` to start the Convex server.

packages/create/src/frameworks/react/add-ons/drizzle/assets/src/routes/demo/drizzle.tsx renamed to packages/create/src/frameworks/react/add-ons/drizzle/assets/src/routes/demo/drizzle.tsx.ejs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,19 +163,19 @@ function DemoDrizzle() {
163163
<li>
164164
Run:{' '}
165165
<code className="px-2 py-1 rounded bg-black/30 text-purple-300">
166-
npx drizzle-kit generate
166+
<%- getPackageManagerExecuteScript('drizzle-kit', ['generate']) %>
167167
</code>
168168
</li>
169169
<li>
170170
Run:{' '}
171171
<code className="px-2 py-1 rounded bg-black/30 text-purple-300">
172-
npx drizzle-kit migrate
172+
<%- getPackageManagerExecuteScript('drizzle-kit', ['migrate']) %>
173173
</code>
174174
</li>
175175
<li>
176176
Optional:{' '}
177177
<code className="px-2 py-1 rounded bg-black/30 text-purple-300">
178-
npx drizzle-kit studio
178+
<%- getPackageManagerExecuteScript('drizzle-kit', ['studio']) %>
179179
</code>
180180
</li>
181181
</ol>

packages/create/src/frameworks/react/add-ons/prisma/assets/src/routes/demo/prisma.tsx renamed to packages/create/src/frameworks/react/add-ons/prisma/assets/src/routes/demo/prisma.tsx.ejs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -162,19 +162,19 @@ function DemoPrisma() {
162162
<li>
163163
Run:{' '}
164164
<code className="px-2 py-1 rounded bg-black/30 text-purple-300">
165-
npx prisma generate
165+
<%- getPackageManagerExecuteScript('prisma', ['generate']) %>
166166
</code>
167167
</li>
168168
<li>
169169
Run:{' '}
170170
<code className="px-2 py-1 rounded bg-black/30 text-purple-300">
171-
npx prisma db push
171+
<%- getPackageManagerExecuteScript('prisma', ['db', 'push']) %>
172172
</code>
173173
</li>
174174
<li>
175175
Optional:{' '}
176176
<code className="px-2 py-1 rounded bg-black/30 text-purple-300">
177-
npx prisma studio
177+
<%- getPackageManagerExecuteScript('prisma', ['studio']) %>
178178
</code>
179179
</li>
180180
</ol>

packages/create/src/frameworks/react/add-ons/prisma/package.json.ejs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"tsx": "^4.20.6"
1212
},
1313
"scripts": {<% if (addOnOption.prisma.database === 'postgres') { %>
14-
"post-cta-init": "npx create-db@latest --user-agent tanstack/tsrouter",<% } %>
14+
"post-cta-init": "<%- getPackageManagerExecuteScript('create-db@latest', ['--user-agent', 'tanstack/tsrouter']) %>",<% } %>
1515
"db:generate": "dotenv -e .env.local -- prisma generate",
1616
"db:push": "dotenv -e .env.local -- prisma db push",
1717
"db:migrate": "dotenv -e .env.local -- prisma migrate dev",

0 commit comments

Comments
 (0)