Skip to content

Commit e23feef

Browse files
ok
1 parent 2b833de commit e23feef

7 files changed

Lines changed: 105 additions & 248 deletions

File tree

apps/cli/src/helpers/addons/addons-setup.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,6 @@ ${pc.cyan("Docs:")} ${pc.underline("https://turborepo.com/docs")}
4848
const hasHusky = addons.includes("husky");
4949
const hasOxlint = addons.includes("oxlint");
5050

51-
if (hasUltracite) {
52-
await setupUltracite(config, hasHusky);
53-
}
54-
5551
if (hasOxlint) {
5652
await setupOxlint(config);
5753
}
@@ -75,4 +71,8 @@ ${pc.cyan("Docs:")} ${pc.underline("https://turborepo.com/docs")}
7571
if (addons.includes("wxt")) {
7672
await setupWxt(config);
7773
}
74+
75+
if (hasUltracite) {
76+
await setupUltracite(config, hasHusky);
77+
}
7878
}

apps/cli/src/helpers/addons/ultracite-setup.ts

Lines changed: 61 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* This file handles interactive prompts and external CLI initialization
55
*/
66

7-
import { autocompleteMultiselect, group, log, multiselect, spinner } from "@clack/prompts";
7+
import { autocompleteMultiselect, group, log, multiselect, select, spinner } from "@clack/prompts";
88
import { $ } from "execa";
99
import pc from "picocolors";
1010

@@ -13,62 +13,89 @@ import type { ProjectConfig } from "../../types";
1313
import { exitCancelled } from "../../utils/errors";
1414
import { getPackageExecutionArgs } from "../../utils/package-runner";
1515

16-
type UltraciteEditor = "vscode" | "zed";
17-
type UltraciteAgent =
18-
| "vscode-copilot"
16+
type UltraciteEditor =
17+
| "vscode"
1918
| "cursor"
2019
| "windsurf"
21-
| "zed"
20+
| "antigravity"
21+
| "kiro"
22+
| "trae"
23+
| "void"
24+
| "zed";
25+
26+
type UltraciteAgent =
2227
| "claude"
2328
| "codex"
24-
| "kiro"
29+
| "jules"
30+
| "copilot"
2531
| "cline"
2632
| "amp"
2733
| "aider"
2834
| "firebase-studio"
2935
| "open-hands"
30-
| "gemini-cli"
36+
| "gemini"
3137
| "junie"
3238
| "augmentcode"
3339
| "kilo-code"
3440
| "goose"
35-
| "roo-code";
41+
| "roo-code"
42+
| "warp"
43+
| "droid"
44+
| "opencode"
45+
| "crush"
46+
| "qwen"
47+
| "amazon-q-cli"
48+
| "firebender";
3649

37-
type UltraciteHook = "cursor" | "claude";
50+
type UltraciteHook = "cursor" | "windsurf";
3851

39-
const EDITORS = {
40-
vscode: {
41-
label: "VSCode / Cursor / Windsurf",
42-
},
43-
zed: {
44-
label: "Zed",
45-
},
46-
} as const;
52+
type UltraciteLinter = "biome" | "eslint" | "oxlint";
4753

