@tanstack/cli 0.60.0 → 0.61.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +35 -0
- package/dist/cli.js +266 -11
- package/dist/command-line.js +103 -8
- package/dist/discovery.js +144 -0
- package/dist/options.js +35 -2
- package/dist/types/command-line.d.ts +7 -0
- package/dist/types/{mcp/types.d.ts → discovery.d.ts} +23 -75
- package/dist/types/types.d.ts +1 -2
- package/dist/types/ui-prompts.d.ts +5 -0
- package/dist/ui-prompts.js +26 -0
- package/package.json +2 -5
- package/playwright-report/index.html +1 -1
- package/src/cli.ts +345 -13
- package/src/command-line.ts +147 -8
- package/src/discovery.ts +209 -0
- package/src/options.ts +46 -0
- package/src/types.ts +1 -2
- package/src/ui-prompts.ts +32 -0
- package/tests/command-line.test.ts +81 -0
- package/tests/options.test.ts +65 -0
- package/tests/ui-prompts.test.ts +28 -0
- package/tests-e2e/create-smoke.spec.ts +12 -12
- package/tests-e2e/router-only-smoke.spec.ts +11 -25
- package/tests-e2e/solid-smoke.spec.ts +3 -2
- package/dist/mcp/api.js +0 -31
- package/dist/mcp/tools.js +0 -250
- package/dist/mcp/types.js +0 -37
- package/dist/mcp.js +0 -181
- package/dist/types/mcp/api.d.ts +0 -4
- package/dist/types/mcp/tools.d.ts +0 -2
- package/dist/types/mcp.d.ts +0 -5
- package/src/mcp/api.ts +0 -42
- package/src/mcp/tools.ts +0 -323
- package/src/mcp/types.ts +0 -46
- package/src/mcp.ts +0 -263
- package/tests/mcp.test.ts +0 -225
package/dist/options.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { intro } from '@clack/prompts';
|
|
2
|
-
import { finalizeAddOns, getFrameworkById, getPackageManager, populateAddOnOptionsDefaults, readConfigFile, } from '@tanstack/create';
|
|
3
|
-
import { getProjectName, promptForAddOnOptions, promptForEnvVars, selectAddOns, selectDeployment, selectExamples, selectGit, selectPackageManager, selectToolchain, } from './ui-prompts.js';
|
|
2
|
+
import { finalizeAddOns, getFrameworkById, getPackageManager, loadStarter, populateAddOnOptionsDefaults, readConfigFile, } from '@tanstack/create';
|
|
3
|
+
import { getProjectName, promptForAddOnOptions, promptForEnvVars, selectAddOns, selectDeployment, selectExamples, selectGit, selectPackageManager, selectTemplate, selectToolchain, } from './ui-prompts.js';
|
|
4
|
+
import { listTemplateChoices, resolveStarterSpecifier, } from './command-line.js';
|
|
4
5
|
import { getCurrentDirectoryName, sanitizePackageName, validateProjectName, } from './utils.js';
|
|
5
6
|
export async function promptForCreateOptions(cliOptions, { forcedAddOns = [], showDeploymentOptions = false, }) {
|
|
6
7
|
const options = {};
|
|
@@ -30,6 +31,32 @@ export async function promptForCreateOptions(cliOptions, { forcedAddOns = [], sh
|
|
|
30
31
|
['file-router', 'typescript', 'tsx', 'javascript', 'js', 'jsx'].includes(template);
|
|
31
32
|
const routerOnly = !!cliOptions.routerOnly ||
|
|
32
33
|
(isLegacyTemplate ? template !== 'file-router' : false);
|
|
34
|
+
if (!cliOptions.starter) {
|
|
35
|
+
if (cliOptions.template && !isLegacyTemplate) {
|
|
36
|
+
cliOptions.starter = cliOptions.template;
|
|
37
|
+
}
|
|
38
|
+
else if (cliOptions.templateId) {
|
|
39
|
+
cliOptions.starter = cliOptions.templateId;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (!routerOnly && !cliOptions.starter) {
|
|
43
|
+
const starterChoices = await listTemplateChoices(options.framework.id);
|
|
44
|
+
const selectedTemplateId = await selectTemplate(starterChoices.map((choice) => ({
|
|
45
|
+
id: choice.id,
|
|
46
|
+
name: choice.name,
|
|
47
|
+
description: choice.description,
|
|
48
|
+
})));
|
|
49
|
+
if (selectedTemplateId) {
|
|
50
|
+
cliOptions.starter = selectedTemplateId;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const starter = !routerOnly && cliOptions.starter
|
|
54
|
+
? await loadStarter(await resolveStarterSpecifier(cliOptions.starter, options.framework.id))
|
|
55
|
+
: undefined;
|
|
56
|
+
if (starter) {
|
|
57
|
+
options.framework = getFrameworkById(starter.framework) || options.framework;
|
|
58
|
+
options.mode = starter.mode;
|
|
59
|
+
}
|
|
33
60
|
// TypeScript is always enabled with file-router
|
|
34
61
|
options.typescript = true;
|
|
35
62
|
// Package manager selection
|
|
@@ -62,6 +89,9 @@ export async function promptForCreateOptions(cliOptions, { forcedAddOns = [], sh
|
|
|
62
89
|
addOns.add(deployment);
|
|
63
90
|
}
|
|
64
91
|
if (!routerOnly) {
|
|
92
|
+
for (const addOn of starter?.dependsOn || []) {
|
|
93
|
+
addOns.add(addOn);
|
|
94
|
+
}
|
|
65
95
|
for (const addOn of forcedAddOns) {
|
|
66
96
|
addOns.add(addOn);
|
|
67
97
|
}
|
|
@@ -112,6 +142,9 @@ export async function promptForCreateOptions(cliOptions, { forcedAddOns = [], sh
|
|
|
112
142
|
if (cliOptions.install === false) {
|
|
113
143
|
options.install = false;
|
|
114
144
|
}
|
|
145
|
+
if (starter) {
|
|
146
|
+
options.starter = starter;
|
|
147
|
+
}
|
|
115
148
|
return options;
|
|
116
149
|
}
|
|
117
150
|
export async function promptForAddOns() {
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import type { Options } from '@tanstack/create';
|
|
2
2
|
import type { CliOptions } from './types.js';
|
|
3
|
+
export declare function resolveStarterSpecifier(starterSpecifier: string, preferredFramework?: string): Promise<string>;
|
|
4
|
+
export declare function listTemplateChoices(preferredFramework?: string): Promise<Array<{
|
|
5
|
+
id: string;
|
|
6
|
+
name: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
framework: string;
|
|
9
|
+
}>>;
|
|
3
10
|
export declare function validateLegacyCreateFlags(cliOptions: CliOptions): {
|
|
4
11
|
warnings: Array<string>;
|
|
5
12
|
error?: string;
|
|
@@ -1,48 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
|
|
3
|
-
id: z.ZodString;
|
|
4
|
-
name: z.ZodString;
|
|
5
|
-
tagline: z.ZodString;
|
|
6
|
-
description: z.ZodOptional<z.ZodString>;
|
|
7
|
-
frameworks: z.ZodArray<z.ZodString, "many">;
|
|
8
|
-
latestVersion: z.ZodString;
|
|
9
|
-
latestBranch: z.ZodOptional<z.ZodString>;
|
|
10
|
-
availableVersions: z.ZodArray<z.ZodString, "many">;
|
|
11
|
-
repo: z.ZodString;
|
|
12
|
-
docsRoot: z.ZodOptional<z.ZodString>;
|
|
13
|
-
defaultDocs: z.ZodOptional<z.ZodString>;
|
|
14
|
-
docsUrl: z.ZodOptional<z.ZodString>;
|
|
15
|
-
githubUrl: z.ZodOptional<z.ZodString>;
|
|
16
|
-
}, "strip", z.ZodTypeAny, {
|
|
17
|
-
id: string;
|
|
18
|
-
name: string;
|
|
19
|
-
tagline: string;
|
|
20
|
-
frameworks: string[];
|
|
21
|
-
latestVersion: string;
|
|
22
|
-
availableVersions: string[];
|
|
23
|
-
repo: string;
|
|
24
|
-
description?: string | undefined;
|
|
25
|
-
latestBranch?: string | undefined;
|
|
26
|
-
docsRoot?: string | undefined;
|
|
27
|
-
defaultDocs?: string | undefined;
|
|
28
|
-
docsUrl?: string | undefined;
|
|
29
|
-
githubUrl?: string | undefined;
|
|
30
|
-
}, {
|
|
31
|
-
id: string;
|
|
32
|
-
name: string;
|
|
33
|
-
tagline: string;
|
|
34
|
-
frameworks: string[];
|
|
35
|
-
latestVersion: string;
|
|
36
|
-
availableVersions: string[];
|
|
37
|
-
repo: string;
|
|
38
|
-
description?: string | undefined;
|
|
39
|
-
latestBranch?: string | undefined;
|
|
40
|
-
docsRoot?: string | undefined;
|
|
41
|
-
defaultDocs?: string | undefined;
|
|
42
|
-
docsUrl?: string | undefined;
|
|
43
|
-
githubUrl?: string | undefined;
|
|
44
|
-
}>;
|
|
45
|
-
export declare const LibrariesResponseSchema: z.ZodObject<{
|
|
2
|
+
declare const LibrariesResponseSchema: z.ZodObject<{
|
|
46
3
|
libraries: z.ZodArray<z.ZodObject<{
|
|
47
4
|
id: z.ZodString;
|
|
48
5
|
name: z.ZodString;
|
|
@@ -125,35 +82,7 @@ export declare const LibrariesResponseSchema: z.ZodObject<{
|
|
|
125
82
|
groups: Record<string, string[]>;
|
|
126
83
|
groupNames: Record<string, string>;
|
|
127
84
|
}>;
|
|
128
|
-
|
|
129
|
-
id: z.ZodString;
|
|
130
|
-
name: z.ZodString;
|
|
131
|
-
tagline: z.ZodOptional<z.ZodString>;
|
|
132
|
-
description: z.ZodString;
|
|
133
|
-
category: z.ZodString;
|
|
134
|
-
categoryLabel: z.ZodString;
|
|
135
|
-
libraries: z.ZodArray<z.ZodString, "many">;
|
|
136
|
-
url: z.ZodString;
|
|
137
|
-
}, "strip", z.ZodTypeAny, {
|
|
138
|
-
id: string;
|
|
139
|
-
name: string;
|
|
140
|
-
description: string;
|
|
141
|
-
libraries: string[];
|
|
142
|
-
category: string;
|
|
143
|
-
categoryLabel: string;
|
|
144
|
-
url: string;
|
|
145
|
-
tagline?: string | undefined;
|
|
146
|
-
}, {
|
|
147
|
-
id: string;
|
|
148
|
-
name: string;
|
|
149
|
-
description: string;
|
|
150
|
-
libraries: string[];
|
|
151
|
-
category: string;
|
|
152
|
-
categoryLabel: string;
|
|
153
|
-
url: string;
|
|
154
|
-
tagline?: string | undefined;
|
|
155
|
-
}>;
|
|
156
|
-
export declare const PartnersResponseSchema: z.ZodObject<{
|
|
85
|
+
declare const PartnersResponseSchema: z.ZodObject<{
|
|
157
86
|
partners: z.ZodArray<z.ZodObject<{
|
|
158
87
|
id: z.ZodString;
|
|
159
88
|
name: z.ZodString;
|
|
@@ -211,7 +140,26 @@ export declare const PartnersResponseSchema: z.ZodObject<{
|
|
|
211
140
|
categories: string[];
|
|
212
141
|
categoryLabels: Record<string, string>;
|
|
213
142
|
}>;
|
|
214
|
-
export
|
|
143
|
+
export declare const LIBRARY_GROUPS: readonly ["state", "headlessUI", "performance", "tooling"];
|
|
215
144
|
export type LibrariesResponse = z.infer<typeof LibrariesResponseSchema>;
|
|
216
|
-
export type Partner = z.infer<typeof PartnerSchema>;
|
|
217
145
|
export type PartnersResponse = z.infer<typeof PartnersResponseSchema>;
|
|
146
|
+
export declare function fetchLibraries(): Promise<LibrariesResponse>;
|
|
147
|
+
export declare function fetchPartners(): Promise<PartnersResponse>;
|
|
148
|
+
export declare function fetchDocContent(repo: string, branch: string, filePath: string): Promise<string | null>;
|
|
149
|
+
export declare function searchTanStackDocs({ query, library, framework, limit, }: {
|
|
150
|
+
query: string;
|
|
151
|
+
library?: string;
|
|
152
|
+
framework?: string;
|
|
153
|
+
limit?: number;
|
|
154
|
+
}): Promise<{
|
|
155
|
+
query: string;
|
|
156
|
+
totalHits: number;
|
|
157
|
+
results: Array<{
|
|
158
|
+
title: string;
|
|
159
|
+
url: string;
|
|
160
|
+
snippet: string;
|
|
161
|
+
library: string;
|
|
162
|
+
breadcrumb: Array<string>;
|
|
163
|
+
}>;
|
|
164
|
+
}>;
|
|
165
|
+
export {};
|
package/dist/types/types.d.ts
CHANGED
|
@@ -2,6 +2,11 @@ import type { AddOn, PackageManager } from '@tanstack/create';
|
|
|
2
2
|
import type { Framework } from '@tanstack/create/dist/types/types.js';
|
|
3
3
|
export declare function getProjectName(): Promise<string>;
|
|
4
4
|
export declare function selectPackageManager(): Promise<PackageManager>;
|
|
5
|
+
export declare function selectTemplate(templates: Array<{
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
}>): Promise<string | undefined>;
|
|
5
10
|
export declare function selectAddOns(framework: Framework, mode: string, type: string, message: string, forcedAddOns?: Array<string>, allowMultiple?: boolean): Promise<Array<string>>;
|
|
6
11
|
export declare function selectGit(): Promise<boolean>;
|
|
7
12
|
export declare function selectExamples(): Promise<boolean>;
|
package/dist/ui-prompts.js
CHANGED
|
@@ -36,6 +36,32 @@ export async function selectPackageManager() {
|
|
|
36
36
|
}
|
|
37
37
|
return packageManager;
|
|
38
38
|
}
|
|
39
|
+
export async function selectTemplate(templates) {
|
|
40
|
+
if (templates.length === 0) {
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
const selected = await select({
|
|
44
|
+
message: 'Would you like to start from a template?',
|
|
45
|
+
options: [
|
|
46
|
+
{
|
|
47
|
+
value: undefined,
|
|
48
|
+
label: 'None (base starter)',
|
|
49
|
+
hint: 'Two-page baseline (Home + About)',
|
|
50
|
+
},
|
|
51
|
+
...templates.map((template) => ({
|
|
52
|
+
value: template.id,
|
|
53
|
+
label: template.name,
|
|
54
|
+
hint: template.description,
|
|
55
|
+
})),
|
|
56
|
+
],
|
|
57
|
+
initialValue: undefined,
|
|
58
|
+
});
|
|
59
|
+
if (isCancel(selected)) {
|
|
60
|
+
cancel('Operation cancelled.');
|
|
61
|
+
process.exit(0);
|
|
62
|
+
}
|
|
63
|
+
return selected;
|
|
64
|
+
}
|
|
39
65
|
// Track if we've shown the multiselect help text
|
|
40
66
|
let hasShownMultiselectHelp = false;
|
|
41
67
|
export async function selectAddOns(framework, mode, type, message, forcedAddOns = [], allowMultiple = true) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.61.1",
|
|
4
4
|
"description": "TanStack CLI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -28,23 +28,20 @@
|
|
|
28
28
|
"license": "MIT",
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"@clack/prompts": "^0.10.0",
|
|
31
|
-
"@modelcontextprotocol/sdk": "^1.6.0",
|
|
32
31
|
"chalk": "^5.4.1",
|
|
33
32
|
"chokidar": "^3.6.0",
|
|
34
33
|
"commander": "^13.1.0",
|
|
35
34
|
"diff": "^7.0.0",
|
|
36
|
-
"express": "^4.21.2",
|
|
37
35
|
"semver": "^7.7.2",
|
|
38
36
|
"tempy": "^3.1.0",
|
|
39
37
|
"validate-npm-package-name": "^7.0.0",
|
|
40
38
|
"zod": "^3.24.2",
|
|
41
|
-
"@tanstack/create": "0.62.
|
|
39
|
+
"@tanstack/create": "0.62.3"
|
|
42
40
|
},
|
|
43
41
|
"devDependencies": {
|
|
44
42
|
"@playwright/test": "^1.58.2",
|
|
45
43
|
"@tanstack/config": "^0.16.2",
|
|
46
44
|
"@types/diff": "^5.2.0",
|
|
47
|
-
"@types/express": "^5.0.1",
|
|
48
45
|
"@types/node": "^22.13.4",
|
|
49
46
|
"@types/semver": "^7.7.0",
|
|
50
47
|
"@types/validate-npm-package-name": "^4.0.2",
|
|
@@ -82,4 +82,4 @@ Error generating stack: `+a.message+`
|
|
|
82
82
|
<div id='root'></div>
|
|
83
83
|
</body>
|
|
84
84
|
</html>
|
|
85
|
-
<script id="playwrightReportBase64" type="application/zip">data:application/zip;base64,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</script>
|
|
85
|
+
<script id="playwrightReportBase64" type="application/zip">data:application/zip;base64,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</script>
|