Skip to content

Commit 16fcd67

Browse files
committed
fix(create): preserve pnpm build approvals across add-ons
Keep base esbuild/lightningcss approvals and merge pnpm.onlyBuiltDependencies from add-ons so generated apps remain installable under pnpm's build-script policy.
1 parent e9f2baa commit 16fcd67

File tree

5 files changed

+75
-1
lines changed

5 files changed

+75
-1
lines changed

.changeset/rude-tips-ski.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@tanstack/create': patch
3+
---
4+
5+
Add pnpm build approvals for `esbuild` and `lightningcss` in base app templates and preserve `pnpm.onlyBuiltDependencies` when add-ons add their own entries.

packages/create/src/frameworks/react/project/base/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,8 @@
4040
"vite-tsconfig-paths": "^5.1.4",
4141
"vitest": "^3.0.5",
4242
"zod": "^4.3.5"
43+
},
44+
"pnpm": {
45+
"onlyBuiltDependencies": ["esbuild", "lightningcss"]
4346
}
4447
}

packages/create/src/frameworks/solid/project/base/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,5 +24,8 @@
2424
"vite-plugin-solid": "^2.11.10",
2525
"typescript": "^5.7.2",
2626
"vite": "^7.1.7"
27+
},
28+
"pnpm": {
29+
"onlyBuiltDependencies": ["esbuild", "lightningcss"]
2730
}
2831
}

packages/create/src/package-json.ts

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export function mergePackageJSON(
77
packageJSON: Record<string, any>,
88
overlayPackageJSON?: Record<string, any>,
99
) {
10-
return {
10+
const mergedPackageJSON: Record<string, any> = {
1111
...packageJSON,
1212
...(overlayPackageJSON || {}),
1313
dependencies: {
@@ -23,6 +23,37 @@ export function mergePackageJSON(
2323
...(overlayPackageJSON?.scripts || {}),
2424
},
2525
}
26+
27+
const baseOnlyBuiltDependencies = Array.isArray(
28+
packageJSON.pnpm?.onlyBuiltDependencies,
29+
)
30+
? packageJSON.pnpm.onlyBuiltDependencies
31+
: []
32+
const overlayOnlyBuiltDependencies = Array.isArray(
33+
overlayPackageJSON?.pnpm?.onlyBuiltDependencies,
34+
)
35+
? overlayPackageJSON.pnpm.onlyBuiltDependencies
36+
: []
37+
38+
const onlyBuiltDependencies = [
39+
...new Set([
40+
...baseOnlyBuiltDependencies,
41+
...overlayOnlyBuiltDependencies,
42+
]),
43+
]
44+
45+
if (packageJSON.pnpm || overlayPackageJSON?.pnpm) {
46+
mergedPackageJSON.pnpm = {
47+
...packageJSON.pnpm,
48+
...overlayPackageJSON?.pnpm,
49+
}
50+
51+
if (onlyBuiltDependencies.length) {
52+
mergedPackageJSON.pnpm.onlyBuiltDependencies = onlyBuiltDependencies
53+
}
54+
}
55+
56+
return mergedPackageJSON
2657
}
2758

2859
export function createPackageJSON(options: Options) {

packages/create/tests/package-json.test.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,38 @@ describe('createPackageJSON', () => {
9292
})
9393
})
9494

95+
it('should merge pnpm onlyBuiltDependencies from base and add-ons', () => {
96+
const packageJSON = createPackageJSON({
97+
chosenAddOns: [
98+
{
99+
packageTemplate:
100+
'{"pnpm": {"onlyBuiltDependencies": ["better-sqlite3"]}}',
101+
},
102+
],
103+
addOnOptions: {},
104+
mode: 'file-router',
105+
typescript: true,
106+
tailwind: true,
107+
projectName: 'test',
108+
framework: {
109+
basePackageJSON: {
110+
pnpm: {
111+
onlyBuiltDependencies: ['esbuild', 'lightningcss'],
112+
},
113+
},
114+
optionalPackages: {
115+
typescript: {},
116+
tailwindcss: {},
117+
'file-router': {},
118+
},
119+
} as unknown as Framework,
120+
} as unknown as Options)
121+
122+
expect(packageJSON.pnpm).toEqual({
123+
onlyBuiltDependencies: ['esbuild', 'lightningcss', 'better-sqlite3'],
124+
})
125+
})
126+
95127
it('should provide execute command helper in package templates', () => {
96128
const packageJSON = createPackageJSON({
97129
chosenAddOns: [

0 commit comments

Comments
 (0)