create-better-t-stack 3.36.1 → 3.36.3

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/cli.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { _ as types_exports, i as SchemaNameSchema, l as create, m as getSchemaResult, s as add, u as createBtsCli, v as getLatestCLIVersion } from "./src-CAiTgv6S.mjs";
2
+ import { _ as types_exports, i as SchemaNameSchema, l as create, m as getSchemaResult, s as add, u as createBtsCli, v as getLatestCLIVersion } from "./src-AlTJbWsW.mjs";
3
3
  import z from "zod";
4
4
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
5
5
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
package/dist/index.d.mts CHANGED
@@ -247,7 +247,7 @@ declare const router: _$_trpc_server0.TRPCBuiltRouter<{
247
247
  }[] | undefined;
248
248
  } | undefined;
249
249
  ultracite?: {
250
- linter?: "biome" | "oxlint" | "eslint" | undefined;
250
+ linter?: "biome" | "oxlint" | undefined;
251
251
  editors?: ("void" | "antigravity" | "cursor" | "vscode" | "zed" | "windsurf" | "trae" | "codebuddy" | "bob" | "kiro")[] | undefined;
252
252
  agents?: ("vercel" | "cline" | "codex" | "opencode" | "goose" | "amp" | "pi" | "qoder" | "droid" | "zencoder" | "mcpjam" | "bob" | "universal" | "claude" | "jules" | "replit" | "devin" | "lovable" | "ona" | "openclaw" | "continue" | "snowflake-cortex" | "deepagents" | "kimi-cli" | "mux" | "adal" | "copilot" | "aider" | "firebase-studio" | "open-hands" | "gemini" | "junie" | "augmentcode" | "kilo-code" | "roo-code" | "warp" | "crush" | "qwen" | "amazon-q-cli" | "firebender" | "cursor-cli" | "mistral-vibe")[] | undefined;
253
253
  hooks?: ("cursor" | "windsurf" | "codebuddy" | "claude" | "copilot")[] | undefined;
@@ -357,7 +357,7 @@ declare const router: _$_trpc_server0.TRPCBuiltRouter<{
357
357
  }[] | undefined;
358
358
  } | undefined;
