diff --git a/.changeset/pink-pigs-matter.md b/.changeset/pink-pigs-matter.md new file mode 100644 index 0000000..dd99861 --- /dev/null +++ b/.changeset/pink-pigs-matter.md @@ -0,0 +1,5 @@ +--- +"create-better-t-stack": minor +--- + +upgrade to biome v2 diff --git a/apps/cli/src/constants.ts b/apps/cli/src/constants.ts index 5112458..1190429 100644 --- a/apps/cli/src/constants.ts +++ b/apps/cli/src/constants.ts @@ -49,7 +49,7 @@ export const dependencyVersionMap = { "@tauri-apps/cli": "^2.4.0", - "@biomejs/biome": "1.9.4", + "@biomejs/biome": "^2.0.0", husky: "^9.1.7", "lint-staged": "^15.5.0", diff --git a/apps/cli/src/helpers/database-providers/mongodb-atlas-setup.ts b/apps/cli/src/helpers/database-providers/mongodb-atlas-setup.ts index 3db7e1f..3303699 100644 --- a/apps/cli/src/helpers/database-providers/mongodb-atlas-setup.ts +++ b/apps/cli/src/helpers/database-providers/mongodb-atlas-setup.ts @@ -7,8 +7,8 @@ import pc from "picocolors"; import type { ProjectConfig } from "../../types"; import { commandExists } from "../../utils/command-exists"; import { - type EnvVariable, addEnvVariablesToFile, + type EnvVariable, } from "../project-generation/env-setup"; type MongoDBConfig = { diff --git a/apps/cli/src/helpers/database-providers/neon-setup.ts b/apps/cli/src/helpers/database-providers/neon-setup.ts index 31b7298..a419a68 100644 --- a/apps/cli/src/helpers/database-providers/neon-setup.ts +++ b/apps/cli/src/helpers/database-providers/neon-setup.ts @@ -7,8 +7,8 @@ import pc from "picocolors"; import type { PackageManager, ProjectConfig } from "../../types"; import { getPackageExecutionCommand } from "../../utils/get-package-execution-command"; import { - type EnvVariable, addEnvVariablesToFile, + type EnvVariable, } from "../project-generation/env-setup"; type NeonConfig = { diff --git a/apps/cli/src/helpers/database-providers/prisma-postgres-setup.ts b/apps/cli/src/helpers/database-providers/prisma-postgres-setup.ts index c755937..7e9a715 100644 --- a/apps/cli/src/helpers/database-providers/prisma-postgres-setup.ts +++ b/apps/cli/src/helpers/database-providers/prisma-postgres-setup.ts @@ -8,8 +8,8 @@ import type { PackageManager } from "../../types"; import { addPackageDependency } from "../../utils/add-package-deps"; import { getPackageExecutionCommand } from "../../utils/get-package-execution-command"; import { - type EnvVariable, addEnvVariablesToFile, + type EnvVariable, } from "../project-generation/env-setup"; type PrismaConfig = { diff --git a/apps/cli/src/helpers/database-providers/supabase-setup.ts b/apps/cli/src/helpers/database-providers/supabase-setup.ts index c3abcec..9d945a0 100644 --- a/apps/cli/src/helpers/database-providers/supabase-setup.ts +++ b/apps/cli/src/helpers/database-providers/supabase-setup.ts @@ -7,8 +7,8 @@ import pc from "picocolors"; import type { PackageManager, ProjectConfig } from "../../types"; import { getPackageExecutionCommand } from "../../utils/get-package-execution-command"; import { - type EnvVariable, addEnvVariablesToFile, + type EnvVariable, } from "../project-generation/env-setup"; async function writeSupabaseEnvFile( diff --git a/apps/cli/src/helpers/database-providers/turso-setup.ts b/apps/cli/src/helpers/database-providers/turso-setup.ts index a4a9f74..7a469cf 100644 --- a/apps/cli/src/helpers/database-providers/turso-setup.ts +++ b/apps/cli/src/helpers/database-providers/turso-setup.ts @@ -15,8 +15,8 @@ import pc from "picocolors"; import type { ProjectConfig } from "../../types"; import { commandExists } from "../../utils/command-exists"; import { - type EnvVariable, addEnvVariablesToFile, + type EnvVariable, } from "../project-generation/env-setup"; type TursoConfig = { diff --git a/apps/cli/src/helpers/project-generation/create-readme.ts b/apps/cli/src/helpers/project-generation/create-readme.ts index 3e48683..d4b43b7 100644 --- a/apps/cli/src/helpers/project-generation/create-readme.ts +++ b/apps/cli/src/helpers/project-generation/create-readme.ts @@ -2,8 +2,8 @@ import path from "node:path"; import consola from "consola"; import fs from "fs-extra"; import type { - API, Addons, + API, Database, Frontend, ORM, diff --git a/apps/cli/src/helpers/project-generation/post-installation.ts b/apps/cli/src/helpers/project-generation/post-installation.ts index 76d673b..638dad3 100644 --- a/apps/cli/src/helpers/project-generation/post-installation.ts +++ b/apps/cli/src/helpers/project-generation/post-installation.ts @@ -1,10 +1,8 @@ import { consola } from "consola"; import pc from "picocolors"; -import type { Database, ORM, Runtime } from "../../types"; +import type { Database, ORM, ProjectConfig, Runtime } from "../../types"; import { getPackageExecutionCommand } from "../../utils/get-package-execution-command"; -import type { ProjectConfig } from "../../types"; - export function displayPostInstallInstructions( config: ProjectConfig & { depsInstalled: boolean }, ) { diff --git a/apps/cli/src/helpers/setup/addons-setup.ts b/apps/cli/src/helpers/setup/addons-setup.ts index b980d3c..df64166 100644 --- a/apps/cli/src/helpers/setup/addons-setup.ts +++ b/apps/cli/src/helpers/setup/addons-setup.ts @@ -1,12 +1,10 @@ import path from "node:path"; import fs from "fs-extra"; -import type { Frontend } from "../../types"; +import type { Frontend, ProjectConfig } from "../../types"; import { addPackageDependency } from "../../utils/add-package-deps"; import { setupStarlight } from "./starlight-setup"; import { setupTauri } from "./tauri-setup"; -import type { ProjectConfig } from "../../types"; - export async function setupAddons(config: ProjectConfig) { const { addons, frontend, projectDir } = config; const hasReactWebFrontend = diff --git a/apps/cli/src/helpers/setup/backend-setup.ts b/apps/cli/src/helpers/setup/backend-setup.ts index aab86c9..e7afa25 100644 --- a/apps/cli/src/helpers/setup/backend-setup.ts +++ b/apps/cli/src/helpers/setup/backend-setup.ts @@ -1,8 +1,7 @@ import path from "node:path"; import type { AvailableDependencies } from "../../constants"; -import { addPackageDependency } from "../../utils/add-package-deps"; - import type { ProjectConfig } from "../../types"; +import { addPackageDependency } from "../../utils/add-package-deps"; export async function setupBackendDependencies( config: ProjectConfig, diff --git a/apps/cli/src/helpers/setup/db-setup.ts b/apps/cli/src/helpers/setup/db-setup.ts index 112c6d7..cccd530 100644 --- a/apps/cli/src/helpers/setup/db-setup.ts +++ b/apps/cli/src/helpers/setup/db-setup.ts @@ -3,16 +3,14 @@ import { spinner } from "@clack/prompts"; import consola from "consola"; import fs from "fs-extra"; import pc from "picocolors"; +import type { ProjectConfig } from "../../types"; import { addPackageDependency } from "../../utils/add-package-deps"; import { setupMongoDBAtlas } from "../database-providers/mongodb-atlas-setup"; +import { setupNeonPostgres } from "../database-providers/neon-setup"; import { setupPrismaPostgres } from "../database-providers/prisma-postgres-setup"; import { setupSupabase } from "../database-providers/supabase-setup"; import { setupTurso } from "../database-providers/turso-setup"; -import { setupNeonPostgres } from "../database-providers/neon-setup"; - -import type { ProjectConfig } from "../../types"; - export async function setupDatabase(config: ProjectConfig): Promise { const { database, orm, dbSetup, backend, projectDir } = config; diff --git a/apps/cli/src/helpers/setup/tauri-setup.ts b/apps/cli/src/helpers/setup/tauri-setup.ts index 576ef83..18367ac 100644 --- a/apps/cli/src/helpers/setup/tauri-setup.ts +++ b/apps/cli/src/helpers/setup/tauri-setup.ts @@ -4,11 +4,10 @@ import { consola } from "consola"; import { execa } from "execa"; import fs from "fs-extra"; import pc from "picocolors"; +import type { ProjectConfig } from "../../types"; import { addPackageDependency } from "../../utils/add-package-deps"; import { getPackageExecutionCommand } from "../../utils/get-package-execution-command"; -import type { ProjectConfig } from "../../types"; - export async function setupTauri(config: ProjectConfig): Promise { const { packageManager, frontend, projectDir } = config; const s = spinner(); diff --git a/apps/cli/src/index.ts b/apps/cli/src/index.ts index 7fddea4..acd39a4 100644 --- a/apps/cli/src/index.ts +++ b/apps/cli/src/index.ts @@ -18,8 +18,8 @@ import { gatherConfig } from "./prompts/config-prompts"; import { getProjectName } from "./prompts/project-name"; import type { CreateInput, ProjectConfig } from "./types"; import { - APISchema, AddonsSchema, + APISchema, BackendSchema, DatabaseSchema, DatabaseSetupSchema, diff --git a/apps/cli/src/prompts/config-prompts.ts b/apps/cli/src/prompts/config-prompts.ts index adccc41..26245b1 100644 --- a/apps/cli/src/prompts/config-prompts.ts +++ b/apps/cli/src/prompts/config-prompts.ts @@ -1,8 +1,8 @@ import { cancel, group } from "@clack/prompts"; import pc from "picocolors"; import type { - API, Addons, + API, Backend, Database, DatabaseSetup, diff --git a/apps/cli/src/utils/analytics.ts b/apps/cli/src/utils/analytics.ts index 8fca081..db5a37c 100644 --- a/apps/cli/src/utils/analytics.ts +++ b/apps/cli/src/utils/analytics.ts @@ -20,6 +20,7 @@ export async function trackProjectCreation( try { const sessionId = `cli_${crypto.randomUUID().replace(/-/g, "")}`; + // biome-ignore lint/correctness/noUnusedVariables: `projectName`, `projectDir`, and `relativePath` are not used in the event properties const { projectName, projectDir, relativePath, ...safeConfig } = config; posthog.capture({ diff --git a/apps/cli/src/validation.ts b/apps/cli/src/validation.ts index 2d114dc..17c9e7f 100644 --- a/apps/cli/src/validation.ts +++ b/apps/cli/src/validation.ts @@ -1,8 +1,8 @@ import path from "node:path"; import { consola } from "consola"; import { - type API, type Addons, + type API, type Backend, type CLIInput, type Database, diff --git a/apps/cli/templates/addons/biome/biome.json b/apps/cli/templates/addons/biome/biome.json deleted file mode 100644 index dc8006d..0000000 --- a/apps/cli/templates/addons/biome/biome.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", - "vcs": { - "enabled": false, - "clientKind": "git", - "useIgnoreFile": false - }, - "files": { - "ignoreUnknown": false, - "ignore": [ - ".next", - "dist", - ".turbo", - "dev-dist", - ".zed", - ".vscode", - "routeTree.gen.ts", - "src-tauri", - ".nuxt" - ] - }, - "formatter": { - "enabled": true, - "indentStyle": "tab" - }, - "organizeImports": { - "enabled": true - }, - "linter": { - "enabled": true, - "rules": { - "recommended": true, - "correctness": { - "useExhaustiveDependencies": "info" - }, - "nursery": { - "useSortedClasses": { - "level": "warn", - "fix": "safe", - "options": { - "functions": ["clsx", "cva", "cn"] - } - } - } - } - }, - "javascript": { - "formatter": { - "quoteStyle": "double" - } - } -} diff --git a/apps/cli/templates/addons/biome/biome.json.hbs b/apps/cli/templates/addons/biome/biome.json.hbs new file mode 100644 index 0000000..26526a9 --- /dev/null +++ b/apps/cli/templates/addons/biome/biome.json.hbs @@ -0,0 +1,83 @@ +{ + "$schema": "https://biomejs.dev/schemas/2.0.0/schema.json", + "vcs": { + "enabled": false, + "clientKind": "git", + "useIgnoreFile": false + }, + "files": { + "ignoreUnknown": false, + "includes": [ + "**", + "!**/.next", + "!**/dist", + "!**/.turbo", + "!**/dev-dist", + "!**/.zed", + "!**/.vscode", + "!**/routeTree.gen.ts", + "!**/src-tauri", + "!**/.nuxt" + ] + }, + "formatter": { + "enabled": true, + "indentStyle": "tab" + }, + "assist": { "actions": { "source": { "organizeImports": "on" } } }, + "linter": { + "enabled": true, + "rules": { + "recommended": true, + "correctness": { + "useExhaustiveDependencies": "info" + }, + "nursery": { + "useSortedClasses": { + "level": "warn", + "fix": "safe", + "options": { + "functions": ["clsx", "cva", "cn"] + } + } + }, + "style": { + "noParameterAssign": "error", + "useAsConstAssertion": "error", + "useDefaultParameterLast": "error", + "useEnumInitializers": "error", + "useSelfClosingElements": "error", + "useSingleVarDeclarator": "error", + "noUnusedTemplateLiteral": "error", + "useNumberNamespace": "error", + "noInferrableTypes": "error", + "noUselessElse": "error" + } + } + }, + "javascript": { + "formatter": { + "quoteStyle": "double" + } + } + {{#if (or (eq frontend "svelte") (eq frontend "nuxt"))}} + , + "overrides": [ + { + "includes": ["**/*.svelte", "**/*.vue"], + "linter": { + "rules": { + "style": { + "useConst": "off", + "useImportType": "off" + }, + "correctness": { + "noUnusedVariables": "off", + "noUnusedImports": "off" + } + } + } + } + ] + {{/if}} +} diff --git a/apps/cli/templates/auth/web/solid/src/components/user-menu.tsx b/apps/cli/templates/auth/web/solid/src/components/user-menu.tsx.hbs similarity index 98% rename from apps/cli/templates/auth/web/solid/src/components/user-menu.tsx rename to apps/cli/templates/auth/web/solid/src/components/user-menu.tsx.hbs index 6845cbd..32cc9ff 100644 --- a/apps/cli/templates/auth/web/solid/src/components/user-menu.tsx +++ b/apps/cli/templates/auth/web/solid/src/components/user-menu.tsx.hbs @@ -32,6 +32,7 @@ export default function UserMenu() {
{session().data?.user.email}