@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/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
- export declare const LibrarySchema: z.ZodObject<{
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
- export declare const PartnerSchema: z.ZodObject<{
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 type Library = z.infer<typeof LibrarySchema>;
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 {};
@@ -9,8 +9,7 @@ export interface CliOptions {
9
9
  addOns?: Array<string> | boolean;
10
10
  listAddOns?: boolean;
11
11
  addonDetails?: string;
12
- mcp?: boolean;
13
- mcpSse?: boolean;
12
+ json?: boolean;
14
13
  starter?: string;
15
14
  templateId?: string;
16
15
  targetDir?: string;
@@ -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>;
@@ -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.60.1",
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.1"
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>