359
359
  ultracite?: {
360
- linter?: "biome" | "oxlint" | "eslint" | undefined;
360
+ linter?: "biome" | "oxlint" | undefined;
361
361
  editors?: ("void" | "antigravity" | "cursor" | "vscode" | "zed" | "windsurf" | "trae" | "codebuddy" | "bob" | "kiro")[] | undefined;
362
362
  agents?: ("vercel" | "cline" | "codex" | "opencode" | "goose" | "amp" | "pi" | "qoder" | "droid" | "zencoder" | "mcpjam" | "bob" | "universal" | "claude" | "jules" | "replit" | "devin" | "lovable" | "ona" | "openclaw" | "continue" | "snowflake-cortex" | "deepagents" | "kimi-cli" | "mux" | "adal" | "copilot" | "aider" | "firebase-studio" | "open-hands" | "gemini" | "junie" | "augmentcode" | "kilo-code" | "roo-code" | "warp" | "crush" | "qwen" | "amazon-q-cli" | "firebender" | "cursor-cli" | "mistral-vibe")[] | undefined;
363
363
  hooks?: ("cursor" | "windsurf" | "codebuddy" | "claude" | "copilot")[] | undefined;
package/dist/index.mjs CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- import { C as ProjectCreationError, S as DirectoryConflictError, T as ValidationError, a as TEMPLATE_COUNT, b as CompatibilityError, c as builder, d as createVirtual, f as docs, g as sponsors, h as router, i as SchemaNameSchema, l as create, m as getSchemaResult, n as GeneratorError, o as VirtualFileSystem, p as generate, r as Result, s as add, t as EMBEDDED_TEMPLATES, u as createBtsCli, w as UserCancelledError, x as DatabaseSetupError, y as CLIError } from "./src-CAiTgv6S.mjs";
2
+ import { C as ProjectCreationError, S as DirectoryConflictError, T as ValidationError, a as TEMPLATE_COUNT, b as CompatibilityError, c as builder, d as createVirtual, f as docs, g as sponsors, h as router, i as SchemaNameSchema, l as create, m as getSchemaResult, n as GeneratorError, o as VirtualFileSystem, p as generate, r as Result, s as add, t as EMBEDDED_TEMPLATES, u as createBtsCli, w as UserCancelledError, x as DatabaseSetupError, y as CLIError } from "./src-AlTJbWsW.mjs";
3
3
  export { CLIError, CompatibilityError, DatabaseSetupError, DirectoryConflictError, EMBEDDED_TEMPLATES, GeneratorError, ProjectCreationError, Result, SchemaNameSchema, TEMPLATE_COUNT, UserCancelledError, ValidationError, VirtualFileSystem, add, builder, create, createBtsCli, createVirtual, docs, generate, getSchemaResult, router, sponsors };
@@ -1256,7 +1256,7 @@ function getAddonDisplay(addon) {
1256
1256
  break;
1257
1257
  case "ultracite":
1258
1258
  label = "Ultracite";
1259
- hint = "Zero-config Biome preset with AI integration";
1259
+ hint = "Zero-config preset for Biome or Oxlint with AI integration";
1260
1260
  break;
1261
1261
  case "lefthook":
1262
1262
  label = "Lefthook";
@@ -2895,11 +2895,12 @@ function hasNativeFrontend(frontend) {
2895
2895
  }
2896
2896
  function getRecommendedSourceKeys(config) {
2897
2897
  const sources = [];
2898
- const { frontend, backend, dbSetup, auth, examples, addons, orm } = config;
2898
+ const { frontend, backend, dbSetup, auth, examples, addons, orm, webDeploy, serverDeploy } = config;
2899
2899
  if (hasReactBasedFrontend(frontend)) {
2900
2900
  sources.push("vercel-labs/agent-skills");
2901
2901
  sources.push("shadcn/ui");
2902
2902
  }
2903
+ if ((webDeploy === "vercel" || serverDeploy === "vercel") && !sources.includes("vercel-labs/agent-skills")) sources.push("vercel-labs/agent-skills");
2903
2904
  if (frontend.includes("next")) sources.push("vercel-labs/next-skills");
2904
2905
  if (frontend.includes("nuxt")) sources.push("nuxt/ui");
2905
2906
  if (frontend.includes("native-uniwind")) sources.push("heroui-inc/heroui");
@@ -2922,12 +2923,10 @@ function getRecommendedSourceKeys(config) {
2922
2923
  }
2923
2924
  const CURATED_SKILLS_BY_SOURCE = {
2924
2925
  "vercel-labs/agent-skills": (config) => {
2925
- const skills = [
2926
- "web-design-guidelines",
2927
- "vercel-composition-patterns",
2928
- "vercel-react-best-practices"
2929
- ];
2926
+ const skills = [];
2927
+ if (hasReactBasedFrontend(config.frontend)) skills.push("web-design-guidelines", "vercel-composition-patterns", "vercel-react-best-practices");
2930
2928
  if (hasNativeFrontend(config.frontend)) skills.push("vercel-react-native-skills");
2929
+ if (config.webDeploy === "vercel" || config.serverDeploy === "vercel") skills.push("deploy-to-vercel");
2931
2930
  return skills;
2932
2931
  },
2933
2932
  "vercel/ai": () => ["ai-sdk"],
@@ -3358,7 +3357,6 @@ async function postProcessTuiWorkspace(tuiDir) {
3358
3357
  //#region src/helpers/addons/ultracite-setup.ts
3359
3358
  const LINTERS = {
3360
3359
  biome: { label: "Biome (Recommended)" },
3361
- eslint: { label: "ESLint + Prettier + Stylelint" },
3362
3360
  oxlint: { label: "Oxlint + Oxfmt" }
3363
3361
  };
3364
3362
  const AGENTS = {
@@ -3412,26 +3410,27 @@ const HOOKS = {
3412
3410
  claude: { label: "Claude Code" },
3413
3411
  copilot: { label: "GitHub Copilot" }
3414
3412
  };
3413
+ const ULTRACITE_VERSION = "7.9.3";
3415
3414
  const DEFAULT_LINTER = "biome";
3416
3415
  const DEFAULT_EDITORS = ["vscode"];
3417
3416
  const DEFAULT_AGENTS = ["universal"];
3418
3417
  const DEFAULT_HOOKS = [];
3419
3418
  function getFrameworksFromFrontend(frontend) {
3420
3419
  const frameworkMap = {
3421
- "tanstack-router": "react",
3422
- "react-router": "react",
3423
- "tanstack-start": "react",
3424
- next: "next",
3425
- nuxt: "vue",
3426
- "native-bare": "react",
3427
- "native-uniwind": "react",
3428
- "native-unistyles": "react",
3429
- svelte: "svelte",
3430
- solid: "solid",
3431
- astro: "astro"
3420
+ "tanstack-router": ["react", "tanstack"],
3421
+ "react-router": ["react", "remix"],
3422
+ "tanstack-start": ["react", "tanstack"],
3423
+ next: ["react", "next"],
3424
+ nuxt: ["vue"],
3425
+ "native-bare": ["react"],
3426
+ "native-uniwind": ["react"],
3427
+ "native-unistyles": ["react"],
3428
+ svelte: ["svelte"],
3429
+ solid: ["solid"],
3430
+ astro: ["astro"]
3432
3431
  };
3433
3432
  const frameworks = /* @__PURE__ */ new Set();
3434
- for (const f of frontend) if (f !== "none" && frameworkMap[f]) frameworks.add(frameworkMap[f]);
3433
+ for (const f of frontend) for (const framework of frameworkMap[f] ?? []) frameworks.add(framework);
3435
3434
  return Array.from(frameworks);
3436
3435
  }
3437
3436
  function buildUltraciteInitArgs({ packageManager, linter, frameworks, editors, agents, hooks, gitHooks }) {
@@ -3449,12 +3448,19 @@ function buildUltraciteInitArgs({ packageManager, linter, frameworks, editors, a
3449
3448
  if (gitHooks.length > 0) ultraciteArgs.push("--integrations", ...gitHooks);
3450
3449
  return [
3451
3450
  ...getPackageRunnerPrefix(packageManager),
3452
- "ultracite@latest",
3451
+ `ultracite@${ULTRACITE_VERSION}`,
3453
3452
  ...ultraciteArgs,
3454
3453
  "--skip-install",
3455
3454
  "--quiet"
3456
3455
  ];
3457
3456
  }
3457
+ async function removeHuskySampleHook(projectDir) {
3458
+ const hookPath = path.join(projectDir, ".husky", "pre-commit");
3459
+ if (!await fs.pathExists(hookPath)) return;
3460
+ const content = await fs.readFile(hookPath, "utf-8");
3461
+ const cleaned = content.split("\n").filter((line) => !/^(?:npm|pnpm|yarn|bun|deno)(?: run)? test$/.test(line.trim())).join("\n");
3462
+ if (cleaned !== content) await fs.writeFile(hookPath, cleaned);
3463
+ }
3458
3464
  async function setupUltracite(config, gitHooks) {
3459
3465
  if (shouldSkipExternalCommands()) return Result.ok(void 0);
3460
3466
  const { packageManager, projectDir, frontend } = config;
@@ -3557,6 +3563,10 @@ async function setupUltracite(config, gitHooks) {
3557
3563
  cliLog.error(pc.red("Failed to set up Ultracite"));
3558
3564
  return initResult;
3559
3565
  }
3566
+ if (gitHooks.includes("husky")) await Result.tryPromise({
3567
+ try: () => removeHuskySampleHook(projectDir),
3568
+ catch: (e) => e
3569
+ });
3560
3570
  s.stop("Ultracite setup successfully!");
3561
3571
  return Result.ok(void 0);
3562
3572
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-better-t-stack",
3
- "version": "3.36.1",
3
+ "version": "3.36.3",
4
4
  "description": "A modern CLI tool for scaffolding end-to-end type-safe TypeScript projects with best practices and customizable configurations",
5
5
  "keywords": [
6
6
  "better-auth",
@@ -69,8 +69,8 @@
69
69
  "prepublishOnly": "npm run build"
70
70
  },
71
71
  "dependencies": {
72
- "@better-t-stack/template-generator": "^3.36.1",
73
- "@better-t-stack/types": "^3.36.1",
72
+ "@better-t-stack/template-generator": "^3.36.3",
73
+ "@better-t-stack/types": "^3.36.3",
74
74
  "@clack/core": "^1.4.1",
75
75
  "@clack/prompts": "^1.5.1",
76
76
  "@modelcontextprotocol/sdk": "1.29.0",