From 0a82014832a5d555447b4cb720cda6a8ee910d81 Mon Sep 17 00:00:00 2001 From: jingjing2222 Date: Sun, 5 Jul 2026 04:53:07 +0900 Subject: [PATCH] fix(create): repair router-only package manifests --- .changeset/tidy-spoons-dream.md | 6 ++ .../frameworks/react/project/packages.json | 4 +- .../frameworks/solid/project/packages.json | 4 +- packages/create/src/package-json.ts | 31 ++++-- packages/create/tests/package-json.test.ts | 94 +++++++++++++++++++ 5 files changed, 123 insertions(+), 16 deletions(-) create mode 100644 .changeset/tidy-spoons-dream.md diff --git a/.changeset/tidy-spoons-dream.md b/.changeset/tidy-spoons-dream.md new file mode 100644 index 00000000..6f34b8a1 --- /dev/null +++ b/.changeset/tidy-spoons-dream.md @@ -0,0 +1,6 @@ +--- +"@tanstack/create": patch +"@tanstack/cli": patch +--- + +Fix router-only package manifests by providing `@tanstack/router-core` for devtools under strict package managers and keeping `@tanstack/router-plugin` in devDependencies only. diff --git a/packages/create/src/frameworks/react/project/packages.json b/packages/create/src/frameworks/react/project/packages.json index 2bc6816a..f035a147 100644 --- a/packages/create/src/frameworks/react/project/packages.json +++ b/packages/create/src/frameworks/react/project/packages.json @@ -16,9 +16,7 @@ }, "file-router": { "devDependencies": { - "@tanstack/router-cli": "^1.132.0" - }, - "dependencies": { + "@tanstack/router-cli": "^1.132.0", "@tanstack/router-plugin": "^1.132.0" } } diff --git a/packages/create/src/frameworks/solid/project/packages.json b/packages/create/src/frameworks/solid/project/packages.json index 603bd779..b1a5573b 100644 --- a/packages/create/src/frameworks/solid/project/packages.json +++ b/packages/create/src/frameworks/solid/project/packages.json @@ -12,9 +12,7 @@ }, "file-router": { "devDependencies": { - "@tanstack/router-cli": "^1.133.21" - }, - "dependencies": { + "@tanstack/router-cli": "^1.133.21", "@tanstack/router-plugin": "^1.133.21" } } diff --git a/packages/create/src/package-json.ts b/packages/create/src/package-json.ts index a929a487..a8326c19 100644 --- a/packages/create/src/package-json.ts +++ b/packages/create/src/package-json.ts @@ -66,6 +66,25 @@ export function createPackageJSON(options: Options) { return formatCommand(getPackageManagerExecuteCommand(packageManager, pkg, args)) } + function applyRouterOnlyPackageJSONCompat() { + const routerPluginVersion = + packageJSON.devDependencies?.['@tanstack/router-plugin'] ?? + packageJSON.dependencies?.['@tanstack/router-plugin'] ?? + 'latest' + + delete packageJSON.dependencies?.['@tanstack/router-plugin'] + + packageJSON.devDependencies = { + ...(packageJSON.devDependencies ?? {}), + '@tanstack/router-plugin': routerPluginVersion, + } + packageJSON.dependencies = { + ...(packageJSON.dependencies ?? {}), + '@tanstack/router-core': + packageJSON.dependencies?.['@tanstack/router-core'] ?? 'latest', + } + } + let packageJSON = { ...JSON.parse(JSON.stringify(options.framework.basePackageJSON)), name: options.projectName, @@ -133,22 +152,14 @@ export function createPackageJSON(options: Options) { if (options.framework.id === 'react') { delete packageJSON.dependencies?.['@tanstack/react-start'] delete packageJSON.dependencies?.['@tanstack/react-router-ssr-query'] - packageJSON.devDependencies = { - ...(packageJSON.devDependencies ?? {}), - '@tanstack/router-plugin': - packageJSON.devDependencies?.['@tanstack/router-plugin'] ?? 'latest', - } + applyRouterOnlyPackageJSONCompat() } if (options.framework.id === 'solid') { delete packageJSON.dependencies?.['@tanstack/solid-start'] delete packageJSON.dependencies?.['@tanstack/solid-router-ssr-query'] delete packageJSON.scripts?.start - packageJSON.devDependencies = { - ...(packageJSON.devDependencies ?? {}), - '@tanstack/router-plugin': - packageJSON.devDependencies?.['@tanstack/router-plugin'] ?? 'latest', - } + applyRouterOnlyPackageJSONCompat() } } diff --git a/packages/create/tests/package-json.test.ts b/packages/create/tests/package-json.test.ts index f9e05306..d9f67ae3 100644 --- a/packages/create/tests/package-json.test.ts +++ b/packages/create/tests/package-json.test.ts @@ -60,6 +60,100 @@ describe('createPackageJSON', () => { expect(JSON.stringify(packageJSON)).toEqual(JSON.stringify(expected)) }) + it('should create a strict package-manager compatible React router-only package.json', () => { + const packageJSON = createPackageJSON({ + chosenAddOns: [], + mode: 'file-router', + routerOnly: true, + typescript: true, + tailwind: true, + projectName: 'test', + framework: { + id: 'react', + basePackageJSON: { + dependencies: { + '@tanstack/react-router': 'latest', + '@tanstack/react-router-devtools': 'latest', + '@tanstack/react-router-ssr-query': 'latest', + '@tanstack/react-start': 'latest', + }, + devDependencies: {}, + }, + optionalPackages: { + typescript: {}, + tailwindcss: {}, + 'file-router': { + dependencies: { + '@tanstack/router-plugin': '^1.132.0', + }, + devDependencies: { + '@tanstack/router-cli': '^1.132.0', + }, + }, + }, + } as unknown as Framework, + } as unknown as Options) + + expect(packageJSON.dependencies).toEqual({ + '@tanstack/react-router': 'latest', + '@tanstack/react-router-devtools': 'latest', + '@tanstack/router-core': 'latest', + }) + expect(packageJSON.devDependencies).toEqual({ + '@tanstack/router-cli': '^1.132.0', + '@tanstack/router-plugin': '^1.132.0', + }) + }) + + it('should move router-plugin to devDependencies for Solid router-only package.json', () => { + const packageJSON = createPackageJSON({ + chosenAddOns: [], + mode: 'file-router', + routerOnly: true, + typescript: true, + tailwind: true, + projectName: 'test', + framework: { + id: 'solid', + basePackageJSON: { + scripts: { + start: 'node .output/server/index.mjs', + }, + dependencies: { + '@tanstack/solid-router': 'latest', + '@tanstack/solid-router-devtools': 'latest', + '@tanstack/solid-router-ssr-query': 'latest', + '@tanstack/solid-start': 'latest', + }, + devDependencies: {}, + }, + optionalPackages: { + typescript: {}, + tailwindcss: {}, + 'file-router': { + dependencies: { + '@tanstack/router-plugin': '^1.133.21', + }, + devDependencies: { + '@tanstack/router-cli': '^1.133.21', + }, + }, + }, + } as unknown as Framework, + } as unknown as Options) + + expect(packageJSON.dependencies).toEqual({ + '@tanstack/router-core': 'latest', + '@tanstack/solid-router': 'latest', + '@tanstack/solid-router-devtools': 'latest', + }) + expect(packageJSON.devDependencies).toEqual({ + '@tanstack/router-cli': '^1.133.21', + '@tanstack/router-plugin': '^1.133.21', + }) + expect(packageJSON.scripts).toEqual({}) + }) + it('should include sqlite build approval for pnpm templates', () => { const packageJSON = createPackageJSON({ chosenAddOns: [