48-
const AGENTS = {
49-
"vscode-copilot": { label: "VS Code Copilot" },
54+
const EDITORS = {
55+
vscode: { label: "VS Code" },
5056
cursor: { label: "Cursor" },
5157
windsurf: { label: "Windsurf" },
58+
antigravity: { label: "Antigravity" },
59+
kiro: { label: "Kiro" },
60+
trae: { label: "Trae" },
61+
void: { label: "Void" },
5262
zed: { label: "Zed" },
63+
} as const;
64+
65+
const AGENTS = {
5366
claude: { label: "Claude" },
5467
codex: { label: "Codex" },
55-
kiro: { label: "Kiro" },
68+
jules: { label: "Jules" },
69+
copilot: { label: "GitHub Copilot" },
5670
cline: { label: "Cline" },
5771
amp: { label: "Amp" },
5872
aider: { label: "Aider" },
5973
"firebase-studio": { label: "Firebase Studio" },
6074
"open-hands": { label: "Open Hands" },
61-
"gemini-cli": { label: "Gemini CLI" },
75+
gemini: { label: "Gemini" },
6276
junie: { label: "Junie" },
6377
augmentcode: { label: "AugmentCode" },
6478
"kilo-code": { label: "Kilo Code" },
6579
goose: { label: "Goose" },
6680
"roo-code": { label: "Roo Code" },
81+
warp: { label: "Warp" },
82+
droid: { label: "Droid" },
83+
opencode: { label: "OpenCode" },
84+
crush: { label: "Crush" },
85+
qwen: { label: "Qwen" },
86+
"amazon-q-cli": { label: "Amazon Q CLI" },
87+
firebender: { label: "Firebender" },
6788
} as const;
6889

6990
const HOOKS = {
7091
cursor: { label: "Cursor" },
71-
claude: { label: "Claude" },
92+
windsurf: { label: "Windsurf" },
93+
} as const;
94+
95+
const LINTERS = {
96+
biome: { label: "Biome (recommended)" },
97+
oxlint: { label: "OxLint" },
98+
eslint: { label: "ESLint" },
7299
} as const;
73100

74101
function getFrameworksFromFrontend(frontend: string[]): string[] {
@@ -107,6 +134,15 @@ export async function setupUltracite(config: ProjectConfig, hasHusky: boolean) {
107134

108135
const result = await group(
109136
{
137+
linter: () =>
138+
select<UltraciteLinter>({
139+
message: "Choose linter/formatter",
140+
options: Object.entries(LINTERS).map(([key, linter]) => ({
141+
value: key as UltraciteLinter,
142+
label: linter.label,
143+
})),
144+
initialValue: "biome" as UltraciteLinter,
145+
}),
110146
editors: () =>
111147
multiselect<UltraciteEditor>({
112148
message: "Choose editors",
@@ -127,7 +163,7 @@ export async function setupUltracite(config: ProjectConfig, hasHusky: boolean) {
127163
}),
128164
hooks: () =>
129165
autocompleteMultiselect<UltraciteHook>({
130-
message: "Choose hooks",
166+
message: "Choose hooks (optional)",
131167
options: Object.entries(HOOKS).map(([key, hook]) => ({
132168
value: key as UltraciteHook,
133169
label: hook.label,
@@ -141,12 +177,13 @@ export async function setupUltracite(config: ProjectConfig, hasHusky: boolean) {
141177
},
142178
);
143179

180+
const linter = result.linter as UltraciteLinter;
144181
const editors = result.editors as UltraciteEditor[];
145182
const agents = result.agents as UltraciteAgent[];
146183
const hooks = result.hooks as UltraciteHook[];
147184
const frameworks = getFrameworksFromFrontend(frontend);
148185

149-
const ultraciteArgs = ["init", "--pm", packageManager];
186+
const ultraciteArgs = ["init", "--pm", packageManager, "--linter", linter];
150187

151188
if (frameworks.length > 0) {
152189
ultraciteArgs.push("--frameworks", ...frameworks);

apps/cli/src/helpers/core/create-project.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import { writeBtsConfig } from "../../utils/bts-config";
1212
import { isSilent } from "../../utils/context";
1313
import { exitWithError } from "../../utils/errors";
1414
import { formatProject } from "../../utils/file-formatter";
15-
import { setupCatalogs } from "../../utils/setup-catalogs";
1615
import { setupAddons } from "../addons/addons-setup";
1716
import { setupDatabase } from "../core/db-setup";
1817
import { setupServerDeploy } from "../deployment/server-deploy-setup";
@@ -64,9 +63,6 @@ export async function createProject(options: ProjectConfig, cliInput: CreateProj
6463
await setupWebDeploy(options);
6564
await setupServerDeploy(options);
6665

67-
// Process catalogs after addons (which may create new apps/packages)
68-
await setupCatalogs(options.projectDir, options);
69-
7066
await writeBtsConfig(options);
7167

7268
await formatProject(projectDir);
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
export { setupNextAlchemyDeploy } from "./alchemy-next-setup";
22
export { setupNuxtAlchemyDeploy } from "./alchemy-nuxt-setup";
3-
export { setupReactRouterAlchemyDeploy } from "./alchemy-react-router-setup";
4-
export { setupSolidAlchemyDeploy } from "./alchemy-solid-setup";
53
export { setupSvelteAlchemyDeploy } from "./alchemy-svelte-setup";
6-
export { setupTanStackRouterAlchemyDeploy } from "./alchemy-tanstack-router-setup";
74
export { setupTanStackStartAlchemyDeploy } from "./alchemy-tanstack-start-setup";
5+
6+
// Vite-based frontends (React Router, Solid, TanStack Router)
7+
export {
8+
setupReactRouterAlchemyDeploy,
9+
setupSolidAlchemyDeploy,
10+
setupTanStackRouterAlchemyDeploy,
11+
} from "./alchemy-vite-setup";

0 commit comments

Comments
 (0)