@tanstack/cli 0.60.1 → 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 +28 -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>
|